aboutsummaryrefslogtreecommitdiff
path: root/demo
diff options
context:
space:
mode:
Diffstat (limited to 'demo')
-rw-r--r--demo/http_client/http_client.c25
-rw-r--r--demo/reqrep/reqrep.c1
-rw-r--r--demo/rest/server.c63
3 files changed, 32 insertions, 57 deletions
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. <info@staysail.tech>
+// Copyright 2025 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
//
// This software is supplied under the terms of the MIT License, a
@@ -33,8 +33,8 @@
// % ./http_client http://httpbin.org/ip
//
+#include <nng/http.h>
#include <nng/nng.h>
-#include <nng/supplemental/http/http.h>
#include <stdio.h>
#include <stdlib.h>
@@ -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);
diff --git a/demo/reqrep/reqrep.c b/demo/reqrep/reqrep.c
index 9d7110f7..38e9d2c0 100644
--- a/demo/reqrep/reqrep.c
+++ b/demo/reqrep/reqrep.c
@@ -103,7 +103,6 @@ client(const char *url)
nng_socket sock;
nng_dialer dialer;
int rv;
- size_t sz;
int sleep = 0;
if ((rv = nng_init(NULL)) != 0) {
diff --git a/demo/rest/server.c b/demo/rest/server.c
index 96cdc79c..0fe21acb 100644
--- a/demo/rest/server.c
+++ b/demo/rest/server.c
@@ -32,11 +32,8 @@
// GRFG
//
+#include <nng/http.h>
#include <nng/nng.h>
-#include <nng/protocol/reqrep0/rep.h>
-#include <nng/protocol/reqrep0/req.h>
-#include <nng/supplemental/http/http.h>
-#include <nng/supplemental/util/platform.h>
#include <ctype.h>
#include <stdio.h>
@@ -74,12 +71,12 @@ typedef enum {
typedef struct rest_job {
nng_aio *http_aio; // aio from HTTP we must reply to
- nng_http_res *http_res; // HTTP response object
job_state state; // 0 = sending, 1 = receiving
nng_msg *msg; // request message
nng_aio *aio; // request flow
nng_ctx ctx; // context on the request socket
- struct rest_job *next; // next on the freelist
+ nng_http *conn;
+ struct rest_job *next; // next on the freelist
} rest_job;
nng_socket req_sock;
@@ -94,10 +91,6 @@ static void rest_job_cb(void *arg);
static void
rest_recycle_job(rest_job *job)
{
- if (job->http_res != NULL) {
- nng_http_res_free(job->http_res);
- job->http_res = NULL;
- }
if (job->msg != NULL) {
nng_msg_free(job->msg);
job->msg = NULL;
@@ -136,20 +129,13 @@ rest_get_job(void)
}
static void
-rest_http_fatal(rest_job *job, const char *fmt, int rv)
+rest_http_fatal(rest_job *job, int rv)
{
- char buf[128];
- nng_aio *aio = job->http_aio;
- nng_http_res *res = job->http_res;
-
- job->http_res = NULL;
- job->http_aio = NULL;
- snprintf(buf, sizeof(buf), fmt, nng_strerror(rv));
- nng_http_res_set_status(res, NNG_HTTP_STATUS_INTERNAL_SERVER_ERROR);
- nng_http_res_set_reason(res, buf);
-
- nng_aio_set_output(aio, 0, res);
- nng_aio_finish(aio, 0);
+ nng_aio *aio = job->http_aio;
+
+ // let the server give the details, we could have done more here
+ // ourselves if we wanted a detailed message
+ nng_aio_finish(aio, rv);
rest_recycle_job(job);
}
@@ -163,7 +149,7 @@ rest_job_cb(void *arg)
switch (job->state) {
case SEND_REQ:
if ((rv = nng_aio_result(aio)) != 0) {
- rest_http_fatal(job, "send REQ failed: %s", rv);
+ rest_http_fatal(job, rv);
return;
}
job->msg = NULL;
@@ -174,23 +160,20 @@ rest_job_cb(void *arg)
break;
case RECV_REP:
if ((rv = nng_aio_result(aio)) != 0) {
- rest_http_fatal(job, "recv reply failed: %s", rv);
+ rest_http_fatal(job, rv);
return;
}
job->msg = nng_aio_get_msg(aio);
// We got a reply, so give it back to the server.
- rv = nng_http_res_copy_data(job->http_res,
- nng_msg_body(job->msg), nng_msg_len(job->msg));
+ rv = nng_http_copy_body(
+ job->conn, nng_msg_body(job->msg), nng_msg_len(job->msg));
if (rv != 0) {
- rest_http_fatal(job, "nng_http_res_copy_data: %s", rv);
+ rest_http_fatal(job, rv);
return;
}
- // Set the output - the HTTP server will send it back to the
- // user agent with a 200 response.
- nng_aio_set_output(job->http_aio, 0, job->http_res);
+ nng_http_set_status(job->conn, NNG_HTTP_STATUS_OK, NULL);
nng_aio_finish(job->http_aio, 0);
job->http_aio = NULL;
- job->http_res = NULL;
// We are done with the job.
rest_recycle_job(job);
return;
@@ -203,14 +186,10 @@ rest_job_cb(void *arg)
// Our rest server just takes the message body, creates a request ID
// for it, and sends it on. This runs in raw mode, so
void
-rest_handle(nng_aio *aio)
+rest_handle(nng_http *conn, void *arg, nng_aio *aio)
{
struct rest_job *job;
- nng_http_req *req = nng_aio_get_input(aio, 0);
- nng_http_conn *conn = nng_aio_get_input(aio, 2);
- const char *clen;
size_t sz;
- nng_iov iov;
int rv;
void *data;
@@ -218,18 +197,18 @@ rest_handle(nng_aio *aio)
nng_aio_finish(aio, NNG_ENOMEM);
return;
}
- if (((rv = nng_http_res_alloc(&job->http_res)) != 0) ||
- ((rv = nng_ctx_open(&job->ctx, req_sock)) != 0)) {
+ job->conn = conn;
+ if (((rv = nng_ctx_open(&job->ctx, req_sock)) != 0)) {
rest_recycle_job(job);
nng_aio_finish(aio, rv);
return;
}
- nng_http_req_get_data(req, &data, &sz);
+ nng_http_get_body(conn, &data, &sz);
job->http_aio = aio;
if ((rv = nng_msg_alloc(&job->msg, sz)) != 0) {
- rest_http_fatal(job, "nng_msg_alloc: %s", rv);
+ rest_http_fatal(job, rv);
return;
}
@@ -329,7 +308,7 @@ inproc_server(void *arg)
fatal("inproc recvmsg", rv);
}
body = nng_msg_body(msg);
- for (int i = 0; i < nng_msg_len(msg); i++) {
+ for (size_t i = 0; i < nng_msg_len(msg); i++) {
// Table lookup would be faster, but this works.
if (isupper(body[i])) {
char base = body[i] - 'A';