-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SockMan #64
base: 2024/06/sv2_connection
Are you sure you want to change the base?
SockMan #64
Commits on Sep 27, 2024
-
net: reduce CAddress usage to CService or CNetAddr
* `CConnman::CalculateKeyedNetGroup()` needs `CNetAddr`, not `CAddress`, thus change its argument. * Both callers of `CConnman::CreateNodeFromAcceptedSocket()` create a dummy `CAddress` from `CService`, so use `CService` instead.
Configuration menu - View commit details
-
Copy full SHA for d646b96 - Browse repository at this point
Copy the full SHA d646b96View commit details -
net: split CConnman::BindListenPort() off CConnman
Introduce a new low-level socket managing class `SockMan` and move the `CConnman::BindListenPort()` method to it. Also, separate the listening socket from the permissions - they were coupled in `struct ListenSocket`, but the socket is protocol agnostic, whereas the permissions are specific to the application of the Bitcoin P2P protocol.
Configuration menu - View commit details
-
Copy full SHA for 3a4dba0 - Browse repository at this point
Copy the full SHA 3a4dba0View commit details -
style: modernize the style of SockMan::BindListenPort()
It was copied verbatim from `CConnman::BindListenPort()` in the previous commit. Modernize its variables and style and log the error messages from the caller.
Configuration menu - View commit details
-
Copy full SHA for 240a174 - Browse repository at this point
Copy the full SHA 240a174View commit details -
net: split CConnman::AcceptConnection() off CConnman
Move the `CConnman::AcceptConnection()` method to `SockMan` and split parts of it: * the flip-to-CJDNS part: to just after the `AcceptConnection()` call * the permissions part: at the start of `CreateNodeFromAcceptedSocket()`
Configuration menu - View commit details
-
Copy full SHA for 2b045fd - Browse repository at this point
Copy the full SHA 2b045fdView commit details -
Configuration menu - View commit details
-
Copy full SHA for 88f9c8d - Browse repository at this point
Copy the full SHA 88f9c8dView commit details -
Configuration menu - View commit details
-
Copy full SHA for a985141 - Browse repository at this point
Copy the full SHA a985141View commit details -
net: move CConnman-specific parts away from ThreadI2PAcceptIncoming()
CConnman-specific or in other words, Bitcoin P2P specific. Now the `ThreadI2PAcceptIncoming()` method is protocol agnostic and can be moved to `SockMan`.
Configuration menu - View commit details
-
Copy full SHA for 3fc5b9e - Browse repository at this point
Copy the full SHA 3fc5b9eView commit details -
Configuration menu - View commit details
-
Copy full SHA for d97e3db - Browse repository at this point
Copy the full SHA d97e3dbView commit details -
net: index nodes in CConnman by id
Change `CConnman::m_nodes` from `std::vector<CNode*>` to `std::unordered_map<NodeId, CNode*>` because interaction between `CConnman` and `SockMan` is going to be based on `NodeId` and finding a node by its id would better be fast. As a nice side effect the existent search-by-id operations in `CConnman::AttemptToEvictConnection()`, `CConnman::DisconnectNode()` and `CConnman::ForNode()` now become `O(1)` (were `O(number of nodes)`), as well as the erase in `CConnman::DisconnectNodes()`.
Configuration menu - View commit details
-
Copy full SHA for abdbcf5 - Browse repository at this point
Copy the full SHA abdbcf5View commit details -
net: isolate P2P specifics from GenerateWaitSockets()
Move the parts of `CConnman::GenerateWaitSockets()` that are specific to the Bitcoin-P2P protocol to dedicated methods: `ShouldTryToSend()` and `ShouldTryToRecv()`. This brings us one step closer to moving `GenerateWaitSockets()` to the protocol agnostic `SockMan` (which would call `ShouldTry...()` from `CConnman`).
Configuration menu - View commit details
-
Copy full SHA for 6a7b2b6 - Browse repository at this point
Copy the full SHA 6a7b2b6View commit details -
net: isolate P2P specifics from SocketHandlerConnected() and ThreadSo…
…cketHandler() Move some parts of `CConnman::SocketHandlerConnected()` and `CConnman::ThreadSocketHandler()` that are specific to the Bitcoin-P2P protocol to dedicated methods: `EventIOLoopCompletedForNode()` and `EventIOLoopCompletedForAllPeers()`. This brings us one step closer to moving `SocketHandlerConnected()` and `ThreadSocketHandler()` to the protocol agnostic `SockMan` (which would call `EventIOLoopCompleted...()` from `CConnman`).
Configuration menu - View commit details
-
Copy full SHA for 699f2ab - Browse repository at this point
Copy the full SHA 699f2abView commit details -
net: isolate all remaining P2P specifics from SocketHandlerConnected()
Introduce 4 new methods for the interaction between `CConnman` and `SockMan`: * `EventReadyToSend()`: called when there is readiness to send and do the actual sending of data. * `EventGotData()`, `EventGotEOF()`, `EventGotPermanentReadError()`: called when the corresponing recv events occur. These methods contain logic that is specific to the Bitcoin-P2P protocol and move it away from `CConnman::SocketHandlerConnected()` which will become a protocol agnostic method of `SockMan`. Also, move the counting of sent bytes to `CConnman::SocketSendData()` - both callers of that method called `RecordBytesSent()` just after the call, so move it from the callers to inside `CConnman::SocketSendData()`.
Configuration menu - View commit details
-
Copy full SHA for 3102e61 - Browse repository at this point
Copy the full SHA 3102e61View commit details -
net: split CConnman::ConnectNode()
Move the protocol agnostic parts of `CConnman::ConnectNode()` into `SockMan::ConnectAndMakeNodeId()` and leave the Bitcoin-P2P specific stuff in `CConnman::ConnectNode()`. Move the protocol agnostic `CConnman::m_unused_i2p_sessions`, its mutex and `MAX_UNUSED_I2P_SESSIONS_SIZE` to `SockMan`. Move `GetBindAddress()` from `net.cpp` to `sockman.cpp`.
Configuration menu - View commit details
-
Copy full SHA for 9c0bd8c - Browse repository at this point
Copy the full SHA 9c0bd8cView commit details -
net: tweak EventNewConnectionAccepted()
Move `MaybeFlipIPv6toCJDNS()`, which is Bitcoin P2P specific from the callers of `CConnman::EventNewConnectionAccepted()` to inside that method. Move the IsSelectable check, the `TCP_NODELAY` option set and the generation of new node id out of `CConnman::EventNewConnectionAccepted()` because those are protocol agnostic. Move those to a new method `SockMan::NewSockAccepted()` which is called instead of `CConnman::EventNewConnectionAccepted()`.
Configuration menu - View commit details
-
Copy full SHA for 9f8c537 - Browse repository at this point
Copy the full SHA 9f8c537View commit details -
net: move sockets from CNode to SockMan
Move `CNode::m_sock` and `CNode::m_i2p_sam_session` to `SockMan::m_connected`. Also move all the code that handles sockets to `SockMan`. `CNode::CloseSocketDisconnect()` becomes `CConnman::MarkAsDisconnectAndCloseConnection()`. `CConnman::SocketSendData()` is renamed to `CConnman::SendMessagesAsBytes()` and its sockets-touching bits are moved to `SockMan::SendBytes()`. `CConnman::GenerateWaitSockets()` goes to `SockMan::GenerateWaitSockets()`. `CConnman::ThreadSocketHandler()` and `CConnman::SocketHandler()` are combined into `SockMan::ThreadSocketHandler()`. `CConnman::SocketHandlerConnected()` goes to `SockMan::SocketHandlerConnected()`. `CConnman::SocketHandlerListening()` goes to `SockMan::SocketHandlerListening()`.
Configuration menu - View commit details
-
Copy full SHA for be7cfdb - Browse repository at this point
Copy the full SHA be7cfdbView commit details -
net: move-only: improve encapsulation of SockMan
`SockMan` members `AcceptConnection()` `NewSockAccepted()` `GetNewNodeId()` `m_i2p_sam_session` `m_listen private` are now used only by `SockMan`, thus make them private.
Configuration menu - View commit details
-
Copy full SHA for e9e5419 - Browse repository at this point
Copy the full SHA e9e5419View commit details -
Configuration menu - View commit details
-
Copy full SHA for 627861c - Browse repository at this point
Copy the full SHA 627861cView commit details -
Configuration menu - View commit details
-
Copy full SHA for 53b4f7e - Browse repository at this point
Copy the full SHA 53b4f7eView commit details