Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/netwerk/protocol/websocket/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 4 kB image not shown  

Quelle  WebSocketConnectionBase.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set sw=2 ts=8 et ft=cpp : */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef mozilla_net_WebSocketConnectionBase_h
#define mozilla_net_WebSocketConnectionBase_h

// Architecture view:
//    Parent Process                        Socket Process
//  ┌─────────────────┐         IPC    ┌────────────────────────┐
//  │ WebSocketChannel│          ┌─────►WebSocketConnectionChild│
//  └─────────┬───────┘          │     └─────────┬──────────────┘
//            │                  │               │
// ┌──────────▼───────────────┐  │     ┌─────────▼─────────┐
// │ WebSocketConnectionParent├──┘     │WebSocketConnection│
// └──────────────────────────┘        └─────────┬─────────┘
//                                               │
//                                     ┌─────────▼─────────┐
//                                     │ nsSocketTransport │
//                                     └───────────────────┘
// The main reason that we need WebSocketConnectionBase is that we need to
// encapsulate nsSockTransport, nsSocketOutoutStream, and nsSocketInputStream.
// These three objects only live in socket process, so we provide the necessary
// interfaces in WebSocketConnectionBase and WebSocketConnectionListener for
// reading/writing the real socket.
//
// The output path when WebSocketChannel wants to write data to socket:
// - WebSocketConnectionParent::WriteOutputData
// - WebSocketConnectionParent::SendWriteOutputData
// - WebSocketConnectionChild::RecvWriteOutputData
// - WebSocketConnection::WriteOutputData
// - WebSocketConnection::OnOutputStreamReady (writes data to the real socket)
//
// The input path when data is able to read from the socket
// - WebSocketConnection::OnInputStreamReady
// - WebSocketConnectionChild::OnDataReceived
// - WebSocketConnectionChild::SendOnDataReceived
// - WebSocketConnectionParent::RecvOnDataReceived
// - WebSocketChannel::OnDataReceived
//
// The path that WebSocketConnection is constructed.
// - nsHttpChannel::OnStopRequest
// - HttpConnectionMgrShell::CompleteUpgrade
// - HttpConnectionMgrParent::CompleteUpgrade (we store the
//   nsIHttpUpgradeListener in a table and send an id to socket process)
// - HttpConnectionMgrParent::SendStartWebSocketConnection
// - HttpConnectionMgrChild::RecvStartWebSocketConnection (the listener id is
//   saved in WebSocketConnectionChild and will be used when the socket
//   transport is available)
// - WebSocketConnectionChild::Init (an IPC channel between socket thread in
//   socket process and background thread in parent process is created)
// - nsHttpConnectionMgr::CompleteUpgrade
// - WebSocketConnectionChild::OnTransportAvailable (WebSocketConnection is
//   created)
// - WebSocketConnectionChild::SendOnTransportAvailable
// - WebSocketConnectionParent::RecvOnTransportAvailable
// - WebSocketChannel::OnWebSocketConnectionAvailable

class nsITransportSecurityInfo;

namespace mozilla {
namespace net {

class WebSocketConnectionListener;

class WebSocketConnectionBase : public nsISupports {
 public:
  virtual nsresult Init(WebSocketConnectionListener* aListener) = 0;
  virtual void GetIoTarget(nsIEventTarget** aTarget) = 0;
  virtual void Close() = 0;
  virtual nsresult WriteOutputData(const uint8_t* aHdrBuf,
                                   uint32_t aHdrBufLength,
                                   const uint8_t* aPayloadBuf,
                                   uint32_t aPayloadBufLength) = 0;
  virtual nsresult StartReading() = 0;
  virtual void DrainSocketData() = 0;
  virtual nsresult GetSecurityInfo(
      nsITransportSecurityInfo** aSecurityInfo) = 0;
};

}  // namespace net
}  // namespace mozilla

#endif  // mozilla_net_WebSocketConnectionBase_h

100%


¤ Dauer der Verarbeitung: 0.15 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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 ist noch experimentell.