From 0b7ed763e4c780585a23ae1112bbcfd2c5179bb5 Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 6 Jan 2022 09:29:42 +0530 Subject: [PATCH] http2_request_example: Change the target http2 server to `http2.github.io` and perform only a `GET` request --- examples/protocols/http2_request/README.md | 55 ++++++++++++++++++- .../http2_request/main/CMakeLists.txt | 2 +- .../protocols/http2_request/main/component.mk | 2 +- .../http2_request/main/golang_root_cert.pem | 20 ------- .../main/http2_github_io_root_cert.pem | 28 ++++++++++ .../main/http2_request_example_main.c | 16 ++---- 6 files changed, 87 insertions(+), 36 deletions(-) delete mode 100644 examples/protocols/http2_request/main/golang_root_cert.pem create mode 100644 examples/protocols/http2_request/main/http2_github_io_root_cert.pem diff --git a/examples/protocols/http2_request/README.md b/examples/protocols/http2_request/README.md index 808d595427..e7be3a83ef 100644 --- a/examples/protocols/http2_request/README.md +++ b/examples/protocols/http2_request/README.md @@ -1,6 +1,55 @@ # HTTP/2 Request Example -Established HTTP/2 connection with https://http2.golang.org -- Performs a GET on /clockstream -- Performs a PUT on /ECHO +Establish an HTTP/2 connection with https://http2.github.io +- Performs a GET on /index.html +## How to use example +Before project configuration and build, be sure to set the correct chip target using `idf.py set-target `. + +### Hardware Required + +* A development board with ESP32/ESP32-S2/ESP32-C3 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.) +* A USB cable for power supply and programming + +### Configure the project + +``` +idf.py menuconfig +``` +Open the project configuration menu (`idf.py menuconfig`) to configure Wi-Fi or Ethernet. See "Establishing Wi-Fi or Ethernet Connection" section in [examples/protocols/README.md](../../README.md) for more details. + +### Build and Flash + +Build the project and flash it to the board, then run monitor tool to view serial output: + +``` +idf.py -p PORT flash monitor +``` + +(Replace PORT with the name of the serial port to use.) + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Example Output + +``` +I (5609) example_connect: - IPv4 address: 192.168.0.103 +I (5609) example_connect: - IPv6 address: fe80:0000:0000:0000:ae67:b2ff:fe45:0194, type: ESP_IP6_ADDR_IS_LINK_LOCAL +Connecting to server +Connection done +[get-response] + +. +. +. +Body of index.html +. +. +. +. + +[get-response] Frame fully received +[get-response] Stream Closed +``` diff --git a/examples/protocols/http2_request/main/CMakeLists.txt b/examples/protocols/http2_request/main/CMakeLists.txt index 5020cf4e91..a450362baa 100644 --- a/examples/protocols/http2_request/main/CMakeLists.txt +++ b/examples/protocols/http2_request/main/CMakeLists.txt @@ -1,3 +1,3 @@ idf_component_register(SRCS "http2_request_example_main.c" INCLUDE_DIRS "." - EMBED_TXTFILES "golang_root_cert.pem") + EMBED_TXTFILES "http2_github_io_root_cert.pem") diff --git a/examples/protocols/http2_request/main/component.mk b/examples/protocols/http2_request/main/component.mk index ff8e5fbdbf..bbe96a05f9 100644 --- a/examples/protocols/http2_request/main/component.mk +++ b/examples/protocols/http2_request/main/component.mk @@ -2,4 +2,4 @@ # "main" pseudo-component makefile. # # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) -COMPONENT_EMBED_TXTFILES := golang_root_cert.pem +COMPONENT_EMBED_TXTFILES := http2_github_io_root_cert.pem diff --git a/examples/protocols/http2_request/main/golang_root_cert.pem b/examples/protocols/http2_request/main/golang_root_cert.pem deleted file mode 100644 index b2e43c9381..0000000000 --- a/examples/protocols/http2_request/main/golang_root_cert.pem +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- diff --git a/examples/protocols/http2_request/main/http2_github_io_root_cert.pem b/examples/protocols/http2_request/main/http2_github_io_root_cert.pem new file mode 100644 index 0000000000..8c4c741058 --- /dev/null +++ b/examples/protocols/http2_request/main/http2_github_io_root_cert.pem @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIEsTCCA5mgAwIBAgIQBOHnpNxc8vNtwCtCuF0VnzANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTEzMTAyMjEyMDAwMFoXDTI4MTAyMjEyMDAwMFowcDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTEvMC0GA1UEAxMmRGlnaUNlcnQgU0hBMiBIaWdoIEFzc3Vy +YW5jZSBTZXJ2ZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2 +4C/CJAbIbQRf1+8KZAayfSImZRauQkCbztyfn3YHPsMwVYcZuU+UDlqUH1VWtMIC +Kq/QmO4LQNfE0DtyyBSe75CxEamu0si4QzrZCwvV1ZX1QK/IHe1NnF9Xt4ZQaJn1 +itrSxwUfqJfJ3KSxgoQtxq2lnMcZgqaFD15EWCo3j/018QsIJzJa9buLnqS9UdAn +4t07QjOjBSjEuyjMmqwrIw14xnvmXnG3Sj4I+4G3FhahnSMSTeXXkgisdaScus0X +sh5ENWV/UyU50RwKmmMbGZJ0aAo3wsJSSMs5WqK24V3B3aAguCGikyZvFEohQcft +bZvySC/zA/WiaJJTL17jAgMBAAGjggFJMIIBRTASBgNVHRMBAf8ECDAGAQH/AgEA +MA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw +NAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy +dC5jb20wSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29t +L0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNybDA9BgNVHSAENjA0MDIG +BFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQ +UzAdBgNVHQ4EFgQUUWj/kK8CB3U8zNllZGKiErhZcjswHwYDVR0jBBgwFoAUsT7D +aQP4v0cB1JgmGggC72NkK8MwDQYJKoZIhvcNAQELBQADggEBABiKlYkD5m3fXPwd +aOpKj4PWUS+Na0QWnqxj9dJubISZi6qBcYRb7TROsLd5kinMLYBq8I4g4Xmk/gNH +E+r1hspZcX30BJZr01lYPf7TMSVcGDiEo+afgv2MW5gxTs14nhr9hctJqvIni5ly +/D6q1UEL2tU2ob8cbkdJf17ZSHwD2f2LSaCYJkJA69aSEaRkCldUxPUd1gJea6zu +xICaEnL6VpPX/78whQYwvwt/Tv9XBZ0k7YXDK/umdaisLRbvfXknsuvCnQsH6qqF +0wGjIChBWUMo0oHjqvbsezt3tkBigAVBRQHvFwY+3sAzm2fTYS5yh+Rp/BIAV0Ae +cPUeybQ= +-----END CERTIFICATE----- diff --git a/examples/protocols/http2_request/main/http2_request_example_main.c b/examples/protocols/http2_request/main/http2_request_example_main.c index 5df763cf0c..5dce7dbbda 100644 --- a/examples/protocols/http2_request/main/http2_request_example_main.c +++ b/examples/protocols/http2_request/main/http2_request_example_main.c @@ -1,6 +1,6 @@ /* HTTP2 GET Example using nghttp2 - Contacts http2.golang.org and executes the GET/PUT requests. A thin API + Contacts http2.github.io and executes the GET request. A thin API wrapper on top of nghttp2, to properly demonstrate the interactions. This example code is in the Public Domain (or CC0 licensed, at your option.) @@ -26,15 +26,13 @@ #include "sh2lib.h" -extern const uint8_t server_root_cert_pem_start[] asm("_binary_golang_root_cert_pem_start"); -extern const uint8_t server_root_cert_pem_end[] asm("_binary_golang_root_cert_pem_end"); +extern const uint8_t server_root_cert_pem_start[] asm("_binary_http2_github_io_root_cert_pem_start"); +extern const uint8_t server_root_cert_pem_end[] asm("_binary_http2_github_io_root_cert_pem_end"); /* The HTTP/2 server to connect to */ -#define HTTP2_SERVER_URI "https://http2.golang.org" +#define HTTP2_SERVER_URI "https://http2.github.io" /* A GET request that keeps streaming current time every second */ -#define HTTP2_STREAMING_GET_PATH "/clockstream" -/* A PUT request that echoes whatever we had sent to it */ -#define HTTP2_PUT_PATH "/ECHO" +#define HTTP2_STREAMING_GET_PATH "/index.html" int handle_get_response(struct sh2lib_handle *handle, const char *data, size_t len, int flags) @@ -120,10 +118,6 @@ static void http2_task(void *args) /* HTTP GET */ sh2lib_do_get(&hd, HTTP2_STREAMING_GET_PATH, handle_get_response); - - /* HTTP PUT */ - sh2lib_do_put(&hd, HTTP2_PUT_PATH, send_put_data, handle_echo_response); - while (1) { /* Process HTTP2 send/receive */ if (sh2lib_execute(&hd) < 0) {