aboutsummaryrefslogtreecommitdiff
path: root/src/net.cpp
AgeCommit message (Collapse)Author
2017-05-07Merge #10189: devtools/net: add a verifier for scriptable changes. Use it to ↵Wladimir J. van der Laan
make CNode::id private. 0f3471f net: make CNode's id private (Cory Fields) 9ff0a51 scripted-diff: net: Use accessor rather than node's id directly (Cory Fields) e50c33e devtools: add script to verify scriptable changes (Cory Fields) Tree-SHA512: a0ff50f4e1d38a2b63109b4996546c91b3e02e00d92c0bf04f48792948f78b1f6d9227a15d25c823fd4723a0277fc6a32c2c1287c7abbb7e50fd82ffb0f8d994
2017-05-04net: make CNode's id privateCory Fields
2017-05-04scripted-diff: net: Use accessor rather than node's id directlyCory Fields
-BEGIN VERIFY SCRIPT- sed -i "s/\(node\|to\|from\)->id/\1->GetId()/" src/net.cpp src/net_processing.cpp -END VERIFY SCRIPT-
2017-05-02Merge #10234: [net] listbanned RPC and QT should show correct banned subnetsWladimir J. van der Laan
d6732d8 [tests] update disconnect_ban.py test case to work with listbanned (John Newbery) 77c54b2 [net] listbanned RPC and QT should show correct banned subnets (John Newbery) Tree-SHA512: edd0e43377d456260d2697213c2829f8483630f3a668b6707d52605faefa610d951d10e6f22a95eff483cbd14faa8ac9b69fa7d3c0b5735c5f3df23fd71282e0
2017-04-28[net] listbanned RPC and QT should show correct banned subnetsJohn Newbery
2017-04-26Merge #9930: Trivial: Correct indentation and bracingWladimir J. van der Laan
31a14d4 Correct indentation and remove unnecessary braces (Matthias Grundmann) Tree-SHA512: c0e827ec4474133c7674254dfd13f59608820cd639debc7759bddae71d73451645fcfe14384f343d08f74d69ac3922bafc12a514f3b790ae2bf9271aa67d5f36
2017-04-14Check interruptNet during dnsseed lookupsMatt Corallo
2017-04-02Correct indentation and remove unnecessary bracesMatthias Grundmann
2017-04-01Change LogAcceptCategory to use uint32_t rather than sets of strings.Gregory Maxwell
This changes the logging categories to boolean flags instead of strings. This simplifies the acceptance testing by avoiding accessing a scoped static thread local pointer to a thread local set of strings. It eliminates the only use of boost::thread_specific_ptr outside of lockorder debugging. This change allows log entries to be directed to multiple categories and makes it easy to change the logging flags at runtime (e.g. via an RPC, though that isn't done by this commit.) It also eliminates the fDebug global. Configuration of unknown logging categories now produces a warning.
2017-03-18Merge #9987: Remove unused codeWladimir J. van der Laan
8dc957a Remove unused code (practicalswift) Tree-SHA512: c7bb286e3b92e42fec8aa1ac2491fd38be36602efca16b4bdc4e9d5ada75c11d99e7713092ec13794abd69d5ef2c732b86209a6d01710e5ebf6fc51b8a65c92a
2017-03-17Remove unused codepracticalswift
2017-03-16Merge #9921: build: Probe MSG_DONTWAIT in the same way as MSG_NOSIGNALWladimir J. van der Laan
a4d1c9f compat: use `unsigned int` instead of `u_int` (Wladimir J. van der Laan) 25da1ee build: cleanup: define MSG_DONTWAIT/MSG_NO_SIGNAL locally (Wladimir J. van der Laan) c459d50 build: Probe MSG_DONTWAIT in the same way as MSG_NOSIGNAL (Wladimir J. van der Laan) Tree-SHA512: 60d79d69439bb181465e4244aa5ddc28bbd84f69c0ca0c753956b3798c9022394e29d791bc085fe7ffb1268c64c789a57e24797daad63525bb776088188ff9ae
2017-03-08Add missing braces in semaphore posts in netMatt Corallo
2017-03-08Fix shutdown hang with >= 8 -addnodes setMatt Corallo
We previously would block waiting for a CSemaphoreGrant in ThreadOpenAddedConnections, when we did not need to. This would block as the posts in CConnman shutdown were both to the wrong semaphore and in the wrong location.
2017-03-06CScheduler boost->std::function, use millisecs for times, not secsMatt Corallo
2017-03-05build: cleanup: define MSG_DONTWAIT/MSG_NO_SIGNAL locallyWladimir J. van der Laan
Define MSG_DONTWAIT and MSG_NO_SIGNAL in the implementation files that use them (`net.cpp` and `netbase.cpp`), instead of compat.h which is included all over the place. This avoids putting them in the global namespace, as defining them as 0 is a hack that works for our specific usage, but it is not a general solution. Also makes sure they are defined only once so the `!defined(MSG_x)` guard can go.
2017-02-28Trivial: Debug log ambiguity fix for peer addrskeystrike
This line can be misinterpreted as loading wallet addresses which is confusing, especially when the wallet is disabled.
2017-02-14Merge #9715: Disconnect peers which we do not receive VERACKs from within 60 secWladimir J. van der Laan
66f861a Add a test for P2P inactivity timeouts (Matt Corallo) b436f92 qa: Expose on-connection to mininode listeners (Matt Corallo) 8aaba7a qa: mininode learns when a socket connects, not its first action (Matt Corallo) 2cbd119 Disconnect peers which we do not receive VERACKs from within 60 sec (Matt Corallo)
2017-02-10Move CNode::addrLocal access behind locked accessorsMatt Corallo
2017-02-10Move CNode::addrName accesses behind locked accessorsMatt Corallo
2017-02-10Move [clean|str]SubVer writes/copyStats into a lockMatt Corallo
2017-02-10Access fRelayTxes with cs_filter lock in copyStatsMatt Corallo
2017-02-10Avoid copying CNodeStats to make helgrind OK with buggy std::stringMatt Corallo
2017-02-10Make nTimeConnected const in CNodeMatt Corallo
2017-02-10net: fix a few races. Credit @TheBlueMattCory Fields
These are (afaik) all long-standing races or concurrent accesses. Going forward, we can clean these up so that they're not all individual atomic accesses. - Reintroduce cs_vRecv to guard receive-specific vars - Lock vRecv/vSend for CNodeStats - Make some vars atomic. - Only set the connection time in CNode's constructor so that it doesn't change
2017-02-10Merge #9698: net: fix socket close raceWladimir J. van der Laan
9a0b784 net: add a lock around hSocket (Cory Fields) 45e2e08 net: rearrange so that socket accesses can be grouped together (Cory Fields)
2017-02-08Merge #9674: Always enforce strict lock ordering (try or not)Wladimir J. van der Laan
618ee92 Further-enforce lockordering by enforcing directly after TRY_LOCKs (Matt Corallo) 2a962d4 Fixup style a bit by moving { to the same line as if statements (Matt Corallo) 8465631 Always enforce lock strict lock ordering (try or not) (Matt Corallo) fd13eca Lock cs_vSend and cs_inventory in a consistent order even in TRY (Matt Corallo)
2017-02-07Disconnect peers which we do not receive VERACKs from within 60 secMatt Corallo
2017-02-06net: add a lock around hSocketCory Fields
2017-02-06net: rearrange so that socket accesses can be grouped togetherCory Fields
2017-02-06Merge #9659: Net: Turn some methods and params/variables constWladimir J. van der Laan
0729102 Net: pass interruptMsgProc as const where possible (Jorge Timón) fc7f2ff Net: Make CNetMsgMaker more const (Jorge Timón) d45955f Net: CConnman: Make some methods const (Jorge Timón)
2017-02-04Fixup style a bit by moving { to the same line as if statementsMatt Corallo
2017-02-04Merge #9671: Fix super-unlikely race introduced in 236618061a445d2cb11e72Wladimir J. van der Laan
885cfdd Fix super-unlikely race introduced in 236618061a445d2cb11e72 (Matt Corallo)
2017-02-02Lock cs_vSend and cs_inventory in a consistent order even in TRYMatt Corallo
2017-02-02net: log an error rather than asserting if send version is misusedCory Fields
Also cleaned up the comments and moved from the header to the .cpp so that logging headers aren't needed from net.h
2017-02-02net: don't run callbacks on nodes that haven't completed the version handshakeCory Fields
Since ForEach* are can be used to send messages to all nodes, the caller may end up sending a message before the version handshake is complete. To limit this, filter out these nodes. While we're at it, may as well filter out disconnected nodes as well. Delete unused methods rather than updating them.
2017-02-02Fix super-unlikely race introduced in 236618061a445d2cb11e72Matt Corallo
Once the CNode has been added to vNodes, it is possible that it is disconnected+deleted in the socket handler thread. However, after that we now call InitializeNode, which accesses the pnode. helgrind managed to tickle this case (somehow), but I suspect it requires in immensely braindead scheduler.
2017-01-31Net: CConnman: Make some methods constJorge Timón
2017-01-30Merge #9626: Clean up a few CConnman cs_vNodes/CNode thingsWladimir J. van der Laan
2366180 Do not add to vNodes until fOneShot/fFeeler/fAddNode have been set (Matt Corallo) 3c37dc4 Ensure cs_vNodes is held when using the return value from FindNode (Matt Corallo) 5be0190 Delete some unused (and broken) functions in CConnman (Matt Corallo)
2017-01-26Merge #9606: net: Consistently use GetTimeMicros() for inactivity checksWladimir J. van der Laan
99464bc net: Consistently use GetTimeMicros() for inactivity checks (Suhas Daftuar)
2017-01-25Do not add to vNodes until fOneShot/fFeeler/fAddNode have been setMatt Corallo
2017-01-25net: Consistently use GetTimeMicros() for inactivity checksSuhas Daftuar
The use of mocktime in test logic means that comparisons between GetTime() and GetTimeMicros()/1000000 are unreliable since the former can use mocktime values while the latter always gets the system clock; this changes the networking code's inactivity checks to consistently use the system clock for inactivity comparisons. Also remove some hacks from setmocktime() that are no longer needed, now that we're using the system clock for nLastSend and nLastRecv.
2017-01-24Ensure cs_vNodes is held when using the return value from FindNodeMatt Corallo
2017-01-24Delete some unused (and broken) functions in CConnmanMatt Corallo
2017-01-13Make the cs_sendProcessing a LOCK instead of a TRY_LOCKMatt Corallo
Technically cs_sendProcessing is entirely useless now because it is only ever taken on the one MessageHandler thread, but because there may be multiple of those in the future, it is left in place
2017-01-13Split CNode::cs_vSend: message processing and message sendingMatt Corallo
cs_vSend is used for two purposes - to lock the datastructures used to queue messages to place on the wire and to only call SendMessages once at a time per-node. I believe SendMessages used to access some of the vSendMsg stuff, but it doesn't anymore, so these locks do not need to be on the same mutex, and also make deadlocking much more likely.
2017-01-13Merge #9441: Net: Massive speedup. Net locks overhaulPieter Wuille
e60360e net: remove cs_vRecvMsg (Cory Fields) 991955e net: add a flag to indicate when a node's send buffer is full (Cory Fields) c6e8a9b net: add a flag to indicate when a node's process queue is full (Cory Fields) 4d712e3 net: add a new message queue for the message processor (Cory Fields) c5a8b1b net: rework the way that the messagehandler sleeps (Cory Fields) c72cc88 net: remove useless comments (Cory Fields) ef7b5ec net: Add a simple function for waking the message handler (Cory Fields) f5c36d1 net: record bytes written before notifying the message processor (Cory Fields) 60befa3 net: handle message accounting in ReceiveMsgBytes (Cory Fields) 56212e2 net: set message deserialization version when it's actually time to deserialize (Cory Fields) 0e973d9 net: remove redundant max sendbuffer size check (Cory Fields) 6042587 net: wait until the node is destroyed to delete its recv buffer (Cory Fields) f6315e0 net: only disconnect if fDisconnect has been set (Cory Fields) 5b4a8ac net: make GetReceiveFloodSize public (Cory Fields) e5bcd9c net: make vRecvMsg a list so that we can use splice() (Cory Fields) 53ad9a1 net: fix typo causing the wrong receive buffer size (Cory Fields)
2017-01-12net: remove cs_vRecvMsgCory Fields
vRecvMsg is now only touched by the socket handler thread. The accounting vars (nRecvBytes/nLastRecv/mapRecvBytesPerMsgCmd) are also only used by the socket handler thread, with the exception of queries from rpc/gui. These accesses are not threadsafe, but they never were. This needs to be addressed separately. Also, update comment describing data flow
2017-01-12net: add a flag to indicate when a node's send buffer is fullCory Fields
Similar to the recv flag, but this one indicates whether or not the net's send buffer is full. The socket handler checks the send queue when a new message is added and pauses if necessary, and possibly unpauses after each message is drained from its buffer.
2017-01-12net: add a flag to indicate when a node's process queue is fullCory Fields
Messages are dumped very quickly from the socket handler to the processor, so it's the depth of the processing queue that's interesting. The socket handler checks the process queue's size during the brief message hand-off and pauses if necessary, and the processor possibly unpauses each time a message is popped off of its queue.