/* * Copyright 2004 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree.
*/
void StunServer::OnPacket(rtc::AsyncPacketSocket* socket, const rtc::ReceivedPacket& packet) {
RTC_DCHECK_RUN_ON(&sequence_checker_); // Parse the STUN message; eat any messages that fail to parse.
rtc::ByteBufferReader bbuf(packet.payload());
StunMessage msg; if (!msg.Read(&bbuf)) { return;
}
// TODO(?): If unknown non-optional (<= 0x7fff) attributes are found, // send a // 420 "Unknown Attribute" response.
// Send the message to the appropriate handler function. switch (msg.type()) { case STUN_BINDING_REQUEST:
OnBindingRequest(&msg, packet.source_address()); break;
default:
SendErrorResponse(msg, packet.source_address(), 600, "Operation Not Supported");
}
}
// Tell the user the address that we received their message from.
std::unique_ptr<StunAddressAttribute> mapped_addr; if (message->IsLegacy()) {
mapped_addr = StunAttribute::CreateAddress(STUN_ATTR_MAPPED_ADDRESS);
} else {
mapped_addr = StunAttribute::CreateXorAddress(STUN_ATTR_XOR_MAPPED_ADDRESS);
}
mapped_addr->SetAddress(remote_addr);
response->AddAttribute(std::move(mapped_addr));
}
} // namespace cricket
Messung V0.5
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.