tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WebrtcTCPSocketChild.cpp (2970B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set sw=2 ts=8 et tw=80 ft=cpp : */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "WebrtcTCPSocketChild.h"
      8 
      9 #include "LoadInfo.h"
     10 #include "WebrtcTCPSocketCallback.h"
     11 #include "WebrtcTCPSocketLog.h"
     12 #include "mozilla/net/NeckoChild.h"
     13 #include "mozilla/net/SocketProcessChild.h"
     14 
     15 using namespace mozilla::ipc;
     16 
     17 namespace mozilla::net {
     18 
     19 mozilla::ipc::IPCResult WebrtcTCPSocketChild::RecvOnClose(
     20    const nsresult& aReason) {
     21  LOG(("WebrtcTCPSocketChild::RecvOnClose %p\n", this));
     22 
     23  MOZ_ASSERT(mProxyCallbacks, "webrtc TCP callbacks should be non-null");
     24  mProxyCallbacks->OnClose(aReason);
     25  mProxyCallbacks = nullptr;
     26 
     27  return IPC_OK();
     28 }
     29 
     30 mozilla::ipc::IPCResult WebrtcTCPSocketChild::RecvOnConnected(
     31    const nsACString& aProxyType) {
     32  LOG(("WebrtcTCPSocketChild::RecvOnConnected %p\n", this));
     33 
     34  MOZ_ASSERT(mProxyCallbacks, "webrtc TCP callbacks should be non-null");
     35  mProxyCallbacks->OnConnected(aProxyType);
     36 
     37  return IPC_OK();
     38 }
     39 
     40 mozilla::ipc::IPCResult WebrtcTCPSocketChild::RecvOnRead(
     41    nsTArray<uint8_t>&& aReadData) {
     42  LOG(("WebrtcTCPSocketChild::RecvOnRead %p\n", this));
     43 
     44  MOZ_ASSERT(mProxyCallbacks, "webrtc TCP callbacks should be non-null");
     45  mProxyCallbacks->OnRead(std::move(aReadData));
     46 
     47  return IPC_OK();
     48 }
     49 
     50 WebrtcTCPSocketChild::WebrtcTCPSocketChild(
     51    WebrtcTCPSocketCallback* aProxyCallbacks)
     52    : mProxyCallbacks(aProxyCallbacks) {
     53  MOZ_COUNT_CTOR(WebrtcTCPSocketChild);
     54 
     55  LOG(("WebrtcTCPSocketChild::WebrtcTCPSocketChild %p\n", this));
     56 }
     57 
     58 WebrtcTCPSocketChild::~WebrtcTCPSocketChild() {
     59  MOZ_COUNT_DTOR(WebrtcTCPSocketChild);
     60 
     61  LOG(("WebrtcTCPSocketChild::~WebrtcTCPSocketChild %p\n", this));
     62 }
     63 
     64 void WebrtcTCPSocketChild::AsyncOpen(
     65    const nsACString& aHost, const int& aPort, const nsACString& aLocalAddress,
     66    const int& aLocalPort, bool aUseTls,
     67    const std::shared_ptr<NrSocketProxyConfig>& aProxyConfig) {
     68  LOG(("WebrtcTCPSocketChild::AsyncOpen %p %s:%d\n", this,
     69       PromiseFlatCString(aHost).get(), aPort));
     70 
     71  MOZ_ASSERT(NS_IsMainThread(), "not main thread");
     72 
     73  AddIPDLReference();
     74 
     75  Maybe<net::WebrtcProxyConfig> proxyConfig;
     76  Maybe<dom::TabId> tabId;
     77  if (aProxyConfig) {
     78    proxyConfig = Some(aProxyConfig->GetConfig());
     79    tabId = Some(proxyConfig->tabId());
     80  }
     81 
     82  if (IsNeckoChild()) {
     83    // We're on a content process
     84    gNeckoChild->SendPWebrtcTCPSocketConstructor(this, tabId);
     85  } else if (IsSocketProcessChild()) {
     86    // We're on a socket process
     87    SocketProcessChild::GetSingleton()->SendPWebrtcTCPSocketConstructor(this,
     88                                                                        tabId);
     89  }
     90 
     91  SendAsyncOpen(aHost, aPort, aLocalAddress, aLocalPort, aUseTls, proxyConfig);
     92 }
     93 
     94 }  // namespace mozilla::net