Skip to content

Commit

Permalink
Adds new example showing how to retrieve raw content (JSON, XML etc.)…
Browse files Browse the repository at this point in the history
… from the request object.
  • Loading branch information
silvioprog committed Nov 9, 2018
1 parent 95c37fd commit 90a4b74
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 1 deletion.
36 changes: 36 additions & 0 deletions doxygen/example_httpreq_payload.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/* _
* ___ __ _ __ _ _ _(_)
* / __|/ _` |/ _` | | | | |
* \__ \ (_| | (_| | |_| | |
* |___/\__,_|\__, |\__,_|_|
* |___/
*
* –– cross-platform library which helps to develop web servers or frameworks.
*
* Copyright (c) 2016-2018 Silvio Clecio <[email protected]>
*
* This file is part of Sagui library.
*
* Sagui library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Sagui library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Sagui library. If not, see <https://www.gnu.org/licenses/>.
*/

#ifndef EXAMPLE_HTTPREQ_PAYLOAD_H
#define EXAMPLE_HTTPREQ_PAYLOAD_H

/**
* \example example_httpreq_payload.c
* Simple payload example showing how to retrieve raw content (JSON, XML etc.) from the request object.
*/

#endif /* EXAMPLE_HTTPREQ_PAYLOAD_H */
3 changes: 2 additions & 1 deletion examples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ if (SG_BUILD_EXAMPLES)
httpcookie
httpsrv
httpuplds
httpsrv_benchmark)
httpsrv_benchmark
httpreq_payload)
if (SG_HTTPS_SUPPORT AND GNUTLS_FOUND)
set(SG_EXAMPLES_CERTS_DIR "${SG_EXAMPLES_SOURCE_DIR}/certs")
add_definitions(-DSG_EXAMPLES_CERTS_DIR="${SG_EXAMPLES_CERTS_DIR}")
Expand Down
57 changes: 57 additions & 0 deletions examples/example_httpreq_payload.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/* _
* ___ __ _ __ _ _ _(_)
* / __|/ _` |/ _` | | | | |
* \__ \ (_| | (_| | |_| | |
* |___/\__,_|\__, |\__,_|_|
* |___/
*
* –– cross-platform library which helps to develop web servers or frameworks.
*
* Copyright (c) 2016-2018 Silvio Clecio <[email protected]>
*
* This file is part of Sagui library.
*
* Sagui library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Sagui library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Sagui library. If not, see <https://www.gnu.org/licenses/>.
*/

/*
* Echoing payload using cURL:
*
* curl --header "Content-Type: application/json" --request POST --data '{"abc":123}' -w "\n" https://localhost:<PORT>
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sagui.h>

/* NOTE: Error checking has been omitted to make it clear. */

static void req_cb(__SG_UNUSED void *cls, __SG_UNUSED struct sg_httpreq *req, __SG_UNUSED struct sg_httpres *res) {
struct sg_str *payload = sg_httpreq_payload(req);
sg_httpres_send(res, sg_str_content(payload), "text/plain", 200);
}

int main(void) {
struct sg_httpsrv *srv = sg_httpsrv_new(req_cb, NULL);
if (!sg_httpsrv_listen(srv, 0 /* 0 = port chosen randomly */, false)) {
sg_httpsrv_free(srv);
return EXIT_FAILURE;
}
fprintf(stdout, "Server running at https://localhost:%d\n", sg_httpsrv_port(srv));
fflush(stdout);
getchar();
sg_httpsrv_free(srv);
return EXIT_SUCCESS;
}

0 comments on commit 90a4b74

Please sign in to comment.