Skip to content

Commit

Permalink
Bug 1862773: Remove ifdefs (and dead code) r=jesup,bwc
Browse files Browse the repository at this point in the history
ALLOW_DIRECT_SCTP_LISTEN_CONNECT is never set; The code isn't used and was
mentioned for cleanup in https://bugzilla.mozilla.org/show_bug.cgi?id=855623#c34

SCTP_DTLS_SUPPORTED can be removed; DTLS is mandatory and this is always set. If
it wouldn't, data channels wouldn't be operational

Differential Revision: https://phabricator.services.mozilla.com/D192633
  • Loading branch information
boivie committed Feb 27, 2024
1 parent 29ba507 commit 24c4cf8
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 187 deletions.
156 changes: 0 additions & 156 deletions netwerk/sctp/datachannel/DataChannel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,6 @@ class DataChannelRegistry {
DeinitUsrSctp();
}

#ifdef SCTP_DTLS_SUPPORTED
static int SctpDtlsOutput(void* addr, void* buffer, size_t length,
uint8_t tos, uint8_t set_df) {
uintptr_t id = reinterpret_cast<uintptr_t>(addr);
Expand All @@ -278,7 +277,6 @@ class DataChannelRegistry {
}
return connection->SctpDtlsOutput(addr, buffer, length, tos, set_df);
}
#endif

