aboutsummaryrefslogtreecommitdiff
path: root/src/net.h
AgeCommit message (Collapse)Author
2013-03-30Process getdata invs separately until send buffer overflowsPieter Wuille
There exists a per-message-processed send buffer overflow protection, where processing is halted when the send buffer is larger than the allowed maximum. This protection does not apply to individual items, however, and getdata has the potential for causing large amounts of data to be sent. In case several hundreds of blocks are requested in one getdata, the send buffer can easily grow 50 megabytes above the send buffer limit. This commit breaks up the processing of getdata requests, remembering them inside a CNode when too many are requested at once.
2013-03-29Use per-message send buffer, rather than per connectionPieter Wuille
2013-03-29Some fixes to CNetMessage processingPieter Wuille
* Change CNode::vRecvMsg to be a deque instead of a vector (less copying) * Make sure to acquire cs_vRecvMsg in CNode::CloseSocketDisconnect (as it may be called without that lock).
2013-03-29P2P: improve RX/TX flow controlJeff Garzik
1) "optimistic write": Push each message to kernel socket buffer immediately. 2) If there is write data at select time, that implies send() blocked during optimistic write. Drain write queue, before receiving any more messages. This avoids needlessly queueing received data, if the remote peer is not themselves receiving data. Result: write buffer (and thus memory usage) is kept small, DoS potential is slightly lower, and TCP flow control signalling is properly utilized. The kernel will queue data into the socket buffer, then signal the remote peer to stop sending data, until we resume reading again.
2013-03-29P2P: parse network datastream into header/data components in socket threadJeff Garzik
Replaces CNode::vRecv buffer with a vector of CNetMessage's. This simplifies ProcessMessages() and eliminates several redundant data copies. Overview: * socket thread now parses incoming message datastream into header/data components, as encapsulated by CNetMessage * socket thread adds each CNetMessage to a vector inside CNode * message thread (ProcessMessages) iterates through CNode's CNetMessage vector Message parsing is made more strict: * Socket is disconnected, if message larger than MAX_SIZE or if CMessageHeader deserialization fails (latter is impossible?). Previously, code would simply eat garbage data all day long. * Socket is disconnected, if we fail to find pchMessageStart. We do not search through garbage, to find pchMessageStart. Each message must begin precisely after the last message ends. ProcessMessages() always processes a complete message, and is more efficient: * buffer is always precisely sized, using CDataStream::resize(), rather than progressively sized in 64k chunks. More efficient for large messages like "block". * whole-buffer memory copy eliminated (vRecv -> vMsg) * other buffer-shifting memory copies eliminated (vRecv.insert, vRecv.erase)
2013-03-24(finally) Remove IRC Seed support now that lfnet is down.Matt Corallo
2013-01-27Use a copy in place of mapMultiArgs["-addnode"].Matt Corallo
Also moves the DNS lookup of -addnode nodes into the repeated loop, allowing -addnode to follow DNS changes.
2013-01-17Merge pull request #2060 from sipa/parallelGavin Andresen
Parallel script verification
2013-01-16Let a node opt out of tx invs before we get a their bloom filterMatt Corallo
Note that the default value for fRelayTxes is false, meaning we now no longer relay tx inv messages before receiving the remote peer's version message.
2013-01-16Replace RelayMessage with RelayTransaction.Matt Corallo
2013-01-16Add a filter field in CNode, add filterload+filteradd+filterclearMatt Corallo
2013-01-09Remove fClientPieter Wuille
Client (SPV) mode never got implemented entirely, and whatever part was already working, is likely not been tested (or even executed at all) for the past two years. This removes it entirely. If we want an SPV implementation, I think we should first get the block chain data structures to be encapsulated in a class implementing a standard interface, and then writing an alternate implementation with SPV semantics.
2013-01-08Parallelize script verificationPieter Wuille
* During block verification (when parallelism is requested), script check actions are stored instead of being executed immediately. * After every processed transactions, its signature actions are pushed to a CScriptCheckQueue, which maintains a queue and some synchronization mechanism. * Two or more threads (if enabled) start processing elements from this queue, * When the block connection code is finished processing transactions, it joins the worker pool until the queue is empty. As cs_main is held the entire time, and all verification must be finished before the block continues processing, this does not reach the best possible performance. It is a less drastic change than some more advanced mechanisms (like doing verification out-of-band entirely, and rolling back blocks when a failure is detected). The -par=N flag controls the number of threads (1-16). 0 means auto, and is the default.
2012-12-18Split off hash.h from util.hPieter Wuille
2012-12-12Merge pull request #2003 from alexanderkjeldaas/documented-locking-part-2Gavin Andresen
Documented locking part 1+2
2012-11-13Abstract block hash substr extraction (for debug.log) into BlockHashStr inlineLuke Dashjr
2012-11-11o Annotated lock-like functions in net.h.Alexander Kjeldaas
o Removed unused function EndMessageAbortIfEmpty
2012-10-25Merge pull request #1904 from laanwj/2012_10_remove_getorderPieter Wuille
remove "checkorder" P2P command
2012-10-20Move external block import to separate threadPieter Wuille
2012-10-03remove "checkorder" and "reply" P2P commandsWladimir J. van der Laan
These command are a leftover from send-to-IP transactions, which have been removed a long time ago. Also removes CNode::mapRequests and CNode::PushRequests, as these were only used for the mentioned commands.
2012-08-01Bugfix: Fix a variety of misspellingsLuke Dashjr
2012-08-01Merge pull request #1344 from rebroad/AskForTimeFormatJeff Garzik
Unless debugging, show a more useful format for the askfors
2012-07-04Fix remaining warnings.Matt Corallo
2012-07-02Include human readble format for nRequestTime.R E Broadley
2012-07-01Change default send buffer to 1Mb.Matt Corallo
2012-06-29RPC: add 'getpeerinfo', returning easy-to-retrieve per-CNode dataJeff Garzik
2012-06-27Stop processing messages on full send buffer and dont disconnect.Matt Corallo
Also decrease default send/receive buffer sizes from 10 to 5 mb as this patch makes it easy for a node to fill both instead of only send.
2012-06-23Merge pull request #1174 from sipa/torhsGregory Maxwell
Tor hidden service support
2012-06-23Add -tor and related configurationPieter Wuille
2012-06-22Introduce -debugnet option, thereby quieting some redundant debug messagesJeff Garzik
Prior to this change, each TX typically generated 3+ debug messages, askfor tx 8644cc97480ba1537214 0 sending getdata: tx 8644cc97480ba1537214 askfor tx 8644cc97480ba1537214 1339640761000000 askfor tx 8644cc97480ba1537214 1339640881000000 CTxMemPool::accept() : accepted 8644cc9748 (poolsz 6857) After this change, there is only one message for each valid TX received CTxMemPool::accept() : accepted 22a73c5d8c (poolsz 42) and two messages for each orphan tx received ERROR: FetchInputs() : 673dc195aa mempool Tx prev not found 1e439346fc stored orphan tx 673dc195aa (mapsz 19) The -debugnet option, or its superset -debug, will restore the full debug output.
2012-05-31Rework network config settingsPieter Wuille
2012-05-18Update License in File HeadersFordy
I originally created a pull to replace the "COPYING" in crypter.cpp and crypter.h, but it turned out that COPYING was actually the correct file.
2012-05-16CAddrDB: Replace BDB-managed addr.dat with internally managed peers.datJeff Garzik
2012-05-14Merge pull request #1262 from Diapolo/no_double_timestampsGregory Maxwell
no more double timestamps in debug.log
2012-05-14-onlynet instead of -blocknetPieter Wuille
2012-05-13ensure that no double timestamps show up in the debug.log, by removing ↵Philip Kaufmann
manual timestamps from the source (now only -logtimestamps parameter adds timestamps to debug.log)
2012-05-13Take -port into account when resolving -bind'sPieter Wuille
2012-05-11Merge pull request #1021 from sipa/ipv6Pieter Wuille
IPv6 node support
2012-05-11Merge pull request #1260 from sipa/splitsyncGregory Maxwell
Split synchronization mechanisms from util.{h,cpp}
2012-05-11Use semaphores instead of condition variablesPieter Wuille
2012-05-11Separate listening sockets, -bind=<addr>Pieter Wuille
2012-05-11Keep port information for local addressesPieter Wuille
2012-05-11Add -blocknet to prevent connections to a given networkPieter Wuille
2012-05-11Limited relaying/storing of foreign addressesPieter Wuille
Introduce a boolean variable for each "network" (ipv4, ipv6, tor, i2p), and track whether we are likely to able to connect to it. Addresses in "addr" messages outside of our network get limited relaying and are not stored in addrman.
2012-05-08Support multi-threaded JSON-RPCDavid Joel Schwartz
Change internal HTTP JSON-RPC server from single-threaded to thread-per-connection model. The IP filter list is applied prior to starting the thread, which then processes the RPC. A mutex covers the entire RPC operation, because not all RPC operations are thread-safe. [minor modifications by jgarzik, to make change upstream-ready]
2012-05-04Added -externalip and -discoverPieter Wuille
-externalip=<ip> can be used to explicitly set the public IP address of your node. -discover=0 can be used to disable the automatic public IP discovery system.
2012-05-04Support for multiple local addressesPieter Wuille
2012-05-04Add -seednode connections, and use this for -dnsseed + -proxydnsPieter Wuille
2012-05-04Support connecting by hostnames passed to proxy (-proxydns)Pieter Wuille
2012-04-17Further reduce header dependenciesPieter Wuille
This commit removes the dependency of serialize.h on PROTOCOL_VERSION, and makes this parameter required instead of implicit. This is much saner, as it makes the places where changing a version number can have an influence obvious.