((code) >= MIN_SUCCESSFUL_HTTP_STATUS && \
(code) <= MAX_SUCCESSFUL_HTTP_STATUS)
+#define INITIAL_DNS_MESSAGE_BUFFER_SIZE (512)
+
typedef struct isc_nm_http_response_status {
size_t code;
size_t content_length;
size_t authoritylen;
char *path;
- uint8_t rbuf[MAX_DNS_MESSAGE_SIZE];
- size_t rbufsize;
+ isc_buffer_t *rbuf;
size_t pathlen;
int32_t stream_id;
stream->up.field_data[ISC_UF_QUERY].len);
}
+ isc_buffer_allocate(mctx, &stream->rbuf,
+ INITIAL_DNS_MESSAGE_BUFFER_SIZE);
+ isc_buffer_setautorealloc(stream->rbuf, true);
+
ISC_LIST_PREPEND(sock->h2.session->cstreams, stream, link);
*streamp = stream;
link);
}
isc__nmsocket_detach(&stream->httpsock);
+
+ isc_buffer_free(&stream->rbuf);
isc_mem_put(mctx, stream, sizeof(http_cstream_t));
}
http_cstream_t *cstream = find_http_cstream(stream_id, session);
if (cstream != NULL) {
- size_t new_rbufsize = cstream->rbufsize + len;
+ size_t new_rbufsize = len;
+ if (cstream->rbuf != NULL) {
+ new_rbufsize += isc_buffer_usedlength(cstream->rbuf);
+ }
if (new_rbufsize <= MAX_DNS_MESSAGE_SIZE &&
new_rbufsize <= cstream->response_status.content_length)
{
- memmove(cstream->rbuf + cstream->rbufsize, data, len);
- cstream->rbufsize = new_rbufsize;
+ isc_buffer_putmem(cstream->rbuf, data, len);
} else {
return (NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE);
}
call_unlink_cstream_readcb(http_cstream_t *cstream,
isc_nm_http_session_t *session,
isc_result_t result) {
+ isc_region_t read_data;
REQUIRE(VALID_HTTP2_SESSION(session));
REQUIRE(cstream != NULL);
ISC_LIST_UNLINK(session->cstreams, cstream, link);
INSIST(VALID_NMHANDLE(session->client_httphandle));
- cstream->read_cb(session->client_httphandle, result,
- &(isc_region_t){ cstream->rbuf, cstream->rbufsize },
+ isc_buffer_usedregion(cstream->rbuf, &read_data);
+ cstream->read_cb(session->client_httphandle, result, &read_data,
cstream->read_cbarg);
put_http_cstream(session->mctx, cstream);
}
* in such a case.
*/
if (cstream->read_cb != NULL) {
+ isc_region_t read_data;
+ isc_buffer_usedregion(cstream->rbuf, &read_data);
cstream->read_cb(session->client_httphandle, result,
- &(isc_region_t){ cstream->rbuf,
- cstream->rbufsize },
- cstream->read_cbarg);
+ &read_data, cstream->read_cbarg);
}
if (result != ISC_R_TIMEDOUT || cstream->read_cb == NULL ||