void InitUsrSctp() {
#ifndef MOZ_PEERCONNECTION
Expand Down Expand Up @@ -1083,160 +1081,6 @@ int DataChannelConnection::SctpDtlsOutput(void* addr, void* buffer,
}
#endif

#ifdef ALLOW_DIRECT_SCTP_LISTEN_CONNECT
// listen for incoming associations
// Blocks! - Don't call this from main thread!

bool DataChannelConnection::Listen(unsigned short port) {
struct sockaddr_in addr = {};
socklen_t addr_len;

NS_WARNING_ASSERTION(!NS_IsMainThread(),
"Blocks, do not call from main thread!!!");

/* Acting as the 'server' */
# ifdef HAVE_SIN_LEN
addr.sin_len = sizeof(struct sockaddr_in);
# endif
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
DC_DEBUG(("Waiting for connections on port %u", ntohs(addr.sin_port)));
{
MutexAutoLock lock(mLock);
SetState(DataChannelConnectionState::Connecting);
}
if (usrsctp_bind(mMasterSocket, reinterpret_cast<struct sockaddr*>(&addr),
sizeof(struct sockaddr_in)) < 0) {
DC_ERROR(("***Failed userspace_bind"));
return false;
}
if (usrsctp_listen(mMasterSocket, 1) < 0) {
DC_ERROR(("***Failed userspace_listen"));
return false;
}

DC_DEBUG(("Accepting connection"));
addr_len = 0;
if ((mSocket = usrsctp_accept(mMasterSocket, nullptr, &addr_len)) ==
nullptr) {
DC_ERROR(("***Failed accept"));
return false;
}

{
MutexAutoLock lock(mLock);
SetState(DataChannelConnectionState::Open);
}

struct linger l;
l.l_onoff = 1;
l.l_linger = 0;
if (usrsctp_setsockopt(mSocket, SOL_SOCKET, SO_LINGER, (const void*)&l,
(socklen_t)sizeof(struct linger)) < 0) {
DC_WARN(("Couldn't set SO_LINGER on SCTP socket"));
}

// Notify Connection open
// XXX We need to make sure connection sticks around until the message is
// delivered
DC_DEBUG(("%s: sending ON_CONNECTION for %p", __FUNCTION__, this));
Dispatch(do_AddRef(new DataChannelOnMessageAvailable(
DataChannelOnMessageAvailable::EventType::OnConnection, this,
(DataChannel*)nullptr)));
return true;
}

// Blocks! - Don't call this from main thread!
bool DataChannelConnection::Connect(const char* addr, unsigned short port) {
struct sockaddr_in addr4 = {};
struct sockaddr_in6 addr6 = {};

NS_WARNING_ASSERTION(!NS_IsMainThread(),
"Blocks, do not call from main thread!!!");

/* Acting as the connector */
DC_DEBUG(("Connecting to %s, port %u", addr, port));
# ifdef HAVE_SIN_LEN
addr4.sin_len = sizeof(struct sockaddr_in);
# endif
# ifdef HAVE_SIN6_LEN
addr6.sin6_len = sizeof(struct sockaddr_in6);
# endif
addr4.sin_family = AF_INET;
addr6.sin6_family = AF_INET6;
addr4.sin_port = htons(port);
addr6.sin6_port = htons(port);
{
MutexAutoLock lock(mLock);
SetState(DataChannelConnectionState::Connecting);
}
# if !defined(__Userspace_os_Windows)
if (inet_pton(AF_INET6, addr, &addr6.sin6_addr) == 1) {
if (usrsctp_connect(mMasterSocket,
reinterpret_cast<struct sockaddr*>(&addr6),
sizeof(struct sockaddr_in6)) < 0) {
DC_ERROR(("*** Failed userspace_connect"));
return false;
}
} else if (inet_pton(AF_INET, addr, &addr4.sin_addr) == 1) {
if (usrsctp_connect(mMasterSocket,
reinterpret_cast<struct sockaddr*>(&addr4),
sizeof(struct sockaddr_in)) < 0) {
DC_ERROR(("*** Failed userspace_connect"));
return false;
}
} else {
DC_ERROR(("*** Illegal destination address."));
}
# else
{
struct sockaddr_storage ss;
int sslen = sizeof(ss);

if (!WSAStringToAddressA(const_cast<char*>(addr), AF_INET6, nullptr,
(struct sockaddr*)&ss, &sslen)) {
addr6.sin6_addr =
(reinterpret_cast<struct sockaddr_in6*>(&ss))->sin6_addr;
if (usrsctp_connect(mMasterSocket,
reinterpret_cast<struct sockaddr*>(&addr6),
sizeof(struct sockaddr_in6)) < 0) {
DC_ERROR(("*** Failed userspace_connect"));
return false;
}
} else if (!WSAStringToAddressA(const_cast<char*>(addr), AF_INET, nullptr,
(struct sockaddr*)&ss, &sslen)) {
addr4.sin_addr = (reinterpret_cast<struct sockaddr_in*>(&ss))->sin_addr;
if (usrsctp_connect(mMasterSocket,
reinterpret_cast<struct sockaddr*>(&addr4),
sizeof(struct sockaddr_in)) < 0) {
DC_ERROR(("*** Failed userspace_connect"));
return false;
}
} else {
DC_ERROR(("*** Illegal destination address."));
}
}
# endif

mSocket = mMasterSocket;

DC_DEBUG(("connect() succeeded! Entering connected mode"));
{
MutexAutoLock lock(mLock);
SetState(DataChannelConnectionState::Open);
}
// Notify Connection open
// XXX We need to make sure connection sticks around until the message is
// delivered
DC_DEBUG(("%s: sending ON_CONNECTION for %p", __FUNCTION__, this));
Dispatch(do_AddRef(new DataChannelOnMessageAvailable(
DataChannelOnMessageAvailable::EventType::OnConnection, this,
(DataChannel*)nullptr)));
return true;
}
#endif

DataChannel* DataChannelConnection::FindChannelByStream(uint16_t stream) {
return mChannels.Get(stream).get();
}
Expand Down
35 changes: 4 additions & 31 deletions netwerk/sctp/datachannel/DataChannel.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@
#ifndef NETWERK_SCTP_DATACHANNEL_DATACHANNEL_H_
#define NETWERK_SCTP_DATACHANNEL_DATACHANNEL_H_

#ifdef MOZ_WEBRTC_SIGNALING
# define SCTP_DTLS_SUPPORTED 1
#endif

#include <memory>
#include <string>
#include <vector>
Expand All @@ -30,10 +26,8 @@
#include "mozilla/net/NeckoTargetHolder.h"
#include "DataChannelLog.h"

#ifdef SCTP_DTLS_SUPPORTED
# include "transport/sigslot.h"
# include "transport/transportlayer.h" // For TransportLayer::State
#endif
#include "transport/sigslot.h"
#include "transport/transportlayer.h" // For TransportLayer::State

#ifndef EALREADY
# define EALREADY WSAEALREADY
Expand Down Expand Up @@ -120,12 +114,8 @@ class QueuedDataMessage {
};

// One per PeerConnection
class DataChannelConnection final : public net::NeckoTargetHolder
#ifdef SCTP_DTLS_SUPPORTED
,
public sigslot::has_slots<>
#endif
{
class DataChannelConnection final : public net::NeckoTargetHolder,
public sigslot::has_slots<> {
friend class DataChannel;
friend class DataChannelOnMessageAvailable;
friend class DataChannelConnectRunnable;
Expand Down Expand Up @@ -182,23 +172,14 @@ class DataChannelConnection final : public net::NeckoTargetHolder

void AppendStatsToReport(const UniquePtr<dom::RTCStatsCollection>& aReport,
const DOMHighResTimeStamp aTimestamp) const;
#ifdef ALLOW_DIRECT_SCTP_LISTEN_CONNECT
// These block; they require something to decide on listener/connector
// (though you can do simultaneous Connect()). Do not call these from
// the main thread!
bool Listen(unsigned short port);
bool Connect(const char* addr, unsigned short port);
#endif

#ifdef SCTP_DTLS_SUPPORTED
bool ConnectToTransport(const std::string& aTransportId, const bool aClient,
const uint16_t aLocalPort,
const uint16_t aRemotePort);
void TransportStateChange(const std::string& aTransportId,
TransportLayer::State aState);
void CompleteConnect();
void SetSignals(const std::string& aTransportId);
#endif

[[nodiscard]] already_AddRefed<DataChannel> Open(
const nsACString& label, const nsACString& protocol,
Expand Down Expand Up @@ -235,10 +216,8 @@ class DataChannelConnection final : public net::NeckoTargetHolder

bool SendDeferredMessages() MOZ_REQUIRES(mLock);

#ifdef SCTP_DTLS_SUPPORTED
int SctpDtlsOutput(void* addr, void* buffer, size_t length, uint8_t tos,
uint8_t set_df);
#endif

bool InShutdown() const {
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
Expand Down Expand Up @@ -296,12 +275,10 @@ class DataChannelConnection final : public net::NeckoTargetHolder
static int OnThresholdEvent(struct socket* sock, uint32_t sb_free,
void* ulp_info);

#ifdef SCTP_DTLS_SUPPORTED
static void DTLSConnectThread(void* data);
void SendPacket(std::unique_ptr<MediaPacket>&& packet);
void SctpDtlsInput(const std::string& aTransportId,
const MediaPacket& packet);
#endif
DataChannel* FindChannelByStream(uint16_t stream) MOZ_REQUIRES(mLock);
uint16_t FindFreeStream() const MOZ_REQUIRES(mLock);
bool RequestMoreStreams(int32_t aNeeded = 16) MOZ_REQUIRES(mLock);
Expand Down Expand Up @@ -373,15 +350,13 @@ class DataChannelConnection final : public net::NeckoTargetHolder
void HandleNotification(const union sctp_notification* notif, size_t n)
MOZ_REQUIRES(mLock);

#ifdef SCTP_DTLS_SUPPORTED
bool IsSTSThread() const {
bool on = false;
if (mSTS) {
mSTS->IsOnCurrentThread(&on);
}
return on;
}
#endif

mutable Mutex mLock;
// Avoid cycles with PeerConnectionImpl
Expand Down Expand Up @@ -420,12 +395,10 @@ class DataChannelConnection final : public net::NeckoTargetHolder
DataChannelConnectionState mState MOZ_GUARDED_BY(mLock) =
DataChannelConnectionState::Closed;

#ifdef SCTP_DTLS_SUPPORTED
std::string mTransportId;
bool mConnectedToTransportHandler = false;
RefPtr<MediaTransportHandler> mTransportHandler;
nsCOMPtr<nsIEventTarget> mSTS;
#endif
uint16_t mLocalPort = 0; // Accessed from connect thread
uint16_t mRemotePort = 0;

Expand Down

0 comments on commit 24c4cf8

Please sign in to comment.