Index: talk/media/sctp/sctpdataengine.cc |
diff --git a/talk/media/sctp/sctpdataengine.cc b/talk/media/sctp/sctpdataengine.cc |
index 19cdddc4262a3968c951bac17bc83ac501faa2f0..8c8a6a192fa25833c3de66c0587b9ed7ed3bccb3 100644 |
--- a/talk/media/sctp/sctpdataengine.cc |
+++ b/talk/media/sctp/sctpdataengine.cc |
@@ -109,8 +109,6 @@ |
// take off 80 bytes for DTLS/TURN/TCP/IP overhead. |
static const size_t kSctpMtu = 1200; |
-// The size of the SCTP association send buffer. 256kB, the usrsctp default. |
-static const int kSendBufferSize = 262144; |
enum { |
MSG_SCTPINBOUNDPACKET = 1, // MessageData is SctpInboundPacket |
MSG_SCTPOUTBOUNDPACKET = 2, // MessageData is rtc:Buffer |
@@ -179,11 +177,11 @@ |
} |
// Log the packet in text2pcap format, if log level is at LS_VERBOSE. |
-static void VerboseLogPacket(void *data, size_t length, int direction) { |
+static void VerboseLogPacket(void *addr, size_t length, int direction) { |
if (LOG_CHECK_LEVEL(LS_VERBOSE) && length > 0) { |
char *dump_buf; |
if ((dump_buf = usrsctp_dumppacket( |
- data, length, direction)) != NULL) { |
+ addr, length, direction)) != NULL) { |
LOG(LS_VERBOSE) << dump_buf; |
usrsctp_freedumpbuffer(dump_buf); |
} |
@@ -246,10 +244,6 @@ |
// Set the initial value of the static SCTP Data Engines reference count. |
int SctpDataEngine::usrsctp_engines_count = 0; |
-// All the channels created by this engine, used for callbacks from |
-// usrsctplib that only contain socket pointers. Channels are removed when |
-// SignalDestroyed is fired. |
-std::vector<SctpDataMediaChannel*> SctpDataEngine::channels_; |
SctpDataEngine::SctpDataEngine() { |
if (usrsctp_engines_count == 0) { |
@@ -263,11 +257,6 @@ |
// TODO(ldixon): Consider turning this on/off. |
usrsctp_sysctl_set_sctp_ecn_enable(0); |
- |
- int send_size = usrsctp_sysctl_get_sctp_sendspace(); |
- if (send_size != kSendBufferSize) { |
- LOG(LS_ERROR) << "Got different send size than expected: " << send_size; |
- } |
// TODO(ldixon): Consider turning this on/off. |
// This is not needed right now (we don't do dynamic address changes): |
@@ -323,47 +312,8 @@ |
if (data_channel_type != DCT_SCTP) { |
return NULL; |
} |
- SctpDataMediaChannel *channel = new SctpDataMediaChannel( |
- rtc::Thread::Current()); |
- channels_.push_back(channel); |
- channel->SignalDestroyed.connect(this, &SctpDataEngine::OnChannelDestroyed); |
- return channel; |
-} |
- |
-// static |
-SctpDataMediaChannel* SctpDataEngine::GetChannelFromSocket( |
- struct socket* sock) { |
- for (auto p:channels_) { |
- if (p->socket() == sock) { |
- return p; |
- } |
- } |
- return 0; |
-} |
- |
- |
-void SctpDataEngine::OnChannelDestroyed(SctpDataMediaChannel* channel) { |
- auto it = std::find(channels_.begin(), channels_.end(), channel); |
- if (it == channels_.end()) { |
- LOG(LS_ERROR) << "OnChannelDestroyed: the channel wasn't registered."; |
- return; |
- } |
- channels_.erase(it); |
-} |
- |
-// static |
-int SctpDataEngine::SendThresholdCallback(struct socket* sock, |
- uint32_t sb_free) { |
- SctpDataMediaChannel *channel = GetChannelFromSocket(sock); |
- if (!channel) { |
- LOG(LS_ERROR) << "SendThresholdCallback: Failed to get channel for socket " |
- << sock; |
- return 0; |
- } |
- channel->SignalReadyToSend(true); |
- return 0; |
-} |
- |
+ return new SctpDataMediaChannel(rtc::Thread::Current()); |
+} |
SctpDataMediaChannel::SctpDataMediaChannel(rtc::Thread* thread) |
: worker_thread_(thread), |
@@ -377,7 +327,6 @@ |
SctpDataMediaChannel::~SctpDataMediaChannel() { |
CloseSctpSocket(); |
- SignalDestroyed(this); |
} |
sockaddr_conn SctpDataMediaChannel::GetSctpSockAddr(int port) { |
@@ -398,16 +347,8 @@ |
<< "->Ignoring attempt to re-create existing socket."; |
return false; |
} |
- |
- // If kSendBufferSize isn't reflective of reality, we log an error, but we |
- // still have to do something reasonable here. Look up what the buffer's |
- // real size is and set our threshold to something reasonable. |
- const static int send_threshold = usrsctp_sysctl_get_sctp_sendspace() / 2; |
- |
sock_ = usrsctp_socket(AF_CONN, SOCK_STREAM, IPPROTO_SCTP, |
- cricket::OnSctpInboundPacket, |
- &SctpDataEngine::SendThresholdCallback, |
- send_threshold, this); |
+ cricket::OnSctpInboundPacket, NULL, 0, this); |
if (!sock_) { |
LOG_ERRNO(LS_ERROR) << debug_name_ << "Failed to create SCTP socket."; |
return false; |
@@ -452,8 +393,7 @@ |
} |
// Disable MTU discovery |
- struct sctp_paddrparams params; |
- memset(¶ms, 0, sizeof(params)); |
+ struct sctp_paddrparams params = {{0}}; |
params.spp_assoc_id = 0; |
params.spp_flags = SPP_PMTUD_DISABLE; |
params.spp_pathmtu = kSctpMtu; |
@@ -964,17 +904,10 @@ |
void SctpDataMediaChannel::OnPacketFromSctpToNetwork( |
rtc::Buffer* buffer) { |
- // usrsctp seems to interpret the MTU we give it strangely -- it seems to |
- // give us back packets bigger than that MTU, if only by a fixed amount. |
- // This is that amount that we've observed. |
- const int kSctpOverhead = 76; |
- if (buffer->size() > (kSctpOverhead + kSctpMtu)) { |
+ if (buffer->size() > kSctpMtu) { |
LOG(LS_ERROR) << debug_name_ << "->OnPacketFromSctpToNetwork(...): " |
<< "SCTP seems to have made a packet that is bigger " |
- << "than its official MTU: " << buffer->size() |
- << " vs max of " << kSctpMtu |
- << " even after adding " << kSctpOverhead |
- << " extra SCTP overhead"; |
+ "than its official MTU."; |
} |
MediaChannel::SendPacket(buffer); |
} |