Initial commit.
Plugging in the merkleIndex add into the on_write_complete callback. also tore out crypto++'s base64 encode, since it wasn't compatible with the current compiler (and I didn't want to have to update my version of crypto++, AND the base64 call sucked. Why do I need a "string sync"? effers)
Hooking up some more pieces. Adding todos. Working towards getting healing working, and turning some attention to the world of multithreading.
Updating PeerTracker in a nod to how decryption *might* be handled. Needs some cleanup, it still feels non-intuitive.
Refactoring in and around the Synchronizer guy. Want to make him the top level "switchboard" for healing decisions, not the errand runner sending packets and doing real work.
Minor refactor, moving the WriteAction "client" piece into new library "actions_req".
Played with trying to make LocalDataStore do in-order iteration of keys. Gave up (at least for now) after discovering that unordered_map is very much as the name suggests. Instead, making the merkle_tree hold a extra piece of metadata to point to the data -- "filename". Next, will give it some sort of enumeration ability...
Header, and MerkleIndex storing the extra value...
Getting rid of the weird critbit_map_internal thing. Making merkle_tree a little weirder (std::tuple!) to compensate, but I think it makes more sense this way. merkle_tree now uses a normal critbit_map_pair as his value type, but puts a tuple as its second value.
Finally, a functional Merkle exchange. However, it's broken for some cases... :(
Of course I forgot a file.
Design was fine (at least for this bug), the implementation was broken. Bad bit shift effort... now fixed. No infinite loops!
Reordering initialization order of local stuff to live longer than the network stuff. to prevent shutdown explosions.
Class MerkleRange to (correctly) calculate the required range from a MerklePoint (key + keybits). For the first time, the system heals properly (at least for all tested cases...)
A bit of a writeup on all the ways the merkle diff can go.
Adding header only home for ezOptionParser. For ez... option parsing.
LocalDataStore now uses tbb::concurrent_unordered_map. Removed TestableDataStore (subclass exposing data members), added MockDataStore.
Splitting the decryption component back out of PeerTracker (random nonce as the first 3 packet bytes will allow us to not need the PeerConnection to sync communications -- which is good, since that was feeling like a problematic pattern), and doing the first pass at a producer -> many consumer implementation of WanPacketHandler's action handling. Playing around with some thread sync mechanisms (PeerConnection uses std::atomic_flag), will have to profile performance to make sure this all works as intended...
Making PeerConnection server only. Moving the "ThrottledWriteStream" into a "BufferedSocketWriter", which currently acts as a dumb passthrough -- but I think will do clever things like prefix writes with length. Maybe I'll use UDT's streaming mode after all?
Intermediate checkin, breaking stuff. Some code for virtual sockets on client side (will probably remain unused)