summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/rtc_base/socket_adapters.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
commit8dd16259287f58f9273002717ec4d27e97127719 (patch)
tree3863e62a53829a84037444beab3abd4ed9dfc7d0 /third_party/libwebrtc/rtc_base/socket_adapters.cc
parentReleasing progress-linux version 126.0.1-1~progress7.99u1. (diff)
downloadfirefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz
firefox-8dd16259287f58f9273002717ec4d27e97127719.zip
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/rtc_base/socket_adapters.cc')
-rw-r--r--third_party/libwebrtc/rtc_base/socket_adapters.cc194
1 files changed, 0 insertions, 194 deletions
diff --git a/third_party/libwebrtc/rtc_base/socket_adapters.cc b/third_party/libwebrtc/rtc_base/socket_adapters.cc
index a1eee5bd67..f6fa182f5d 100644
--- a/third_party/libwebrtc/rtc_base/socket_adapters.cc
+++ b/third_party/libwebrtc/rtc_base/socket_adapters.cc
@@ -469,198 +469,4 @@ void AsyncHttpsProxySocket::Error(int error) {
SignalCloseEvent(this, error);
}
-///////////////////////////////////////////////////////////////////////////////
-
-AsyncSocksProxySocket::AsyncSocksProxySocket(Socket* socket,
- const SocketAddress& proxy,
- absl::string_view username,
- const CryptString& password)
- : BufferedReadAdapter(socket, 1024),
- state_(SS_ERROR),
- proxy_(proxy),
- user_(username),
- pass_(password) {}
-
-AsyncSocksProxySocket::~AsyncSocksProxySocket() = default;
-
-int AsyncSocksProxySocket::Connect(const SocketAddress& addr) {
- int ret;
- dest_ = addr;
- state_ = SS_INIT;
- BufferInput(true);
- ret = BufferedReadAdapter::Connect(proxy_);
- // TODO: Set state_ appropriately if Connect fails.
- return ret;
-}
-
-SocketAddress AsyncSocksProxySocket::GetRemoteAddress() const {
- return dest_;
-}
-
-int AsyncSocksProxySocket::Close() {
- state_ = SS_ERROR;
- dest_.Clear();
- return BufferedReadAdapter::Close();
-}
-
-Socket::ConnState AsyncSocksProxySocket::GetState() const {
- if (state_ < SS_TUNNEL) {
- return CS_CONNECTING;
- } else if (state_ == SS_TUNNEL) {
- return CS_CONNECTED;
- } else {
- return CS_CLOSED;
- }
-}
-
-void AsyncSocksProxySocket::OnConnectEvent(Socket* socket) {
- SendHello();
-}
-
-void AsyncSocksProxySocket::ProcessInput(char* data, size_t* len) {
- RTC_DCHECK(state_ < SS_TUNNEL);
-
- ByteBufferReader response(
- rtc::MakeArrayView(reinterpret_cast<uint8_t*>(data), *len));
-
- if (state_ == SS_HELLO) {
- uint8_t ver, method;
- if (!response.ReadUInt8(&ver) || !response.ReadUInt8(&method))
- return;
-
- if (ver != 5) {
- Error(0);
- return;
- }
-
- if (method == 0) {
- SendConnect();
- } else if (method == 2) {
- SendAuth();
- } else {
- Error(0);
- return;
- }
- } else if (state_ == SS_AUTH) {
- uint8_t ver, status;
- if (!response.ReadUInt8(&ver) || !response.ReadUInt8(&status))
- return;
-
- if ((ver != 1) || (status != 0)) {
- Error(SOCKET_EACCES);
- return;
- }
-
- SendConnect();
- } else if (state_ == SS_CONNECT) {
- uint8_t ver, rep, rsv, atyp;
- if (!response.ReadUInt8(&ver) || !response.ReadUInt8(&rep) ||
- !response.ReadUInt8(&rsv) || !response.ReadUInt8(&atyp))
- return;
-
- if ((ver != 5) || (rep != 0)) {
- Error(0);
- return;
- }
-
- uint16_t port;
- if (atyp == 1) {
- uint32_t addr;
- if (!response.ReadUInt32(&addr) || !response.ReadUInt16(&port))
- return;
- RTC_LOG(LS_VERBOSE) << "Bound on " << addr << ":" << port;
- } else if (atyp == 3) {
- uint8_t length;
- std::string addr;
- if (!response.ReadUInt8(&length) || !response.ReadString(&addr, length) ||
- !response.ReadUInt16(&port))
- return;
- RTC_LOG(LS_VERBOSE) << "Bound on " << addr << ":" << port;
- } else if (atyp == 4) {
- std::string addr;
- if (!response.ReadString(&addr, 16) || !response.ReadUInt16(&port))
- return;
- RTC_LOG(LS_VERBOSE) << "Bound on <IPV6>:" << port;
- } else {
- Error(0);
- return;
- }
-
- state_ = SS_TUNNEL;
- }
-
- // Consume parsed data
- *len = response.Length();
- memmove(data, response.Data(), *len);
-
- if (state_ != SS_TUNNEL)
- return;
-
- bool remainder = (*len > 0);
- BufferInput(false);
- SignalConnectEvent(this);
-
- // FIX: if SignalConnect causes the socket to be destroyed, we are in trouble
- if (remainder)
- SignalReadEvent(this); // TODO: signal this??
-}
-
-void AsyncSocksProxySocket::SendHello() {
- ByteBufferWriter request;
- request.WriteUInt8(5); // Socks Version
- if (user_.empty()) {
- request.WriteUInt8(1); // Authentication Mechanisms
- request.WriteUInt8(0); // No authentication
- } else {
- request.WriteUInt8(2); // Authentication Mechanisms
- request.WriteUInt8(0); // No authentication
- request.WriteUInt8(2); // Username/Password
- }
- DirectSend(request.Data(), request.Length());
- state_ = SS_HELLO;
-}
-
-void AsyncSocksProxySocket::SendAuth() {
- ByteBufferWriterT<ZeroOnFreeBuffer<char>> request;
- request.WriteUInt8(1); // Negotiation Version
- request.WriteUInt8(static_cast<uint8_t>(user_.size()));
- request.WriteString(user_); // Username
- request.WriteUInt8(static_cast<uint8_t>(pass_.GetLength()));
- size_t len = pass_.GetLength() + 1;
- char* sensitive = new char[len];
- pass_.CopyTo(sensitive, true);
- request.WriteString(std::string(sensitive, pass_.GetLength())); // Password
- ExplicitZeroMemory(sensitive, len);
- delete[] sensitive;
- DirectSend(request.Data(), request.Length());
- state_ = SS_AUTH;
-}
-
-void AsyncSocksProxySocket::SendConnect() {
- ByteBufferWriter request;
- request.WriteUInt8(5); // Socks Version
- request.WriteUInt8(1); // CONNECT
- request.WriteUInt8(0); // Reserved
- if (dest_.IsUnresolvedIP()) {
- std::string hostname = dest_.hostname();
- request.WriteUInt8(3); // DOMAINNAME
- request.WriteUInt8(static_cast<uint8_t>(hostname.size()));
- request.WriteString(hostname); // Destination Hostname
- } else {
- request.WriteUInt8(1); // IPV4
- request.WriteUInt32(dest_.ip()); // Destination IP
- }
- request.WriteUInt16(dest_.port()); // Destination Port
- DirectSend(request.Data(), request.Length());
- state_ = SS_CONNECT;
-}
-
-void AsyncSocksProxySocket::Error(int error) {
- state_ = SS_ERROR;
- BufferInput(false);
- Close();
- SetError(SOCKET_EACCES);
- SignalCloseEvent(this, error);
-}
-
} // namespace rtc