Commit Graph

1620 Commits

Author SHA1 Message Date
drbob
d138dde66c --- Merging r4780 through r4795 from /retroshare/branches/v0.5-dhtmods
Changes to support Relays.
* added p3BitDht::addKnownNode() so that DhtIds can be used instead of SslIds.
* switched from bdStdDht() functions to use bdModDht().
* made DhtFunctions a class variable.
* added function to modify NodePerBucket() parameter.
* Bugfix for LinkType. peerConnectAddress.flags was not initialised.
* Extra debugging of LinkType data (use LINKMGR_DEBUG_LINKTYPE).
* cleaned up udprelay output.
* Added Compile Rules to libretroshare.pro for building LocalNet Testing Version. (testnetwork)
* Added NumQueryNodes() function to bdDhtFunctions.
* Switched bdquery.cc to use bdNumQueryNodes().
* Extended bdStdDht class to bdModDht to allow NodesPerBucket to be modified.
* Fixed up Connection Fail Callback for Relay Servers.
* Added Extra debugging for Proxy Connections.




git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4796 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-14 09:28:16 +00:00
drbob
96c9071920 Changes to support Relays.
* added p3BitDht::addKnownNode() so that DhtIds can be used instead of SslIds.
 * switched from bdStdDht() functions to use bdModDht().
 * made DhtFunctions a class variable.
 * added function to modify NodePerBucket() parameter.
 * Bugfix for LinkType. peerConnectAddress.flags was not initialised.
 * Extra debugging of LinkType data (use LINKMGR_DEBUG_LINKTYPE).
 * cleaned up udprelay output.
 * Added Compile Rules to libretroshare.pro for building LocalNet Testing Version. (testnetwork)




