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
10 #include "nsITLSServerSocket.h"
11 #include "nsServerSocket.h"
13 #include "mozilla/Mutex.h"
19 class TLSServerSocket final
: public nsServerSocket
, public nsITLSServerSocket
{
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
;
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
;
47 NS_DECL_THREADSAFE_ISUPPORTS
48 NS_DECL_NSITLSSERVERCONNECTIONINFO
49 NS_DECL_NSITLSCLIENTSTATUS
51 TLSServerConnectionInfo();
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
;
70 // lock protects access to mSecurityObserver
72 nsCOMPtr
<nsITLSServerSecurityObserver
> mSecurityObserver
;
76 } // namespace mozilla
78 #endif // mozilla_net_TLSServerSocket_h