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