git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4795 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-14 01:54:17 +00:00
csoler
b3050b6b29 removed debug output
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4791 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-12 21:51:57 +00:00
csoler
17ea85e820 setup min lobby list request time to 20 sec.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4789 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-12 21:26:14 +00:00
csoler
ba109726ed fixed proper count of nicknames (not fixed yet in gui. A update is missing
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4788 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-12 21:23:16 +00:00
csoler
7f93b1f5fc added missing returns
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4787 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-12 20:56:36 +00:00
csoler
9597571841 corrected bug preventing 1st time message to go to lobby for new subscribers
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4786 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-12 20:56:03 +00:00
csoler
2aea0e5f30 corrected undefined variable causing public lobby list not to update properly
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4785 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-12 20:05:24 +00:00
thunder2
6c626e180f Chat lobby:
- added new notifier to p3ChatService
GUI:
- list all public and private chat lobbies
- added subscribe/unsubscribe
- added new basic widget ChatTabWidget and use it in PopupChatWindow and ChatLobbyDialog
- added a tabbed dialog for every subscribed chat lobby

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4782 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-12 00:13:25 +00:00
drbob
fc949ce5d0 --- Merging r4753 through r4779 from /svnroot/retroshare/branches/v0.5-dhtmods
Merging Dht Relay improvements into the trunk. These changes should finally make relays functional.
There are still some service changes required to reduce the traffic over relays.

Summary of Changes
---------------------

 * Changed the way proxy/relay peers are selected in bdConnection. (needs more work).
 * Added LinkType to peer info in p3LinkMgr & rspeers.h interface.
 * Added getConnectionType() to p3PeerMgr. This defaults to FRIEND for the moment.
 * Provide information about Bandwidth, Transport and Peer Type via LinkType().
 * Added RateCap() to limit traffic over Relay connections.
 * Set Internal Rate to 75% of Relay Limit to account for transport overhead.
 * Added various #include "util/rswin.h" to fix compile errors with standard ssl package.
 * Removed Local variables (mConnectProxyAddr, etc) which were hiding Class Variables.
 * Cleaned up bits in pqissl.cc and p3linkmgr.cc
 * Increased UDP Relay Packet size (max transport of 1400 bytes per UDP packet)
 * Modified checkRelay() to use Low Pass Filter to calculate Relay Bandwidth.
 * Improved udprelay debugging.
 * increased (x2) Relay Lifetimes - this is so that enough useful data can be transported (1meg).
 * Added LOCALNET_TESTING code to rsinit.cc. This allows Port Restrictions to simulate firewalls.
 * more debugging and minor bugfixes.




git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4780 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-11 11:54:28 +00:00
drbob
9e5e07d3f0 Reversed Changes for Testing Purposes.
* Disabled lots of debugging.
 * Disabled LOCAL test mode in udpstunner, rsinit
 * Enabled BadPeer checking in bitdht.
 * Restored normal timeout periods for connection attempts.
 * Restored normal connection levels for dht status.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4779 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-11 10:24:37 +00:00
drbob
e0dcca8d13 * Made NetworkStats() return false - as zeroconf cannot provide these (avoids the invalid 2.7G message)
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4778 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-11 00:24:29 +00:00
drbob
ec05a7cc7d * Moved Relay Packet Debug to a seperate #define.
* Improved Relay Status Output & print when checkRelay() is called.
 * initialise timer variable (mMinuteTS) - was causing checkRelay to never be called.
 * switched to 10 second calling of checkRelay().
 * Increased RELAY lifetimes (x2). now GENERAL = 1 hr, so they can at least transfer 1 meg (minimum block size)
 


git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4777 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-10 23:28:33 +00:00
csoler
1164c66d3a added new variable in config->transfers to allow reserving n slots to non cache transfers
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4775 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-10 23:07:53 +00:00
drbob
54c0524764 Added Low Pass Filter to Relay Bandwidth Check... To allow brief bits over the peak.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4774 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-10 19:50:16 +00:00
drbob
3d4feaaaf7 Set a RateCap that is 75% of absolute bandwidth limit. This reduced rate is required because
of the overhead associated with TCP and Relay connections:
 * The Internal rate is calculated based on transmitted data (a reliable stream).
 * The Relay rate is calculated at UDP packet level and is x1.1 - x1.2 higher than internal rate.
The Relay will drop the connection if peers exceed specified level - so best to leave some head room.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4773 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-10 19:40:35 +00:00
drbob
8267739b02 Final core changes required to get relay links working.
* Added LinkType to p3LinkMgr => exposed via rspeers.h
 * Added ConnectionType to p3PeerMgr. This is dummy default to FRIEND at the moment.
 * Flag bandwidth limited Relay links as such.
 * Switched DNS Address connect to in front of historical addresses.
 * Reverted Flags in p3LinkMgr to what they were.
 * Added LinkType Flags to rspeers.h
 * removed getConnectFlags() as it was a bad way to do things.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4769 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-08 22:15:19 +00:00
drbob
dc8e596c0f Added Rate Cap to RateInterface, and enabled it for Relay Connections.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4768 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-08 18:40:09 +00:00
drbob
abbebf48ff Partially completed changes to implement final relay bits.
* Adding more detailed flags to each connection.
 * Cleaned up unneeded stuff from p3LinkMgr.
 * Added rswin.h includes before openssl - allows compilation using std Win OpenSSL.
 * Added getConnectFlags() to Net Base.
 * removed net_attempt and associated obsolete variables from pqissl
 * Made NetBinInterface protected in pqiperson (is this okay?)



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4767 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-08 16:28:44 +00:00
drbob
9da96aef97 * Increased the max size of the relay packet to match tcpstream packet sizes.
* Added More debugging.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4765 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-08 12:43:55 +00:00
drbob
88774bbbd3 BUGFIX: removed local variables which were hiding class variables.
+ more debugging.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4764 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-08 12:22:35 +00:00
drbob
2b7499e61d More changes for debugging
* Enabled lots of debugging.
 * Switched to shorter timeouts for udprelays.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4763 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-08 10:50:33 +00:00
csoler
1a191c7f91 commited currentgui state. Not working
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4761 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-07 21:37:31 +00:00
csoler
485c394e2b added interface methods for public lobby exchange and subscription to public lobbies. Need a GUI now
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4759 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-07 19:52:58 +00:00
csoler
434ba06c82 added exchange and auto-update of public chat lobby lists.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4758 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-07 13:33:30 +00:00
drbob
5936b6542a Hack to disable proxy connections - for testing.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4757 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-07 12:22:30 +00:00
drbob
af5f23e0e7 Changes to enable a LAN Relay Test Environment.
NB: Reverse Most of these changes - before adding to Trunk!!!!

 * Added missing BitDht callback functions for test/example code.
 * Switch tests/example to OSX compile.
 * DISABLE_BAD_PEER_FILTER (as it doesn't like local net)
 * Reduced Minimum Peer Counts for DHT to be considered active.
 * Added LOCALNET_TESTING to rsinit.cc 
	- new Commandline Option -R <lport-uport> to restrict UDP ports.
	- Enables LocalNet in UdpStunner.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4756 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-07 11:28:00 +00:00
csoler
e9d6940b09 Improvements to chat lobbies:
- added generic methods and items for bouncing generic objects through lobbies
	- added handling of peer typing status
	- proper handling of peer join/leave lobby
	- added sub item ids to lobby messages to allow proper message splitting
	- made 2 different message splitting methods for normal chat vs. lobbies. In v0.6, we'll have to handle all messages the same way.
	- added parent id to RsChatLobbyMsgItem, to allow threaded chat.
	- added possibility to make a lobby public/private (not yet fully working)
	- added items for requesting/exchanging list of public lobbies at friends' (not yet fully working)
	- major cleaning of p3chatservice.cc

Next move:
	- gui for listing friend public lobbies, joining them, etc.
	- load/save of persistent lobbies.
	- autoremove of inactive lobbies

Warning: lobby message items of this version are incompatible with previous versions. It won't crash, but
messages will not pass through.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4755 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-06 22:17:08 +00:00
thunder2
e430612714 Add the ip address of the DNSResolver to the top of the list of the connect addresses.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4754 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-06 22:03:46 +00:00
drbob
ac6f0fcfe4 --- Merging r4718 through r4752 from branches/v0.5-dhtmods
Added ZeroConf for OSX.
Changes for Relay Support.

Summary of Changes:
libbitdht
----------
 * added Relay Flags to bdNode::setNodeDhtMode()
 * added dropRelayServers() / pingRelayServers() functions for mode switches
 * added utility function:  bdFriendList::findPeersWithFlags()
 * added utility function:  bdSpace::clean_node_flags(uint32_t flags)
 * added RelayMode to ConnectManager.
 * added failedConnection callback when in Server Mode.
 * added incomplete udpproxylayer code. (not compiled)

libretroshare
-------------
 * added Configuration to p3BitDht for storing Relay Settings. (bit Hackish!)
 * added RelayHandler & getRelayReceiver() - to outsource some Relay functions.
 * + RelayHandler_InstallRelayConnection() & RelayHandler_LogFailedProxyAttempt()
 * added RelayServer, Mode and RelayAllowance to external DHT interface.
 * added p3PeerMgr::getGpgId() for ZeroConf usage.
 * updated parts of pqiassist virtual interfaces.
 * added Bandwidth storage to udprelay.
 * modified the way Relay Slots are allocated to match GUI interface.
 * ZeroConf now working on OSX.
 * added ZeroConf to OSX compilation.
 * extended rsDht interface to expose Relay configuration.

retroshare-gui
--------------
 * added Relay configuration panel.




git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4753 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-06 15:33:51 +00:00
drbob
73471b2618 Bugfixes for ZeroConf under OSX.
- Added Timeouts for Resolve and QueryIP, as these can continue indefinitely.
	- Added more debugging.
	- rotated port number using ntohs().
	- Filtered Self.
	- Allowed Other SSL IDs of Self to connect.
	- Fixed QueryIP to use hosttarget instead of servicename.
	- fixed Id order in mPeerMgr->addFriend().
	- fixed p3ZeroConf initialisation call.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4752 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-06 12:48:04 +00:00
drbob
c69da728d7 Completed implementation of p3zeroconf.
- Compiles under Windows, Links but doesn't talk to daemon properly.
 - To Test functionality under OSX.
 


git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4751 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-05 15:43:06 +00:00
drbob
58d8606d00 Added extra function to retrieve Peer's GPG IDs.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4750 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2012-01-05 15:41:24 +00:00
csoler
94608c8467 added list of participants in lobby, handled large messages using splitted display (cannot ensure rebuilt message yet.)
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4745 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-29 14:19:53 +00:00
csoler
fb263f2fcc fixed duplication of messages in ChatLobbyDialog
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4744 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-29 08:40:23 +00:00
csoler
b6f8e2a306 added leaving notification to chat lobby
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4743 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-28 22:33:37 +00:00
csoler
60bb76e3df Imported chat lobby function from branch v0.5-ChatLobby (merged commits 4682-4739)
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4740 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-27 16:32:19 +00:00
csoler
bcd2973b32 put debug info between ifdefs
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-ChatLobby@4739 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-27 15:35:43 +00:00
csoler
3addb36e4c added unsubscribe protocol, updated GUI
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-ChatLobby@4738 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-27 13:47:37 +00:00
csoler
cc57ab2462 added load/save of default nickname, plus some debugging
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-ChatLobby@4737 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-26 22:43:54 +00:00
csoler
9b79d70fa8 debugging of connectivity challenge
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-ChatLobby@4736 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-26 17:39:38 +00:00
csoler
d4abb42788 added challenge protocol to securely improve lobby connectivity
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-ChatLobby@4735 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-26 14:45:45 +00:00
csoler
43be20c0ed added manual entry for plugins
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4734 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-22 20:17:59 +00:00
drbob
e232b1d47d Finished up Relay Interface code to p3bitdht.
- RelayServers, Relay Parameters & Relay Mode supported.
 - Store configuration via p3config.
 - New interface code in p3bitdht_relay.cc
 - Updated external interface rsdht.cc



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4730 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-20 02:07:00 +00:00
drbob
203fd6bffc Added external interface to control Relay Parameters.
* Modified UdpRelay handles the counting... 
	now each Relay Class has a bandwidth limit, 
	and you can drop down to a lower class - if your one is full.
	This ensures that the desired bandwidth is kept, and allows more friends to use the relays.
 * Added Interface in p3bitdht.

TODO: Test this stuff!



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4728 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-19 18:56:11 +00:00
drbob
4d2175636e Added basic ZeroConf interface.
- registers oneself, browses and resolves services.
 - Lots still TODO:
	- parse TxtRecords.
	- Track peers.
	- feedback to libretroshare
	- etc, etc.
Enabled ZeroConf in libretroshare.pro & rsinit.cc. Compiles and runs on OSX.
Added RelayHandler to Dht, to enable external control of Relays.
Marked pqiAssist Interface for changes... will be revamped with ZeroConf.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4727 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-13 16:19:37 +00:00
thunder2
f3a0924461 Reverted some of my last changes:
- removing the core lock in RsServer::ConfigGetDataRates
- changes in p3ConfigMgr::loadConfig

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4726 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-12 16:07:38 +00:00
thunder2
e150e31401 Optimized startup of RetroShare by removing two unnecessary calls to AuthGPGimpl::storeAllKeys.
Fixed small hangs of RetroShare by removing the core lock in RsServer::ConfigGetDataRates. Is that needed?

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4725 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-12 09:37:03 +00:00
drbob
ada2fa9d85 --- Merging r4705 through r4717 from retroshare/branches/v0.5-dhtmods
Summary of changes:
 * Switched on Local BadPeer DHT Filter.
	- This will remove any peer detected to be spoofing yourself or your friends.
	- This list is also shared with you friends. (in Test Mode).
 * Added Cleanup of BadPeer Filter.
	- Instead of permanent ban, peers are be banned for 6 hours.
	- bdManager periodically calls this - which prints out ban list too.
 * Added Checks against spoofing to UdpStunner.
	- Throw away Stun Results where remote_addr = reported ext_addr.
	- Added extra checks to ensure that the same Ext IP is returned, before reporting.
	- accept BadPeer List from DHT BadPeer Detection.
 * Changed BanList Service Id from Test ID to Real ID.




git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4718 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-08 21:22:37 +00:00
drbob
2048bb5e47 Improvements to BanPeer Code, mainly from a UdpStunner perspective.
* Added UdpStunner::dropStunPeer() code to remove bad peer from stun list.
 * added calls to UdpStunner::dropStunPeer for BanLists going to/from DHT.
 * added  DEBUG_BANLIST_CONDENSE to remove unnecessary debug.
 * Improved UdpStunner::status() print out of stunlist.
 * Added extra check to throw away stun reports where remote_addr == reported ext_addr.
	- This was causing peers to get the wrong IP addresses.
 * Modified UdpStunner ExtAddr checks to make sure the IP addresses match.
 * Changed BANLIST service Id to from Test ID to real ID.

NOTE: These are stop-gap methods to avoid the wrong Stun reports.
A more robust scheme must be implemented. I'd expect that it would
involve a strict initial check to establish your IP address...
(e.g. require 4 peers to confirm it, allowing for some fake entries)
After this we can have a weaker check ensuring IP address matches.
If we detect a likely REAL change of IP address - drop back to requiring
a strick check again.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-dhtmods@4717 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2011-12-08 20:15:08 +00:00