From 73f50e2679525e7df8734c875a3c12732565f953 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Mon, 6 Jan 2025 15:20:09 -0800 Subject: http: The big HTTP API refactoring of January 2025. This represents a major change in the HTTP code base, consisting of a complete revamp of the HTTP API. The changes here are too numerous to mention, but the end result should be a vastly simpler API for both server and client applications. Many needless allocations were removed by providing fixed buffers for various parameters and headers when possible. A few bugs were fixed. Most especially we have fixed some bugs around very large URIs and headers, and we have also addressed conformance bugs to more closely conform to RFCs 9110 and 9112. As part of this work, the APIs for WebSockets changed slightly as well. In particular the properties available for accessing headers have changed. There is still documentation conversion work to do, and additional functionality (such as proper support for chunked transfers), but this is a big step in the right direction. --- demo/http_client/http_client.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'demo/http_client/http_client.c') diff --git a/demo/http_client/http_client.c b/demo/http_client/http_client.c index a18725a9..8f7db96d 100644 --- a/demo/http_client/http_client.c +++ b/demo/http_client/http_client.c @@ -1,5 +1,5 @@ // -// Copyright 2018 Staysail Systems, Inc. +// Copyright 2025 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // // This software is supplied under the terms of the MIT License, a @@ -33,8 +33,8 @@ // % ./http_client http://httpbin.org/ip // +#include #include -#include #include #include @@ -49,11 +49,9 @@ int main(int argc, char **argv) { nng_http_client *client; - nng_http_conn *conn; + nng_http *conn; nng_url *url; nng_aio *aio; - nng_http_req *req; - nng_http_res *res; const char *hdr; int rv; int len; @@ -66,12 +64,12 @@ main(int argc, char **argv) } if (((rv = nng_init(NULL)) != 0) || + ((rv = nng_aio_alloc(&aio, NULL, NULL)) != 0) || ((rv = nng_url_parse(&url, argv[1])) != 0) || ((rv = nng_http_client_alloc(&client, url)) != 0) || - ((rv = nng_http_req_alloc(&req, url)) != 0) || - ((rv = nng_http_res_alloc(&res)) != 0) || ((rv = nng_aio_alloc(&aio, NULL, NULL)) != 0)) { fatal(rv); + return 1; } // Start connection process... @@ -90,7 +88,7 @@ main(int argc, char **argv) // The Host: header is already set up too. // Send the request, and wait for that to finish. - nng_http_conn_write_req(conn, req, aio); + nng_http_write_request(conn, aio); nng_aio_wait(aio); if ((rv = nng_aio_result(aio)) != 0) { @@ -98,22 +96,21 @@ main(int argc, char **argv) } // Read a response. - nng_http_conn_read_res(conn, res, aio); + nng_http_read_response(conn, aio); nng_aio_wait(aio); if ((rv = nng_aio_result(aio)) != 0) { fatal(rv); } - if (nng_http_res_get_status(res) != NNG_HTTP_STATUS_OK) { + if (nng_http_get_status(conn) != NNG_HTTP_STATUS_OK) { fprintf(stderr, "HTTP Server Responded: %d %s\n", - nng_http_res_get_status(res), - nng_http_res_get_reason(res)); + nng_http_get_status(conn), nng_http_get_reason(conn)); } // This only supports regular transfer encoding (no Chunked-Encoding, // and a Content-Length header is required.) - if ((hdr = nng_http_res_get_header(res, "Content-Length")) == NULL) { + if ((hdr = nng_http_get_header(conn, "Content-Length")) == NULL) { fprintf(stderr, "Missing Content-Length header.\n"); exit(1); } @@ -134,7 +131,7 @@ main(int argc, char **argv) nng_aio_set_iov(aio, 1, &iov); // Now attempt to receive the data. - nng_http_conn_read_all(conn, aio); + nng_http_read_all(conn, aio); // Wait for it to complete. nng_aio_wait(aio); -- cgit v1.2.3-70-g09d2