forked from mirrors/gecko-dev
Bug 1862773: Remove ifdefs (and dead code) r=jesup,bwc
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
This commit is contained in:
parent
29ba507d7e
commit
24c4cf85f5
2 changed files with 4 additions and 187 deletions
|
|
@ -268,7 +268,6 @@ class DataChannelRegistry {
|
||||||
DeinitUsrSctp();
|
DeinitUsrSctp();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SCTP_DTLS_SUPPORTED
|
|
||||||
static int SctpDtlsOutput(void* addr, void* buffer, size_t length,
|
static int SctpDtlsOutput(void* addr, void* buffer, size_t length,
|
||||||
uint8_t tos, uint8_t set_df) {
|
uint8_t tos, uint8_t set_df) {
|
||||||
uintptr_t id = reinterpret_cast<uintptr_t>(addr);
|
uintptr_t id = reinterpret_cast<uintptr_t>(addr);
|
||||||
|
|
@ -278,7 +277,6 @@ class DataChannelRegistry {
|
||||||
}
|
}
|
||||||
return connection->SctpDtlsOutput(addr, buffer, length, tos, set_df);
|
return connection->SctpDtlsOutput(addr, buffer, length, tos, set_df);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void InitUsrSctp() {
|
void InitUsrSctp() {
|
||||||
#ifndef MOZ_PEERCONNECTION
|
#ifndef MOZ_PEERCONNECTION
|
||||||
|
|
@ -1083,160 +1081,6 @@ int DataChannelConnection::SctpDtlsOutput(void* addr, void* buffer,
|
||||||
}
|
}
|
||||||
#endif
|
#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) {
|
DataChannel* DataChannelConnection::FindChannelByStream(uint16_t stream) {
|
||||||
return mChannels.Get(stream).get();
|
return mChannels.Get(stream).get();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,6 @@
|
||||||
#ifndef NETWERK_SCTP_DATACHANNEL_DATACHANNEL_H_
|
#ifndef NETWERK_SCTP_DATACHANNEL_DATACHANNEL_H_
|
||||||
#define NETWERK_SCTP_DATACHANNEL_DATACHANNEL_H_
|
#define NETWERK_SCTP_DATACHANNEL_DATACHANNEL_H_
|
||||||
|
|
||||||
#ifdef MOZ_WEBRTC_SIGNALING
|
|
||||||
# define SCTP_DTLS_SUPPORTED 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
@ -30,10 +26,8 @@
|
||||||
#include "mozilla/net/NeckoTargetHolder.h"
|
#include "mozilla/net/NeckoTargetHolder.h"
|
||||||
#include "DataChannelLog.h"
|
#include "DataChannelLog.h"
|
||||||
|
|
||||||
#ifdef SCTP_DTLS_SUPPORTED
|
#include "transport/sigslot.h"
|
||||||
# include "transport/sigslot.h"
|
#include "transport/transportlayer.h" // For TransportLayer::State
|
||||||
# include "transport/transportlayer.h" // For TransportLayer::State
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef EALREADY
|
#ifndef EALREADY
|
||||||
# define EALREADY WSAEALREADY
|
# define EALREADY WSAEALREADY
|
||||||
|
|
@ -120,12 +114,8 @@ class QueuedDataMessage {
|
||||||
};
|
};
|
||||||
|
|
||||||
// One per PeerConnection
|
// One per PeerConnection
|
||||||
class DataChannelConnection final : public net::NeckoTargetHolder
|
class DataChannelConnection final : public net::NeckoTargetHolder,
|
||||||
#ifdef SCTP_DTLS_SUPPORTED
|
public sigslot::has_slots<> {
|
||||||
,
|
|
||||||
public sigslot::has_slots<>
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
friend class DataChannel;
|
friend class DataChannel;
|
||||||
friend class DataChannelOnMessageAvailable;
|
friend class DataChannelOnMessageAvailable;
|
||||||
friend class DataChannelConnectRunnable;
|
friend class DataChannelConnectRunnable;
|
||||||
|
|
@ -182,15 +172,7 @@ class DataChannelConnection final : public net::NeckoTargetHolder
|
||||||
|
|
||||||
void AppendStatsToReport(const UniquePtr<dom::RTCStatsCollection>& aReport,
|
void AppendStatsToReport(const UniquePtr<dom::RTCStatsCollection>& aReport,
|
||||||
const DOMHighResTimeStamp aTimestamp) const;
|
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,
|
bool ConnectToTransport(const std::string& aTransportId, const bool aClient,
|
||||||
const uint16_t aLocalPort,
|
const uint16_t aLocalPort,
|
||||||
const uint16_t aRemotePort);
|
const uint16_t aRemotePort);
|
||||||
|
|
@ -198,7 +180,6 @@ class DataChannelConnection final : public net::NeckoTargetHolder
|
||||||
TransportLayer::State aState);
|
TransportLayer::State aState);
|
||||||
void CompleteConnect();
|
void CompleteConnect();
|
||||||
void SetSignals(const std::string& aTransportId);
|
void SetSignals(const std::string& aTransportId);
|
||||||
#endif
|
|
||||||
|
|
||||||
[[nodiscard]] already_AddRefed<DataChannel> Open(
|
[[nodiscard]] already_AddRefed<DataChannel> Open(
|
||||||
const nsACString& label, const nsACString& protocol,
|
const nsACString& label, const nsACString& protocol,
|
||||||
|
|
@ -235,10 +216,8 @@ class DataChannelConnection final : public net::NeckoTargetHolder
|
||||||
|
|
||||||
bool SendDeferredMessages() MOZ_REQUIRES(mLock);
|
bool SendDeferredMessages() MOZ_REQUIRES(mLock);
|
||||||
|
|
||||||
#ifdef SCTP_DTLS_SUPPORTED
|
|
||||||
int SctpDtlsOutput(void* addr, void* buffer, size_t length, uint8_t tos,
|
int SctpDtlsOutput(void* addr, void* buffer, size_t length, uint8_t tos,
|
||||||
uint8_t set_df);
|
uint8_t set_df);
|
||||||
#endif
|
|
||||||
|
|
||||||
bool InShutdown() const {
|
bool InShutdown() const {
|
||||||
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
|
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
|
||||||
|
|
@ -296,12 +275,10 @@ class DataChannelConnection final : public net::NeckoTargetHolder
|
||||||
static int OnThresholdEvent(struct socket* sock, uint32_t sb_free,
|
static int OnThresholdEvent(struct socket* sock, uint32_t sb_free,
|
||||||
void* ulp_info);
|
void* ulp_info);
|
||||||
|
|
||||||
#ifdef SCTP_DTLS_SUPPORTED
|
|
||||||
static void DTLSConnectThread(void* data);
|
static void DTLSConnectThread(void* data);
|
||||||
void SendPacket(std::unique_ptr<MediaPacket>&& packet);
|
void SendPacket(std::unique_ptr<MediaPacket>&& packet);
|
||||||
void SctpDtlsInput(const std::string& aTransportId,
|
void SctpDtlsInput(const std::string& aTransportId,
|
||||||
const MediaPacket& packet);
|
const MediaPacket& packet);
|
||||||
#endif
|
|
||||||
DataChannel* FindChannelByStream(uint16_t stream) MOZ_REQUIRES(mLock);
|
DataChannel* FindChannelByStream(uint16_t stream) MOZ_REQUIRES(mLock);
|
||||||
uint16_t FindFreeStream() const MOZ_REQUIRES(mLock);
|
uint16_t FindFreeStream() const MOZ_REQUIRES(mLock);
|
||||||
bool RequestMoreStreams(int32_t aNeeded = 16) MOZ_REQUIRES(mLock);
|
bool RequestMoreStreams(int32_t aNeeded = 16) MOZ_REQUIRES(mLock);
|
||||||
|
|
@ -373,7 +350,6 @@ class DataChannelConnection final : public net::NeckoTargetHolder
|
||||||
void HandleNotification(const union sctp_notification* notif, size_t n)
|
void HandleNotification(const union sctp_notification* notif, size_t n)
|
||||||
MOZ_REQUIRES(mLock);
|
MOZ_REQUIRES(mLock);
|
||||||
|
|
||||||
#ifdef SCTP_DTLS_SUPPORTED
|
|
||||||
bool IsSTSThread() const {
|
bool IsSTSThread() const {
|
||||||
bool on = false;
|
bool on = false;
|
||||||
if (mSTS) {
|
if (mSTS) {
|
||||||
|
|
@ -381,7 +357,6 @@ class DataChannelConnection final : public net::NeckoTargetHolder
|
||||||
}
|
}
|
||||||
return on;
|
return on;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
mutable Mutex mLock;
|
mutable Mutex mLock;
|
||||||
// Avoid cycles with PeerConnectionImpl
|
// Avoid cycles with PeerConnectionImpl
|
||||||
|
|
@ -420,12 +395,10 @@ class DataChannelConnection final : public net::NeckoTargetHolder
|
||||||
DataChannelConnectionState mState MOZ_GUARDED_BY(mLock) =
|
DataChannelConnectionState mState MOZ_GUARDED_BY(mLock) =
|
||||||
DataChannelConnectionState::Closed;
|
DataChannelConnectionState::Closed;
|
||||||
|
|
||||||
#ifdef SCTP_DTLS_SUPPORTED
|
|
||||||
std::string mTransportId;
|
std::string mTransportId;
|
||||||
bool mConnectedToTransportHandler = false;
|
bool mConnectedToTransportHandler = false;
|
||||||
RefPtr<MediaTransportHandler> mTransportHandler;
|
RefPtr<MediaTransportHandler> mTransportHandler;
|
||||||
nsCOMPtr<nsIEventTarget> mSTS;
|
nsCOMPtr<nsIEventTarget> mSTS;
|
||||||
#endif
|
|
||||||
uint16_t mLocalPort = 0; // Accessed from connect thread
|
uint16_t mLocalPort = 0; // Accessed from connect thread
|
||||||
uint16_t mRemotePort = 0;
|
uint16_t mRemotePort = 0;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue