зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1584751 - Only open DataChannelConnections that aren't already open; r=bwc
Differential Revision: https://phabricator.services.mozilla.com/D47691 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
5115905e34
Коммит
890b535549
|
@ -645,31 +645,62 @@ uint64_t DataChannelConnection::GetMaxMessageSize() { return mMaxMessageSize; }
|
|||
#ifdef MOZ_PEERCONNECTION
|
||||
|
||||
bool DataChannelConnection::ConnectToTransport(const std::string& aTransportId,
|
||||
bool aClient, uint16_t localport,
|
||||
uint16_t remoteport) {
|
||||
{
|
||||
MutexAutoLock lock(mLock);
|
||||
const bool aClient,
|
||||
const uint16_t aLocalPort,
|
||||
const uint16_t aRemotePort) {
|
||||
MutexAutoLock lock(mLock);
|
||||
|
||||
DC_DEBUG(("Connect DTLS local %u, remote %u", localport, remoteport));
|
||||
MOZ_ASSERT(mMasterSocket,
|
||||
"SCTP wasn't initialized before ConnectToTransport!");
|
||||
static const auto paramString =
|
||||
[](const std::string& tId, const Maybe<bool>& client,
|
||||
const uint16_t localPort, const uint16_t remotePort) -> std::string {
|
||||
std::ostringstream stream;
|
||||
stream << "Transport ID: '" << tId << "', Role: '"
|
||||
<< (client ? (client.value() ? "client" : "server") : "")
|
||||
<< "', Local Port: '" << localPort << "', Remote Port: '"
|
||||
<< remotePort << "'";
|
||||
return stream.str();
|
||||
};
|
||||
|
||||
MOZ_ASSERT(mMasterSocket,
|
||||
"SCTP wasn't initialized before ConnectToTransport!");
|
||||
if (NS_WARN_IF(aTransportId.empty())) {
|
||||
return false;
|
||||
const auto params =
|
||||
paramString(aTransportId, Some(aClient), aLocalPort, aRemotePort);
|
||||
DC_DEBUG(("ConnectToTransport connecting DTLS transport with parameters: %s",
|
||||
params.c_str()));
|
||||
|
||||
const auto currentReadyState = GetReadyState();
|
||||
if (currentReadyState == OPEN) {
|
||||
if (aTransportId == mTransportId && mAllocateEven.isSome() &&
|
||||
mAllocateEven.value() == aClient && mLocalPort == aLocalPort &&
|
||||
mRemotePort == aRemotePort) {
|
||||
DC_WARN(
|
||||
("Skipping attempt to connect to an already OPEN transport with "
|
||||
"identical parameters."));
|
||||
return true;
|
||||
}
|
||||
DC_WARN(
|
||||
("Attempting to connect to an already OPEN transport, because "
|
||||
"different parameters were provided."));
|
||||
DC_WARN(("Original transport parameters: %s",
|
||||
paramString(mTransportId, mAllocateEven, mLocalPort, aRemotePort)
|
||||
.c_str()));
|
||||
DC_WARN(("New transport parameters: %s", params.c_str()));
|
||||
}
|
||||
if (NS_WARN_IF(aTransportId.empty())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mLocalPort = localport;
|
||||
mRemotePort = remoteport;
|
||||
SetReadyState(CONNECTING);
|
||||
mAllocateEven = Some(aClient);
|
||||
mLocalPort = aLocalPort;
|
||||
mRemotePort = aRemotePort;
|
||||
SetReadyState(CONNECTING);
|
||||
mAllocateEven = Some(aClient);
|
||||
|
||||
// Could be faster. Probably doesn't matter.
|
||||
while (auto channel = mChannels.Get(INVALID_STREAM)) {
|
||||
mChannels.Remove(channel);
|
||||
channel->mStream = FindFreeStream();
|
||||
if (channel->mStream != INVALID_STREAM) {
|
||||
mChannels.Insert(channel);
|
||||
}
|
||||
// Could be faster. Probably doesn't matter.
|
||||
while (auto channel = mChannels.Get(INVALID_STREAM)) {
|
||||
mChannels.Remove(channel);
|
||||
channel->mStream = FindFreeStream();
|
||||
if (channel->mStream != INVALID_STREAM) {
|
||||
mChannels.Insert(channel);
|
||||
}
|
||||
}
|
||||
RUN_ON_THREAD(mSTS,
|
||||
|
|
|
@ -157,8 +157,9 @@ class DataChannelConnection final : public net::NeckoTargetHolder
|
|||
#endif
|
||||
|
||||
#ifdef SCTP_DTLS_SUPPORTED
|
||||
bool ConnectToTransport(const std::string& aTransportId, bool aClient,
|
||||
uint16_t localport, uint16_t remoteport);
|
||||
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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче