python: Use public HPACK API
This commit is contained in:
parent
1039dc59ea
commit
e517ff6534
|
@ -247,12 +247,28 @@ cdef extern from 'nghttp2/nghttp2.h':
|
||||||
|
|
||||||
const char* nghttp2_strerror(int lib_error_code)
|
const char* nghttp2_strerror(int lib_error_code)
|
||||||
|
|
||||||
|
int nghttp2_hd_deflate_new(nghttp2_hd_deflater **deflater_ptr,
|
||||||
|
size_t deflate_hd_table_bufsize_max)
|
||||||
|
|
||||||
|
void nghttp2_hd_deflate_del(nghttp2_hd_deflater *deflater)
|
||||||
|
|
||||||
void nghttp2_hd_deflate_set_no_refset(nghttp2_hd_deflater *deflater,
|
void nghttp2_hd_deflate_set_no_refset(nghttp2_hd_deflater *deflater,
|
||||||
uint8_t no_refset)
|
uint8_t no_refset)
|
||||||
|
|
||||||
int nghttp2_hd_deflate_change_table_size(nghttp2_hd_deflater *deflater,
|
int nghttp2_hd_deflate_change_table_size(nghttp2_hd_deflater *deflater,
|
||||||
size_t hd_table_bufsize_max)
|
size_t hd_table_bufsize_max)
|
||||||
|
|
||||||
|
ssize_t nghttp2_hd_deflate_hd(nghttp2_hd_deflater *deflater,
|
||||||
|
uint8_t *buf, size_t buflen,
|
||||||
|
const nghttp2_nv *nva, size_t nvlen)
|
||||||
|
|
||||||
|
size_t nghttp2_hd_deflate_bound(nghttp2_hd_deflater *deflater,
|
||||||
|
const nghttp2_nv *nva, size_t nvlen)
|
||||||
|
|
||||||
|
int nghttp2_hd_inflate_new(nghttp2_hd_inflater **inflater_ptr)
|
||||||
|
|
||||||
|
void nghttp2_hd_inflate_del(nghttp2_hd_inflater *inflater)
|
||||||
|
|
||||||
int nghttp2_hd_inflate_change_table_size(nghttp2_hd_inflater *inflater,
|
int nghttp2_hd_inflate_change_table_size(nghttp2_hd_inflater *inflater,
|
||||||
size_t hd_table_bufsize_max)
|
size_t hd_table_bufsize_max)
|
||||||
|
|
||||||
|
@ -298,19 +314,6 @@ cdef extern from 'nghttp2_hd.h':
|
||||||
ctypedef struct nghttp2_hd_inflater:
|
ctypedef struct nghttp2_hd_inflater:
|
||||||
nghttp2_hd_context ctx
|
nghttp2_hd_context ctx
|
||||||
|
|
||||||
int nghttp2_hd_deflate_init2(nghttp2_hd_deflater *deflater,
|
|
||||||
size_t deflate_hd_table_bufsize_max)
|
|
||||||
|
|
||||||
int nghttp2_hd_inflate_init(nghttp2_hd_inflater *inflater)
|
|
||||||
|
|
||||||
void nghttp2_hd_deflate_free(nghttp2_hd_deflater *deflater)
|
|
||||||
|
|
||||||
void nghttp2_hd_inflate_free(nghttp2_hd_inflater *inflater)
|
|
||||||
|
|
||||||
int nghttp2_hd_deflate_hd_bufs(nghttp2_hd_deflater *deflater,
|
|
||||||
nghttp2_bufs *bufs,
|
|
||||||
const nghttp2_nv *nva, size_t nvlen)
|
|
||||||
|
|
||||||
nghttp2_hd_entry* nghttp2_hd_table_get(nghttp2_hd_context *context,
|
nghttp2_hd_entry* nghttp2_hd_table_get(nghttp2_hd_context *context,
|
||||||
size_t index)
|
size_t index)
|
||||||
|
|
||||||
|
|
|
@ -82,16 +82,16 @@ cdef class HDDeflater:
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
cdef cnghttp2.nghttp2_hd_deflater _deflater
|
cdef cnghttp2.nghttp2_hd_deflater *_deflater
|
||||||
|
|
||||||
def __cinit__(self, hd_table_bufsize_max = DEFLATE_MAX_HEADER_TABLE_SIZE):
|
def __cinit__(self, hd_table_bufsize_max = DEFLATE_MAX_HEADER_TABLE_SIZE):
|
||||||
rv = cnghttp2.nghttp2_hd_deflate_init2(&self._deflater,
|
rv = cnghttp2.nghttp2_hd_deflate_new(&self._deflater,
|
||||||
hd_table_bufsize_max)
|
hd_table_bufsize_max)
|
||||||
if rv != 0:
|
if rv != 0:
|
||||||
raise Exception(_strerror(rv))
|
raise Exception(_strerror(rv))
|
||||||
|
|
||||||
def __dealloc__(self):
|
def __dealloc__(self):
|
||||||
cnghttp2.nghttp2_hd_deflate_free(&self._deflater)
|
cnghttp2.nghttp2_hd_deflate_del(self._deflater)
|
||||||
|
|
||||||
def deflate(self, headers):
|
def deflate(self, headers):
|
||||||
'''Compresses the |headers|. The |headers| must be sequence of tuple
|
'''Compresses the |headers|. The |headers| must be sequence of tuple
|
||||||
|
@ -115,26 +115,22 @@ cdef class HDDeflater:
|
||||||
nvap[0].flags = cnghttp2.NGHTTP2_NV_FLAG_NONE
|
nvap[0].flags = cnghttp2.NGHTTP2_NV_FLAG_NONE
|
||||||
nvap += 1
|
nvap += 1
|
||||||
|
|
||||||
cdef cnghttp2.nghttp2_bufs bufs
|
|
||||||
cdef size_t outcap = 0
|
cdef size_t outcap = 0
|
||||||
cdef ssize_t rv
|
cdef ssize_t rv
|
||||||
cdef uint8_t *out
|
cdef uint8_t *out
|
||||||
|
cdef size_t outlen
|
||||||
|
|
||||||
cnghttp2.nghttp2_bufs_init(&bufs, 4096, 16)
|
outlen = cnghttp2.nghttp2_hd_deflate_bound(self._deflater,
|
||||||
|
nva, len(headers))
|
||||||
|
|
||||||
rv = cnghttp2.nghttp2_hd_deflate_hd_bufs(&self._deflater, &bufs,
|
out = <uint8_t*>malloc(outlen)
|
||||||
|
|
||||||
|
rv = cnghttp2.nghttp2_hd_deflate_hd(self._deflater, out, outlen,
|
||||||
nva, len(headers))
|
nva, len(headers))
|
||||||
free(nva)
|
free(nva)
|
||||||
|
|
||||||
if rv < 0:
|
if rv < 0:
|
||||||
cnghttp2.nghttp2_bufs_free(&bufs);
|
free(out)
|
||||||
|
|
||||||
raise Exception(_strerror(rv))
|
|
||||||
|
|
||||||
rv = cnghttp2.nghttp2_bufs_remove(&bufs, &out)
|
|
||||||
|
|
||||||
if rv < 0:
|
|
||||||
cnghttp2.nghttp2_bufs_free(&bufs);
|
|
||||||
|
|
||||||
raise Exception(_strerror(rv))
|
raise Exception(_strerror(rv))
|
||||||
|
|
||||||
|
@ -143,8 +139,7 @@ cdef class HDDeflater:
|
||||||
try:
|
try:
|
||||||
res = out[:rv]
|
res = out[:rv]
|
||||||
finally:
|
finally:
|
||||||
cnghttp2.nghttp2_free(out)
|
free(out)
|
||||||
cnghttp2.nghttp2_bufs_free(&bufs)
|
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -155,7 +150,7 @@ cdef class HDDeflater:
|
||||||
reference set.
|
reference set.
|
||||||
|
|
||||||
'''
|
'''
|
||||||
cnghttp2.nghttp2_hd_deflate_set_no_refset(&self._deflater, no_refset)
|
cnghttp2.nghttp2_hd_deflate_set_no_refset(self._deflater, no_refset)
|
||||||
|
|
||||||
def change_table_size(self, hd_table_bufsize_max):
|
def change_table_size(self, hd_table_bufsize_max):
|
||||||
'''Changes header table size to |hd_table_bufsize_max| byte.
|
'''Changes header table size to |hd_table_bufsize_max| byte.
|
||||||
|
@ -164,7 +159,7 @@ cdef class HDDeflater:
|
||||||
|
|
||||||
'''
|
'''
|
||||||
cdef int rv
|
cdef int rv
|
||||||
rv = cnghttp2.nghttp2_hd_deflate_change_table_size(&self._deflater,
|
rv = cnghttp2.nghttp2_hd_deflate_change_table_size(self._deflater,
|
||||||
hd_table_bufsize_max)
|
hd_table_bufsize_max)
|
||||||
if rv != 0:
|
if rv != 0:
|
||||||
raise Exception(_strerror(rv))
|
raise Exception(_strerror(rv))
|
||||||
|
@ -185,15 +180,15 @@ cdef class HDInflater:
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
cdef cnghttp2.nghttp2_hd_inflater _inflater
|
cdef cnghttp2.nghttp2_hd_inflater *_inflater
|
||||||
|
|
||||||
def __cinit__(self):
|
def __cinit__(self):
|
||||||
rv = cnghttp2.nghttp2_hd_inflate_init(&self._inflater)
|
rv = cnghttp2.nghttp2_hd_inflate_new(&self._inflater)
|
||||||
if rv != 0:
|
if rv != 0:
|
||||||
raise Exception(_strerror(rv))
|
raise Exception(_strerror(rv))
|
||||||
|
|
||||||
def __dealloc__(self):
|
def __dealloc__(self):
|
||||||
cnghttp2.nghttp2_hd_inflate_free(&self._inflater)
|
cnghttp2.nghttp2_hd_inflate_del(self._inflater)
|
||||||
|
|
||||||
def inflate(self, data):
|
def inflate(self, data):
|
||||||
'''Decompresses the compressed header block |data|. The |data| must be
|
'''Decompresses the compressed header block |data|. The |data| must be
|
||||||
|
@ -208,7 +203,7 @@ cdef class HDInflater:
|
||||||
res = []
|
res = []
|
||||||
while True:
|
while True:
|
||||||
inflate_flags = 0
|
inflate_flags = 0
|
||||||
rv = cnghttp2.nghttp2_hd_inflate_hd(&self._inflater, &nv,
|
rv = cnghttp2.nghttp2_hd_inflate_hd(self._inflater, &nv,
|
||||||
&inflate_flags,
|
&inflate_flags,
|
||||||
buf, buflen, 1)
|
buf, buflen, 1)
|
||||||
if rv < 0:
|
if rv < 0:
|
||||||
|
@ -221,7 +216,7 @@ cdef class HDInflater:
|
||||||
if inflate_flags & cnghttp2.NGHTTP2_HD_INFLATE_FINAL:
|
if inflate_flags & cnghttp2.NGHTTP2_HD_INFLATE_FINAL:
|
||||||
break
|
break
|
||||||
|
|
||||||
cnghttp2.nghttp2_hd_inflate_end_headers(&self._inflater)
|
cnghttp2.nghttp2_hd_inflate_end_headers(self._inflater)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def change_table_size(self, hd_table_bufsize_max):
|
def change_table_size(self, hd_table_bufsize_max):
|
||||||
|
@ -231,7 +226,7 @@ cdef class HDInflater:
|
||||||
|
|
||||||
'''
|
'''
|
||||||
cdef int rv
|
cdef int rv
|
||||||
rv = cnghttp2.nghttp2_hd_inflate_change_table_size(&self._inflater,
|
rv = cnghttp2.nghttp2_hd_inflate_change_table_size(self._inflater,
|
||||||
hd_table_bufsize_max)
|
hd_table_bufsize_max)
|
||||||
if rv != 0:
|
if rv != 0:
|
||||||
raise Exception(_strerror(rv))
|
raise Exception(_strerror(rv))
|
||||||
|
|
Loading…
Reference in New Issue