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