aboutsummaryrefslogtreecommitdiff
path: root/src/net.cpp
AgeCommit message (Collapse)Author
2017-01-04net: set message deserialization version when it's actually time to deserializeCory Fields
We'll soon no longer have access to vRecvMsg, and this is more intuitive anyway.
2017-01-04net: wait until the node is destroyed to delete its recv bufferCory Fields
when vRecvMsg becomes a private buffer, it won't make sense to allow other threads to mess with it anymore.
2017-01-04net: only disconnect if fDisconnect has been setCory Fields
These conditions are problematic to check without locking, and we shouldn't be relying on the refcount to disconnect.
2017-01-04net: make vRecvMsg a list so that we can use splice()Cory Fields
2017-01-04net: fix typo causing the wrong receive buffer sizeCory Fields
Surprisingly this hasn't been causing me any issues while testing, probably because it requires lots of large blocks to be flying around. Send/Recv corks need tests!
2017-01-04Merge #9289: net: drop boost::thread_groupWladimir J. van der Laan
67ee4ec net: misc header cleanups (Cory Fields) 8b3159e net: make proxy receives interruptible (Cory Fields) 5cb0fce net: remove thread_interrupted catch (Cory Fields) d3d7056 net: make net processing interruptible (Cory Fields) 0985052 net: make net interruptible (Cory Fields) 799df91 net: add CThreadInterrupt and InterruptibleSleep (Cory Fields) 7325b15 net: a few small cleanups before replacing boost threads (Cory Fields)
2017-01-03net: misc header cleanupsCory Fields
2017-01-03net: make proxy receives interruptibleCory Fields
2017-01-03net: make net processing interruptibleCory Fields
2017-01-03net: make net interruptibleCory Fields
Also now that net threads are interruptible, switch them to use std threads/binds/mutexes/condvars.
2017-01-03net: a few small cleanups before replacing boost threadsCory Fields
- Drop the interruption point directly after the pnode allocation. This would be leaky if hit. - Rearrange thread creation so that the socket handler comes first
2016-12-31Increment MIT Licence copyright header year on files modified in 2016isle2983
Edited via: $ contrib/devtools/copyright_header.py update .
2016-12-23Fix non-const mapMultiArgs[] access after init.Matt Corallo
Swap mapMultiArgs for a const-reference to a _mapMultiArgs which is only accessed in util.cpp
2016-11-30Merge #9226: Remove fNetworkNode and pnodeLocalHost.Pieter Wuille
bdb922b Remove pnodeLocalHost. (Gregory Maxwell) 083f203 Remove fNetworkNode. (Gregory Maxwell)
2016-11-29Merge #9225: Fix some benign racesWladimir J. van der Laan
dfed983 Fix unlocked access to vNodes.size() (Matt Corallo) 3033522 Remove double brackets in addrman (Matt Corallo) dbfaade Fix AddrMan locking (Matt Corallo) 047ea10 Make fImporting an std::atomic (Matt Corallo) 42071ca Make fDisconnect an std::atomic (Matt Corallo)
2016-11-27Remove pnodeLocalHost.Gregory Maxwell
Mostly a legacy of the long removed pub/sub system.
2016-11-27Remove fNetworkNode.Gregory Maxwell
Matt pointed out to me that this appeared to be doing nothing (except involving itself in data races).
2016-11-26Fix unlocked access to vNodes.size()Matt Corallo
2016-11-25net: push only raw data into CConnmanCory Fields
This fixes one of the last major layer violations in the networking stack. The network side is no longer in charge of message serialization, so it is now decoupled from Bitcoin structures. Only the header is serialized and attached to the payload.
2016-11-11Merge #8996: Network activity toggleJonas Schnelli
19f46f1 Qt: New network_disabled icon (Luke Dashjr) 54cf997 RPC/Net: Use boolean consistently for networkactive, and remove from getinfo (Luke Dashjr) b2b33d9 Overhaul network activity toggle (Jonas Schnelli) 32efa79 Qt: Add GUI feedback and control of network activity state. (Jon Lund Steffensen) e38993b RPC: Add "togglenetwork" method to toggle network activity temporarily (Jon Lund Steffensen) 7c9a98a Allow network activity to be temporarily suspended. (Jon Lund Steffensen)
2016-11-07Merge #9045: Hash P2P messages as they are received instead of at process-timePieter Wuille
fe1dc62 Hash P2P messages as they are received instead of at process-time (Matt Corallo)
2016-11-07Merge #9052: Use RelevantServices instead of node_network in AttemptToEvict.Wladimir J. van der Laan
d32036a Use RelevantServices instead of node_network in AttemptToEvict. (Gregory Maxwell)
2016-11-03net: handle version push in InitializeNodeCory Fields
2016-11-03net: remove now-unused ssSend and FuzzCory Fields
2016-11-03drop the optimistic write counter hackCory Fields
This is now handled properly in realtime.
2016-11-03net: switch all callers to connman for pushing messagesCory Fields
Drop all of the old stuff.
2016-11-03connman is in charge of pushing messagesCory Fields
The changes here are dense and subtle, but hopefully all is more explicit than before. - CConnman is now in charge of sending data rather than the nodes themselves. This is necessary because many decisions need to be made with all nodes in mind, and a model that requires the nodes calling up to their manager quickly turns to spaghetti. - The per-node-serializer (ssSend) has been replaced with a (quasi-)const send-version. Since the send version for serialization can only change once per connection, we now explicitly tag messages with INIT_PROTO_VERSION if they are sent before the handshake. With this done, there's no need to lock for access to nSendVersion. Also, a new stream is used for each message, so there's no need to lock during the serialization process. - This takes care of accounting for optimistic sends, so the nOptimisticBytesWritten hack can be removed. - -dropmessagestest and -fuzzmessagestest have not been preserved, as I suspect they haven't been used in years.
2016-11-01Use RelevantServices instead of node_network in AttemptToEvict.Gregory Maxwell
Use of node_network here is really meant to be a proxy of "likely to send us blocks in the future". RelevantServices is the right criteria now.
2016-10-31net: Use deterministic randomness for CNode's nonce, and make it constCory Fields
2016-10-31net: constify a few CNode vars to indicate that they're threadsafeCory Fields
2016-10-30Hash P2P messages as they are received instead of at process-timeMatt Corallo
2016-10-25Merge #9008: [net] Remove assert(nMaxInbound > 0)Wladimir J. van der Laan
fa1c3c2 [net] Remove assert(nMaxInbound > 0) (MarcoFalke)
2016-10-25Make connect=0 disable automatic outbound connections.Gregory Maxwell
Otherwise it just responds to this obvious bit of configuration by trying to connect to "0" in a loop.
2016-10-24[net] Remove assert(nMaxInbound > 0)MarcoFalke
nMaxInbound might very well be 0 or -1, if the user prefers to keep a small number of maxconnections. Note: nMaxInbound of -1 means that the user set maxconnections to 8 or less, but we still want to keep an additional slot for the feeler connection.
2016-10-24Qt: Add GUI feedback and control of network activity state.Jon Lund Steffensen
Add getNetworkActive()/setNetworkActive() method to client model. Send network active status through NotifyNetworkActiveChanged. Indicate in tool tip of gui status bar network indicator whether network activity is disabled. Indicate in debug window whether network activity is disabled and add button to allow user to toggle network activity state.
2016-10-24Allow network activity to be temporarily suspended.Jon Lund Steffensen
Added the function SetNetworkActive() which when called with argument set to false disconnects all nodes and sets the flag fNetworkActive to false. As long as this flag is false no new connections are attempted and no incoming connections are accepted. Network activity is reenabled by calling the function with argument true.
2016-10-19Merge #8949: Be more agressive in getting connections to peers with relevant ↵Wladimir J. van der Laan
services. 4630479 Make dnsseed's definition of acute need include relevant services. (Gregory Maxwell) 9583477 Be more aggressive in connecting to peers with relevant services. (Gregory Maxwell)
2016-10-19Make dnsseed's definition of acute need include relevant services.Gregory Maxwell
We normally prefer to connect to peers offering the relevant services. If we're not connected to enough peers with relevant services, we probably don't know about them and could use dnsseed's help.
2016-10-18Merge #8914: Kill insecure_random and associated global stateWladimir J. van der Laan
5eaaa83 Kill insecure_random and associated global state (Wladimir J. van der Laan)
2016-10-18Merge #8925: qt: Display minimum ping in debug window.Wladimir J. van der Laan
1724a40 Display minimum ping in debug window. (R E Broadley)
2016-10-17Be more aggressive in connecting to peers with relevant services.Gregory Maxwell
Only allow skipping relevant services until there are four outbound connections up. This avoids quickly filling up with peers lacking the relevant services when addrman has few or none of them.
2016-10-17Remove bogus assert on number of oubound connections.Matt Corallo
This value can be significantly higher if the users uses addnode
2016-10-17Comment that most dnsseeds only support some service bits combosMatt Corallo
2016-10-17Kill insecure_random and associated global stateWladimir J. van der Laan
There are only a few uses of `insecure_random` outside the tests. This PR replaces uses of insecure_random (and its accompanying global state) in the core code with an FastRandomContext that is automatically seeded on creation. This is meant to be used for inner loops. The FastRandomContext can be in the outer scope, or the class itself, then rand32() is used inside the loop. Useful e.g. for pushing addresses in CNode or the fee rounding, or randomization for coin selection. As a context is created per purpose, thus it gets rid of cross-thread unprotected shared usage of a single set of globals, this should also get rid of the potential race conditions. - I'd say TxMempool::check is not called enough to warrant using a special fast random context, this is switched to GetRand() (open for discussion...) - The use of `insecure_rand` in ConnectThroughProxy has been replaced by an atomic integer counter. The only goal here is to have a different credentials pair for each connection to go on a different Tor circuit, it does not need to be random nor unpredictable. - To avoid having a FastRandomContext on every CNode, the context is passed into PushAddress as appropriate. There remains an insecure_random for test usage in `test_random.h`.
2016-10-15Display minimum ping in debug window.R E Broadley
2016-10-04gui: fix ban from qt consoleCory Fields
Rather than doing a circle and re-resolving the node's IP, just use the one from nodestats directly. This requires syncing the addr field from CNode.
2016-09-28net: Consistent checksum handlingWladimir J. van der Laan
In principle, the checksums of P2P packets are simply 4-byte blobs which are the first four bytes of SHA256(SHA256(payload)). Currently they are handled as little-endian 32-bit integers half of the time, as blobs the other half, sometimes copying the one to the other, resulting in somewhat confused code. This PR changes the handling to be consistent both at packet creation and receiving, making it (I think) easier to understand.
2016-09-19Merge #8688: Move static global randomizer seeds into CConnmanWladimir J. van der Laan
d9ff591 Move static global randomizer seeds into CConnman (Pieter Wuille)
2016-09-19Merge #8707: net: fix maxuploadtarget settingWladimir J. van der Laan
f3552da net: fix maxuploadtarget setting (Cory Fields)
2016-09-19Move static global randomizer seeds into CConnmanPieter Wuille