1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 
5 #ifndef NeqoHttp3Conn_h__
6 #define NeqoHttp3Conn_h__
7 
8 #include "mozilla/net/neqo_glue_ffi_generated.h"
9 
10 namespace mozilla {
11 namespace net {
12 
13 class NeqoHttp3Conn final {
14  public:
Init(const nsACString & aOrigin,const nsACString & aAlpn,const nsACString & aLocalAddr,const nsACString & aRemoteAddr,uint32_t aMaxTableSize,uint16_t aMaxBlockedStreams,const nsACString & aQlogDir,NeqoHttp3Conn ** aConn)15   static nsresult Init(const nsACString& aOrigin, const nsACString& aAlpn,
16                        const nsACString& aLocalAddr,
17                        const nsACString& aRemoteAddr, uint32_t aMaxTableSize,
18                        uint16_t aMaxBlockedStreams, const nsACString& aQlogDir,
19                        NeqoHttp3Conn** aConn) {
20     return neqo_http3conn_new(&aOrigin, &aAlpn, &aLocalAddr, &aRemoteAddr,
21                               aMaxTableSize, aMaxBlockedStreams, &aQlogDir,
22                               (const mozilla::net::NeqoHttp3Conn**)aConn);
23   }
24 
Close(uint64_t aError)25   void Close(uint64_t aError) { neqo_http3conn_close(this, aError); }
26 
GetSecInfo(NeqoSecretInfo * aSecInfo)27   nsresult GetSecInfo(NeqoSecretInfo* aSecInfo) {
28     return neqo_http3conn_tls_info(this, aSecInfo);
29   }
30 
PeerCertificateInfo(NeqoCertificateInfo * aCertInfo)31   nsresult PeerCertificateInfo(NeqoCertificateInfo* aCertInfo) {
32     return neqo_http3conn_peer_certificate_info(this, aCertInfo);
33   }
34 
PeerAuthenticated(PRErrorCode aError)35   void PeerAuthenticated(PRErrorCode aError) {
36     neqo_http3conn_authenticated(this, aError);
37   }
38 
ProcessInput(const nsACString * aRemoteAddr,const nsTArray<uint8_t> & aPacket)39   nsresult ProcessInput(const nsACString* aRemoteAddr,
40                         const nsTArray<uint8_t>& aPacket) {
41     return neqo_http3conn_process_input(this, aRemoteAddr, &aPacket);
42   }
43 
ProcessOutput(nsACString * aRemoteAddr,uint16_t * aPort,nsTArray<uint8_t> & aData,uint64_t * aTimeout)44   bool ProcessOutput(nsACString* aRemoteAddr, uint16_t* aPort,
45                      nsTArray<uint8_t>& aData, uint64_t* aTimeout) {
46     aData.TruncateLength(0);
47     return neqo_http3conn_process_output(this, aRemoteAddr, aPort, &aData,
48                                          aTimeout);
49   }
50 
GetEvent(Http3Event * aEvent,nsTArray<uint8_t> & aData)51   nsresult GetEvent(Http3Event* aEvent, nsTArray<uint8_t>& aData) {
52     return neqo_http3conn_event(this, aEvent, &aData);
53   }
54 
Fetch(const nsACString & aMethod,const nsACString & aScheme,const nsACString & aHost,const nsACString & aPath,const nsACString & aHeaders,uint64_t * aStreamId)55   nsresult Fetch(const nsACString& aMethod, const nsACString& aScheme,
56                  const nsACString& aHost, const nsACString& aPath,
57                  const nsACString& aHeaders, uint64_t* aStreamId) {
58     return neqo_http3conn_fetch(this, &aMethod, &aScheme, &aHost, &aPath,
59                                 &aHeaders, aStreamId);
60   }
61 
SendRequestBody(uint64_t aStreamId,const uint8_t * aBuf,uint32_t aCount,uint32_t * aCountRead)62   nsresult SendRequestBody(uint64_t aStreamId, const uint8_t* aBuf,
63                            uint32_t aCount, uint32_t* aCountRead) {
64     return neqo_htttp3conn_send_request_body(this, aStreamId, aBuf, aCount,
65                                              aCountRead);
66   }
67 
68   // This closes only the sending side of a stream.
CloseStream(uint64_t aStreamId)69   nsresult CloseStream(uint64_t aStreamId) {
70     return neqo_http3conn_close_stream(this, aStreamId);
71   }
72 
ReadResponseData(uint64_t aStreamId,uint8_t * aBuf,uint32_t aLen,uint32_t * aRead,bool * aFin)73   nsresult ReadResponseData(uint64_t aStreamId, uint8_t* aBuf, uint32_t aLen,
74                             uint32_t* aRead, bool* aFin) {
75     return neqo_http3conn_read_response_data(this, aStreamId, aBuf, aLen, aRead,
76                                              aFin);
77   }
78 
ResetStream(uint64_t aStreamId,uint64_t aError)79   void ResetStream(uint64_t aStreamId, uint64_t aError) {
80     neqo_http3conn_reset_stream(this, aStreamId, aError);
81   }
82 
SetResumptionToken(nsTArray<uint8_t> & aToken)83   void SetResumptionToken(nsTArray<uint8_t>& aToken) {
84     neqo_http3conn_set_resumption_token(this, &aToken);
85   }
86 
IsZeroRtt()87   bool IsZeroRtt() { return neqo_http3conn_is_zero_rtt(this); }
88 
AddRef()89   nsrefcnt AddRef() { return neqo_http3conn_addref(this); }
Release()90   nsrefcnt Release() { return neqo_http3conn_release(this); }
91 
GetStats(Http3Stats * aStats)92   void GetStats(Http3Stats* aStats) {
93     return neqo_http3conn_get_stats(this, aStats);
94   }
95 
96  private:
97   NeqoHttp3Conn() = delete;
98   ~NeqoHttp3Conn() = delete;
99   NeqoHttp3Conn(const NeqoHttp3Conn&) = delete;
100   NeqoHttp3Conn& operator=(const NeqoHttp3Conn&) = delete;
101 };
102 
103 }  // namespace net
104 }  // namespace mozilla
105 
106 #endif
107