diff options
| author | 2023-01-16 21:16:16 +0000 | |
|---|---|---|
| committer | 2023-01-16 21:16:16 +0000 | |
| commit | 34de733223e2772f716765ec4e931d36ebedd714 (patch) | |
| tree | d42963866def0643dbc3edfd9f6c48e7652889d8 /src | |
| parent | Add support for SCTP listeners. (diff) | |
Add support for linking servers over SCTP sockets.
Diffstat (limited to 'src')
| -rw-r--r-- | src/inspsocket.cpp | 8 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/link.h | 1 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/treesocket1.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/utils.cpp | 8 |
4 files changed, 14 insertions, 5 deletions
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp index eb348e7b3..f4d123739 100644 --- a/src/inspsocket.cpp +++ b/src/inspsocket.cpp @@ -53,9 +53,9 @@ BufferedSocket::BufferedSocket(int newfd) SocketEngine::AddFd(this, FD_WANT_FAST_READ | FD_WANT_EDGE_WRITE); } -void BufferedSocket::DoConnect(const irc::sockets::sockaddrs& dest, const irc::sockets::sockaddrs& bind, unsigned long maxtime) +void BufferedSocket::DoConnect(const irc::sockets::sockaddrs& dest, const irc::sockets::sockaddrs& bind, unsigned long maxtime, int protocol) { - BufferedSocketError err = BeginConnect(dest, bind, maxtime); + BufferedSocketError err = BeginConnect(dest, bind, maxtime, protocol); if (err != I_ERR_NONE) { state = I_ERROR; @@ -64,10 +64,10 @@ void BufferedSocket::DoConnect(const irc::sockets::sockaddrs& dest, const irc::s } } -BufferedSocketError BufferedSocket::BeginConnect(const irc::sockets::sockaddrs& dest, const irc::sockets::sockaddrs& bind, unsigned long timeout) +BufferedSocketError BufferedSocket::BeginConnect(const irc::sockets::sockaddrs& dest, const irc::sockets::sockaddrs& bind, unsigned long timeout, int protocol) { if (!HasFd()) - SetFd(socket(dest.family(), SOCK_STREAM, 0)); + SetFd(socket(dest.family(), SOCK_STREAM, protocol)); if (!HasFd()) return I_ERR_SOCKET; diff --git a/src/modules/m_spanningtree/link.h b/src/modules/m_spanningtree/link.h index 49e86bf3e..4f15f829d 100644 --- a/src/modules/m_spanningtree/link.h +++ b/src/modules/m_spanningtree/link.h @@ -42,6 +42,7 @@ public: unsigned long Timeout; std::string Bind; bool Hidden; + int Protocol = 0; Link(const std::shared_ptr<ConfigTag>& Tag) : tag(Tag) { diff --git a/src/modules/m_spanningtree/treesocket1.cpp b/src/modules/m_spanningtree/treesocket1.cpp index 37de1adc8..2da154642 100644 --- a/src/modules/m_spanningtree/treesocket1.cpp +++ b/src/modules/m_spanningtree/treesocket1.cpp @@ -66,7 +66,7 @@ TreeSocket::TreeSocket(const std::shared_ptr<Link>& link, const std::shared_ptr< } } - DoConnect(dest, bind, link->Timeout); + DoConnect(dest, bind, link->Timeout, link->Protocol); Utils->timeoutlist[this] = std::pair<std::string, unsigned int>(linkID, link->Timeout); SendCapabilities(1); } diff --git a/src/modules/m_spanningtree/utils.cpp b/src/modules/m_spanningtree/utils.cpp index f05c587f6..42a331ab6 100644 --- a/src/modules/m_spanningtree/utils.cpp +++ b/src/modules/m_spanningtree/utils.cpp @@ -263,6 +263,14 @@ void SpanningTreeUtilities::ReadConfiguration() { L->IPAddr = tag->getString("ipaddr"); L->Port = static_cast<in_port_t>(tag->getUInt("port", 0, 0, 65535)); + if (tag->getBool("sctp")) + { +#ifdef IPPROTO_SCTP + L->Protocol = IPPROTO_SCTP; +#else + throw ModuleException((Module*)Creator, "Unable to use SCTP listener as this platform does not support SCTP!"); +#endif + } } else { |
