isc_nmhandle_t *client_httphandle;
isc_nmsocket_t *serversocket;
- uint8_t buf[MAX_DNS_MESSAGE_SIZE];
- size_t bufsize;
+ isc_buffer_t *buf;
isc_tlsctx_t *tlsctx;
uint32_t max_concurrent_streams;
session->ngsession = NULL;
}
+ if (session->buf != NULL) {
+ isc_buffer_free(&session->buf);
+ }
+
/* We need an acquire memory barrier here */
(void)isc_refcount_current(&session->references);
}
if ((size_t)readlen < region->length) {
- INSIST(session->bufsize == 0);
- INSIST(region->length - readlen < MAX_DNS_MESSAGE_SIZE);
- memmove(session->buf, region->base, region->length - readlen);
- session->bufsize = region->length - readlen;
+ size_t unread_size = region->length - readlen;
+ if (session->buf == NULL) {
+ isc_buffer_allocate(session->mctx, &session->buf,
+ unread_size);
+ isc_buffer_setautorealloc(session->buf, true);
+ }
+ isc__buffer_putmem(session->buf, region->base + readlen,
+ unread_size);
isc_nm_pauseread(session->handle);
}
/* We have not yet started reading from this handle */
isc_nm_read(session->handle, http_readcb, session);
session->reading = true;
- } else if (session->bufsize > 0) {
+ } else if (session->buf != NULL) {
+ size_t remaining =
+ isc_buffer_remaininglength(session->buf);
/* Leftover data in the buffer, use it */
size_t readlen = nghttp2_session_mem_recv(
- session->ngsession, session->buf,
- session->bufsize);
+ session->ngsession,
+ isc_buffer_current(session->buf), remaining);
- if (readlen == session->bufsize) {
- session->bufsize = 0;
+ if (readlen == remaining) {
+ isc_buffer_free(&session->buf);
} else {
- memmove(session->buf, session->buf + readlen,
- session->bufsize - readlen);
- session->bufsize -= readlen;
+ isc_buffer_add(session->buf, readlen);
}
http_do_bio(session, send_httphandle, send_cb,