Bug 1526591 - Remove devtools.inspector.shapesHighlighter.enabled pref. r=rcaliman
[gecko.git] / netwerk / base / TLSServerSocket.h
blob0de33bbff143cab1683c100107e2b49f82884c06
1 /* vim:set ts=2 sw=2 et cindent: */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef mozilla_net_TLSServerSocket_h
7 #define mozilla_net_TLSServerSocket_h
9 #include "nsAutoPtr.h"
10 #include "nsITLSServerSocket.h"
11 #include "nsServerSocket.h"
12 #include "nsString.h"
13 #include "mozilla/Mutex.h"
14 #include "seccomon.h"
16 namespace mozilla {
17 namespace net {
19 class TLSServerSocket final : public nsServerSocket, public nsITLSServerSocket {
20 public:
21 NS_DECL_ISUPPORTS_INHERITED
22 NS_FORWARD_NSISERVERSOCKET(nsServerSocket::)
23 NS_DECL_NSITLSSERVERSOCKET
25 // Override methods from nsServerSocket
26 virtual void CreateClientTransport(PRFileDesc* clientFD,
27 const NetAddr& clientAddr) override;
28 virtual nsresult SetSocketDefaults() override;
29 virtual nsresult OnSocketListen() override;
31 TLSServerSocket();
33 private:
34 virtual ~TLSServerSocket() = default;
36 static SECStatus AuthCertificateHook(void* arg, PRFileDesc* fd,
37 PRBool checksig, PRBool isServer);
39 nsCOMPtr<nsIX509Cert> mServerCert;
42 class TLSServerConnectionInfo : public nsITLSServerConnectionInfo,
43 public nsITLSClientStatus {
44 friend class TLSServerSocket;
46 public:
47 NS_DECL_THREADSAFE_ISUPPORTS
48 NS_DECL_NSITLSSERVERCONNECTIONINFO
49 NS_DECL_NSITLSCLIENTSTATUS
51 TLSServerConnectionInfo();
53 private:
54 virtual ~TLSServerConnectionInfo();
56 static void HandshakeCallback(PRFileDesc* aFD, void* aArg);
57 nsresult HandshakeCallback(PRFileDesc* aFD);
59 RefPtr<TLSServerSocket> mServerSocket;
60 // Weak ref to the transport, to avoid cycles since the transport holds a
61 // reference to the TLSServerConnectionInfo object. This is not handed out to
62 // anyone, and is only used in HandshakeCallback to close the transport in
63 // case of an error. After this, it's set to nullptr.
64 nsISocketTransport* mTransport;
65 nsCOMPtr<nsIX509Cert> mPeerCert;
66 int16_t mTlsVersionUsed;
67 nsCString mCipherName;
68 uint32_t mKeyLength;
69 uint32_t mMacLength;
70 // lock protects access to mSecurityObserver
71 mozilla::Mutex mLock;
72 nsCOMPtr<nsITLSServerSecurityObserver> mSecurityObserver;
75 } // namespace net
76 } // namespace mozilla
78 #endif // mozilla_net_TLSServerSocket_h