From 5e05fe8e7877ffd6bc473b77b8ca0a12ad26bd67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Thu, 14 Mar 2024 16:23:56 +0100 Subject: Cowboy 2.12, Cowlib 2.13, Gun 2.1 --- docs/en/gun/1.0/guide/connect/index.html | 2 + docs/en/gun/1.0/guide/http/index.html | 2 + docs/en/gun/1.0/guide/index.html | 2 + docs/en/gun/1.0/guide/introduction/index.html | 2 + docs/en/gun/1.0/guide/protocols/index.html | 2 + docs/en/gun/1.0/guide/start/index.html | 2 + docs/en/gun/1.0/guide/websocket/index.html | 2 + docs/en/gun/1.0/manual/gun.await/index.html | 2 + docs/en/gun/1.0/manual/gun.await_body/index.html | 2 + docs/en/gun/1.0/manual/gun.await_up/index.html | 2 + docs/en/gun/1.0/manual/gun.cancel/index.html | 2 + docs/en/gun/1.0/manual/gun.close/index.html | 2 + docs/en/gun/1.0/manual/gun.data/index.html | 2 + docs/en/gun/1.0/manual/gun.delete/index.html | 2 + docs/en/gun/1.0/manual/gun.flush/index.html | 2 + docs/en/gun/1.0/manual/gun.get/index.html | 2 + docs/en/gun/1.0/manual/gun.head/index.html | 2 + docs/en/gun/1.0/manual/gun.info/index.html | 2 + docs/en/gun/1.0/manual/gun.open/index.html | 2 + docs/en/gun/1.0/manual/gun.open_unix/index.html | 2 + docs/en/gun/1.0/manual/gun.options/index.html | 2 + docs/en/gun/1.0/manual/gun.patch/index.html | 2 + docs/en/gun/1.0/manual/gun.post/index.html | 2 + docs/en/gun/1.0/manual/gun.put/index.html | 2 + docs/en/gun/1.0/manual/gun.request/index.html | 2 + docs/en/gun/1.0/manual/gun.ws_send/index.html | 2 + docs/en/gun/1.0/manual/gun.ws_upgrade/index.html | 2 + docs/en/gun/1.0/manual/gun/index.html | 2 + docs/en/gun/1.0/manual/gun_app/index.html | 2 + docs/en/gun/1.0/manual/gun_data/index.html | 2 + docs/en/gun/1.0/manual/gun_down/index.html | 2 + docs/en/gun/1.0/manual/gun_error/index.html | 2 + docs/en/gun/1.0/manual/gun_inform/index.html | 2 + docs/en/gun/1.0/manual/gun_push/index.html | 2 + docs/en/gun/1.0/manual/gun_response/index.html | 2 + docs/en/gun/1.0/manual/gun_trailers/index.html | 2 + docs/en/gun/1.0/manual/gun_up/index.html | 2 + docs/en/gun/1.0/manual/gun_upgrade/index.html | 2 + docs/en/gun/1.0/manual/gun_ws/index.html | 2 + docs/en/gun/1.0/manual/index.html | 2 + docs/en/gun/1.1/guide/connect/index.html | 2 + docs/en/gun/1.1/guide/http/index.html | 2 + docs/en/gun/1.1/guide/index.html | 2 + docs/en/gun/1.1/guide/introduction/index.html | 2 + .../en/gun/1.1/guide/migrating_from_1.0/index.html | 2 + docs/en/gun/1.1/guide/protocols/index.html | 2 + docs/en/gun/1.1/guide/start/index.html | 2 + docs/en/gun/1.1/guide/websocket/index.html | 2 + docs/en/gun/1.1/manual/gun.await/index.html | 2 + docs/en/gun/1.1/manual/gun.await_body/index.html | 2 + docs/en/gun/1.1/manual/gun.await_up/index.html | 2 + docs/en/gun/1.1/manual/gun.cancel/index.html | 2 + docs/en/gun/1.1/manual/gun.close/index.html | 2 + docs/en/gun/1.1/manual/gun.data/index.html | 2 + docs/en/gun/1.1/manual/gun.delete/index.html | 2 + docs/en/gun/1.1/manual/gun.flush/index.html | 2 + docs/en/gun/1.1/manual/gun.get/index.html | 2 + docs/en/gun/1.1/manual/gun.head/index.html | 2 + docs/en/gun/1.1/manual/gun.info/index.html | 2 + docs/en/gun/1.1/manual/gun.open/index.html | 2 + docs/en/gun/1.1/manual/gun.open_unix/index.html | 2 + docs/en/gun/1.1/manual/gun.options/index.html | 2 + docs/en/gun/1.1/manual/gun.patch/index.html | 2 + docs/en/gun/1.1/manual/gun.post/index.html | 2 + docs/en/gun/1.1/manual/gun.put/index.html | 2 + docs/en/gun/1.1/manual/gun.request/index.html | 2 + docs/en/gun/1.1/manual/gun.ws_send/index.html | 2 + docs/en/gun/1.1/manual/gun.ws_upgrade/index.html | 2 + docs/en/gun/1.1/manual/gun/index.html | 2 + docs/en/gun/1.1/manual/gun_app/index.html | 2 + docs/en/gun/1.1/manual/gun_data/index.html | 2 + docs/en/gun/1.1/manual/gun_down/index.html | 2 + docs/en/gun/1.1/manual/gun_error/index.html | 2 + docs/en/gun/1.1/manual/gun_inform/index.html | 2 + docs/en/gun/1.1/manual/gun_push/index.html | 2 + docs/en/gun/1.1/manual/gun_response/index.html | 2 + docs/en/gun/1.1/manual/gun_trailers/index.html | 2 + docs/en/gun/1.1/manual/gun_up/index.html | 2 + docs/en/gun/1.1/manual/gun_upgrade/index.html | 2 + docs/en/gun/1.1/manual/gun_ws/index.html | 2 + docs/en/gun/1.1/manual/index.html | 2 + docs/en/gun/1.2/guide/connect/index.html | 2 + docs/en/gun/1.2/guide/http/index.html | 2 + docs/en/gun/1.2/guide/index.html | 2 + docs/en/gun/1.2/guide/introduction/index.html | 2 + .../en/gun/1.2/guide/migrating_from_1.0/index.html | 2 + .../en/gun/1.2/guide/migrating_from_1.1/index.html | 2 + docs/en/gun/1.2/guide/protocols/index.html | 2 + docs/en/gun/1.2/guide/start/index.html | 2 + docs/en/gun/1.2/guide/websocket/index.html | 2 + docs/en/gun/1.2/manual/gun.await/index.html | 2 + docs/en/gun/1.2/manual/gun.await_body/index.html | 2 + docs/en/gun/1.2/manual/gun.await_up/index.html | 2 + docs/en/gun/1.2/manual/gun.cancel/index.html | 2 + docs/en/gun/1.2/manual/gun.close/index.html | 2 + docs/en/gun/1.2/manual/gun.connect/index.html | 2 + docs/en/gun/1.2/manual/gun.data/index.html | 2 + docs/en/gun/1.2/manual/gun.delete/index.html | 2 + docs/en/gun/1.2/manual/gun.flush/index.html | 2 + docs/en/gun/1.2/manual/gun.get/index.html | 2 + docs/en/gun/1.2/manual/gun.head/index.html | 2 + docs/en/gun/1.2/manual/gun.info/index.html | 2 + docs/en/gun/1.2/manual/gun.open/index.html | 2 + docs/en/gun/1.2/manual/gun.open_unix/index.html | 2 + docs/en/gun/1.2/manual/gun.options/index.html | 2 + docs/en/gun/1.2/manual/gun.patch/index.html | 2 + docs/en/gun/1.2/manual/gun.post/index.html | 2 + docs/en/gun/1.2/manual/gun.put/index.html | 2 + docs/en/gun/1.2/manual/gun.request/index.html | 2 + docs/en/gun/1.2/manual/gun.ws_send/index.html | 2 + docs/en/gun/1.2/manual/gun.ws_upgrade/index.html | 2 + docs/en/gun/1.2/manual/gun/index.html | 2 + docs/en/gun/1.2/manual/gun_app/index.html | 2 + docs/en/gun/1.2/manual/gun_data/index.html | 2 + docs/en/gun/1.2/manual/gun_down/index.html | 2 + docs/en/gun/1.2/manual/gun_error/index.html | 2 + docs/en/gun/1.2/manual/gun_inform/index.html | 2 + docs/en/gun/1.2/manual/gun_push/index.html | 2 + docs/en/gun/1.2/manual/gun_response/index.html | 2 + docs/en/gun/1.2/manual/gun_trailers/index.html | 2 + docs/en/gun/1.2/manual/gun_up/index.html | 2 + docs/en/gun/1.2/manual/gun_upgrade/index.html | 2 + docs/en/gun/1.2/manual/gun_ws/index.html | 2 + docs/en/gun/1.2/manual/index.html | 2 + docs/en/gun/1.3/guide/connect/index.html | 2 + docs/en/gun/1.3/guide/http/index.html | 2 + docs/en/gun/1.3/guide/index.html | 2 + docs/en/gun/1.3/guide/introduction/index.html | 2 + .../en/gun/1.3/guide/migrating_from_1.0/index.html | 2 + .../en/gun/1.3/guide/migrating_from_1.1/index.html | 2 + .../en/gun/1.3/guide/migrating_from_1.2/index.html | 2 + .../en/gun/1.3/guide/migrating_from_1.3/index.html | 2 + docs/en/gun/1.3/guide/protocols/index.html | 2 + docs/en/gun/1.3/guide/start/index.html | 2 + docs/en/gun/1.3/guide/websocket/index.html | 2 + docs/en/gun/1.3/manual/gun.await/index.html | 2 + docs/en/gun/1.3/manual/gun.await_body/index.html | 2 + docs/en/gun/1.3/manual/gun.await_up/index.html | 2 + docs/en/gun/1.3/manual/gun.cancel/index.html | 2 + docs/en/gun/1.3/manual/gun.close/index.html | 2 + docs/en/gun/1.3/manual/gun.connect/index.html | 2 + docs/en/gun/1.3/manual/gun.data/index.html | 2 + docs/en/gun/1.3/manual/gun.delete/index.html | 2 + docs/en/gun/1.3/manual/gun.flush/index.html | 2 + docs/en/gun/1.3/manual/gun.get/index.html | 2 + docs/en/gun/1.3/manual/gun.head/index.html | 2 + docs/en/gun/1.3/manual/gun.info/index.html | 2 + docs/en/gun/1.3/manual/gun.open/index.html | 2 + docs/en/gun/1.3/manual/gun.open_unix/index.html | 2 + docs/en/gun/1.3/manual/gun.options/index.html | 2 + docs/en/gun/1.3/manual/gun.patch/index.html | 2 + docs/en/gun/1.3/manual/gun.post/index.html | 2 + docs/en/gun/1.3/manual/gun.put/index.html | 2 + docs/en/gun/1.3/manual/gun.request/index.html | 2 + docs/en/gun/1.3/manual/gun.ws_send/index.html | 2 + docs/en/gun/1.3/manual/gun.ws_upgrade/index.html | 2 + docs/en/gun/1.3/manual/gun/index.html | 2 + docs/en/gun/1.3/manual/gun_app/index.html | 2 + docs/en/gun/1.3/manual/gun_data/index.html | 2 + docs/en/gun/1.3/manual/gun_down/index.html | 2 + docs/en/gun/1.3/manual/gun_error/index.html | 2 + docs/en/gun/1.3/manual/gun_inform/index.html | 2 + docs/en/gun/1.3/manual/gun_push/index.html | 2 + docs/en/gun/1.3/manual/gun_response/index.html | 2 + docs/en/gun/1.3/manual/gun_trailers/index.html | 2 + docs/en/gun/1.3/manual/gun_up/index.html | 2 + docs/en/gun/1.3/manual/gun_upgrade/index.html | 2 + docs/en/gun/1.3/manual/gun_ws/index.html | 2 + docs/en/gun/1.3/manual/index.html | 2 + docs/en/gun/2.0/guide/connect/index.html | 2 + docs/en/gun/2.0/guide/http/index.html | 2 + docs/en/gun/2.0/guide/index.html | 2 + .../2.0/guide/internals_tls_over_tls/index.html | 2 + docs/en/gun/2.0/guide/introduction/index.html | 2 + .../en/gun/2.0/guide/migrating_from_1.0/index.html | 2 + .../en/gun/2.0/guide/migrating_from_1.1/index.html | 2 + .../en/gun/2.0/guide/migrating_from_1.2/index.html | 2 + .../en/gun/2.0/guide/migrating_from_1.3/index.html | 2 + .../en/gun/2.0/guide/migrating_from_2.0/index.html | 2 + docs/en/gun/2.0/guide/protocols/index.html | 2 + docs/en/gun/2.0/guide/start/index.html | 2 + docs/en/gun/2.0/guide/websocket/index.html | 2 + docs/en/gun/2.0/manual/gun.await/index.html | 2 + docs/en/gun/2.0/manual/gun.await_body/index.html | 2 + docs/en/gun/2.0/manual/gun.await_up/index.html | 2 + docs/en/gun/2.0/manual/gun.cancel/index.html | 2 + docs/en/gun/2.0/manual/gun.close/index.html | 2 + docs/en/gun/2.0/manual/gun.connect/index.html | 2 + docs/en/gun/2.0/manual/gun.data/index.html | 2 + docs/en/gun/2.0/manual/gun.delete/index.html | 2 + docs/en/gun/2.0/manual/gun.flush/index.html | 2 + docs/en/gun/2.0/manual/gun.get/index.html | 2 + docs/en/gun/2.0/manual/gun.head/index.html | 2 + docs/en/gun/2.0/manual/gun.headers/index.html | 2 + docs/en/gun/2.0/manual/gun.info/index.html | 2 + docs/en/gun/2.0/manual/gun.open/index.html | 2 + docs/en/gun/2.0/manual/gun.open_unix/index.html | 2 + docs/en/gun/2.0/manual/gun.options/index.html | 2 + docs/en/gun/2.0/manual/gun.patch/index.html | 2 + docs/en/gun/2.0/manual/gun.post/index.html | 2 + docs/en/gun/2.0/manual/gun.put/index.html | 2 + docs/en/gun/2.0/manual/gun.request/index.html | 2 + docs/en/gun/2.0/manual/gun.set_owner/index.html | 2 + docs/en/gun/2.0/manual/gun.shutdown/index.html | 2 + docs/en/gun/2.0/manual/gun.stream_info/index.html | 2 + docs/en/gun/2.0/manual/gun.update_flow/index.html | 2 + docs/en/gun/2.0/manual/gun.ws_send/index.html | 2 + docs/en/gun/2.0/manual/gun.ws_upgrade/index.html | 2 + docs/en/gun/2.0/manual/gun/index.html | 2 + docs/en/gun/2.0/manual/gun_app/index.html | 2 + .../2.0/manual/gun_cookies.domain_match/index.html | 2 + .../2.0/manual/gun_cookies.path_match/index.html | 2 + docs/en/gun/2.0/manual/gun_cookies/index.html | 2 + docs/en/gun/2.0/manual/gun_cookies_list/index.html | 2 + docs/en/gun/2.0/manual/gun_data/index.html | 2 + docs/en/gun/2.0/manual/gun_down/index.html | 2 + docs/en/gun/2.0/manual/gun_error/index.html | 2 + docs/en/gun/2.0/manual/gun_event/index.html | 2 + docs/en/gun/2.0/manual/gun_inform/index.html | 2 + docs/en/gun/2.0/manual/gun_push/index.html | 2 + docs/en/gun/2.0/manual/gun_response/index.html | 2 + docs/en/gun/2.0/manual/gun_trailers/index.html | 2 + docs/en/gun/2.0/manual/gun_tunnel_up/index.html | 2 + docs/en/gun/2.0/manual/gun_up/index.html | 2 + docs/en/gun/2.0/manual/gun_upgrade/index.html | 2 + docs/en/gun/2.0/manual/gun_ws/index.html | 2 + docs/en/gun/2.0/manual/gun_ws_protocol/index.html | 2 + docs/en/gun/2.0/manual/index.html | 2 + docs/en/gun/2.1/guide/connect.asciidoc | 166 ++++++ docs/en/gun/2.1/guide/connect/index.html | 278 +++++++++ docs/en/gun/2.1/guide/gun.sty | 8 + docs/en/gun/2.1/guide/http.asciidoc | 387 ++++++++++++ docs/en/gun/2.1/guide/http/index.html | 452 ++++++++++++++ docs/en/gun/2.1/guide/index.html | 188 ++++++ .../gun/2.1/guide/internals_tls_over_tls.asciidoc | 177 ++++++ .../2.1/guide/internals_tls_over_tls/index.html | 222 +++++++ docs/en/gun/2.1/guide/introduction.asciidoc | 49 ++ docs/en/gun/2.1/guide/introduction/index.html | 203 +++++++ docs/en/gun/2.1/guide/migrating_from_1.0.asciidoc | 21 + .../en/gun/2.1/guide/migrating_from_1.0/index.html | 189 ++++++ docs/en/gun/2.1/guide/migrating_from_1.1.asciidoc | 28 + .../en/gun/2.1/guide/migrating_from_1.1/index.html | 195 ++++++ docs/en/gun/2.1/guide/migrating_from_1.2.asciidoc | 39 ++ .../en/gun/2.1/guide/migrating_from_1.2/index.html | 205 +++++++ docs/en/gun/2.1/guide/migrating_from_1.3.asciidoc | 329 ++++++++++ .../en/gun/2.1/guide/migrating_from_1.3/index.html | 337 +++++++++++ docs/en/gun/2.1/guide/migrating_from_2.0.asciidoc | 25 + .../en/gun/2.1/guide/migrating_from_2.0/index.html | 194 ++++++ docs/en/gun/2.1/guide/protocols.asciidoc | 120 ++++ docs/en/gun/2.1/guide/protocols/index.html | 329 ++++++++++ docs/en/gun/2.1/guide/start.asciidoc | 43 ++ docs/en/gun/2.1/guide/start/index.html | 206 +++++++ docs/en/gun/2.1/guide/websocket.asciidoc | 124 ++++ docs/en/gun/2.1/guide/websocket/index.html | 264 ++++++++ docs/en/gun/2.1/manual/gun.await/index.html | 256 ++++++++ docs/en/gun/2.1/manual/gun.await_body/index.html | 224 +++++++ docs/en/gun/2.1/manual/gun.await_up/index.html | 215 +++++++ docs/en/gun/2.1/manual/gun.cancel/index.html | 199 +++++++ docs/en/gun/2.1/manual/gun.close/index.html | 191 ++++++ docs/en/gun/2.1/manual/gun.connect/index.html | 252 ++++++++ docs/en/gun/2.1/manual/gun.data/index.html | 210 +++++++ docs/en/gun/2.1/manual/gun.delete/index.html | 219 +++++++ docs/en/gun/2.1/manual/gun.flush/index.html | 204 +++++++ docs/en/gun/2.1/manual/gun.get/index.html | 222 +++++++ docs/en/gun/2.1/manual/gun.head/index.html | 224 +++++++ docs/en/gun/2.1/manual/gun.headers/index.html | 216 +++++++ docs/en/gun/2.1/manual/gun.info/index.html | 215 +++++++ docs/en/gun/2.1/manual/gun.open/index.html | 219 +++++++ docs/en/gun/2.1/manual/gun.open_unix/index.html | 207 +++++++ docs/en/gun/2.1/manual/gun.options/index.html | 219 +++++++ docs/en/gun/2.1/manual/gun.patch/index.html | 247 ++++++++ docs/en/gun/2.1/manual/gun.post/index.html | 245 ++++++++ docs/en/gun/2.1/manual/gun.put/index.html | 245 ++++++++ docs/en/gun/2.1/manual/gun.request/index.html | 223 +++++++ docs/en/gun/2.1/manual/gun.set_owner/index.html | 197 ++++++ docs/en/gun/2.1/manual/gun.shutdown/index.html | 201 +++++++ docs/en/gun/2.1/manual/gun.stream_info/index.html | 216 +++++++ docs/en/gun/2.1/manual/gun.update_flow/index.html | 201 +++++++ docs/en/gun/2.1/manual/gun.ws_send/index.html | 217 +++++++ docs/en/gun/2.1/manual/gun.ws_upgrade/index.html | 245 ++++++++ docs/en/gun/2.1/manual/gun/index.html | 662 +++++++++++++++++++++ docs/en/gun/2.1/manual/gun_app/index.html | 192 ++++++ .../2.1/manual/gun_cookies.domain_match/index.html | 196 ++++++ .../2.1/manual/gun_cookies.path_match/index.html | 196 ++++++ docs/en/gun/2.1/manual/gun_cookies/index.html | 295 +++++++++ docs/en/gun/2.1/manual/gun_cookies_list/index.html | 193 ++++++ docs/en/gun/2.1/manual/gun_data/index.html | 208 +++++++ docs/en/gun/2.1/manual/gun_down/index.html | 210 +++++++ docs/en/gun/2.1/manual/gun_error/index.html | 207 +++++++ docs/en/gun/2.1/manual/gun_event/index.html | 574 ++++++++++++++++++ docs/en/gun/2.1/manual/gun_inform/index.html | 207 +++++++ docs/en/gun/2.1/manual/gun_push/index.html | 227 +++++++ docs/en/gun/2.1/manual/gun_response/index.html | 210 +++++++ docs/en/gun/2.1/manual/gun_trailers/index.html | 202 +++++++ docs/en/gun/2.1/manual/gun_tunnel_up/index.html | 202 +++++++ docs/en/gun/2.1/manual/gun_up/index.html | 199 +++++++ docs/en/gun/2.1/manual/gun_upgrade/index.html | 208 +++++++ docs/en/gun/2.1/manual/gun_ws/index.html | 207 +++++++ docs/en/gun/2.1/manual/gun_ws_protocol/index.html | 233 ++++++++ docs/en/gun/2.1/manual/index.html | 192 ++++++ 300 files changed, 15983 insertions(+) create mode 100644 docs/en/gun/2.1/guide/connect.asciidoc create mode 100644 docs/en/gun/2.1/guide/connect/index.html create mode 100644 docs/en/gun/2.1/guide/gun.sty create mode 100644 docs/en/gun/2.1/guide/http.asciidoc create mode 100644 docs/en/gun/2.1/guide/http/index.html create mode 100644 docs/en/gun/2.1/guide/index.html create mode 100644 docs/en/gun/2.1/guide/internals_tls_over_tls.asciidoc create mode 100644 docs/en/gun/2.1/guide/internals_tls_over_tls/index.html create mode 100644 docs/en/gun/2.1/guide/introduction.asciidoc create mode 100644 docs/en/gun/2.1/guide/introduction/index.html create mode 100644 docs/en/gun/2.1/guide/migrating_from_1.0.asciidoc create mode 100644 docs/en/gun/2.1/guide/migrating_from_1.0/index.html create mode 100644 docs/en/gun/2.1/guide/migrating_from_1.1.asciidoc create mode 100644 docs/en/gun/2.1/guide/migrating_from_1.1/index.html create mode 100644 docs/en/gun/2.1/guide/migrating_from_1.2.asciidoc create mode 100644 docs/en/gun/2.1/guide/migrating_from_1.2/index.html create mode 100644 docs/en/gun/2.1/guide/migrating_from_1.3.asciidoc create mode 100644 docs/en/gun/2.1/guide/migrating_from_1.3/index.html create mode 100644 docs/en/gun/2.1/guide/migrating_from_2.0.asciidoc create mode 100644 docs/en/gun/2.1/guide/migrating_from_2.0/index.html create mode 100644 docs/en/gun/2.1/guide/protocols.asciidoc create mode 100644 docs/en/gun/2.1/guide/protocols/index.html create mode 100644 docs/en/gun/2.1/guide/start.asciidoc create mode 100644 docs/en/gun/2.1/guide/start/index.html create mode 100644 docs/en/gun/2.1/guide/websocket.asciidoc create mode 100644 docs/en/gun/2.1/guide/websocket/index.html create mode 100644 docs/en/gun/2.1/manual/gun.await/index.html create mode 100644 docs/en/gun/2.1/manual/gun.await_body/index.html create mode 100644 docs/en/gun/2.1/manual/gun.await_up/index.html create mode 100644 docs/en/gun/2.1/manual/gun.cancel/index.html create mode 100644 docs/en/gun/2.1/manual/gun.close/index.html create mode 100644 docs/en/gun/2.1/manual/gun.connect/index.html create mode 100644 docs/en/gun/2.1/manual/gun.data/index.html create mode 100644 docs/en/gun/2.1/manual/gun.delete/index.html create mode 100644 docs/en/gun/2.1/manual/gun.flush/index.html create mode 100644 docs/en/gun/2.1/manual/gun.get/index.html create mode 100644 docs/en/gun/2.1/manual/gun.head/index.html create mode 100644 docs/en/gun/2.1/manual/gun.headers/index.html create mode 100644 docs/en/gun/2.1/manual/gun.info/index.html create mode 100644 docs/en/gun/2.1/manual/gun.open/index.html create mode 100644 docs/en/gun/2.1/manual/gun.open_unix/index.html create mode 100644 docs/en/gun/2.1/manual/gun.options/index.html create mode 100644 docs/en/gun/2.1/manual/gun.patch/index.html create mode 100644 docs/en/gun/2.1/manual/gun.post/index.html create mode 100644 docs/en/gun/2.1/manual/gun.put/index.html create mode 100644 docs/en/gun/2.1/manual/gun.request/index.html create mode 100644 docs/en/gun/2.1/manual/gun.set_owner/index.html create mode 100644 docs/en/gun/2.1/manual/gun.shutdown/index.html create mode 100644 docs/en/gun/2.1/manual/gun.stream_info/index.html create mode 100644 docs/en/gun/2.1/manual/gun.update_flow/index.html create mode 100644 docs/en/gun/2.1/manual/gun.ws_send/index.html create mode 100644 docs/en/gun/2.1/manual/gun.ws_upgrade/index.html create mode 100644 docs/en/gun/2.1/manual/gun/index.html create mode 100644 docs/en/gun/2.1/manual/gun_app/index.html create mode 100644 docs/en/gun/2.1/manual/gun_cookies.domain_match/index.html create mode 100644 docs/en/gun/2.1/manual/gun_cookies.path_match/index.html create mode 100644 docs/en/gun/2.1/manual/gun_cookies/index.html create mode 100644 docs/en/gun/2.1/manual/gun_cookies_list/index.html create mode 100644 docs/en/gun/2.1/manual/gun_data/index.html create mode 100644 docs/en/gun/2.1/manual/gun_down/index.html create mode 100644 docs/en/gun/2.1/manual/gun_error/index.html create mode 100644 docs/en/gun/2.1/manual/gun_event/index.html create mode 100644 docs/en/gun/2.1/manual/gun_inform/index.html create mode 100644 docs/en/gun/2.1/manual/gun_push/index.html create mode 100644 docs/en/gun/2.1/manual/gun_response/index.html create mode 100644 docs/en/gun/2.1/manual/gun_trailers/index.html create mode 100644 docs/en/gun/2.1/manual/gun_tunnel_up/index.html create mode 100644 docs/en/gun/2.1/manual/gun_up/index.html create mode 100644 docs/en/gun/2.1/manual/gun_upgrade/index.html create mode 100644 docs/en/gun/2.1/manual/gun_ws/index.html create mode 100644 docs/en/gun/2.1/manual/gun_ws_protocol/index.html create mode 100644 docs/en/gun/2.1/manual/index.html (limited to 'docs/en/gun') diff --git a/docs/en/gun/1.0/guide/connect/index.html b/docs/en/gun/1.0/guide/connect/index.html index c057ba40..973f6954 100644 --- a/docs/en/gun/1.0/guide/connect/index.html +++ b/docs/en/gun/1.0/guide/connect/index.html @@ -215,6 +215,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/guide/http/index.html b/docs/en/gun/1.0/guide/http/index.html index 1d63a8b5..f160bd9d 100644 --- a/docs/en/gun/1.0/guide/http/index.html +++ b/docs/en/gun/1.0/guide/http/index.html @@ -390,6 +390,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/guide/index.html b/docs/en/gun/1.0/guide/index.html index 55223724..b797d9b7 100644 --- a/docs/en/gun/1.0/guide/index.html +++ b/docs/en/gun/1.0/guide/index.html @@ -109,6 +109,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/guide/introduction/index.html b/docs/en/gun/1.0/guide/introduction/index.html index 794e4f58..e7749cb1 100644 --- a/docs/en/gun/1.0/guide/introduction/index.html +++ b/docs/en/gun/1.0/guide/introduction/index.html @@ -142,6 +142,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/guide/protocols/index.html b/docs/en/gun/1.0/guide/protocols/index.html index 2453beda..c594cfb0 100644 --- a/docs/en/gun/1.0/guide/protocols/index.html +++ b/docs/en/gun/1.0/guide/protocols/index.html @@ -269,6 +269,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/guide/start/index.html b/docs/en/gun/1.0/guide/start/index.html index a835ef4b..b8e6b109 100644 --- a/docs/en/gun/1.0/guide/start/index.html +++ b/docs/en/gun/1.0/guide/start/index.html @@ -144,6 +144,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/guide/websocket/index.html b/docs/en/gun/1.0/guide/websocket/index.html index c7ff1bfa..3d2083a9 100644 --- a/docs/en/gun/1.0/guide/websocket/index.html +++ b/docs/en/gun/1.0/guide/websocket/index.html @@ -195,6 +195,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.await/index.html b/docs/en/gun/1.0/manual/gun.await/index.html index 38c00372..e90fec94 100644 --- a/docs/en/gun/1.0/manual/gun.await/index.html +++ b/docs/en/gun/1.0/manual/gun.await/index.html @@ -183,6 +183,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.await_body/index.html b/docs/en/gun/1.0/manual/gun.await_body/index.html index 988d540f..4cc9cab7 100644 --- a/docs/en/gun/1.0/manual/gun.await_body/index.html +++ b/docs/en/gun/1.0/manual/gun.await_body/index.html @@ -159,6 +159,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.await_up/index.html b/docs/en/gun/1.0/manual/gun.await_up/index.html index f3594eb0..bb3bd06e 100644 --- a/docs/en/gun/1.0/manual/gun.await_up/index.html +++ b/docs/en/gun/1.0/manual/gun.await_up/index.html @@ -151,6 +151,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.cancel/index.html b/docs/en/gun/1.0/manual/gun.cancel/index.html index ace61398..114b1e84 100644 --- a/docs/en/gun/1.0/manual/gun.cancel/index.html +++ b/docs/en/gun/1.0/manual/gun.cancel/index.html @@ -137,6 +137,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.close/index.html b/docs/en/gun/1.0/manual/gun.close/index.html index fecf6042..6e02e3c4 100644 --- a/docs/en/gun/1.0/manual/gun.close/index.html +++ b/docs/en/gun/1.0/manual/gun.close/index.html @@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.data/index.html b/docs/en/gun/1.0/manual/gun.data/index.html index aec54299..f797f411 100644 --- a/docs/en/gun/1.0/manual/gun.data/index.html +++ b/docs/en/gun/1.0/manual/gun.data/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.delete/index.html b/docs/en/gun/1.0/manual/gun.delete/index.html index 4d3a979b..1ebe2473 100644 --- a/docs/en/gun/1.0/manual/gun.delete/index.html +++ b/docs/en/gun/1.0/manual/gun.delete/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.flush/index.html b/docs/en/gun/1.0/manual/gun.flush/index.html index 2d04bef9..a8c6d81c 100644 --- a/docs/en/gun/1.0/manual/gun.flush/index.html +++ b/docs/en/gun/1.0/manual/gun.flush/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.get/index.html b/docs/en/gun/1.0/manual/gun.get/index.html index 2b4f4c3c..7c05e2dc 100644 --- a/docs/en/gun/1.0/manual/gun.get/index.html +++ b/docs/en/gun/1.0/manual/gun.get/index.html @@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.head/index.html b/docs/en/gun/1.0/manual/gun.head/index.html index 715169ec..7905d8da 100644 --- a/docs/en/gun/1.0/manual/gun.head/index.html +++ b/docs/en/gun/1.0/manual/gun.head/index.html @@ -162,6 +162,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.info/index.html b/docs/en/gun/1.0/manual/gun.info/index.html index 28a3cb4c..1574080b 100644 --- a/docs/en/gun/1.0/manual/gun.info/index.html +++ b/docs/en/gun/1.0/manual/gun.info/index.html @@ -133,6 +133,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.open/index.html b/docs/en/gun/1.0/manual/gun.open/index.html index 2af75b47..8964d71e 100644 --- a/docs/en/gun/1.0/manual/gun.open/index.html +++ b/docs/en/gun/1.0/manual/gun.open/index.html @@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.open_unix/index.html b/docs/en/gun/1.0/manual/gun.open_unix/index.html index 7dbca0ba..56c54248 100644 --- a/docs/en/gun/1.0/manual/gun.open_unix/index.html +++ b/docs/en/gun/1.0/manual/gun.open_unix/index.html @@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.options/index.html b/docs/en/gun/1.0/manual/gun.options/index.html index f920bb0e..863feed7 100644 --- a/docs/en/gun/1.0/manual/gun.options/index.html +++ b/docs/en/gun/1.0/manual/gun.options/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.patch/index.html b/docs/en/gun/1.0/manual/gun.patch/index.html index a3dc563c..faa86d7a 100644 --- a/docs/en/gun/1.0/manual/gun.patch/index.html +++ b/docs/en/gun/1.0/manual/gun.patch/index.html @@ -180,6 +180,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.post/index.html b/docs/en/gun/1.0/manual/gun.post/index.html index ba31f8e6..c7bb5f64 100644 --- a/docs/en/gun/1.0/manual/gun.post/index.html +++ b/docs/en/gun/1.0/manual/gun.post/index.html @@ -178,6 +178,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.put/index.html b/docs/en/gun/1.0/manual/gun.put/index.html index f9645b29..c7ae5ba8 100644 --- a/docs/en/gun/1.0/manual/gun.put/index.html +++ b/docs/en/gun/1.0/manual/gun.put/index.html @@ -178,6 +178,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.request/index.html b/docs/en/gun/1.0/manual/gun.request/index.html index 1daa1a23..0d73bf28 100644 --- a/docs/en/gun/1.0/manual/gun.request/index.html +++ b/docs/en/gun/1.0/manual/gun.request/index.html @@ -164,6 +164,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.ws_send/index.html b/docs/en/gun/1.0/manual/gun.ws_send/index.html index beb59ba0..6f7c575f 100644 --- a/docs/en/gun/1.0/manual/gun.ws_send/index.html +++ b/docs/en/gun/1.0/manual/gun.ws_send/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun.ws_upgrade/index.html b/docs/en/gun/1.0/manual/gun.ws_upgrade/index.html index 163261f3..11a6a3ad 100644 --- a/docs/en/gun/1.0/manual/gun.ws_upgrade/index.html +++ b/docs/en/gun/1.0/manual/gun.ws_upgrade/index.html @@ -170,6 +170,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun/index.html b/docs/en/gun/1.0/manual/gun/index.html index 8150357a..295daa52 100644 --- a/docs/en/gun/1.0/manual/gun/index.html +++ b/docs/en/gun/1.0/manual/gun/index.html @@ -308,6 +308,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_app/index.html b/docs/en/gun/1.0/manual/gun_app/index.html index 94efcfb3..364069c8 100644 --- a/docs/en/gun/1.0/manual/gun_app/index.html +++ b/docs/en/gun/1.0/manual/gun_app/index.html @@ -122,6 +122,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_data/index.html b/docs/en/gun/1.0/manual/gun_data/index.html index b837858e..bfd96bb5 100644 --- a/docs/en/gun/1.0/manual/gun_data/index.html +++ b/docs/en/gun/1.0/manual/gun_data/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_down/index.html b/docs/en/gun/1.0/manual/gun_down/index.html index 9d16c942..df1ac7a6 100644 --- a/docs/en/gun/1.0/manual/gun_down/index.html +++ b/docs/en/gun/1.0/manual/gun_down/index.html @@ -152,6 +152,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_error/index.html b/docs/en/gun/1.0/manual/gun_error/index.html index 0dd49d67..a01d149d 100644 --- a/docs/en/gun/1.0/manual/gun_error/index.html +++ b/docs/en/gun/1.0/manual/gun_error/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_inform/index.html b/docs/en/gun/1.0/manual/gun_inform/index.html index 4e0d55c8..f0d01ed8 100644 --- a/docs/en/gun/1.0/manual/gun_inform/index.html +++ b/docs/en/gun/1.0/manual/gun_inform/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_push/index.html b/docs/en/gun/1.0/manual/gun_push/index.html index 42652c60..f45e68de 100644 --- a/docs/en/gun/1.0/manual/gun_push/index.html +++ b/docs/en/gun/1.0/manual/gun_push/index.html @@ -165,6 +165,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_response/index.html b/docs/en/gun/1.0/manual/gun_response/index.html index 59dce54b..ac02fefb 100644 --- a/docs/en/gun/1.0/manual/gun_response/index.html +++ b/docs/en/gun/1.0/manual/gun_response/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_trailers/index.html b/docs/en/gun/1.0/manual/gun_trailers/index.html index 405ab7d8..a0efa6c2 100644 --- a/docs/en/gun/1.0/manual/gun_trailers/index.html +++ b/docs/en/gun/1.0/manual/gun_trailers/index.html @@ -140,6 +140,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_up/index.html b/docs/en/gun/1.0/manual/gun_up/index.html index 8fe0cecf..3ad67af1 100644 --- a/docs/en/gun/1.0/manual/gun_up/index.html +++ b/docs/en/gun/1.0/manual/gun_up/index.html @@ -136,6 +136,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_upgrade/index.html b/docs/en/gun/1.0/manual/gun_upgrade/index.html index e78961f2..b2974898 100644 --- a/docs/en/gun/1.0/manual/gun_upgrade/index.html +++ b/docs/en/gun/1.0/manual/gun_upgrade/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/gun_ws/index.html b/docs/en/gun/1.0/manual/gun_ws/index.html index 226a8dd6..47835d91 100644 --- a/docs/en/gun/1.0/manual/gun_ws/index.html +++ b/docs/en/gun/1.0/manual/gun_ws/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.0/manual/index.html b/docs/en/gun/1.0/manual/index.html index dd855506..68654b5c 100644 --- a/docs/en/gun/1.0/manual/index.html +++ b/docs/en/gun/1.0/manual/index.html @@ -122,6 +122,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/guide/connect/index.html b/docs/en/gun/1.1/guide/connect/index.html index 406da7b8..4f5519a7 100644 --- a/docs/en/gun/1.1/guide/connect/index.html +++ b/docs/en/gun/1.1/guide/connect/index.html @@ -215,6 +215,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/guide/http/index.html b/docs/en/gun/1.1/guide/http/index.html index 16ff0bf8..c9365d50 100644 --- a/docs/en/gun/1.1/guide/http/index.html +++ b/docs/en/gun/1.1/guide/http/index.html @@ -390,6 +390,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/guide/index.html b/docs/en/gun/1.1/guide/index.html index d2468d70..b18cb347 100644 --- a/docs/en/gun/1.1/guide/index.html +++ b/docs/en/gun/1.1/guide/index.html @@ -114,6 +114,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/guide/introduction/index.html b/docs/en/gun/1.1/guide/introduction/index.html index 06b9ae23..9410d163 100644 --- a/docs/en/gun/1.1/guide/introduction/index.html +++ b/docs/en/gun/1.1/guide/introduction/index.html @@ -142,6 +142,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/guide/migrating_from_1.0/index.html b/docs/en/gun/1.1/guide/migrating_from_1.0/index.html index 52808392..d9cd0f6e 100644 --- a/docs/en/gun/1.1/guide/migrating_from_1.0/index.html +++ b/docs/en/gun/1.1/guide/migrating_from_1.0/index.html @@ -127,6 +127,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/guide/protocols/index.html b/docs/en/gun/1.1/guide/protocols/index.html index 9bbd378d..d01e404a 100644 --- a/docs/en/gun/1.1/guide/protocols/index.html +++ b/docs/en/gun/1.1/guide/protocols/index.html @@ -269,6 +269,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/guide/start/index.html b/docs/en/gun/1.1/guide/start/index.html index 3456b4f3..65ec6c54 100644 --- a/docs/en/gun/1.1/guide/start/index.html +++ b/docs/en/gun/1.1/guide/start/index.html @@ -144,6 +144,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/guide/websocket/index.html b/docs/en/gun/1.1/guide/websocket/index.html index f74f5ff4..9247dfec 100644 --- a/docs/en/gun/1.1/guide/websocket/index.html +++ b/docs/en/gun/1.1/guide/websocket/index.html @@ -199,6 +199,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.await/index.html b/docs/en/gun/1.1/manual/gun.await/index.html index d9126ac9..651bb059 100644 --- a/docs/en/gun/1.1/manual/gun.await/index.html +++ b/docs/en/gun/1.1/manual/gun.await/index.html @@ -183,6 +183,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.await_body/index.html b/docs/en/gun/1.1/manual/gun.await_body/index.html index 660e4e45..8cf45022 100644 --- a/docs/en/gun/1.1/manual/gun.await_body/index.html +++ b/docs/en/gun/1.1/manual/gun.await_body/index.html @@ -159,6 +159,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.await_up/index.html b/docs/en/gun/1.1/manual/gun.await_up/index.html index 284432a3..82272568 100644 --- a/docs/en/gun/1.1/manual/gun.await_up/index.html +++ b/docs/en/gun/1.1/manual/gun.await_up/index.html @@ -151,6 +151,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.cancel/index.html b/docs/en/gun/1.1/manual/gun.cancel/index.html index e7b2cfba..8e9e20df 100644 --- a/docs/en/gun/1.1/manual/gun.cancel/index.html +++ b/docs/en/gun/1.1/manual/gun.cancel/index.html @@ -137,6 +137,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.close/index.html b/docs/en/gun/1.1/manual/gun.close/index.html index a0505db0..ddfdaec1 100644 --- a/docs/en/gun/1.1/manual/gun.close/index.html +++ b/docs/en/gun/1.1/manual/gun.close/index.html @@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.data/index.html b/docs/en/gun/1.1/manual/gun.data/index.html index 9872bd74..f606872a 100644 --- a/docs/en/gun/1.1/manual/gun.data/index.html +++ b/docs/en/gun/1.1/manual/gun.data/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.delete/index.html b/docs/en/gun/1.1/manual/gun.delete/index.html index 1cc551b6..f0ea2f43 100644 --- a/docs/en/gun/1.1/manual/gun.delete/index.html +++ b/docs/en/gun/1.1/manual/gun.delete/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.flush/index.html b/docs/en/gun/1.1/manual/gun.flush/index.html index 8fced815..ac226bb2 100644 --- a/docs/en/gun/1.1/manual/gun.flush/index.html +++ b/docs/en/gun/1.1/manual/gun.flush/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.get/index.html b/docs/en/gun/1.1/manual/gun.get/index.html index e6062c13..29e1ce13 100644 --- a/docs/en/gun/1.1/manual/gun.get/index.html +++ b/docs/en/gun/1.1/manual/gun.get/index.html @@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.head/index.html b/docs/en/gun/1.1/manual/gun.head/index.html index 3d41d703..a312d0b7 100644 --- a/docs/en/gun/1.1/manual/gun.head/index.html +++ b/docs/en/gun/1.1/manual/gun.head/index.html @@ -162,6 +162,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.info/index.html b/docs/en/gun/1.1/manual/gun.info/index.html index 8f467e78..8532e966 100644 --- a/docs/en/gun/1.1/manual/gun.info/index.html +++ b/docs/en/gun/1.1/manual/gun.info/index.html @@ -133,6 +133,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.open/index.html b/docs/en/gun/1.1/manual/gun.open/index.html index 6a9aa93d..e86ca70d 100644 --- a/docs/en/gun/1.1/manual/gun.open/index.html +++ b/docs/en/gun/1.1/manual/gun.open/index.html @@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.open_unix/index.html b/docs/en/gun/1.1/manual/gun.open_unix/index.html index 8bb9430b..596c13e0 100644 --- a/docs/en/gun/1.1/manual/gun.open_unix/index.html +++ b/docs/en/gun/1.1/manual/gun.open_unix/index.html @@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.options/index.html b/docs/en/gun/1.1/manual/gun.options/index.html index 8bfde262..abb09822 100644 --- a/docs/en/gun/1.1/manual/gun.options/index.html +++ b/docs/en/gun/1.1/manual/gun.options/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.patch/index.html b/docs/en/gun/1.1/manual/gun.patch/index.html index 3f68b750..f7d98c3c 100644 --- a/docs/en/gun/1.1/manual/gun.patch/index.html +++ b/docs/en/gun/1.1/manual/gun.patch/index.html @@ -180,6 +180,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.post/index.html b/docs/en/gun/1.1/manual/gun.post/index.html index f463441e..362b7973 100644 --- a/docs/en/gun/1.1/manual/gun.post/index.html +++ b/docs/en/gun/1.1/manual/gun.post/index.html @@ -178,6 +178,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.put/index.html b/docs/en/gun/1.1/manual/gun.put/index.html index c6248a73..6148b8d9 100644 --- a/docs/en/gun/1.1/manual/gun.put/index.html +++ b/docs/en/gun/1.1/manual/gun.put/index.html @@ -178,6 +178,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.request/index.html b/docs/en/gun/1.1/manual/gun.request/index.html index 456ffac2..3ff8675e 100644 --- a/docs/en/gun/1.1/manual/gun.request/index.html +++ b/docs/en/gun/1.1/manual/gun.request/index.html @@ -164,6 +164,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.ws_send/index.html b/docs/en/gun/1.1/manual/gun.ws_send/index.html index 3cc6ba28..be9bbd36 100644 --- a/docs/en/gun/1.1/manual/gun.ws_send/index.html +++ b/docs/en/gun/1.1/manual/gun.ws_send/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun.ws_upgrade/index.html b/docs/en/gun/1.1/manual/gun.ws_upgrade/index.html index 4e8b6367..e7c3a9ba 100644 --- a/docs/en/gun/1.1/manual/gun.ws_upgrade/index.html +++ b/docs/en/gun/1.1/manual/gun.ws_upgrade/index.html @@ -170,6 +170,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun/index.html b/docs/en/gun/1.1/manual/gun/index.html index 061c5d95..10c26dde 100644 --- a/docs/en/gun/1.1/manual/gun/index.html +++ b/docs/en/gun/1.1/manual/gun/index.html @@ -308,6 +308,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_app/index.html b/docs/en/gun/1.1/manual/gun_app/index.html index 9454abf4..b3fe5ac7 100644 --- a/docs/en/gun/1.1/manual/gun_app/index.html +++ b/docs/en/gun/1.1/manual/gun_app/index.html @@ -122,6 +122,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_data/index.html b/docs/en/gun/1.1/manual/gun_data/index.html index 3efa56e0..9fc5311a 100644 --- a/docs/en/gun/1.1/manual/gun_data/index.html +++ b/docs/en/gun/1.1/manual/gun_data/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_down/index.html b/docs/en/gun/1.1/manual/gun_down/index.html index 470bcf6a..320c6c51 100644 --- a/docs/en/gun/1.1/manual/gun_down/index.html +++ b/docs/en/gun/1.1/manual/gun_down/index.html @@ -152,6 +152,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_error/index.html b/docs/en/gun/1.1/manual/gun_error/index.html index 07f058fe..d6867d60 100644 --- a/docs/en/gun/1.1/manual/gun_error/index.html +++ b/docs/en/gun/1.1/manual/gun_error/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_inform/index.html b/docs/en/gun/1.1/manual/gun_inform/index.html index 4f59db43..244103b7 100644 --- a/docs/en/gun/1.1/manual/gun_inform/index.html +++ b/docs/en/gun/1.1/manual/gun_inform/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_push/index.html b/docs/en/gun/1.1/manual/gun_push/index.html index 5d15e40b..59f1fba7 100644 --- a/docs/en/gun/1.1/manual/gun_push/index.html +++ b/docs/en/gun/1.1/manual/gun_push/index.html @@ -165,6 +165,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_response/index.html b/docs/en/gun/1.1/manual/gun_response/index.html index 90243f09..e4f84d91 100644 --- a/docs/en/gun/1.1/manual/gun_response/index.html +++ b/docs/en/gun/1.1/manual/gun_response/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_trailers/index.html b/docs/en/gun/1.1/manual/gun_trailers/index.html index f485f8b0..f18010c1 100644 --- a/docs/en/gun/1.1/manual/gun_trailers/index.html +++ b/docs/en/gun/1.1/manual/gun_trailers/index.html @@ -140,6 +140,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_up/index.html b/docs/en/gun/1.1/manual/gun_up/index.html index 3221ddc4..95ba7336 100644 --- a/docs/en/gun/1.1/manual/gun_up/index.html +++ b/docs/en/gun/1.1/manual/gun_up/index.html @@ -136,6 +136,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_upgrade/index.html b/docs/en/gun/1.1/manual/gun_upgrade/index.html index 8bf68fbf..44b061cc 100644 --- a/docs/en/gun/1.1/manual/gun_upgrade/index.html +++ b/docs/en/gun/1.1/manual/gun_upgrade/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/gun_ws/index.html b/docs/en/gun/1.1/manual/gun_ws/index.html index 730a4afd..7e798393 100644 --- a/docs/en/gun/1.1/manual/gun_ws/index.html +++ b/docs/en/gun/1.1/manual/gun_ws/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.1/manual/index.html b/docs/en/gun/1.1/manual/index.html index 617e8915..3bb4e898 100644 --- a/docs/en/gun/1.1/manual/index.html +++ b/docs/en/gun/1.1/manual/index.html @@ -122,6 +122,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/connect/index.html b/docs/en/gun/1.2/guide/connect/index.html index fbc2e247..c9f806ac 100644 --- a/docs/en/gun/1.2/guide/connect/index.html +++ b/docs/en/gun/1.2/guide/connect/index.html @@ -215,6 +215,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/http/index.html b/docs/en/gun/1.2/guide/http/index.html index 86b58016..c300298c 100644 --- a/docs/en/gun/1.2/guide/http/index.html +++ b/docs/en/gun/1.2/guide/http/index.html @@ -390,6 +390,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/index.html b/docs/en/gun/1.2/guide/index.html index d0d14bb3..8eebd780 100644 --- a/docs/en/gun/1.2/guide/index.html +++ b/docs/en/gun/1.2/guide/index.html @@ -116,6 +116,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/introduction/index.html b/docs/en/gun/1.2/guide/introduction/index.html index 6c25c7fc..b9e64d9b 100644 --- a/docs/en/gun/1.2/guide/introduction/index.html +++ b/docs/en/gun/1.2/guide/introduction/index.html @@ -142,6 +142,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/migrating_from_1.0/index.html b/docs/en/gun/1.2/guide/migrating_from_1.0/index.html index 3a9723a5..3cf21d25 100644 --- a/docs/en/gun/1.2/guide/migrating_from_1.0/index.html +++ b/docs/en/gun/1.2/guide/migrating_from_1.0/index.html @@ -127,6 +127,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/migrating_from_1.1/index.html b/docs/en/gun/1.2/guide/migrating_from_1.1/index.html index 58b14aa2..b5e971ec 100644 --- a/docs/en/gun/1.2/guide/migrating_from_1.1/index.html +++ b/docs/en/gun/1.2/guide/migrating_from_1.1/index.html @@ -133,6 +133,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/protocols/index.html b/docs/en/gun/1.2/guide/protocols/index.html index a6e420d7..1b2ffb5b 100644 --- a/docs/en/gun/1.2/guide/protocols/index.html +++ b/docs/en/gun/1.2/guide/protocols/index.html @@ -269,6 +269,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/start/index.html b/docs/en/gun/1.2/guide/start/index.html index ced73698..1ea556c6 100644 --- a/docs/en/gun/1.2/guide/start/index.html +++ b/docs/en/gun/1.2/guide/start/index.html @@ -144,6 +144,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/guide/websocket/index.html b/docs/en/gun/1.2/guide/websocket/index.html index 0d2a3e89..fbfb8fe5 100644 --- a/docs/en/gun/1.2/guide/websocket/index.html +++ b/docs/en/gun/1.2/guide/websocket/index.html @@ -199,6 +199,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.await/index.html b/docs/en/gun/1.2/manual/gun.await/index.html index 8b704356..35bd4418 100644 --- a/docs/en/gun/1.2/manual/gun.await/index.html +++ b/docs/en/gun/1.2/manual/gun.await/index.html @@ -183,6 +183,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.await_body/index.html b/docs/en/gun/1.2/manual/gun.await_body/index.html index 0c209d4b..5dfeb05f 100644 --- a/docs/en/gun/1.2/manual/gun.await_body/index.html +++ b/docs/en/gun/1.2/manual/gun.await_body/index.html @@ -159,6 +159,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.await_up/index.html b/docs/en/gun/1.2/manual/gun.await_up/index.html index 653a0afe..e6e32889 100644 --- a/docs/en/gun/1.2/manual/gun.await_up/index.html +++ b/docs/en/gun/1.2/manual/gun.await_up/index.html @@ -151,6 +151,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.cancel/index.html b/docs/en/gun/1.2/manual/gun.cancel/index.html index 93d83c13..c971b5b5 100644 --- a/docs/en/gun/1.2/manual/gun.cancel/index.html +++ b/docs/en/gun/1.2/manual/gun.cancel/index.html @@ -137,6 +137,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.close/index.html b/docs/en/gun/1.2/manual/gun.close/index.html index f49cc4f1..a5f97a3d 100644 --- a/docs/en/gun/1.2/manual/gun.close/index.html +++ b/docs/en/gun/1.2/manual/gun.close/index.html @@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.connect/index.html b/docs/en/gun/1.2/manual/gun.connect/index.html index 77c8f019..a8b9b363 100644 --- a/docs/en/gun/1.2/manual/gun.connect/index.html +++ b/docs/en/gun/1.2/manual/gun.connect/index.html @@ -190,6 +190,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.data/index.html b/docs/en/gun/1.2/manual/gun.data/index.html index 31b52b33..62d4d21c 100644 --- a/docs/en/gun/1.2/manual/gun.data/index.html +++ b/docs/en/gun/1.2/manual/gun.data/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.delete/index.html b/docs/en/gun/1.2/manual/gun.delete/index.html index 89019f53..59dd0ed6 100644 --- a/docs/en/gun/1.2/manual/gun.delete/index.html +++ b/docs/en/gun/1.2/manual/gun.delete/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.flush/index.html b/docs/en/gun/1.2/manual/gun.flush/index.html index 60e7bcc6..ef263146 100644 --- a/docs/en/gun/1.2/manual/gun.flush/index.html +++ b/docs/en/gun/1.2/manual/gun.flush/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.get/index.html b/docs/en/gun/1.2/manual/gun.get/index.html index 5fb2b40f..b38e5091 100644 --- a/docs/en/gun/1.2/manual/gun.get/index.html +++ b/docs/en/gun/1.2/manual/gun.get/index.html @@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.head/index.html b/docs/en/gun/1.2/manual/gun.head/index.html index 01357bde..262e44eb 100644 --- a/docs/en/gun/1.2/manual/gun.head/index.html +++ b/docs/en/gun/1.2/manual/gun.head/index.html @@ -162,6 +162,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.info/index.html b/docs/en/gun/1.2/manual/gun.info/index.html index 75305b17..45f544ab 100644 --- a/docs/en/gun/1.2/manual/gun.info/index.html +++ b/docs/en/gun/1.2/manual/gun.info/index.html @@ -133,6 +133,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.open/index.html b/docs/en/gun/1.2/manual/gun.open/index.html index 12dff3a2..613f88d5 100644 --- a/docs/en/gun/1.2/manual/gun.open/index.html +++ b/docs/en/gun/1.2/manual/gun.open/index.html @@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.open_unix/index.html b/docs/en/gun/1.2/manual/gun.open_unix/index.html index c320e5b7..43ba0d84 100644 --- a/docs/en/gun/1.2/manual/gun.open_unix/index.html +++ b/docs/en/gun/1.2/manual/gun.open_unix/index.html @@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.options/index.html b/docs/en/gun/1.2/manual/gun.options/index.html index 8f2d8084..a58c6ecb 100644 --- a/docs/en/gun/1.2/manual/gun.options/index.html +++ b/docs/en/gun/1.2/manual/gun.options/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.patch/index.html b/docs/en/gun/1.2/manual/gun.patch/index.html index 8db854a5..3a1a72d1 100644 --- a/docs/en/gun/1.2/manual/gun.patch/index.html +++ b/docs/en/gun/1.2/manual/gun.patch/index.html @@ -180,6 +180,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.post/index.html b/docs/en/gun/1.2/manual/gun.post/index.html index 1f0029e9..336be965 100644 --- a/docs/en/gun/1.2/manual/gun.post/index.html +++ b/docs/en/gun/1.2/manual/gun.post/index.html @@ -178,6 +178,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.put/index.html b/docs/en/gun/1.2/manual/gun.put/index.html index a229eb3b..9d1a816a 100644 --- a/docs/en/gun/1.2/manual/gun.put/index.html +++ b/docs/en/gun/1.2/manual/gun.put/index.html @@ -178,6 +178,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.request/index.html b/docs/en/gun/1.2/manual/gun.request/index.html index 2a45d104..541e3865 100644 --- a/docs/en/gun/1.2/manual/gun.request/index.html +++ b/docs/en/gun/1.2/manual/gun.request/index.html @@ -164,6 +164,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.ws_send/index.html b/docs/en/gun/1.2/manual/gun.ws_send/index.html index f8ca9383..7aa0e504 100644 --- a/docs/en/gun/1.2/manual/gun.ws_send/index.html +++ b/docs/en/gun/1.2/manual/gun.ws_send/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun.ws_upgrade/index.html b/docs/en/gun/1.2/manual/gun.ws_upgrade/index.html index 38442659..d65ca896 100644 --- a/docs/en/gun/1.2/manual/gun.ws_upgrade/index.html +++ b/docs/en/gun/1.2/manual/gun.ws_upgrade/index.html @@ -170,6 +170,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun/index.html b/docs/en/gun/1.2/manual/gun/index.html index cde7ac5c..149a1391 100644 --- a/docs/en/gun/1.2/manual/gun/index.html +++ b/docs/en/gun/1.2/manual/gun/index.html @@ -356,6 +356,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_app/index.html b/docs/en/gun/1.2/manual/gun_app/index.html index 8ed8d020..616b00f7 100644 --- a/docs/en/gun/1.2/manual/gun_app/index.html +++ b/docs/en/gun/1.2/manual/gun_app/index.html @@ -122,6 +122,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_data/index.html b/docs/en/gun/1.2/manual/gun_data/index.html index 2bb6bb67..f3f0b3e8 100644 --- a/docs/en/gun/1.2/manual/gun_data/index.html +++ b/docs/en/gun/1.2/manual/gun_data/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_down/index.html b/docs/en/gun/1.2/manual/gun_down/index.html index 43f573b1..df35f629 100644 --- a/docs/en/gun/1.2/manual/gun_down/index.html +++ b/docs/en/gun/1.2/manual/gun_down/index.html @@ -152,6 +152,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_error/index.html b/docs/en/gun/1.2/manual/gun_error/index.html index b2c94cb0..01b7a02c 100644 --- a/docs/en/gun/1.2/manual/gun_error/index.html +++ b/docs/en/gun/1.2/manual/gun_error/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_inform/index.html b/docs/en/gun/1.2/manual/gun_inform/index.html index 5a954ee5..d9636a71 100644 --- a/docs/en/gun/1.2/manual/gun_inform/index.html +++ b/docs/en/gun/1.2/manual/gun_inform/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_push/index.html b/docs/en/gun/1.2/manual/gun_push/index.html index 2b4837c9..05e643cc 100644 --- a/docs/en/gun/1.2/manual/gun_push/index.html +++ b/docs/en/gun/1.2/manual/gun_push/index.html @@ -165,6 +165,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_response/index.html b/docs/en/gun/1.2/manual/gun_response/index.html index e77c7cd0..79b03f29 100644 --- a/docs/en/gun/1.2/manual/gun_response/index.html +++ b/docs/en/gun/1.2/manual/gun_response/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_trailers/index.html b/docs/en/gun/1.2/manual/gun_trailers/index.html index b21c463a..b8f01a5d 100644 --- a/docs/en/gun/1.2/manual/gun_trailers/index.html +++ b/docs/en/gun/1.2/manual/gun_trailers/index.html @@ -140,6 +140,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_up/index.html b/docs/en/gun/1.2/manual/gun_up/index.html index d9031705..636e5d59 100644 --- a/docs/en/gun/1.2/manual/gun_up/index.html +++ b/docs/en/gun/1.2/manual/gun_up/index.html @@ -136,6 +136,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_upgrade/index.html b/docs/en/gun/1.2/manual/gun_upgrade/index.html index eb30b5db..db941a54 100644 --- a/docs/en/gun/1.2/manual/gun_upgrade/index.html +++ b/docs/en/gun/1.2/manual/gun_upgrade/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/gun_ws/index.html b/docs/en/gun/1.2/manual/gun_ws/index.html index 7cab02fb..3b1b6511 100644 --- a/docs/en/gun/1.2/manual/gun_ws/index.html +++ b/docs/en/gun/1.2/manual/gun_ws/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.2/manual/index.html b/docs/en/gun/1.2/manual/index.html index 9d08e36a..88974967 100644 --- a/docs/en/gun/1.2/manual/index.html +++ b/docs/en/gun/1.2/manual/index.html @@ -122,6 +122,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/connect/index.html b/docs/en/gun/1.3/guide/connect/index.html index 178f7c9a..4623177a 100644 --- a/docs/en/gun/1.3/guide/connect/index.html +++ b/docs/en/gun/1.3/guide/connect/index.html @@ -215,6 +215,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/http/index.html b/docs/en/gun/1.3/guide/http/index.html index 9de2dfaf..4f34020e 100644 --- a/docs/en/gun/1.3/guide/http/index.html +++ b/docs/en/gun/1.3/guide/http/index.html @@ -390,6 +390,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/index.html b/docs/en/gun/1.3/guide/index.html index 4d840ea5..22225274 100644 --- a/docs/en/gun/1.3/guide/index.html +++ b/docs/en/gun/1.3/guide/index.html @@ -120,6 +120,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/introduction/index.html b/docs/en/gun/1.3/guide/introduction/index.html index 31ce9f05..7b8ee38e 100644 --- a/docs/en/gun/1.3/guide/introduction/index.html +++ b/docs/en/gun/1.3/guide/introduction/index.html @@ -142,6 +142,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/migrating_from_1.0/index.html b/docs/en/gun/1.3/guide/migrating_from_1.0/index.html index 1215f965..89496439 100644 --- a/docs/en/gun/1.3/guide/migrating_from_1.0/index.html +++ b/docs/en/gun/1.3/guide/migrating_from_1.0/index.html @@ -127,6 +127,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/migrating_from_1.1/index.html b/docs/en/gun/1.3/guide/migrating_from_1.1/index.html index 9b0bfbae..177bd479 100644 --- a/docs/en/gun/1.3/guide/migrating_from_1.1/index.html +++ b/docs/en/gun/1.3/guide/migrating_from_1.1/index.html @@ -133,6 +133,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/migrating_from_1.2/index.html b/docs/en/gun/1.3/guide/migrating_from_1.2/index.html index 534f80b9..b57e792f 100644 --- a/docs/en/gun/1.3/guide/migrating_from_1.2/index.html +++ b/docs/en/gun/1.3/guide/migrating_from_1.2/index.html @@ -143,6 +143,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/migrating_from_1.3/index.html b/docs/en/gun/1.3/guide/migrating_from_1.3/index.html index 09c92159..76cd092b 100644 --- a/docs/en/gun/1.3/guide/migrating_from_1.3/index.html +++ b/docs/en/gun/1.3/guide/migrating_from_1.3/index.html @@ -124,6 +124,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/protocols/index.html b/docs/en/gun/1.3/guide/protocols/index.html index 32cc3e19..3434a21c 100644 --- a/docs/en/gun/1.3/guide/protocols/index.html +++ b/docs/en/gun/1.3/guide/protocols/index.html @@ -269,6 +269,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/start/index.html b/docs/en/gun/1.3/guide/start/index.html index ffe60dc2..9ab8ce4e 100644 --- a/docs/en/gun/1.3/guide/start/index.html +++ b/docs/en/gun/1.3/guide/start/index.html @@ -144,6 +144,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/guide/websocket/index.html b/docs/en/gun/1.3/guide/websocket/index.html index 52ad70d3..28119678 100644 --- a/docs/en/gun/1.3/guide/websocket/index.html +++ b/docs/en/gun/1.3/guide/websocket/index.html @@ -209,6 +209,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.await/index.html b/docs/en/gun/1.3/manual/gun.await/index.html index 3635352d..1b152a50 100644 --- a/docs/en/gun/1.3/manual/gun.await/index.html +++ b/docs/en/gun/1.3/manual/gun.await/index.html @@ -183,6 +183,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.await_body/index.html b/docs/en/gun/1.3/manual/gun.await_body/index.html index 22f3a957..8d9254ae 100644 --- a/docs/en/gun/1.3/manual/gun.await_body/index.html +++ b/docs/en/gun/1.3/manual/gun.await_body/index.html @@ -159,6 +159,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.await_up/index.html b/docs/en/gun/1.3/manual/gun.await_up/index.html index d34e3b65..b30ce834 100644 --- a/docs/en/gun/1.3/manual/gun.await_up/index.html +++ b/docs/en/gun/1.3/manual/gun.await_up/index.html @@ -151,6 +151,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.cancel/index.html b/docs/en/gun/1.3/manual/gun.cancel/index.html index db0ad23a..8dd9b60d 100644 --- a/docs/en/gun/1.3/manual/gun.cancel/index.html +++ b/docs/en/gun/1.3/manual/gun.cancel/index.html @@ -137,6 +137,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.close/index.html b/docs/en/gun/1.3/manual/gun.close/index.html index 0623dbe8..ea4d8088 100644 --- a/docs/en/gun/1.3/manual/gun.close/index.html +++ b/docs/en/gun/1.3/manual/gun.close/index.html @@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.connect/index.html b/docs/en/gun/1.3/manual/gun.connect/index.html index 1a96d2eb..6b5bff42 100644 --- a/docs/en/gun/1.3/manual/gun.connect/index.html +++ b/docs/en/gun/1.3/manual/gun.connect/index.html @@ -190,6 +190,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.data/index.html b/docs/en/gun/1.3/manual/gun.data/index.html index c7ad077d..c90288e6 100644 --- a/docs/en/gun/1.3/manual/gun.data/index.html +++ b/docs/en/gun/1.3/manual/gun.data/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.delete/index.html b/docs/en/gun/1.3/manual/gun.delete/index.html index 45086edd..2825f5f2 100644 --- a/docs/en/gun/1.3/manual/gun.delete/index.html +++ b/docs/en/gun/1.3/manual/gun.delete/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.flush/index.html b/docs/en/gun/1.3/manual/gun.flush/index.html index 001e627d..e7d3399c 100644 --- a/docs/en/gun/1.3/manual/gun.flush/index.html +++ b/docs/en/gun/1.3/manual/gun.flush/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.get/index.html b/docs/en/gun/1.3/manual/gun.get/index.html index 06a2cd32..7800e31f 100644 --- a/docs/en/gun/1.3/manual/gun.get/index.html +++ b/docs/en/gun/1.3/manual/gun.get/index.html @@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.head/index.html b/docs/en/gun/1.3/manual/gun.head/index.html index ddce5ff9..7bf23809 100644 --- a/docs/en/gun/1.3/manual/gun.head/index.html +++ b/docs/en/gun/1.3/manual/gun.head/index.html @@ -162,6 +162,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.info/index.html b/docs/en/gun/1.3/manual/gun.info/index.html index b1e505d8..c50cbf21 100644 --- a/docs/en/gun/1.3/manual/gun.info/index.html +++ b/docs/en/gun/1.3/manual/gun.info/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.open/index.html b/docs/en/gun/1.3/manual/gun.open/index.html index 8052cd1c..a55d7b34 100644 --- a/docs/en/gun/1.3/manual/gun.open/index.html +++ b/docs/en/gun/1.3/manual/gun.open/index.html @@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.open_unix/index.html b/docs/en/gun/1.3/manual/gun.open_unix/index.html index aaed5ffb..8f6d5f35 100644 --- a/docs/en/gun/1.3/manual/gun.open_unix/index.html +++ b/docs/en/gun/1.3/manual/gun.open_unix/index.html @@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.options/index.html b/docs/en/gun/1.3/manual/gun.options/index.html index e549ca8a..6e17fbb8 100644 --- a/docs/en/gun/1.3/manual/gun.options/index.html +++ b/docs/en/gun/1.3/manual/gun.options/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.patch/index.html b/docs/en/gun/1.3/manual/gun.patch/index.html index 449c21ef..077f1116 100644 --- a/docs/en/gun/1.3/manual/gun.patch/index.html +++ b/docs/en/gun/1.3/manual/gun.patch/index.html @@ -180,6 +180,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.post/index.html b/docs/en/gun/1.3/manual/gun.post/index.html index e0252225..17c50bc1 100644 --- a/docs/en/gun/1.3/manual/gun.post/index.html +++ b/docs/en/gun/1.3/manual/gun.post/index.html @@ -178,6 +178,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.put/index.html b/docs/en/gun/1.3/manual/gun.put/index.html index e9f407d3..9974b335 100644 --- a/docs/en/gun/1.3/manual/gun.put/index.html +++ b/docs/en/gun/1.3/manual/gun.put/index.html @@ -178,6 +178,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.request/index.html b/docs/en/gun/1.3/manual/gun.request/index.html index fca9193c..49488969 100644 --- a/docs/en/gun/1.3/manual/gun.request/index.html +++ b/docs/en/gun/1.3/manual/gun.request/index.html @@ -164,6 +164,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.ws_send/index.html b/docs/en/gun/1.3/manual/gun.ws_send/index.html index 82ec08f7..11d0e8a4 100644 --- a/docs/en/gun/1.3/manual/gun.ws_send/index.html +++ b/docs/en/gun/1.3/manual/gun.ws_send/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun.ws_upgrade/index.html b/docs/en/gun/1.3/manual/gun.ws_upgrade/index.html index e5b9c4ac..d54d5e41 100644 --- a/docs/en/gun/1.3/manual/gun.ws_upgrade/index.html +++ b/docs/en/gun/1.3/manual/gun.ws_upgrade/index.html @@ -170,6 +170,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun/index.html b/docs/en/gun/1.3/manual/gun/index.html index 894b82c1..b70b2dce 100644 --- a/docs/en/gun/1.3/manual/gun/index.html +++ b/docs/en/gun/1.3/manual/gun/index.html @@ -362,6 +362,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_app/index.html b/docs/en/gun/1.3/manual/gun_app/index.html index 5d6e218b..160f39ce 100644 --- a/docs/en/gun/1.3/manual/gun_app/index.html +++ b/docs/en/gun/1.3/manual/gun_app/index.html @@ -122,6 +122,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_data/index.html b/docs/en/gun/1.3/manual/gun_data/index.html index b79f4b13..82b3f0d6 100644 --- a/docs/en/gun/1.3/manual/gun_data/index.html +++ b/docs/en/gun/1.3/manual/gun_data/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_down/index.html b/docs/en/gun/1.3/manual/gun_down/index.html index 4d4072b3..1b13aff3 100644 --- a/docs/en/gun/1.3/manual/gun_down/index.html +++ b/docs/en/gun/1.3/manual/gun_down/index.html @@ -152,6 +152,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_error/index.html b/docs/en/gun/1.3/manual/gun_error/index.html index cd1f8ec4..bb7c0154 100644 --- a/docs/en/gun/1.3/manual/gun_error/index.html +++ b/docs/en/gun/1.3/manual/gun_error/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_inform/index.html b/docs/en/gun/1.3/manual/gun_inform/index.html index 14d31c47..84f5123a 100644 --- a/docs/en/gun/1.3/manual/gun_inform/index.html +++ b/docs/en/gun/1.3/manual/gun_inform/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_push/index.html b/docs/en/gun/1.3/manual/gun_push/index.html index 47f926f6..29767245 100644 --- a/docs/en/gun/1.3/manual/gun_push/index.html +++ b/docs/en/gun/1.3/manual/gun_push/index.html @@ -165,6 +165,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_response/index.html b/docs/en/gun/1.3/manual/gun_response/index.html index 74a6a136..0d242cca 100644 --- a/docs/en/gun/1.3/manual/gun_response/index.html +++ b/docs/en/gun/1.3/manual/gun_response/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_trailers/index.html b/docs/en/gun/1.3/manual/gun_trailers/index.html index a07165cf..3ec374b6 100644 --- a/docs/en/gun/1.3/manual/gun_trailers/index.html +++ b/docs/en/gun/1.3/manual/gun_trailers/index.html @@ -140,6 +140,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_up/index.html b/docs/en/gun/1.3/manual/gun_up/index.html index b9e66753..27942792 100644 --- a/docs/en/gun/1.3/manual/gun_up/index.html +++ b/docs/en/gun/1.3/manual/gun_up/index.html @@ -136,6 +136,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_upgrade/index.html b/docs/en/gun/1.3/manual/gun_upgrade/index.html index b452c83b..6f550571 100644 --- a/docs/en/gun/1.3/manual/gun_upgrade/index.html +++ b/docs/en/gun/1.3/manual/gun_upgrade/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/gun_ws/index.html b/docs/en/gun/1.3/manual/gun_ws/index.html index dfd98510..a32074c3 100644 --- a/docs/en/gun/1.3/manual/gun_ws/index.html +++ b/docs/en/gun/1.3/manual/gun_ws/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/1.3/manual/index.html b/docs/en/gun/1.3/manual/index.html index 730f347f..c64239f4 100644 --- a/docs/en/gun/1.3/manual/index.html +++ b/docs/en/gun/1.3/manual/index.html @@ -122,6 +122,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/connect/index.html b/docs/en/gun/2.0/guide/connect/index.html index ca76c021..a0eb61b9 100644 --- a/docs/en/gun/2.0/guide/connect/index.html +++ b/docs/en/gun/2.0/guide/connect/index.html @@ -216,6 +216,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/http/index.html b/docs/en/gun/2.0/guide/http/index.html index bf50805a..1ba1fcf1 100644 --- a/docs/en/gun/2.0/guide/http/index.html +++ b/docs/en/gun/2.0/guide/http/index.html @@ -390,6 +390,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/index.html b/docs/en/gun/2.0/guide/index.html index 19353a5f..af9d2e31 100644 --- a/docs/en/gun/2.0/guide/index.html +++ b/docs/en/gun/2.0/guide/index.html @@ -126,6 +126,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/internals_tls_over_tls/index.html b/docs/en/gun/2.0/guide/internals_tls_over_tls/index.html index 0c672220..4f66ec05 100644 --- a/docs/en/gun/2.0/guide/internals_tls_over_tls/index.html +++ b/docs/en/gun/2.0/guide/internals_tls_over_tls/index.html @@ -160,6 +160,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/introduction/index.html b/docs/en/gun/2.0/guide/introduction/index.html index be153533..7fa188bd 100644 --- a/docs/en/gun/2.0/guide/introduction/index.html +++ b/docs/en/gun/2.0/guide/introduction/index.html @@ -141,6 +141,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/migrating_from_1.0/index.html b/docs/en/gun/2.0/guide/migrating_from_1.0/index.html index b3f3f3b3..8780c635 100644 --- a/docs/en/gun/2.0/guide/migrating_from_1.0/index.html +++ b/docs/en/gun/2.0/guide/migrating_from_1.0/index.html @@ -127,6 +127,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/migrating_from_1.1/index.html b/docs/en/gun/2.0/guide/migrating_from_1.1/index.html index 564e5b3a..3eee31f0 100644 --- a/docs/en/gun/2.0/guide/migrating_from_1.1/index.html +++ b/docs/en/gun/2.0/guide/migrating_from_1.1/index.html @@ -133,6 +133,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/migrating_from_1.2/index.html b/docs/en/gun/2.0/guide/migrating_from_1.2/index.html index ddaab2d4..8c5af4fe 100644 --- a/docs/en/gun/2.0/guide/migrating_from_1.2/index.html +++ b/docs/en/gun/2.0/guide/migrating_from_1.2/index.html @@ -143,6 +143,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/migrating_from_1.3/index.html b/docs/en/gun/2.0/guide/migrating_from_1.3/index.html index e6d176d5..ed970fb3 100644 --- a/docs/en/gun/2.0/guide/migrating_from_1.3/index.html +++ b/docs/en/gun/2.0/guide/migrating_from_1.3/index.html @@ -275,6 +275,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/migrating_from_2.0/index.html b/docs/en/gun/2.0/guide/migrating_from_2.0/index.html index 27ef9222..ba1b88a8 100644 --- a/docs/en/gun/2.0/guide/migrating_from_2.0/index.html +++ b/docs/en/gun/2.0/guide/migrating_from_2.0/index.html @@ -122,6 +122,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/protocols/index.html b/docs/en/gun/2.0/guide/protocols/index.html index 135b734e..d27c2416 100644 --- a/docs/en/gun/2.0/guide/protocols/index.html +++ b/docs/en/gun/2.0/guide/protocols/index.html @@ -267,6 +267,8 @@ +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/start/index.html b/docs/en/gun/2.0/guide/start/index.html index dcff2a51..62caeed4 100644 --- a/docs/en/gun/2.0/guide/start/index.html +++ b/docs/en/gun/2.0/guide/start/index.html @@ -144,6 +144,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/guide/websocket/index.html b/docs/en/gun/2.0/guide/websocket/index.html index f952ad39..49884142 100644 --- a/docs/en/gun/2.0/guide/websocket/index.html +++ b/docs/en/gun/2.0/guide/websocket/index.html @@ -202,6 +202,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.await/index.html b/docs/en/gun/2.0/manual/gun.await/index.html index d56eb283..1b55f001 100644 --- a/docs/en/gun/2.0/manual/gun.await/index.html +++ b/docs/en/gun/2.0/manual/gun.await/index.html @@ -194,6 +194,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.await_body/index.html b/docs/en/gun/2.0/manual/gun.await_body/index.html index 4713df20..b65ec566 100644 --- a/docs/en/gun/2.0/manual/gun.await_body/index.html +++ b/docs/en/gun/2.0/manual/gun.await_body/index.html @@ -162,6 +162,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.await_up/index.html b/docs/en/gun/2.0/manual/gun.await_up/index.html index 2c922837..9833b403 100644 --- a/docs/en/gun/2.0/manual/gun.await_up/index.html +++ b/docs/en/gun/2.0/manual/gun.await_up/index.html @@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.cancel/index.html b/docs/en/gun/2.0/manual/gun.cancel/index.html index 971150a5..2fa4739e 100644 --- a/docs/en/gun/2.0/manual/gun.cancel/index.html +++ b/docs/en/gun/2.0/manual/gun.cancel/index.html @@ -137,6 +137,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.close/index.html b/docs/en/gun/2.0/manual/gun.close/index.html index 2295095a..9f1c2537 100644 --- a/docs/en/gun/2.0/manual/gun.close/index.html +++ b/docs/en/gun/2.0/manual/gun.close/index.html @@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.connect/index.html b/docs/en/gun/2.0/manual/gun.connect/index.html index 555b0586..ff0f348f 100644 --- a/docs/en/gun/2.0/manual/gun.connect/index.html +++ b/docs/en/gun/2.0/manual/gun.connect/index.html @@ -190,6 +190,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.data/index.html b/docs/en/gun/2.0/manual/gun.data/index.html index f86e7921..944b87d8 100644 --- a/docs/en/gun/2.0/manual/gun.data/index.html +++ b/docs/en/gun/2.0/manual/gun.data/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.delete/index.html b/docs/en/gun/2.0/manual/gun.delete/index.html index a1979aa5..c2bd9841 100644 --- a/docs/en/gun/2.0/manual/gun.delete/index.html +++ b/docs/en/gun/2.0/manual/gun.delete/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.flush/index.html b/docs/en/gun/2.0/manual/gun.flush/index.html index 5ef4226c..bf3eaff1 100644 --- a/docs/en/gun/2.0/manual/gun.flush/index.html +++ b/docs/en/gun/2.0/manual/gun.flush/index.html @@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.get/index.html b/docs/en/gun/2.0/manual/gun.get/index.html index a51367a7..853c11b1 100644 --- a/docs/en/gun/2.0/manual/gun.get/index.html +++ b/docs/en/gun/2.0/manual/gun.get/index.html @@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.head/index.html b/docs/en/gun/2.0/manual/gun.head/index.html index e1c62c10..e9695a9c 100644 --- a/docs/en/gun/2.0/manual/gun.head/index.html +++ b/docs/en/gun/2.0/manual/gun.head/index.html @@ -162,6 +162,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.headers/index.html b/docs/en/gun/2.0/manual/gun.headers/index.html index 6103f749..34827382 100644 --- a/docs/en/gun/2.0/manual/gun.headers/index.html +++ b/docs/en/gun/2.0/manual/gun.headers/index.html @@ -154,6 +154,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.info/index.html b/docs/en/gun/2.0/manual/gun.info/index.html index 2eb09ca8..b3d58161 100644 --- a/docs/en/gun/2.0/manual/gun.info/index.html +++ b/docs/en/gun/2.0/manual/gun.info/index.html @@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.open/index.html b/docs/en/gun/2.0/manual/gun.open/index.html index 554687b7..fa5b24b4 100644 --- a/docs/en/gun/2.0/manual/gun.open/index.html +++ b/docs/en/gun/2.0/manual/gun.open/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.open_unix/index.html b/docs/en/gun/2.0/manual/gun.open_unix/index.html index a9b3b33f..4cfedbef 100644 --- a/docs/en/gun/2.0/manual/gun.open_unix/index.html +++ b/docs/en/gun/2.0/manual/gun.open_unix/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.options/index.html b/docs/en/gun/2.0/manual/gun.options/index.html index f0cc5887..8dc5e332 100644 --- a/docs/en/gun/2.0/manual/gun.options/index.html +++ b/docs/en/gun/2.0/manual/gun.options/index.html @@ -157,6 +157,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.patch/index.html b/docs/en/gun/2.0/manual/gun.patch/index.html index 92457fa3..f84c6cb1 100644 --- a/docs/en/gun/2.0/manual/gun.patch/index.html +++ b/docs/en/gun/2.0/manual/gun.patch/index.html @@ -185,6 +185,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.post/index.html b/docs/en/gun/2.0/manual/gun.post/index.html index d1a5ed86..303070bc 100644 --- a/docs/en/gun/2.0/manual/gun.post/index.html +++ b/docs/en/gun/2.0/manual/gun.post/index.html @@ -183,6 +183,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.put/index.html b/docs/en/gun/2.0/manual/gun.put/index.html index 22479544..6ea87f72 100644 --- a/docs/en/gun/2.0/manual/gun.put/index.html +++ b/docs/en/gun/2.0/manual/gun.put/index.html @@ -183,6 +183,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.request/index.html b/docs/en/gun/2.0/manual/gun.request/index.html index c5afcbfc..5735195f 100644 --- a/docs/en/gun/2.0/manual/gun.request/index.html +++ b/docs/en/gun/2.0/manual/gun.request/index.html @@ -161,6 +161,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.set_owner/index.html b/docs/en/gun/2.0/manual/gun.set_owner/index.html index 7b1a078f..8463d0e7 100644 --- a/docs/en/gun/2.0/manual/gun.set_owner/index.html +++ b/docs/en/gun/2.0/manual/gun.set_owner/index.html @@ -135,6 +135,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.shutdown/index.html b/docs/en/gun/2.0/manual/gun.shutdown/index.html index 3f08ec1d..1c1211cf 100644 --- a/docs/en/gun/2.0/manual/gun.shutdown/index.html +++ b/docs/en/gun/2.0/manual/gun.shutdown/index.html @@ -139,6 +139,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.stream_info/index.html b/docs/en/gun/2.0/manual/gun.stream_info/index.html index 326aa677..bf2110b5 100644 --- a/docs/en/gun/2.0/manual/gun.stream_info/index.html +++ b/docs/en/gun/2.0/manual/gun.stream_info/index.html @@ -154,6 +154,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.update_flow/index.html b/docs/en/gun/2.0/manual/gun.update_flow/index.html index ffd97353..9fbd1efa 100644 --- a/docs/en/gun/2.0/manual/gun.update_flow/index.html +++ b/docs/en/gun/2.0/manual/gun.update_flow/index.html @@ -139,6 +139,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.ws_send/index.html b/docs/en/gun/2.0/manual/gun.ws_send/index.html index 5ba82e60..b3b5cd05 100644 --- a/docs/en/gun/2.0/manual/gun.ws_send/index.html +++ b/docs/en/gun/2.0/manual/gun.ws_send/index.html @@ -155,6 +155,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun.ws_upgrade/index.html b/docs/en/gun/2.0/manual/gun.ws_upgrade/index.html index 740809a5..de6756cf 100644 --- a/docs/en/gun/2.0/manual/gun.ws_upgrade/index.html +++ b/docs/en/gun/2.0/manual/gun.ws_upgrade/index.html @@ -183,6 +183,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun/index.html b/docs/en/gun/2.0/manual/gun/index.html index 4bbbe760..41dc02b9 100644 --- a/docs/en/gun/2.0/manual/gun/index.html +++ b/docs/en/gun/2.0/manual/gun/index.html @@ -597,6 +597,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_app/index.html b/docs/en/gun/2.0/manual/gun_app/index.html index 04adf1b2..e268812a 100644 --- a/docs/en/gun/2.0/manual/gun_app/index.html +++ b/docs/en/gun/2.0/manual/gun_app/index.html @@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_cookies.domain_match/index.html b/docs/en/gun/2.0/manual/gun_cookies.domain_match/index.html index f0b12616..5b9fb769 100644 --- a/docs/en/gun/2.0/manual/gun_cookies.domain_match/index.html +++ b/docs/en/gun/2.0/manual/gun_cookies.domain_match/index.html @@ -134,6 +134,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_cookies.path_match/index.html b/docs/en/gun/2.0/manual/gun_cookies.path_match/index.html index 1d4222c7..9d53282d 100644 --- a/docs/en/gun/2.0/manual/gun_cookies.path_match/index.html +++ b/docs/en/gun/2.0/manual/gun_cookies.path_match/index.html @@ -134,6 +134,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_cookies/index.html b/docs/en/gun/2.0/manual/gun_cookies/index.html index 8c24282b..4d2595a2 100644 --- a/docs/en/gun/2.0/manual/gun_cookies/index.html +++ b/docs/en/gun/2.0/manual/gun_cookies/index.html @@ -233,6 +233,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_cookies_list/index.html b/docs/en/gun/2.0/manual/gun_cookies_list/index.html index 973b5c0d..a2e6d207 100644 --- a/docs/en/gun/2.0/manual/gun_cookies_list/index.html +++ b/docs/en/gun/2.0/manual/gun_cookies_list/index.html @@ -131,6 +131,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_data/index.html b/docs/en/gun/2.0/manual/gun_data/index.html index cc177d8c..b5fa189d 100644 --- a/docs/en/gun/2.0/manual/gun_data/index.html +++ b/docs/en/gun/2.0/manual/gun_data/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_down/index.html b/docs/en/gun/2.0/manual/gun_down/index.html index 5deecf4d..d2f1370f 100644 --- a/docs/en/gun/2.0/manual/gun_down/index.html +++ b/docs/en/gun/2.0/manual/gun_down/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_error/index.html b/docs/en/gun/2.0/manual/gun_error/index.html index c4b3ea03..b83d346a 100644 --- a/docs/en/gun/2.0/manual/gun_error/index.html +++ b/docs/en/gun/2.0/manual/gun_error/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_event/index.html b/docs/en/gun/2.0/manual/gun_event/index.html index 69f521df..bafd6e13 100644 --- a/docs/en/gun/2.0/manual/gun_event/index.html +++ b/docs/en/gun/2.0/manual/gun_event/index.html @@ -512,6 +512,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_inform/index.html b/docs/en/gun/2.0/manual/gun_inform/index.html index fa4c6348..bbc7e836 100644 --- a/docs/en/gun/2.0/manual/gun_inform/index.html +++ b/docs/en/gun/2.0/manual/gun_inform/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_push/index.html b/docs/en/gun/2.0/manual/gun_push/index.html index 51364fdc..f3930b05 100644 --- a/docs/en/gun/2.0/manual/gun_push/index.html +++ b/docs/en/gun/2.0/manual/gun_push/index.html @@ -165,6 +165,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_response/index.html b/docs/en/gun/2.0/manual/gun_response/index.html index 29e34041..086388d2 100644 --- a/docs/en/gun/2.0/manual/gun_response/index.html +++ b/docs/en/gun/2.0/manual/gun_response/index.html @@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_trailers/index.html b/docs/en/gun/2.0/manual/gun_trailers/index.html index fda6a656..80b8f7c1 100644 --- a/docs/en/gun/2.0/manual/gun_trailers/index.html +++ b/docs/en/gun/2.0/manual/gun_trailers/index.html @@ -140,6 +140,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_tunnel_up/index.html b/docs/en/gun/2.0/manual/gun_tunnel_up/index.html index 9fcf952d..749945ea 100644 --- a/docs/en/gun/2.0/manual/gun_tunnel_up/index.html +++ b/docs/en/gun/2.0/manual/gun_tunnel_up/index.html @@ -140,6 +140,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_up/index.html b/docs/en/gun/2.0/manual/gun_up/index.html index fa87b7d7..8f37e7f5 100644 --- a/docs/en/gun/2.0/manual/gun_up/index.html +++ b/docs/en/gun/2.0/manual/gun_up/index.html @@ -137,6 +137,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_upgrade/index.html b/docs/en/gun/2.0/manual/gun_upgrade/index.html index 3fafdc45..52ad602a 100644 --- a/docs/en/gun/2.0/manual/gun_upgrade/index.html +++ b/docs/en/gun/2.0/manual/gun_upgrade/index.html @@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_ws/index.html b/docs/en/gun/2.0/manual/gun_ws/index.html index 9cf3102b..10f21e2a 100644 --- a/docs/en/gun/2.0/manual/gun_ws/index.html +++ b/docs/en/gun/2.0/manual/gun_ws/index.html @@ -145,6 +145,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/gun_ws_protocol/index.html b/docs/en/gun/2.0/manual/gun_ws_protocol/index.html index 783fc4a8..31592f2c 100644 --- a/docs/en/gun/2.0/manual/gun_ws_protocol/index.html +++ b/docs/en/gun/2.0/manual/gun_ws_protocol/index.html @@ -171,6 +171,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.0/manual/index.html b/docs/en/gun/2.0/manual/index.html index b615bd35..cac11756 100644 --- a/docs/en/gun/2.0/manual/index.html +++ b/docs/en/gun/2.0/manual/index.html @@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite --> +
  • 2.1
  • +
  • 2.0
  • 1.3
  • diff --git a/docs/en/gun/2.1/guide/connect.asciidoc b/docs/en/gun/2.1/guide/connect.asciidoc new file mode 100644 index 00000000..08f8db29 --- /dev/null +++ b/docs/en/gun/2.1/guide/connect.asciidoc @@ -0,0 +1,166 @@ +[[connect]] +== Connection + +This chapter describes how to open, monitor and close +a connection using the Gun client. + +=== Gun connections + +Gun is designed with the HTTP/2 and Websocket protocols in mind. +They are built for long-running connections that allow concurrent +exchange of data, either in the form of request/responses for +HTTP/2 or in the form of messages for Websocket. + +A Gun connection is an Erlang process that manages a socket to +a remote endpoint. This Gun connection is owned by a user +process that is called the _owner_ of the connection, and is +managed by the supervision tree of the `gun` application. + +Any process can communicate with the Gun connection +by calling functions from the module `gun`. All functions +perform their respective operations asynchronously. The Gun +connection will send Erlang messages to the calling process +whenever needed. + +When the remote endpoint closes the connection, Gun attempts +to reconnect automatically. + +=== Opening a new connection + +The `gun:open/2,3` function must be used to open a connection. + +.Opening a connection to example.org on port 443 +[source,erlang] +---- +{ok, ConnPid} = gun:open("example.org", 443). +---- + +If the port given is 443, Gun will attempt to connect using +TLS. The protocol will be selected automatically using the +ALPN extension for TLS. By default Gun supports HTTP/2 +and HTTP/1.1 when connecting using TLS. + +For any other port, Gun will attempt to connect using +plain TCP and will use the HTTP/1.1 protocol. + +The transport and protocol used can be overriden via +options. The manual documents all available options. + +Options can be provided as a third argument, and take the +form of a map. + +.Opening a TLS connection to example.org on port 8443 +[source,erlang] +---- +{ok, ConnPid} = gun:open("example.org", 8443, #{transport => tls}). +---- + +When using TLS you may want to tweak the +http://erlang.org/doc/man/ssl_app.html#configuration[configuration] +for the `ssl` application, in particular the `session_lifetime` +and `session_cache_client_max` to limit the amount of memory +used for the TLS sessions cache. + +=== Waiting for the connection to be established + +When Gun successfully connects to the server, it sends a +`gun_up` message with the protocol that has been selected +for the connection. + +Gun provides the functions `gun:await_up/1,2,3` that wait +for the `gun_up` message. They can optionally take a monitor +reference and/or timeout value. If no monitor is provided, +one will be created for the duration of the function call. + +.Synchronous opening of a connection +[source,erlang] +---- +{ok, ConnPid} = gun:open("example.org", 443), +{ok, Protocol} = gun:await_up(ConnPid). +---- + +=== Handling connection loss + +When the connection is lost, Gun will send a `gun_down` +message indicating the current protocol, the reason the +connection was lost and two lists of stream references. + +The first list indicates open streams that _may_ have been +processed by the server. The second list indicates open +streams that the server did not process. + +=== Monitoring the connection process + +Because software errors are unavoidable, it is important to +detect when the Gun process crashes. It is also important +to detect when it exits normally. Erlang provides two ways +to do that: links and monitors. + +Gun leaves you the choice as to which one will be used. +However, if you use the `gun:await/2,3` or `gun:await_body/2,3` +functions, a monitor may be used for you to avoid getting +stuck waiting for a message that will never come. + +If you choose to monitor yourself you can do it on a permanent +basis rather than on every message you will receive, saving +resources. Indeed, the `gun:await/3,4` and `gun:await_body/3,4` +functions both accept a monitor argument if you have one already. + +.Monitoring the connection process +[source,erlang] +---- +{ok, ConnPid} = gun:open("example.org", 443). +MRef = monitor(process, ConnPid). +---- + +This monitor reference can be kept and used until the connection +process exits. + +.Handling `DOWN` messages +[source,erlang] +---- +receive + %% Receive Gun messages here... + {'DOWN', Mref, process, ConnPid, Reason} -> + error_logger:error_msg("Oops!"), + exit(Reason) +end. +---- + +What to do when you receive a `DOWN` message is entirely up to you. + +=== Closing the connection abruptly + +The connection can be stopped abruptly at any time by calling +the `gun:close/1` function. + +.Immediate closing of the connection +[source,erlang] +---- +gun:close(ConnPid). +---- + +The process is stopped immediately without having a chance to +perform the protocol's closing handshake, if any. + +//=== Closing the connection gracefully +// +//The connection can also be stopped gracefully by calling the +//`gun:shutdown/1` function. +// +//.Graceful shutdown of the connection +//[source,erlang] +//---- +//gun:shutdown(ConnPid). +//---- +// +//Gun will refuse any new requests or messages after you call +//this function. It will however continue to send you messages +//for existing streams until they are all completed. +// +//For example if you performed a GET request just before calling +//`gun:shutdown/1`, you will still receive the response before +//Gun closes the connection. +// +//If you set a monitor beforehand, you will receive a message +//when the connection has been closed. diff --git a/docs/en/gun/2.1/guide/connect/index.html b/docs/en/gun/2.1/guide/connect/index.html new file mode 100644 index 00000000..d307a4f0 --- /dev/null +++ b/docs/en/gun/2.1/guide/connect/index.html @@ -0,0 +1,278 @@ + + + + + + + + + + Nine Nines: Connection + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Connection

    + +

    This chapter describes how to open, monitor and close a connection using the Gun client.

    +

    Gun connections

    +

    Gun is designed with the HTTP/2 and Websocket protocols in mind. They are built for long-running connections that allow concurrent exchange of data, either in the form of request/responses for HTTP/2 or in the form of messages for Websocket.

    +

    A Gun connection is an Erlang process that manages a socket to a remote endpoint. This Gun connection is owned by a user process that is called the owner of the connection, and is managed by the supervision tree of the gun application.

    +

    Any process can communicate with the Gun connection by calling functions from the module gun. All functions perform their respective operations asynchronously. The Gun connection will send Erlang messages to the calling process whenever needed.

    +

    When the remote endpoint closes the connection, Gun attempts to reconnect automatically.

    +

    Opening a new connection

    +

    The gun:open/2,3 function must be used to open a connection.

    +
    Opening a connection to example.org on port 443
    +
    +
    {ok, ConnPid} = gun:open("example.org", 443).
    +
    +

    If the port given is 443, Gun will attempt to connect using TLS. The protocol will be selected automatically using the ALPN extension for TLS. By default Gun supports HTTP/2 and HTTP/1.1 when connecting using TLS.

    +

    For any other port, Gun will attempt to connect using plain TCP and will use the HTTP/1.1 protocol.

    +

    The transport and protocol used can be overriden via options. The manual documents all available options.

    +

    Options can be provided as a third argument, and take the form of a map.

    +
    Opening a TLS connection to example.org on port 8443
    +
    +
    {ok, ConnPid} = gun:open("example.org", 8443, #{transport => tls}).
    +
    +

    When using TLS you may want to tweak the configuration for the ssl application, in particular the session_lifetime and session_cache_client_max to limit the amount of memory used for the TLS sessions cache.

    +

    Waiting for the connection to be established

    +

    When Gun successfully connects to the server, it sends a gun_up message with the protocol that has been selected for the connection.

    +

    Gun provides the functions gun:await_up/1,2,3 that wait for the gun_up message. They can optionally take a monitor reference and/or timeout value. If no monitor is provided, one will be created for the duration of the function call.

    +
    Synchronous opening of a connection
    +
    +
    {ok, ConnPid} = gun:open("example.org", 443),
    +{ok, Protocol} = gun:await_up(ConnPid).
    +
    +

    Handling connection loss

    +

    When the connection is lost, Gun will send a gun_down message indicating the current protocol, the reason the connection was lost and two lists of stream references.

    +

    The first list indicates open streams that may have been processed by the server. The second list indicates open streams that the server did not process.

    +

    Monitoring the connection process

    +

    Because software errors are unavoidable, it is important to detect when the Gun process crashes. It is also important to detect when it exits normally. Erlang provides two ways to do that: links and monitors.

    +

    Gun leaves you the choice as to which one will be used. However, if you use the gun:await/2,3 or gun:await_body/2,3 functions, a monitor may be used for you to avoid getting stuck waiting for a message that will never come.

    +

    If you choose to monitor yourself you can do it on a permanent basis rather than on every message you will receive, saving resources. Indeed, the gun:await/3,4 and gun:await_body/3,4 functions both accept a monitor argument if you have one already.

    +
    Monitoring the connection process
    +
    +
    {ok, ConnPid} = gun:open("example.org", 443).
    +MRef = monitor(process, ConnPid).
    +
    +

    This monitor reference can be kept and used until the connection process exits.

    +
    Handling `DOWN` messages
    +
    +
    receive
    +    %% Receive Gun messages here...
    +    {'DOWN', Mref, process, ConnPid, Reason} ->
    +        error_logger:error_msg("Oops!"),
    +        exit(Reason)
    +end.
    +
    +

    What to do when you receive a DOWN message is entirely up to you.

    +

    Closing the connection abruptly

    +

    The connection can be stopped abruptly at any time by calling the gun:close/1 function.

    +
    Immediate closing of the connection
    +
    +
    gun:close(ConnPid).
    +
    +

    The process is stopped immediately without having a chance to perform the protocol's closing handshake, if any.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/gun.sty b/docs/en/gun/2.1/guide/gun.sty new file mode 100644 index 00000000..d5e0d3be --- /dev/null +++ b/docs/en/gun/2.1/guide/gun.sty @@ -0,0 +1,8 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{asciidoc-dblatex}[2012/10/24 AsciiDoc DocBook Style] + +%% Just use the original package and pass the options. +\RequirePackageWithOptions{docbook} + +%% Define an alias for make snippets to be compatible with source-highlighter. +\lstalias{makefile}{make} diff --git a/docs/en/gun/2.1/guide/http.asciidoc b/docs/en/gun/2.1/guide/http.asciidoc new file mode 100644 index 00000000..51cb994f --- /dev/null +++ b/docs/en/gun/2.1/guide/http.asciidoc @@ -0,0 +1,387 @@ +[[http]] +== HTTP + +This chapter describes how to use the Gun client for +communicating with an HTTP/1.1 or HTTP/2 server. + +=== Streams + +Every time a request is initiated, Gun creates a _stream_. +A _stream reference_ uniquely identifies a set of request and +response and must be used to perform additional operations +with a stream or to identify its messages. + +Stream references use the Erlang _reference_ data type and +are therefore unique. + +Streams can be canceled at any time. This will stop any further +messages from being sent to the calling process. Depending on +its capabilities, the server will also be instructed to cancel +the request. + +Canceling a stream may result in Gun dropping the connection +temporarily, to avoid uploading or downloading data that will +not be used. + +.Cancelling a stream +[source,erlang] +---- +gun:cancel(ConnPid, StreamRef). +---- + +=== Sending requests + +Gun provides many convenient functions for performing common +operations, like GET, POST or DELETE. It also provides a +general purpose function in case you need other methods. + +The availability of these methods on the server can vary +depending on the software used but also on a per-resource +basis. + +Gun will automatically set a few headers depending on the +method used. For all methods however it will set the host +header if it has not been provided in the request arguments. + +This section focuses on the act of sending a request. The +handling of responses will be explained further on. + +==== GET and HEAD + +Use `gun:get/2,3,4` to request a resource. + +.GET "/organizations/ninenines" +[source,erlang] +---- +StreamRef = gun:get(ConnPid, "/organizations/ninenines"). +---- + +.GET "/organizations/ninenines" with custom headers +[source,erlang] +---- +StreamRef = gun:get(ConnPid, "/organizations/ninenines", [ + {<<"accept">>, "application/json"}, + {<<"user-agent">>, "revolver/1.0"} +]). +---- + +Note that the list of headers has the field name as a binary. +The field value is iodata, which is either a binary or an +iolist. + +Use `gun:head/2,3,4` if you don't need the response body. + +.HEAD "/organizations/ninenines" +[source,erlang] +---- +StreamRef = gun:head(ConnPid, "/organizations/ninenines"). +---- + +.HEAD "/organizations/ninenines" with custom headers +[source,erlang] +---- +StreamRef = gun:head(ConnPid, "/organizations/ninenines", [ + {<<"accept">>, "application/json"}, + {<<"user-agent">>, "revolver/1.0"} +]). +---- + +It is not possible to send a request body with a GET or HEAD +request. + +==== POST, PUT and PATCH + +HTTP defines three methods to create or update a resource. + +POST is generally used when the resource identifier (URI) isn't known +in advance when creating a resource. POST can also be used to +replace an existing resource, although PUT is more appropriate +in that situation. + +PUT creates or replaces a resource identified by the URI. + +PATCH provides instructions on how to modify the resource. + +Both POST and PUT send the entire resource representation in their +request body. The PATCH method can be used when this is not +desirable. The request body of a PATCH method may be a partial +representation or a list of instructions on how to update the +resource. + +The functions `gun:post/4,5`, `gun:put/4,5` and `gun:patch/4,5` +take a body as their fourth argument. These functions do +not require any body-specific header to be set, although +it is always recommended to set the content-type header. +Gun will set the other headers automatically. + +In this and the following examples in this section, `gun:post` +can be replaced by `gun:put` or `gun:patch` for performing +a PUT or PATCH request, respectively. + +.POST "/organizations/ninenines" +[source,erlang] +---- +Body = "{\"msg\": \"Hello world!\"}", +StreamRef = gun:post(ConnPid, "/organizations/ninenines", [ + {<<"content-type">>, "application/json"} +], Body). +---- + +The functions `gun:post/3,4`, `gun:put/3,4` and `gun:patch/3,4` +do not take a body in their arguments: the body must be +provided later on using the `gun:data/4` function. + +It is recommended to send the content-length header if you +know it in advance, although this is not required. If it +is not set, HTTP/1.1 will use the chunked transfer-encoding, +and HTTP/2 will continue normally as it is chunked by design. + +.POST "/organizations/ninenines" with delayed body +[source,erlang] +---- +Body = "{\"msg\": \"Hello world!\"}", +StreamRef = gun:post(ConnPid, "/organizations/ninenines", [ + {<<"content-length">>, integer_to_binary(length(Body))}, + {<<"content-type">>, "application/json"} +]), +gun:data(ConnPid, StreamRef, fin, Body). +---- + +The atom `fin` indicates this is the last chunk of data to +be sent. You can call the `gun:data/4` function as many +times as needed until you have sent the entire body. The +last call must use `fin` and all the previous calls must +use `nofin`. The last chunk may be empty. + +.Streaming the request body +[source,erlang] +---- +sendfile(ConnPid, StreamRef, Filepath) -> + {ok, IoDevice} = file:open(Filepath, [read, binary, raw]), + do_sendfile(ConnPid, StreamRef, IoDevice). + +do_sendfile(ConnPid, StreamRef, IoDevice) -> + case file:read(IoDevice, 8000) of + eof -> + gun:data(ConnPid, StreamRef, fin, <<>>), + file:close(IoDevice); + {ok, Bin} -> + gun:data(ConnPid, StreamRef, nofin, Bin), + do_sendfile(ConnPid, StreamRef, IoDevice) + end. +---- + +==== DELETE + +Use `gun:delete/2,3,4` to delete a resource. + +.DELETE "/organizations/ninenines" +[source,erlang] +---- +StreamRef = gun:delete(ConnPid, "/organizations/ninenines"). +---- + +.DELETE "/organizations/ninenines" with custom headers +[source,erlang] +---- +StreamRef = gun:delete(ConnPid, "/organizations/ninenines", [ + {<<"user-agent">>, "revolver/1.0"} +]). +---- + +==== OPTIONS + +Use `gun:options/2,3` to request information about a resource. + +.OPTIONS "/organizations/ninenines" +[source,erlang] +---- +StreamRef = gun:options(ConnPid, "/organizations/ninenines"). +---- + +.OPTIONS "/organizations/ninenines" with custom headers +[source,erlang] +---- +StreamRef = gun:options(ConnPid, "/organizations/ninenines", [ + {<<"user-agent">>, "revolver/1.0"} +]). +---- + +You can also use this function to request information about +the server itself. + +.OPTIONS "*" +[source,erlang] +---- +StreamRef = gun:options(ConnPid, "*"). +---- + +==== Requests with an arbitrary method + +The functions `gun:headers/4,5` or `gun:request/5,6` can be +used to send requests with a configurable method name. It is +mostly useful when you need a method that Gun does not +understand natively. + +.Example of a TRACE request +[source,erlang] +---- +gun:request(ConnPid, "TRACE", "/", [ + {<<"max-forwards">>, "30"} +], <<>>). +---- + +=== Processing responses + +All data received from the server is sent to the calling +process as a message. First a `gun_response` message is sent, +followed by zero or more `gun_data` messages. If something goes wrong, +a `gun_error` message is sent instead. + +The response message will inform you whether there will be +data messages following. If it contains `fin` there will be +no data messages. If it contains `nofin` then one or more data +messages will follow. + +When using HTTP/2 this value is sent with the frame and simply +passed on in the message. When using HTTP/1.1 however Gun must +guess whether data will follow by looking at the response headers. + +You can receive messages directly, or you can use the _await_ +functions to let Gun receive them for you. + +.Receiving a response using receive +[source,erlang] +---- +print_body(ConnPid, MRef) -> + StreamRef = gun:get(ConnPid, "/"), + receive + {gun_response, ConnPid, StreamRef, fin, Status, Headers} -> + no_data; + {gun_response, ConnPid, StreamRef, nofin, Status, Headers} -> + receive_data(ConnPid, MRef, StreamRef); + {'DOWN', MRef, process, ConnPid, Reason} -> + error_logger:error_msg("Oops!"), + exit(Reason) + after 1000 -> + exit(timeout) + end. + +receive_data(ConnPid, MRef, StreamRef) -> + receive + {gun_data, ConnPid, StreamRef, nofin, Data} -> + io:format("~s~n", [Data]), + receive_data(ConnPid, MRef, StreamRef); + {gun_data, ConnPid, StreamRef, fin, Data} -> + io:format("~s~n", [Data]); + {'DOWN', MRef, process, ConnPid, Reason} -> + error_logger:error_msg("Oops!"), + exit(Reason) + after 1000 -> + exit(timeout) + end. +---- + +While it may seem verbose, using messages like this has the +advantage of never locking your process, allowing you to +easily debug your code. It also allows you to start more than +one connection and concurrently perform queries on all of them +at the same time. + +You can also use Gun in a synchronous manner by using the _await_ +functions. + +The `gun:await/2,3,4` function will wait until it receives +a response to, a pushed resource related to, or data from +the given stream. + +When calling `gun:await/2,3` and not passing a monitor +reference, one is automatically created for you for the +duration of the call. + +The `gun:await_body/2,3,4` works similarly, but returns the +body received. Both functions can be combined to receive the +response and its body sequentially. + +.Receiving a response using await +[source,erlang] +---- +StreamRef = gun:get(ConnPid, "/"), +case gun:await(ConnPid, StreamRef) of + {response, fin, Status, Headers} -> + no_data; + {response, nofin, Status, Headers} -> + {ok, Body} = gun:await_body(ConnPid, StreamRef), + io:format("~s~n", [Body]) +end. +---- + +=== Handling streams pushed by the server + +The HTTP/2 protocol allows the server to push more than one +resource for every request. It will start sending those +extra resources before it starts sending the response itself, +so Gun will send you `gun_push` messages before `gun_response` +when that happens. + +You can safely choose to ignore `gun_push` messages, or +you can handle them. If you do, you can either receive the +messages directly or use _await_ functions. + +The `gun_push` message contains both the new stream reference +and the stream reference of the original request. + +.Receiving a pushed response using receive +[source,erlang] +---- +receive + {gun_push, ConnPid, OriginalStreamRef, PushedStreamRef, + Method, Host, Path, Headers} -> + enjoy() +end. +---- + +If you use the `gun:await/2,3,4` function, however, Gun +will use the original reference to identify the message but +will return a tuple that doesn't contain it. + +.Receiving a pushed response using await +[source,erlang] +---- +{push, PushedStreamRef, Method, URI, Headers} + = gun:await(ConnPid, OriginalStreamRef). +---- + +The `PushedStreamRef` variable can then be used with `gun:await/2,3,4` +and `gun:await_body/2,3,4`. + +=== Flushing unwanted messages + +Gun provides the function `gun:flush/1` to quickly get rid +of unwanted messages sitting in the process mailbox. You +can use it to get rid of all messages related to a connection, +or just the messages related to a stream. + +.Flush all messages from a Gun connection +[source,erlang] +---- +gun:flush(ConnPid). +---- + +.Flush all messages from a specific stream +[source,erlang] +---- +gun:flush(StreamRef). +---- + +=== Redirecting responses to a different process + +Gun allows you to specify which process will handle responses +to a request via the `reply_to` request option. + +.GET "/organizations/ninenines" to a different process +[source,erlang] +---- +StreamRef = gun:get(ConnPid, "/organizations/ninenines", [], + #{reply_to => Pid}). +---- diff --git a/docs/en/gun/2.1/guide/http/index.html b/docs/en/gun/2.1/guide/http/index.html new file mode 100644 index 00000000..435b1ee1 --- /dev/null +++ b/docs/en/gun/2.1/guide/http/index.html @@ -0,0 +1,452 @@ + + + + + + + + + + Nine Nines: HTTP + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    HTTP

    + +

    This chapter describes how to use the Gun client for communicating with an HTTP/1.1 or HTTP/2 server.

    +

    Streams

    +

    Every time a request is initiated, Gun creates a stream. A stream reference uniquely identifies a set of request and response and must be used to perform additional operations with a stream or to identify its messages.

    +

    Stream references use the Erlang reference data type and are therefore unique.

    +

    Streams can be canceled at any time. This will stop any further messages from being sent to the calling process. Depending on its capabilities, the server will also be instructed to cancel the request.

    +

    Canceling a stream may result in Gun dropping the connection temporarily, to avoid uploading or downloading data that will not be used.

    +
    Cancelling a stream
    +
    +
    gun:cancel(ConnPid, StreamRef).
    +
    +

    Sending requests

    +

    Gun provides many convenient functions for performing common operations, like GET, POST or DELETE. It also provides a general purpose function in case you need other methods.

    +

    The availability of these methods on the server can vary depending on the software used but also on a per-resource basis.

    +

    Gun will automatically set a few headers depending on the method used. For all methods however it will set the host header if it has not been provided in the request arguments.

    +

    This section focuses on the act of sending a request. The handling of responses will be explained further on.

    +

    GET and HEAD

    +

    Use gun:get/2,3,4 to request a resource.

    +
    GET "/organizations/ninenines"
    +
    +
    StreamRef = gun:get(ConnPid, "/organizations/ninenines").
    +
    +
    GET "/organizations/ninenines" with custom headers
    +
    +
    StreamRef = gun:get(ConnPid, "/organizations/ninenines", [
    +    {<<"accept">>, "application/json"},
    +    {<<"user-agent">>, "revolver/1.0"}
    +]).
    +
    +

    Note that the list of headers has the field name as a binary. The field value is iodata, which is either a binary or an iolist.

    +

    Use gun:head/2,3,4 if you don't need the response body.

    +
    HEAD "/organizations/ninenines"
    +
    +
    StreamRef = gun:head(ConnPid, "/organizations/ninenines").
    +
    +
    HEAD "/organizations/ninenines" with custom headers
    +
    +
    StreamRef = gun:head(ConnPid, "/organizations/ninenines", [
    +    {<<"accept">>, "application/json"},
    +    {<<"user-agent">>, "revolver/1.0"}
    +]).
    +
    +

    It is not possible to send a request body with a GET or HEAD request.

    +

    POST, PUT and PATCH

    +

    HTTP defines three methods to create or update a resource.

    +

    POST is generally used when the resource identifier (URI) isn't known in advance when creating a resource. POST can also be used to replace an existing resource, although PUT is more appropriate in that situation.

    +

    PUT creates or replaces a resource identified by the URI.

    +

    PATCH provides instructions on how to modify the resource.

    +

    Both POST and PUT send the entire resource representation in their request body. The PATCH method can be used when this is not desirable. The request body of a PATCH method may be a partial representation or a list of instructions on how to update the resource.

    +

    The functions gun:post/4,5, gun:put/4,5 and gun:patch/4,5 take a body as their fourth argument. These functions do not require any body-specific header to be set, although it is always recommended to set the content-type header. Gun will set the other headers automatically.

    +

    In this and the following examples in this section, gun:post can be replaced by gun:put or gun:patch for performing a PUT or PATCH request, respectively.

    +
    POST "/organizations/ninenines"
    +
    +
    Body = "{\"msg\": \"Hello world!\"}",
    +StreamRef = gun:post(ConnPid, "/organizations/ninenines", [
    +    {<<"content-type">>, "application/json"}
    +], Body).
    +
    +

    The functions gun:post/3,4, gun:put/3,4 and gun:patch/3,4 do not take a body in their arguments: the body must be provided later on using the gun:data/4 function.

    +

    It is recommended to send the content-length header if you know it in advance, although this is not required. If it is not set, HTTP/1.1 will use the chunked transfer-encoding, and HTTP/2 will continue normally as it is chunked by design.

    +
    POST "/organizations/ninenines" with delayed body
    +
    +
    Body = "{\"msg\": \"Hello world!\"}",
    +StreamRef = gun:post(ConnPid, "/organizations/ninenines", [
    +    {<<"content-length">>, integer_to_binary(length(Body))},
    +    {<<"content-type">>, "application/json"}
    +]),
    +gun:data(ConnPid, StreamRef, fin, Body).
    +
    +

    The atom fin indicates this is the last chunk of data to be sent. You can call the gun:data/4 function as many times as needed until you have sent the entire body. The last call must use fin and all the previous calls must use nofin. The last chunk may be empty.

    +
    Streaming the request body
    +
    +
    sendfile(ConnPid, StreamRef, Filepath) ->
    +    {ok, IoDevice} = file:open(Filepath, [read, binary, raw]),
    +    do_sendfile(ConnPid, StreamRef, IoDevice).
    +
    +do_sendfile(ConnPid, StreamRef, IoDevice) ->
    +    case file:read(IoDevice, 8000) of
    +        eof ->
    +            gun:data(ConnPid, StreamRef, fin, <<>>),
    +            file:close(IoDevice);
    +        {ok, Bin} ->
    +            gun:data(ConnPid, StreamRef, nofin, Bin),
    +            do_sendfile(ConnPid, StreamRef, IoDevice)
    +    end.
    +
    +

    DELETE

    +

    Use gun:delete/2,3,4 to delete a resource.

    +
    DELETE "/organizations/ninenines"
    +
    +
    StreamRef = gun:delete(ConnPid, "/organizations/ninenines").
    +
    +
    DELETE "/organizations/ninenines" with custom headers
    +
    +
    StreamRef = gun:delete(ConnPid, "/organizations/ninenines", [
    +    {<<"user-agent">>, "revolver/1.0"}
    +]).
    +
    +

    OPTIONS

    +

    Use gun:options/2,3 to request information about a resource.

    +
    OPTIONS "/organizations/ninenines"
    +
    +
    StreamRef = gun:options(ConnPid, "/organizations/ninenines").
    +
    +
    OPTIONS "/organizations/ninenines" with custom headers
    +
    +
    StreamRef = gun:options(ConnPid, "/organizations/ninenines", [
    +    {<<"user-agent">>, "revolver/1.0"}
    +]).
    +
    +

    You can also use this function to request information about the server itself.

    +
    OPTIONS "*"
    +
    +
    StreamRef = gun:options(ConnPid, "*").
    +
    +

    Requests with an arbitrary method

    +

    The functions gun:headers/4,5 or gun:request/5,6 can be used to send requests with a configurable method name. It is mostly useful when you need a method that Gun does not understand natively.

    +
    Example of a TRACE request
    +
    +
    gun:request(ConnPid, "TRACE", "/", [
    +    {<<"max-forwards">>, "30"}
    +], <<>>).
    +
    +

    Processing responses

    +

    All data received from the server is sent to the calling process as a message. First a gun_response message is sent, followed by zero or more gun_data messages. If something goes wrong, a gun_error message is sent instead.

    +

    The response message will inform you whether there will be data messages following. If it contains fin there will be no data messages. If it contains nofin then one or more data messages will follow.

    +

    When using HTTP/2 this value is sent with the frame and simply passed on in the message. When using HTTP/1.1 however Gun must guess whether data will follow by looking at the response headers.

    +

    You can receive messages directly, or you can use the await functions to let Gun receive them for you.

    +
    Receiving a response using receive
    +
    +
    print_body(ConnPid, MRef) ->
    +    StreamRef = gun:get(ConnPid, "/"),
    +    receive
    +        {gun_response, ConnPid, StreamRef, fin, Status, Headers} ->
    +            no_data;
    +        {gun_response, ConnPid, StreamRef, nofin, Status, Headers} ->
    +            receive_data(ConnPid, MRef, StreamRef);
    +        {'DOWN', MRef, process, ConnPid, Reason} ->
    +            error_logger:error_msg("Oops!"),
    +            exit(Reason)
    +    after 1000 ->
    +        exit(timeout)
    +    end.
    +
    +receive_data(ConnPid, MRef, StreamRef) ->
    +    receive
    +        {gun_data, ConnPid, StreamRef, nofin, Data} ->
    +            io:format("~s~n", [Data]),
    +            receive_data(ConnPid, MRef, StreamRef);
    +        {gun_data, ConnPid, StreamRef, fin, Data} ->
    +            io:format("~s~n", [Data]);
    +        {'DOWN', MRef, process, ConnPid, Reason} ->
    +            error_logger:error_msg("Oops!"),
    +            exit(Reason)
    +    after 1000 ->
    +        exit(timeout)
    +    end.
    +
    +

    While it may seem verbose, using messages like this has the advantage of never locking your process, allowing you to easily debug your code. It also allows you to start more than one connection and concurrently perform queries on all of them at the same time.

    +

    You can also use Gun in a synchronous manner by using the await functions.

    +

    The gun:await/2,3,4 function will wait until it receives a response to, a pushed resource related to, or data from the given stream.

    +

    When calling gun:await/2,3 and not passing a monitor reference, one is automatically created for you for the duration of the call.

    +

    The gun:await_body/2,3,4 works similarly, but returns the body received. Both functions can be combined to receive the response and its body sequentially.

    +
    Receiving a response using await
    +
    +
    StreamRef = gun:get(ConnPid, "/"),
    +case gun:await(ConnPid, StreamRef) of
    +    {response, fin, Status, Headers} ->
    +        no_data;
    +    {response, nofin, Status, Headers} ->
    +        {ok, Body} = gun:await_body(ConnPid, StreamRef),
    +        io:format("~s~n", [Body])
    +end.
    +
    +

    Handling streams pushed by the server

    +

    The HTTP/2 protocol allows the server to push more than one resource for every request. It will start sending those extra resources before it starts sending the response itself, so Gun will send you gun_push messages before gun_response when that happens.

    +

    You can safely choose to ignore gun_push messages, or you can handle them. If you do, you can either receive the messages directly or use await functions.

    +

    The gun_push message contains both the new stream reference and the stream reference of the original request.

    +
    Receiving a pushed response using receive
    +
    +
    receive
    +    {gun_push, ConnPid, OriginalStreamRef, PushedStreamRef,
    +            Method, Host, Path, Headers} ->
    +        enjoy()
    +end.
    +
    +

    If you use the gun:await/2,3,4 function, however, Gun will use the original reference to identify the message but will return a tuple that doesn't contain it.

    +
    Receiving a pushed response using await
    +
    +
    {push, PushedStreamRef, Method, URI, Headers}
    +    = gun:await(ConnPid, OriginalStreamRef).
    +
    +

    The PushedStreamRef variable can then be used with gun:await/2,3,4 and gun:await_body/2,3,4.

    +

    Flushing unwanted messages

    +

    Gun provides the function gun:flush/1 to quickly get rid of unwanted messages sitting in the process mailbox. You can use it to get rid of all messages related to a connection, or just the messages related to a stream.

    +
    Flush all messages from a Gun connection
    +
    +
    gun:flush(ConnPid).
    +
    +
    Flush all messages from a specific stream
    +
    +
    gun:flush(StreamRef).
    +
    +

    Redirecting responses to a different process

    +

    Gun allows you to specify which process will handle responses to a request via the reply_to request option.

    +
    GET "/organizations/ninenines" to a different process
    +
    +
    StreamRef = gun:get(ConnPid, "/organizations/ninenines", [],
    +    #{reply_to => Pid}).
    +
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/index.html b/docs/en/gun/2.1/guide/index.html new file mode 100644 index 00000000..4d5cfe6a --- /dev/null +++ b/docs/en/gun/2.1/guide/index.html @@ -0,0 +1,188 @@ + + + + + + + + + + Nine Nines: Gun User Guide + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/internals_tls_over_tls.asciidoc b/docs/en/gun/2.1/guide/internals_tls_over_tls.asciidoc new file mode 100644 index 00000000..07e86698 --- /dev/null +++ b/docs/en/gun/2.1/guide/internals_tls_over_tls.asciidoc @@ -0,0 +1,177 @@ +== Internals: TLS over TLS + +The `ssl` application that comes with Erlang/OTP implements +TLS using an interface equivalent to the `gen_tcp` interface: +you get and manipulate a socket. The TLS encoding and +decoding is applied transparently to the data sent and +received. + +In order to have a TLS layer inside another TLS layer we +need a way to encode the data of the inner layer before +we pass it to the outer layer. We cannot do this with +a socket interface. Thankfully, the `ssl` application comes +with options that allow to transform an `sslsocket()` into +an encoder/decoder. + +The implementation is however a little convoluted as a +result. This chapter aims to give an overview of how it +all works under the hood. + +=== gun_tls_proxy + +The module `gun_tls_proxy` implements an intermediary process +that sits between the Gun process and the TLS process. It is +responsible for routing data from the Gun process to the TLS +process, and from the TLS process to the Gun process. + +In order to obtain the TLS encoded data the `cb_info` option +is given to the `ssl:connect/3` function. This replaces the +default TCP outer socket module with our own custom module. +Gun uses the `gun_tls_proxy_cb` module instead. This module +will forward all messages to the `gun_tls_proxy` process. + +The resulting operations looks like this: + +---- +Gun process <-> gun_tls_proxy <-> sslsocket() <-> gun_tls_proxy <-> "inner socket" +---- + +The "inner socket" is the socket for the Gun connection. +The `gun_tls_proxy` process decides where to send or +receive the data based on where it's coming from. This +is how it knows whether the data has been encoded/decoded +or not. + +Because the `ssl:connect/3` function call is blocking, +a temporary process is used while connecting. This is required +because the `gun_tls_proxy` needs to forward data even while +performing the TLS handshake, otherwise the `ssl:connect/3` +call will not complete. + +The result of the `ssl:connect/3` call is forward to the Gun +process, along with the negotiated protocols when the connection +was successful. + +The `gun_tls_proxy_cb` module does not actually implement +`{active,N}` as requested by the `ssl` application. Instead +it uses `{active,true}`. + +The behavior of the `gun_tls_proxy` process will vary depending +on whether the TLS over TLS is done connection-wide or only +stream-wide. + +=== Connection-wide TLS over TLS + +When used for the entire connection, the `gun_tls_proxy` process +will act like a real socket once connected. The only difference +is how the connection is performed. As mentioned earlier, the +result of the `ssl:connect/3` call is sent back to the Gun process. + +When doing TLS over TLS the processes will end up looking like +this: + +---- +Gun process <-> gun_tls_proxy <-> "inner socket" +---- + +The details of the interactions between `gun_tls_proxy` and +its associated `sslsocket()` have been removed in order to +better illustrate the concept. + +When adding another layer this becomes: + +---- +Gun process <-> gun_tls_proxy <-> gun_tls_proxy <-> sslsocket() +---- + +This is what is done when only HTTP/1.1 and SOCKS proxies are +involved. + +=== Stream-wide TLS over TLS + +The same cannot be done for HTTP/2 proxies. This is because the +HTTP/2 CONNECT method does not apply to the entire connection, +but only to a stream. The proxied data must be wrapped inside +a DATA frame. It cannot be sent directly. This is what must be +done: + +---- +Gun process -> gun_tls_proxy -> Gun process -> "inner socket" +---- + +The "inner socket" is the socket for the HTTP/2 connection. + +In order to tell Gun to continue processing the data, the +`handle_continue` mechanism is introduced. When `gun_tls_proxy` +has TLS encoded the data it sends it back to the Gun process, +wrapped in a `handle_continue` tuple. This tuple contains +enough information to figure out what stream the data belongs +to and what should be done next. Gun will therefore route the +data to the correct layer and continue sending it. + +This solution is also used for receiving data, except in the +reverse order. + +=== Routing to the right stream + +In order to know where to route the data, the `stream_ref` +had to be modified to contain all the references to the +individual streams. So if the tunnel is identified by +`StreamA` and a request on this tunnel is identified +by `StreamB`, then the stream is known as `[StreamA, StreamB]` +to the user. Gun then routes first to `StreamA`, a +tunnel, which continues routing to `StreamB`. + +A problem comes up if an intermediary is a SOCKS server, +for example in the following scenario: + +---- +HTTP/2 proxy <-> SOCKS proxy <-> HTTP/1.1 origin +---- + +The SOCKS protocol doesn't have a concept of stream, +therefore when we refer to request to the origin server +they are `[StreamA, StreamB]`, not `[StreamA, StreamB, StreamC]`. +This is a problem for routing encoded/decoded TLS data +to the SOCKS layer: we don't have a built-in way of referring +to the SOCKS layer. + +The solution is to have a separate `handle_continue_stream_ref` +value that assigns a reference to the SOCKS layers. Gun will +then be able to forward `handle_continue` message, and only +them, to the appropriate layer. + +Gun therefore has two different routing avenues, but the +mechanism remains the same otherwise. + +=== gun_tunnel + +In order to simplify the routing, the `gun_tunnel` module +was introduced. For each intermediary (including the original +CONNECT stream at the HTTP/2 layer) there is a `gun_tunnel` +module. + +Going back to the example above: + +---- +HTTP/2 proxy <-> SOCKS proxy <-> HTTP/1.1 origin +---- + +In this case the modules involved to handle the request +will be as follow: + +---- +gun_http2 <-> gun_tunnel <-> gun_tunnel <-> gun_http +---- + +The `gun_http2` module doesn't do any routing, it just +passes everything to the `gun_tunnel` module. The `gun_tunnel` +module will then do the routing, which involves removing +`StreamA` from `[StreamA, StreamB]` where appropriate. + +The `gun_tunnel` module also receives the TLS encoded/decoded +data and forwards it appropriately. When it comes to sending +data, it will return a `send` command that allows the previous +module to continue sending the data. The `gun_http2` module +will ultimately wrap the data to be sent in a DATA frame and +send it to the "inner socket". diff --git a/docs/en/gun/2.1/guide/internals_tls_over_tls/index.html b/docs/en/gun/2.1/guide/internals_tls_over_tls/index.html new file mode 100644 index 00000000..e62b3326 --- /dev/null +++ b/docs/en/gun/2.1/guide/internals_tls_over_tls/index.html @@ -0,0 +1,222 @@ + + + + + + + + + + Nine Nines: Internals: TLS over TLS + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Internals: TLS over TLS

    + +

    The ssl application that comes with Erlang/OTP implements TLS using an interface equivalent to the gen_tcp interface: you get and manipulate a socket. The TLS encoding and decoding is applied transparently to the data sent and received.

    +

    In order to have a TLS layer inside another TLS layer we need a way to encode the data of the inner layer before we pass it to the outer layer. We cannot do this with a socket interface. Thankfully, the ssl application comes with options that allow to transform an sslsocket() into an encoder/decoder.

    +

    The implementation is however a little convoluted as a result. This chapter aims to give an overview of how it all works under the hood.

    +

    gun_tls_proxy

    +

    The module gun_tls_proxy implements an intermediary process that sits between the Gun process and the TLS process. It is responsible for routing data from the Gun process to the TLS process, and from the TLS process to the Gun process.

    +

    In order to obtain the TLS encoded data the cb_info option is given to the ssl:connect/3 function. This replaces the default TCP outer socket module with our own custom module. Gun uses the gun_tls_proxy_cb module instead. This module will forward all messages to the gun_tls_proxy process.

    +

    The resulting operations looks like this:

    +
    Gun process <-> gun_tls_proxy <-> sslsocket() <-> gun_tls_proxy <-> "inner socket"
    +

    The "inner socket" is the socket for the Gun connection. The gun_tls_proxy process decides where to send or receive the data based on where it's coming from. This is how it knows whether the data has been encoded/decoded or not.

    +

    Because the ssl:connect/3 function call is blocking, a temporary process is used while connecting. This is required because the gun_tls_proxy needs to forward data even while performing the TLS handshake, otherwise the ssl:connect/3 call will not complete.

    +

    The result of the ssl:connect/3 call is forward to the Gun process, along with the negotiated protocols when the connection was successful.

    +

    The gun_tls_proxy_cb module does not actually implement {active,N} as requested by the ssl application. Instead it uses {active,true}.

    +

    The behavior of the gun_tls_proxy process will vary depending on whether the TLS over TLS is done connection-wide or only stream-wide.

    +

    Connection-wide TLS over TLS

    +

    When used for the entire connection, the gun_tls_proxy process will act like a real socket once connected. The only difference is how the connection is performed. As mentioned earlier, the result of the ssl:connect/3 call is sent back to the Gun process.

    +

    When doing TLS over TLS the processes will end up looking like this:

    +
    Gun process <-> gun_tls_proxy <-> "inner socket"
    +

    The details of the interactions between gun_tls_proxy and its associated sslsocket() have been removed in order to better illustrate the concept.

    +

    When adding another layer this becomes:

    +
    Gun process <-> gun_tls_proxy <-> gun_tls_proxy <-> sslsocket()
    +

    This is what is done when only HTTP/1.1 and SOCKS proxies are involved.

    +

    Stream-wide TLS over TLS

    +

    The same cannot be done for HTTP/2 proxies. This is because the HTTP/2 CONNECT method does not apply to the entire connection, but only to a stream. The proxied data must be wrapped inside a DATA frame. It cannot be sent directly. This is what must be done:

    +
    Gun process -> gun_tls_proxy -> Gun process -> "inner socket"
    +

    The "inner socket" is the socket for the HTTP/2 connection.

    +

    In order to tell Gun to continue processing the data, the handle_continue mechanism is introduced. When gun_tls_proxy has TLS encoded the data it sends it back to the Gun process, wrapped in a handle_continue tuple. This tuple contains enough information to figure out what stream the data belongs to and what should be done next. Gun will therefore route the data to the correct layer and continue sending it.

    +

    This solution is also used for receiving data, except in the reverse order.

    +

    Routing to the right stream

    +

    In order to know where to route the data, the stream_ref had to be modified to contain all the references to the individual streams. So if the tunnel is identified by StreamA and a request on this tunnel is identified by StreamB, then the stream is known as [StreamA, StreamB] to the user. Gun then routes first to StreamA, a tunnel, which continues routing to StreamB.

    +

    A problem comes up if an intermediary is a SOCKS server, for example in the following scenario:

    +
    HTTP/2 proxy <-> SOCKS proxy <-> HTTP/1.1 origin
    +

    The SOCKS protocol doesn't have a concept of stream, therefore when we refer to request to the origin server they are [StreamA, StreamB], not [StreamA, StreamB, StreamC]. This is a problem for routing encoded/decoded TLS data to the SOCKS layer: we don't have a built-in way of referring to the SOCKS layer.

    +

    The solution is to have a separate handle_continue_stream_ref value that assigns a reference to the SOCKS layers. Gun will then be able to forward handle_continue message, and only them, to the appropriate layer.

    +

    Gun therefore has two different routing avenues, but the mechanism remains the same otherwise.

    +

    gun_tunnel

    +

    In order to simplify the routing, the gun_tunnel module was introduced. For each intermediary (including the original CONNECT stream at the HTTP/2 layer) there is a gun_tunnel module.

    +

    Going back to the example above:

    +
    HTTP/2 proxy <-> SOCKS proxy <-> HTTP/1.1 origin
    +

    In this case the modules involved to handle the request will be as follow:

    +
    gun_http2 <-> gun_tunnel <-> gun_tunnel <-> gun_http
    +

    The gun_http2 module doesn't do any routing, it just passes everything to the gun_tunnel module. The gun_tunnel module will then do the routing, which involves removing StreamA from [StreamA, StreamB] where appropriate.

    +

    The gun_tunnel module also receives the TLS encoded/decoded data and forwards it appropriately. When it comes to sending data, it will return a send command that allows the previous module to continue sending the data. The gun_http2 module will ultimately wrap the data to be sent in a DATA frame and send it to the "inner socket".

    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/introduction.asciidoc b/docs/en/gun/2.1/guide/introduction.asciidoc new file mode 100644 index 00000000..948dde95 --- /dev/null +++ b/docs/en/gun/2.1/guide/introduction.asciidoc @@ -0,0 +1,49 @@ +[[introduction]] +== Introduction + +Gun is an HTTP client for Erlang/OTP. + +Gun supports the HTTP/2, HTTP/1.1 and Websocket protocols. + +=== Prerequisites + +Knowledge of Erlang, but also of the HTTP/1.1, HTTP/2 and Websocket +protocols is required in order to read this guide. + +=== Supported platforms + +Gun is tested and supported on Linux, FreeBSD, Windows and OSX. + +Gun is developed for Erlang/OTP 22.0 and newer. + +=== License + +Gun uses the ISC License. + +---- +Copyright (c) 2013-2023, Loïc Hoguin + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +---- + +=== Versioning + +Gun uses http://semver.org/[Semantic Versioning 2.0.0]. + +=== Conventions + +In the HTTP protocol, the method name is case sensitive. All standard +method names are uppercase. + +Header names are case insensitive. Gun converts all the header names +to lowercase, including request headers provided by your application. diff --git a/docs/en/gun/2.1/guide/introduction/index.html b/docs/en/gun/2.1/guide/introduction/index.html new file mode 100644 index 00000000..b9fe742e --- /dev/null +++ b/docs/en/gun/2.1/guide/introduction/index.html @@ -0,0 +1,203 @@ + + + + + + + + + + Nine Nines: Introduction + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Introduction

    + +

    Gun is an HTTP client for Erlang/OTP.

    +

    Gun supports the HTTP/2, HTTP/1.1 and Websocket protocols.

    +

    Prerequisites

    +

    Knowledge of Erlang, but also of the HTTP/1.1, HTTP/2 and Websocket protocols is required in order to read this guide.

    +

    Supported platforms

    +

    Gun is tested and supported on Linux, FreeBSD, Windows and OSX.

    +

    Gun is developed for Erlang/OTP 22.0 and newer.

    +

    License

    +

    Gun uses the ISC License.

    +
    Copyright (c) 2013-2023, Loïc Hoguin <essen@ninenines.eu>
    +
    +Permission to use, copy, modify, and/or distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    +

    Versioning

    +

    Gun uses Semantic Versioning 2.0.0.

    +

    Conventions

    +

    In the HTTP protocol, the method name is case sensitive. All standard method names are uppercase.

    +

    Header names are case insensitive. Gun converts all the header names to lowercase, including request headers provided by your application.

    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/migrating_from_1.0.asciidoc b/docs/en/gun/2.1/guide/migrating_from_1.0.asciidoc new file mode 100644 index 00000000..3a11cfd3 --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_1.0.asciidoc @@ -0,0 +1,21 @@ +[appendix] +== Migrating from Gun 1.0 to 1.1 + +Gun 1.1 updates the Cowlib dependency to 2.5.1 and fixes a +few problems with experimental features. + +=== Features added + +* Update Cowlib to 2.5.1 + +=== Bugs fixed + +* A bug in the experimental `gun_sse_h` where lone id lines + were not propagated has been fixed by updating the Cowlib + dependency. + +* The status code was incorrectly given to the experimental + content handlers as a binary. It has been fixed an an + integer is now given as was intended. + +* A number of Dialyzer warnings have been fixed. diff --git a/docs/en/gun/2.1/guide/migrating_from_1.0/index.html b/docs/en/gun/2.1/guide/migrating_from_1.0/index.html new file mode 100644 index 00000000..4bd8a35b --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_1.0/index.html @@ -0,0 +1,189 @@ + + + + + + + + + + Nine Nines: Migrating from Gun 1.0 to 1.1 + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Migrating from Gun 1.0 to 1.1

    + +

    Gun 1.1 updates the Cowlib dependency to 2.5.1 and fixes a few problems with experimental features.

    +

    Features added

    +
    • Update Cowlib to 2.5.1 +
    • +
    +

    Bugs fixed

    +
    • A bug in the experimental gun_sse_h where lone id lines were not propagated has been fixed by updating the Cowlib dependency. +
    • +
    • The status code was incorrectly given to the experimental content handlers as a binary. It has been fixed an an integer is now given as was intended. +
    • +
    • A number of Dialyzer warnings have been fixed. +
    • +
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/migrating_from_1.1.asciidoc b/docs/en/gun/2.1/guide/migrating_from_1.1.asciidoc new file mode 100644 index 00000000..7e0acf9d --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_1.1.asciidoc @@ -0,0 +1,28 @@ +[appendix] +== Migrating from Gun 1.1 to 1.2 + +Gun 1.2 adds support for the CONNECT request over HTTP/1.1 +connections. + +=== Features added + +* CONNECT requests can now be issued on HTTP/1.1 connections. + The tunneled connection can use any of the protocols Gun + supports: HTTP/1.1, HTTP/2 and Websocket over both TCP and + TLS transports. Note that Gun currently does not support + tunneling a TLS connection over a TLS connection due to + limitations in Erlang/OTP. + +* Gun supports sending multiple CONNECT requests, allowing + the tunnel to the origin server to go through multiple + proxies. + +* Gun supports sending CONNECT requests with authorization + credentials using the Basic authentication mechanism. + +* Update Cowlib to 2.6.0 + +=== Functions added + +* The functions `gun:connect/2,3,4` have been added. They can + be used to initiate CONNECT requests on HTTP/1.1 connections. diff --git a/docs/en/gun/2.1/guide/migrating_from_1.1/index.html b/docs/en/gun/2.1/guide/migrating_from_1.1/index.html new file mode 100644 index 00000000..25270e2d --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_1.1/index.html @@ -0,0 +1,195 @@ + + + + + + + + + + Nine Nines: Migrating from Gun 1.1 to 1.2 + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Migrating from Gun 1.1 to 1.2

    + +

    Gun 1.2 adds support for the CONNECT request over HTTP/1.1 connections.

    +

    Features added

    +
    • CONNECT requests can now be issued on HTTP/1.1 connections. The tunneled connection can use any of the protocols Gun supports: HTTP/1.1, HTTP/2 and Websocket over both TCP and TLS transports. Note that Gun currently does not support tunneling a TLS connection over a TLS connection due to limitations in Erlang/OTP. +
    • +
    • Gun supports sending multiple CONNECT requests, allowing the tunnel to the origin server to go through multiple proxies. +
    • +
    • Gun supports sending CONNECT requests with authorization credentials using the Basic authentication mechanism. +
    • +
    • Update Cowlib to 2.6.0 +
    • +
    +

    Functions added

    +
    • The functions gun:connect/2,3,4 have been added. They can be used to initiate CONNECT requests on HTTP/1.1 connections. +
    • +
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/migrating_from_1.2.asciidoc b/docs/en/gun/2.1/guide/migrating_from_1.2.asciidoc new file mode 100644 index 00000000..3b310920 --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_1.2.asciidoc @@ -0,0 +1,39 @@ +[appendix] +== Migrating from Gun 1.2 to 1.3 + +Gun 1.3 improves the support for CONNECT requests +introduced in the previous version and documents +Websocket protocol negotiation. + +=== Features added + +* The `protocols` CONNECT destination option has been added + as a replacement for the now deprecated `protocol` option. + +* Add built-in support for Websocket protocol negotiation + through the Websocket option `protocols`. The interface + of the handler module currently remains undocumented and + must be set to `gun_ws_h`. + +* Add the h2specd HTTP/2 test suite from the h2spec project. + +=== Bugs fixed + +* Fix connecting to HTTP/2 over TLS origin servers via + HTTP/1.1 CONNECT proxies. + +* Do not send the HTTP/1.1 keepalive while waiting for + a response to a CONNECT request. + +* Do not crash on HTTP/2 HEADERS frames with the + PRIORITY flag set. + +* Do not crash on HTTP/2 HEADERS frames when the + END_HEADERS flag is not set. + +* Do not crash on unknown HTTP/2 frame types. + +* Reject HTTP/2 WINDOW_UPDATE frames when they would + cause the window to overflow. + +* Send a GOAWAY frame on closing the HTTP/2 connection. diff --git a/docs/en/gun/2.1/guide/migrating_from_1.2/index.html b/docs/en/gun/2.1/guide/migrating_from_1.2/index.html new file mode 100644 index 00000000..b29a4fab --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_1.2/index.html @@ -0,0 +1,205 @@ + + + + + + + + + + Nine Nines: Migrating from Gun 1.2 to 1.3 + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Migrating from Gun 1.2 to 1.3

    + +

    Gun 1.3 improves the support for CONNECT requests introduced in the previous version and documents Websocket protocol negotiation.

    +

    Features added

    +
    • The protocols CONNECT destination option has been added as a replacement for the now deprecated protocol option. +
    • +
    • Add built-in support for Websocket protocol negotiation through the Websocket option protocols. The interface of the handler module currently remains undocumented and must be set to gun_ws_h. +
    • +
    • Add the h2specd HTTP/2 test suite from the h2spec project. +
    • +
    +

    Bugs fixed

    +
    • Fix connecting to HTTP/2 over TLS origin servers via HTTP/1.1 CONNECT proxies. +
    • +
    • Do not send the HTTP/1.1 keepalive while waiting for a response to a CONNECT request. +
    • +
    • Do not crash on HTTP/2 HEADERS frames with the PRIORITY flag set. +
    • +
    • Do not crash on HTTP/2 HEADERS frames when the END_HEADERS flag is not set. +
    • +
    • Do not crash on unknown HTTP/2 frame types. +
    • +
    • Reject HTTP/2 WINDOW_UPDATE frames when they would cause the window to overflow. +
    • +
    • Send a GOAWAY frame on closing the HTTP/2 connection. +
    • +
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/migrating_from_1.3.asciidoc b/docs/en/gun/2.1/guide/migrating_from_1.3.asciidoc new file mode 100644 index 00000000..59f3381c --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_1.3.asciidoc @@ -0,0 +1,329 @@ +[appendix] +== Migrating from Gun 1.3 to 2.0 + +Gun 2.0 includes state of the art tunnel support. With +Gun 2.0 it is possible to make requests or data go through +any number of proxy endpoints using any combination of +TCP or TLS transports and HTTP/1.1, HTTP/2 or SOCKS5 +protocols. All combinations of the scenario Proxy1 -> +Proxy2 -> Origin are tested and known to work. + +Gun 2.0 adds many more features such as Websocket over +HTTP/2, a built-in cookie store, graceful shutdown, flow +control for data messages, event handlers and more. + +Gun 2.0 also introduces an experimental pool module that +automatically maintains connections and routes requests +to the right process, in a similar way as browsers do. + +Gun 2.0 greatly improves the HTTP/2 performance when it +comes to receiving large response bodies; and when receiving +response bodies from many separate requests concurrently. + +Gun now shares much of its HTTP/2 code with Cowboy, +including the HTTP/2 state machine. Numerous issues were +fixed as a result because the Cowboy implementation was +much more advanced. + +The Gun connection process is now implemented using `gen_statem`. + +Gun 2.0 requires Erlang/OTP 22.0 or greater. + +=== Features added + +* Cookie store support has been added. The `cookie_store` + option allows configuring the cookie store backend. + The `gun_cookies` module provides functions to help + implementing such a backend. Gun comes with the backend + `gun_cookies_list` which provides a per-connection, + non-persistent cookie store. The cookie store engine + implements the entire RFC6265bis draft algorithms except + the parts about non-HTTP cookies as no such interface is + provided; and the parts about SameSite as Gun has no + concept of "browsing context". + +* Graceful shutdown has been implemented. Graceful shutdown + can be initiated on the client side by calling the new + function `gun:shutdown/1` or when the owner process goes + away; or on the peer side via the connection: close HTTP/1.1 + header, the HTTP/2 GOAWAY frame or the Websocket close frame. + Gun will try to complete existing streams when possible; + other streams get canceled immediately. The `closing_timeout` + option controls how long we are willing to wait at most + before closing the connection. + +* Gun will better detect connection failures by checking the + return value from sending data to the socket. This applies + to all supported protocols. In addition, Gun now enables + `send_timeout_close` with a `send_timeout` value defaulting + to 15s. + +* Flow control has been added. It allows limiting the number + of data/Websocket messages Gun sends to the calling process. + Gun will stop reading from the socket or stop updating the + protocol's flow control window when applicable as well, to + apply some backpressure to the remote endpoint(s). It is + disabled by default and can be applied on a per-request + basis if necessary. + +* An event handler interface has been added providing access + to many internal Gun events. This can be used for a variety + of purposes including logging, tracing or otherwise + instrumenting a Gun connection. + +* In order to get separate events when connecting, the domain + lookup, connection and TLS handshakes are now performed + separately by Gun. As a result, there exists three separate + timeout options for each of the steps, and the transport + options had to be split into `tcp_opts` and `tls_opts`. + +* Gun now supports connecting through SOCKS proxies, + including secure SOCKS proxies. Both unauthenticated + and username/password authentication are supported. + +* Gun can connect through any number of HTTP, HTTPS, SOCKS + or secure SOCKS proxies, including SOCKS proxies + located after HTTP(S) proxies. The ultimate endpoint + may be using any protocol, including plain TCP, TLS, + HTTP/1.1 or HTTP/2. + +* When specifying which protocols to use, options can + now be provided specific to those protocols. It is + now possible to have separate HTTP options for an + HTTP proxy and the origin HTTP server, for example. + See the new `gun:protocols()` type for details. + +* Gun can now be used to send and receive raw data, + as if it was just a normal socket. This can be + useful when needing to connect through a number + of HTTP/Socks proxies, allowing the use of Gun's + great proxying capabilities (including TLS over TLS) + for any sort of protocols. This can also be useful + when performing HTTP/1.1 Upgrade to custom protocols. + +* Headers can now be provided as a map. + +* Header names may now be provided as binary, string or atom. + +* Gun now automatically lowercases provided header names. + +* Many HTTP/2 options have been added, allowing great + control over how Gun and the remote endpoint are + using the HTTP/2 connection. They can be used to + improve performance or lower the memory usage, for + example. + +* A new `keepalive_tolerance` option for HTTP/2 enables + closing the connection automatically when ping acks + are not received in a timely manner. It nicely + complements the `keepalive` option that makes Gun + send pings. + +* Gun now supports Websocket subprotocol negotiation + and the feature is fully documented and tested. + This can be used to create handlers that will + implement a protocol from within the Gun process itself. + The negotiation is enabled by setting the `protocols` + setting. The `default_protocol` and `user_opts` + settings are also useful. + +* It is now possible to send many Websocket frames in + a single `gun:ws_send/3` call. + +* Gun may now send Websocket ping frames automatically + at intervals determined by the `keepalive` option. It + is disabled by default. + +* A new `silence_pings` option can be set to `false` to + receive all ping and pong frames when using Websocket. + They are typically not needed and therefore silent by + default. + +* The `reply_to` option has been added to `gun:ws_upgrade/4`. + The option applies to both the response and subsequent + Websocket frames. + +* The `reply_to` option is also propagated to messages + following a CONNECT request when the protocol requested + is not HTTP. + +* A new option `retry_fun` can be used to implement + different backoff strategies when reconnecting. + +* A new option `supervise` can be used to start a Gun + connection without using Gun's supervisor. It defaults + to `true`. + +* Many improvements have been done to postpone or reject + requests and other operations while in the wrong state + (for example during state transitions when switching + protocols or connecting to proxies). + +* Update Cowlib to 2.12.0. + +=== Experimental features added + +* The `gun_pool` module was introduced. Its interface + is very similar to the `gun` module, but as it is an + experimental feature, it has not been documented yet. + The intent is to obtain feedback and document it in + an upcoming minor release. Pools are created for each + authority (host/port) and scope (user-defined value) + pairs and are resolved accordingly using the information + provided in the request and request options. Connections + may concurrently handle multiple requests/responses + from as many different processes as required. + +=== Features removed + +* Gun used to reject operations by processes that were not + the owner of the connection. This behavior has been removed. + In general the caller of a request or other operation will + receive the relevant messages unless the `reply_to` option + is used. + +* The `connect_destination()` option `protocol` has been + removed. It was previously deprecated in favor of `protocols`. + +* The `keepalive` timeout is now disabled by default + for HTTP/1.1 and HTTP/2. To be perfectly clear, this + is unrelated to the HTTP/1.1 keep-alive mechanism. + +=== Functions added + +* The function `gun:set_owner/2` has been added. It allows + changing the owner of a connection process. Only the current + owner can do this operation. + +* The function `gun:shutdown/1` has been added. It initiates + the graceful shutdown of the connection, followed by the + termination of the Gun process. + +* The function `gun:stream_info/2` has been added. It provides + information about a specific HTTP stream. + +=== Functions modified + +* The function `gun:info/1` now returns the owner of the + connection as well as the cookie store. + +* The functions `gun:await/2,3,4`, `gun:await_body/2,3,4` and + `gun:await_up/1,2,3` now distinguish the error types. They + can be a timeout, a connection error, a stream error or a + down error (when the Gun process exited while waiting). + +* The functions `gun:await/2,3,4` will now receive upgrades, + tunnel up and Websocket messages and return them. + +* Requests may now include the `tunnel` option to send the + request on a specific tunnel. + +* The functions `gun:request/4,5,6` have been replaced with + `gun:headers/4,5` and `gun:request/5,6`. This provides a + cleaner separation between requests that are followed by + a body and those that aren't. + +* The function `gun:ws_send/2` has been replaced with the + function `gun:ws_send/3`. The stream reference for the + corresponding Websocket upgrade request must now be given. + +=== Messages added + +* The `gun_tunnel_up` message has been added. + +=== Messages modified + +* The `gun_down` message no longer has its final element + documented as `UnprocessedStreams`. It never worked and + was always an empty list. + +=== Bugs fixed + +* *POTENTIAL SECURITY VULNERABILITY*: Fix transfer-encoding + precedence over content-length in responses. This bug may + contribute to a response smuggling security vulnerability + when Gun is used inside a proxy. + +* Gun will now better detect connection closes in some cases. + +* Gun will no longer send duplicate connection-wide `gun_error` + messages to the same process. + +* Gun no longer crashes when trying to upgrade to Websocket + over a connection restricted to HTTP/1.0. + +* The default value for the preferred protocols when using + CONNECT over TLS has been corrected. It was mistakenly not + enabling HTTP/2. + +* Protocol options provided for a tunnel destination were + sometimes ignored. This should no longer be the case. + +* Gun will no longer send an empty HTTP/2 DATA frame when + there is no request body. It was not necessary. + +* Gun will no longer error out when the owner process exits. + The error reason will now be a `shutdown` tuple instead. + +* The host header was set incorrectly during Websocket upgrades + when the host was configured with an IP address, resulting + in a crash. This has been corrected. + +* A completed stream could be found in the `gun_down` message when + the response contained a connection: close header. This is no + longer the case. + +* Hostnames can now be provided as atom as stated by the + documentation. + +* Gun will no longer attempt to send empty data chunks. When + using HTTP/1.1 chunked transfer-encoding this caused the + request body to end, even when `nofin` was given. + +* Gun now always retries connecting immediately when the + connection goes down. + +* The default port number for the HTTP and HTTPS schemes is + no longer sent in the host header. + +* An invalid stream reference was sent on failed Websocket + upgrade responses. This has been corrected. + +* HTTP/2 connection preface errors are now properly detected + and propagated in the `gun_down` message to the connection + owner as well as the exit reason of the Gun process. + +* HTTP/2 connection preface errors now provide a different + human readable error when the data received looks like an + HTTP/1.x response. + +* HTTP/2 connection errors were missing the human readable + reason in the `gun_error` message. This has been corrected. + +* Fix the host and :authority (pseudo-)headers when connecting + to an IPv6 address given as a tuple. They were lacking the + surrounding brackets. + +* Fix a crash in gun:info/1 when the socket was closed before + we call Transport:sockname/1. + +* Fix flushing by stream reference. When the `gun_inform` + message was flushed the function would switch to flushing + all messages from the pid instead of only messages from + the given stream. + +* Allow setting a custom SNI value. + +* Fix double sending of last chunk in HTTP/1.1 when Gun is + asked to send empty data before closing the stream. + +* Gun will now properly ignore parameters when the media + type is text/event-stream. + +* Avoid noisy crashes in the TLS over TLS code. + +* Gun will now include the StreamRef of Websocket streams + when sending `gun_down` messages. + +* Gun will no longer reject HTTP proxies that use HTTP/1.0 + for the version in their response. diff --git a/docs/en/gun/2.1/guide/migrating_from_1.3/index.html b/docs/en/gun/2.1/guide/migrating_from_1.3/index.html new file mode 100644 index 00000000..c2a6acd3 --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_1.3/index.html @@ -0,0 +1,337 @@ + + + + + + + + + + Nine Nines: Migrating from Gun 1.3 to 2.0 + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Migrating from Gun 1.3 to 2.0

    + +

    Gun 2.0 includes state of the art tunnel support. With Gun 2.0 it is possible to make requests or data go through any number of proxy endpoints using any combination of TCP or TLS transports and HTTP/1.1, HTTP/2 or SOCKS5 protocols. All combinations of the scenario Proxy1 -> Proxy2 -> Origin are tested and known to work.

    +

    Gun 2.0 adds many more features such as Websocket over HTTP/2, a built-in cookie store, graceful shutdown, flow control for data messages, event handlers and more.

    +

    Gun 2.0 also introduces an experimental pool module that automatically maintains connections and routes requests to the right process, in a similar way as browsers do.

    +

    Gun 2.0 greatly improves the HTTP/2 performance when it comes to receiving large response bodies; and when receiving response bodies from many separate requests concurrently.

    +

    Gun now shares much of its HTTP/2 code with Cowboy, including the HTTP/2 state machine. Numerous issues were fixed as a result because the Cowboy implementation was much more advanced.

    +

    The Gun connection process is now implemented using gen_statem.

    +

    Gun 2.0 requires Erlang/OTP 22.0 or greater.

    +

    Features added

    +
    • Cookie store support has been added. The cookie_store option allows configuring the cookie store backend. The gun_cookies module provides functions to help implementing such a backend. Gun comes with the backend gun_cookies_list which provides a per-connection, non-persistent cookie store. The cookie store engine implements the entire RFC6265bis draft algorithms except the parts about non-HTTP cookies as no such interface is provided; and the parts about SameSite as Gun has no concept of "browsing context". +
    • +
    • Graceful shutdown has been implemented. Graceful shutdown can be initiated on the client side by calling the new function gun:shutdown/1 or when the owner process goes away; or on the peer side via the connection: close HTTP/1.1 header, the HTTP/2 GOAWAY frame or the Websocket close frame. Gun will try to complete existing streams when possible; other streams get canceled immediately. The closing_timeout option controls how long we are willing to wait at most before closing the connection. +
    • +
    • Gun will better detect connection failures by checking the return value from sending data to the socket. This applies to all supported protocols. In addition, Gun now enables send_timeout_close with a send_timeout value defaulting to 15s. +
    • +
    • Flow control has been added. It allows limiting the number of data/Websocket messages Gun sends to the calling process. Gun will stop reading from the socket or stop updating the protocol's flow control window when applicable as well, to apply some backpressure to the remote endpoint(s). It is disabled by default and can be applied on a per-request basis if necessary. +
    • +
    • An event handler interface has been added providing access to many internal Gun events. This can be used for a variety of purposes including logging, tracing or otherwise instrumenting a Gun connection. +
    • +
    • In order to get separate events when connecting, the domain lookup, connection and TLS handshakes are now performed separately by Gun. As a result, there exists three separate timeout options for each of the steps, and the transport options had to be split into tcp_opts and tls_opts. +
    • +
    • Gun now supports connecting through SOCKS proxies, including secure SOCKS proxies. Both unauthenticated and username/password authentication are supported. +
    • +
    • Gun can connect through any number of HTTP, HTTPS, SOCKS or secure SOCKS proxies, including SOCKS proxies located after HTTP(S) proxies. The ultimate endpoint may be using any protocol, including plain TCP, TLS, HTTP/1.1 or HTTP/2. +
    • +
    • When specifying which protocols to use, options can now be provided specific to those protocols. It is now possible to have separate HTTP options for an HTTP proxy and the origin HTTP server, for example. See the new gun:protocols() type for details. +
    • +
    • Gun can now be used to send and receive raw data, as if it was just a normal socket. This can be useful when needing to connect through a number of HTTP/Socks proxies, allowing the use of Gun's great proxying capabilities (including TLS over TLS) for any sort of protocols. This can also be useful when performing HTTP/1.1 Upgrade to custom protocols. +
    • +
    • Headers can now be provided as a map. +
    • +
    • Header names may now be provided as binary, string or atom. +
    • +
    • Gun now automatically lowercases provided header names. +
    • +
    • Many HTTP/2 options have been added, allowing great control over how Gun and the remote endpoint are using the HTTP/2 connection. They can be used to improve performance or lower the memory usage, for example. +
    • +
    • A new keepalive_tolerance option for HTTP/2 enables closing the connection automatically when ping acks are not received in a timely manner. It nicely complements the keepalive option that makes Gun send pings. +
    • +
    • Gun now supports Websocket subprotocol negotiation and the feature is fully documented and tested. This can be used to create handlers that will implement a protocol from within the Gun process itself. The negotiation is enabled by setting the protocols setting. The default_protocol and user_opts settings are also useful. +
    • +
    • It is now possible to send many Websocket frames in a single gun:ws_send/3 call. +
    • +
    • Gun may now send Websocket ping frames automatically at intervals determined by the keepalive option. It is disabled by default. +
    • +
    • A new silence_pings option can be set to false to receive all ping and pong frames when using Websocket. They are typically not needed and therefore silent by default. +
    • +
    • The reply_to option has been added to gun:ws_upgrade/4. The option applies to both the response and subsequent Websocket frames. +
    • +
    • The reply_to option is also propagated to messages following a CONNECT request when the protocol requested is not HTTP. +
    • +
    • A new option retry_fun can be used to implement different backoff strategies when reconnecting. +
    • +
    • A new option supervise can be used to start a Gun connection without using Gun's supervisor. It defaults to true. +
    • +
    • Many improvements have been done to postpone or reject requests and other operations while in the wrong state (for example during state transitions when switching protocols or connecting to proxies). +
    • +
    • Update Cowlib to 2.12.0. +
    • +
    +

    Experimental features added

    +
    • The gun_pool module was introduced. Its interface is very similar to the gun module, but as it is an experimental feature, it has not been documented yet. The intent is to obtain feedback and document it in an upcoming minor release. Pools are created for each authority (host/port) and scope (user-defined value) pairs and are resolved accordingly using the information provided in the request and request options. Connections may concurrently handle multiple requests/responses from as many different processes as required. +
    • +
    +

    Features removed

    +
    • Gun used to reject operations by processes that were not the owner of the connection. This behavior has been removed. In general the caller of a request or other operation will receive the relevant messages unless the reply_to option is used. +
    • +
    • The connect_destination() option protocol has been removed. It was previously deprecated in favor of protocols. +
    • +
    • The keepalive timeout is now disabled by default for HTTP/1.1 and HTTP/2. To be perfectly clear, this is unrelated to the HTTP/1.1 keep-alive mechanism. +
    • +
    +

    Functions added

    +
    • The function gun:set_owner/2 has been added. It allows changing the owner of a connection process. Only the current owner can do this operation. +
    • +
    • The function gun:shutdown/1 has been added. It initiates the graceful shutdown of the connection, followed by the termination of the Gun process. +
    • +
    • The function gun:stream_info/2 has been added. It provides information about a specific HTTP stream. +
    • +
    +

    Functions modified

    +
    • The function gun:info/1 now returns the owner of the connection as well as the cookie store. +
    • +
    • The functions gun:await/2,3,4, gun:await_body/2,3,4 and gun:await_up/1,2,3 now distinguish the error types. They can be a timeout, a connection error, a stream error or a down error (when the Gun process exited while waiting). +
    • +
    • The functions gun:await/2,3,4 will now receive upgrades, tunnel up and Websocket messages and return them. +
    • +
    • Requests may now include the tunnel option to send the request on a specific tunnel. +
    • +
    • The functions gun:request/4,5,6 have been replaced with gun:headers/4,5 and gun:request/5,6. This provides a cleaner separation between requests that are followed by a body and those that aren't. +
    • +
    • The function gun:ws_send/2 has been replaced with the function gun:ws_send/3. The stream reference for the corresponding Websocket upgrade request must now be given. +
    • +
    +

    Messages added

    +
    • The gun_tunnel_up message has been added. +
    • +
    +

    Messages modified

    +
    • The gun_down message no longer has its final element documented as UnprocessedStreams. It never worked and was always an empty list. +
    • +
    +

    Bugs fixed

    +
    • POTENTIAL SECURITY VULNERABILITY: Fix transfer-encoding precedence over content-length in responses. This bug may contribute to a response smuggling security vulnerability when Gun is used inside a proxy. +
    • +
    • Gun will now better detect connection closes in some cases. +
    • +
    • Gun will no longer send duplicate connection-wide gun_error messages to the same process. +
    • +
    • Gun no longer crashes when trying to upgrade to Websocket over a connection restricted to HTTP/1.0. +
    • +
    • The default value for the preferred protocols when using CONNECT over TLS has been corrected. It was mistakenly not enabling HTTP/2. +
    • +
    • Protocol options provided for a tunnel destination were sometimes ignored. This should no longer be the case. +
    • +
    • Gun will no longer send an empty HTTP/2 DATA frame when there is no request body. It was not necessary. +
    • +
    • Gun will no longer error out when the owner process exits. The error reason will now be a shutdown tuple instead. +
    • +
    • The host header was set incorrectly during Websocket upgrades when the host was configured with an IP address, resulting in a crash. This has been corrected. +
    • +
    • A completed stream could be found in the gun_down message when the response contained a connection: close header. This is no longer the case. +
    • +
    • Hostnames can now be provided as atom as stated by the documentation. +
    • +
    • Gun will no longer attempt to send empty data chunks. When using HTTP/1.1 chunked transfer-encoding this caused the request body to end, even when nofin was given. +
    • +
    • Gun now always retries connecting immediately when the connection goes down. +
    • +
    • The default port number for the HTTP and HTTPS schemes is no longer sent in the host header. +
    • +
    • An invalid stream reference was sent on failed Websocket upgrade responses. This has been corrected. +
    • +
    • HTTP/2 connection preface errors are now properly detected and propagated in the gun_down message to the connection owner as well as the exit reason of the Gun process. +
    • +
    • HTTP/2 connection preface errors now provide a different human readable error when the data received looks like an HTTP/1.x response. +
    • +
    • HTTP/2 connection errors were missing the human readable reason in the gun_error message. This has been corrected. +
    • +
    • Fix the host and :authority (pseudo-)headers when connecting to an IPv6 address given as a tuple. They were lacking the surrounding brackets. +
    • +
    • Fix a crash in gun:info/1 when the socket was closed before we call Transport:sockname/1. +
    • +
    • Fix flushing by stream reference. When the gun_inform message was flushed the function would switch to flushing all messages from the pid instead of only messages from the given stream. +
    • +
    • Allow setting a custom SNI value. +
    • +
    • Fix double sending of last chunk in HTTP/1.1 when Gun is asked to send empty data before closing the stream. +
    • +
    • Gun will now properly ignore parameters when the media type is text/event-stream. +
    • +
    • Avoid noisy crashes in the TLS over TLS code. +
    • +
    • Gun will now include the StreamRef of Websocket streams when sending gun_down messages. +
    • +
    • Gun will no longer reject HTTP proxies that use HTTP/1.0 for the version in their response. +
    • +
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/migrating_from_2.0.asciidoc b/docs/en/gun/2.1/guide/migrating_from_2.0.asciidoc new file mode 100644 index 00000000..cfd64a8d --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_2.0.asciidoc @@ -0,0 +1,25 @@ +[appendix] +== Migrating from Gun 2.0 to 2.1 + +Gun 2.1 contains a small security improvement for +the HTTP/2 protocol, as well as includes a small +number of fixes and improvements. + +Gun 2.1 requires Erlang/OTP 22.0 or greater. + +=== Features added + +* A new HTTP/2 option `max_fragmented_header_block_size` has + been added to limit the size of header blocks that are + sent over multiple HEADERS and CONTINUATION frames. + +* Update Cowlib to 2.13.0. + +=== Bugs fixed + +* Gun will no longer configure the NPN TLS extension, + which has long been replaced by ALPN. NPN is not + compatible with TLS 1.3. + +* Gun will no longer crash when TLS connections close + very early in the connection's life time. diff --git a/docs/en/gun/2.1/guide/migrating_from_2.0/index.html b/docs/en/gun/2.1/guide/migrating_from_2.0/index.html new file mode 100644 index 00000000..b2883c28 --- /dev/null +++ b/docs/en/gun/2.1/guide/migrating_from_2.0/index.html @@ -0,0 +1,194 @@ + + + + + + + + + + Nine Nines: Migrating from Gun 2.0 to 2.1 + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Migrating from Gun 2.0 to 2.1

    + +

    Gun 2.1 contains a small security improvement for the HTTP/2 protocol, as well as includes a small number of fixes and improvements.

    +

    Gun 2.1 requires Erlang/OTP 22.0 or greater.

    +

    Features added

    +
    • A new HTTP/2 option max_fragmented_header_block_size has been added to limit the size of header blocks that are sent over multiple HEADERS and CONTINUATION frames. +
    • +
    • Update Cowlib to 2.13.0. +
    • +
    +

    Bugs fixed

    +
    • Gun will no longer configure the NPN TLS extension, which has long been replaced by ALPN. NPN is not compatible with TLS 1.3. +
    • +
    • Gun will no longer crash when TLS connections close very early in the connection's life time. +
    • +
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/protocols.asciidoc b/docs/en/gun/2.1/guide/protocols.asciidoc new file mode 100644 index 00000000..cd6de2cf --- /dev/null +++ b/docs/en/gun/2.1/guide/protocols.asciidoc @@ -0,0 +1,120 @@ +[[protocols]] +== Supported protocols + +This chapter describes the protocols supported and the +operations available to them. + +=== HTTP/1.1 + +HTTP/1.1 is a text request-response protocol. The client +sends a request, the server sends back a response. + +Gun provides convenience functions for performing GET, HEAD, +OPTIONS, POST, PATCH, PUT, and DELETE requests. All these +functions are aliases of `gun:headers/4,5` or `gun:request/5,6` +for the respective methods. Gun also provides a `gun:data/4` +function for streaming the request body. + +Gun will send a `gun_inform` message for every intermediate +informational responses received. They will always be sent +before the `gun_response` message. + +Gun will send a `gun_response` message for every response +received, followed by zero or more `gun_data` messages for +the response body, which is optionally terminated by a +`gun_trailers` message. If something goes wrong, a `gun_error` +will be sent instead. + +Gun provides convenience functions for dealing with messages. +The `gun:await/2,3,4` function waits for a response to the given +request, and the `gun:await_body/2,3,4` function for the +response body. The `gun:flush/1` function can be used to clear all +messages related to a request or a connection from the mailbox +of the calling process. + +The function `gun:cancel/2` can be used to silence the +response to a request previously sent if it is no longer +needed. When using HTTP/1.1 there is no multiplexing so +Gun will have to receive the response fully before any +other responses can be received. + +Finally, Gun can upgrade an HTTP/1.1 connection to Websocket. +It provides the `gun:ws_upgrade/2,3,4` function for that +purpose. A `gun_upgrade` message will be sent on success; +a `gun_response` message otherwise. + +=== HTTP/2 + +HTTP/2 is a binary protocol based on HTTP, compatible with +the HTTP semantics, that reduces the complexity of parsing +requests and responses, compresses the HTTP headers and +allows the server to push additional resources along with +the normal response to the original request. + +The HTTP/2 interface is very similar to HTTP/1.1, so this +section instead focuses on the differences in the interface +for the two protocols. + +Gun will send `gun_push` messages for every push received. +They will always be sent before the `gun_response` message. +They can be ignored safely if they are not needed, or they +can be canceled. + +The `gun:cancel/2` function will use the HTTP/2 stream +cancellation mechanism which allows Gun to inform the +server to stop sending a response for this particular +request, saving resources. + +=== Websocket + +Websocket is a binary protocol built on top of HTTP that +allows asynchronous concurrent communication between the +client and the server. A Websocket server can push data to +the client at any time. + +Once the Websocket connection is established over an HTTP/1.1 +connection, the only operation available on this connection +is sending Websocket frames using `gun:ws_send/3`. + +Gun will send a `gun_ws` message for every frame received. + +=== Summary + +The two following tables summarize the supported operations +and the messages Gun sends depending on the connection's +current protocol. + +.Supported operations per protocol +[cols="<,3*^",options="header"] +|=== +| Operation | HTTP/1.1 | HTTP/2 | Websocket +| delete | yes | yes | no +| get | yes | yes | no +| head | yes | yes | no +| options | yes | yes | no +| patch | yes | yes | no +| post | yes | yes | no +| put | yes | yes | no +| request | yes | yes | no +| data | yes | yes | no +| await | yes | yes | no +| await_body | yes | yes | no +| flush | yes | yes | no +| cancel | yes | yes | no +| ws_upgrade | yes | yes | no +| ws_send | no | no | yes +|=== + +.Messages sent per protocol +[cols="<,3*^",options="header"] +|=== +| Message | HTTP/1.1 | HTTP/2 | Websocket +| gun_push | no | yes | no +| gun_inform | yes | yes | no +| gun_response | yes | yes | no +| gun_data | yes | yes | no +| gun_trailers | yes | yes | no +| gun_error | yes | yes | yes +| gun_upgrade | yes | yes | no +| gun_ws | no | no | yes +|=== diff --git a/docs/en/gun/2.1/guide/protocols/index.html b/docs/en/gun/2.1/guide/protocols/index.html new file mode 100644 index 00000000..c0fb3a8a --- /dev/null +++ b/docs/en/gun/2.1/guide/protocols/index.html @@ -0,0 +1,329 @@ + + + + + + + + + + Nine Nines: Supported protocols + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Supported protocols

    + +

    This chapter describes the protocols supported and the operations available to them.

    +

    HTTP/1.1

    +

    HTTP/1.1 is a text request-response protocol. The client sends a request, the server sends back a response.

    +

    Gun provides convenience functions for performing GET, HEAD, OPTIONS, POST, PATCH, PUT, and DELETE requests. All these functions are aliases of gun:headers/4,5 or gun:request/5,6 for the respective methods. Gun also provides a gun:data/4 function for streaming the request body.

    +

    Gun will send a gun_inform message for every intermediate informational responses received. They will always be sent before the gun_response message.

    +

    Gun will send a gun_response message for every response received, followed by zero or more gun_data messages for the response body, which is optionally terminated by a gun_trailers message. If something goes wrong, a gun_error will be sent instead.

    +

    Gun provides convenience functions for dealing with messages. The gun:await/2,3,4 function waits for a response to the given request, and the gun:await_body/2,3,4 function for the response body. The gun:flush/1 function can be used to clear all messages related to a request or a connection from the mailbox of the calling process.

    +

    The function gun:cancel/2 can be used to silence the response to a request previously sent if it is no longer needed. When using HTTP/1.1 there is no multiplexing so Gun will have to receive the response fully before any other responses can be received.

    +

    Finally, Gun can upgrade an HTTP/1.1 connection to Websocket. It provides the gun:ws_upgrade/2,3,4 function for that purpose. A gun_upgrade message will be sent on success; a gun_response message otherwise.

    +

    HTTP/2

    +

    HTTP/2 is a binary protocol based on HTTP, compatible with the HTTP semantics, that reduces the complexity of parsing requests and responses, compresses the HTTP headers and allows the server to push additional resources along with the normal response to the original request.

    +

    The HTTP/2 interface is very similar to HTTP/1.1, so this section instead focuses on the differences in the interface for the two protocols.

    +

    Gun will send gun_push messages for every push received. They will always be sent before the gun_response message. They can be ignored safely if they are not needed, or they can be canceled.

    +

    The gun:cancel/2 function will use the HTTP/2 stream cancellation mechanism which allows Gun to inform the server to stop sending a response for this particular request, saving resources.

    +

    Websocket

    +

    Websocket is a binary protocol built on top of HTTP that allows asynchronous concurrent communication between the client and the server. A Websocket server can push data to the client at any time.

    +

    Once the Websocket connection is established over an HTTP/1.1 connection, the only operation available on this connection is sending Websocket frames using gun:ws_send/3.

    +

    Gun will send a gun_ws message for every frame received.

    +

    Summary

    +

    The two following tables summarize the supported operations and the messages Gun sends depending on the connection's current protocol.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Supported operations per protocol
    OperationHTTP/1.1HTTP/2Websocket
    deleteyesyesno
    getyesyesno
    headyesyesno
    optionsyesyesno
    patchyesyesno
    postyesyesno
    putyesyesno
    requestyesyesno
    datayesyesno
    awaityesyesno
    await_bodyyesyesno
    flushyesyesno
    cancelyesyesno
    ws_upgradeyesyesno
    ws_sendnonoyes
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Messages sent per protocol
    MessageHTTP/1.1HTTP/2Websocket
    gun_pushnoyesno
    gun_informyesyesno
    gun_responseyesyesno
    gun_datayesyesno
    gun_trailersyesyesno
    gun_erroryesyesyes
    gun_upgradeyesyesno
    gun_wsnonoyes
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/start.asciidoc b/docs/en/gun/2.1/guide/start.asciidoc new file mode 100644 index 00000000..09720dca --- /dev/null +++ b/docs/en/gun/2.1/guide/start.asciidoc @@ -0,0 +1,43 @@ +[[start]] +== Starting and stopping + +This chapter describes how to start and stop the Gun application. + +=== Setting up + +Specify Gun as a dependency to your application in your favorite +build tool. + +With Erlang.mk this is done by adding `gun` to the `DEPS` variable +in your Makefile. + +.Adding Gun as an Erlang.mk dependency +[source,make] +---- +DEPS = gun +---- + +=== Starting + +Gun is an _OTP application_. It needs to be started before you can +use it. + +.Starting Gun in an Erlang shell +[source,erlang] +---- +1> application:ensure_all_started(gun). +{ok,[crypto,cowlib,asn1,public_key,ssl,gun]} +---- + +=== Stopping + +You can stop Gun using the `application:stop/1` function, however +only Gun will be stopped. This is the reverse of `application:start/1`. +The `application_ensure_all_started/1` function has no equivalent for +stopping all applications. + +.Stopping Gun +[source,erlang] +---- +application:stop(gun). +---- diff --git a/docs/en/gun/2.1/guide/start/index.html b/docs/en/gun/2.1/guide/start/index.html new file mode 100644 index 00000000..44e538b1 --- /dev/null +++ b/docs/en/gun/2.1/guide/start/index.html @@ -0,0 +1,206 @@ + + + + + + + + + + Nine Nines: Starting and stopping + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Starting and stopping

    + +

    This chapter describes how to start and stop the Gun application.

    +

    Setting up

    +

    Specify Gun as a dependency to your application in your favorite build tool.

    +

    With Erlang.mk this is done by adding gun to the DEPS variable in your Makefile.

    +
    Adding Gun as an Erlang.mk dependency
    +
    source-highlight: could not find a language definition for make +
    +

    Starting

    +

    Gun is an OTP application. It needs to be started before you can use it.

    +
    Starting Gun in an Erlang shell
    +
    +
    1> application:ensure_all_started(gun).
    +{ok,[crypto,cowlib,asn1,public_key,ssl,gun]}
    +
    +

    Stopping

    +

    You can stop Gun using the application:stop/1 function, however only Gun will be stopped. This is the reverse of application:start/1. The application_ensure_all_started/1 function has no equivalent for stopping all applications.

    +
    Stopping Gun
    +
    +
    application:stop(gun).
    +
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/guide/websocket.asciidoc b/docs/en/gun/2.1/guide/websocket.asciidoc new file mode 100644 index 00000000..ba06e2c7 --- /dev/null +++ b/docs/en/gun/2.1/guide/websocket.asciidoc @@ -0,0 +1,124 @@ +[[websocket]] +== Websocket + +This chapter describes how to use the Gun client for +communicating with a Websocket server. + +// @todo recovering from connection failure, reconnecting to Websocket etc. + +=== HTTP upgrade + +Websocket is a protocol built on top of HTTP. To use Websocket, +you must first request for the connection to be upgraded. Only +HTTP/1.1 connections can be upgraded to Websocket, so you might +need to restrict the protocol to HTTP/1.1 if you are planning +to use Websocket over TLS. + +You must use the `gun:ws_upgrade/2,3,4` function to upgrade +to Websocket. This function can be called anytime after connection, +so you can send HTTP requests before upgrading to Websocket. + +.Upgrade to Websocket +[source,erlang] +---- +gun:ws_upgrade(ConnPid, "/websocket"). +---- + +Gun will set all the necessary headers for performing the +Websocket upgrade, but you can specify additional headers +if needed. For example you can authenticate. + +.Upgrade to Websocket using HTTP authentication +[source,erlang] +---- +gun:ws_upgrade(ConnPid, "/websocket", [ + {<<"authorization">>, "Basic dXNlcm5hbWU6cGFzc3dvcmQ="} +]). +---- + +You can pass the Websocket options as part of the `gun:open/2,3` +call when opening the connection, or using the `gun:ws_upgrade/4`. +The fourth argument is those same options. + +Gun can negotiate the protocol to be used for the Websocket +connection. The `protocols` option can be given with a list +of protocols accepted and the corresponding handler module. +Note that the interface for handler modules is currently +undocumented and must be set to `gun_ws_h`. + +.Upgrade to Websocket with protocol negotiation +[source,erlang] +---- +StreamRef = gun:ws_upgrade(ConnPid, "/websocket", [] + #{protocols => [{<<"xmpp">>, gun_ws_h}]}). +---- + +The upgrade will fail if the server cannot satisfy the +protocol negotiation. + +When the upgrade succeeds, a `gun_upgrade` message is sent. +If the server does not understand Websocket or refused the +upgrade, a `gun_response` message is sent. If Gun couldn't +perform the upgrade due to an error (for example attempting +to upgrade to Websocket on an HTTP/1.0 connection) then a +`gun_error` message is sent. + +When the server does not understand Websocket, it may send +a meaningful response which should be processed. In the +following example we however ignore it: + +[source,erlang] +---- +receive + {gun_upgrade, ConnPid, StreamRef, [<<"websocket">>], Headers} -> + upgrade_success(ConnPid, StreamRef); + {gun_response, ConnPid, _, _, Status, Headers} -> + exit({ws_upgrade_failed, Status, Headers}); + {gun_error, ConnPid, StreamRef, Reason} -> + exit({ws_upgrade_failed, Reason}) + %% More clauses here as needed. +after 1000 -> + exit(timeout) +end. +---- + +=== Sending data + +Once the Websocket upgrade has completed successfully, you no +longer have access to functions for performing requests. You +can only send and receive Websocket messages. + +Use `gun:ws_send/3` to send messages to the server. + +.Send a text frame +[source,erlang] +---- +gun:ws_send(ConnPid, StreamRef, {text, "Hello!"}). +---- + +.Send a text frame, a binary frame and then close the connection +[source,erlang] +---- +gun:ws_send(ConnPid, StreamRef, [ + {text, "Hello!"}, + {binary, BinaryValue}, + close +]). +---- + +Note that if you send a close frame, Gun will close the connection +cleanly but may attempt to reconnect afterwards depending on the +`retry` configuration. + +=== Receiving data + +Gun sends an Erlang message to the owner process for every +Websocket message it receives. + +[source,erlang] +---- +receive + {gun_ws, ConnPid, StreamRef, Frame} -> + handle_frame(ConnPid, StreamRef, Frame) +end. +---- diff --git a/docs/en/gun/2.1/guide/websocket/index.html b/docs/en/gun/2.1/guide/websocket/index.html new file mode 100644 index 00000000..cf154726 --- /dev/null +++ b/docs/en/gun/2.1/guide/websocket/index.html @@ -0,0 +1,264 @@ + + + + + + + + + + Nine Nines: Websocket + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Websocket

    + +

    This chapter describes how to use the Gun client for communicating with a Websocket server.

    + +

    HTTP upgrade

    +

    Websocket is a protocol built on top of HTTP. To use Websocket, you must first request for the connection to be upgraded. Only HTTP/1.1 connections can be upgraded to Websocket, so you might need to restrict the protocol to HTTP/1.1 if you are planning to use Websocket over TLS.

    +

    You must use the gun:ws_upgrade/2,3,4 function to upgrade to Websocket. This function can be called anytime after connection, so you can send HTTP requests before upgrading to Websocket.

    +
    Upgrade to Websocket
    +
    +
    gun:ws_upgrade(ConnPid, "/websocket").
    +
    +

    Gun will set all the necessary headers for performing the Websocket upgrade, but you can specify additional headers if needed. For example you can authenticate.

    +
    Upgrade to Websocket using HTTP authentication
    +
    +
    gun:ws_upgrade(ConnPid, "/websocket", [
    +    {<<"authorization">>, "Basic dXNlcm5hbWU6cGFzc3dvcmQ="}
    +]).
    +
    +

    You can pass the Websocket options as part of the gun:open/2,3 call when opening the connection, or using the gun:ws_upgrade/4. The fourth argument is those same options.

    +

    Gun can negotiate the protocol to be used for the Websocket connection. The protocols option can be given with a list of protocols accepted and the corresponding handler module. Note that the interface for handler modules is currently undocumented and must be set to gun_ws_h.

    +
    Upgrade to Websocket with protocol negotiation
    +
    +
    StreamRef = gun:ws_upgrade(ConnPid, "/websocket", []
    +    #{protocols => [{<<"xmpp">>, gun_ws_h}]}).
    +
    +

    The upgrade will fail if the server cannot satisfy the protocol negotiation.

    +

    When the upgrade succeeds, a gun_upgrade message is sent. If the server does not understand Websocket or refused the upgrade, a gun_response message is sent. If Gun couldn't perform the upgrade due to an error (for example attempting to upgrade to Websocket on an HTTP/1.0 connection) then a gun_error message is sent.

    +

    When the server does not understand Websocket, it may send a meaningful response which should be processed. In the following example we however ignore it:

    +
    +
    receive
    +    {gun_upgrade, ConnPid, StreamRef, [<<"websocket">>], Headers} ->
    +        upgrade_success(ConnPid, StreamRef);
    +    {gun_response, ConnPid, _, _, Status, Headers} ->
    +        exit({ws_upgrade_failed, Status, Headers});
    +    {gun_error, ConnPid, StreamRef, Reason} ->
    +        exit({ws_upgrade_failed, Reason})
    +    %% More clauses here as needed.
    +after 1000 ->
    +    exit(timeout)
    +end.
    +
    +

    Sending data

    +

    Once the Websocket upgrade has completed successfully, you no longer have access to functions for performing requests. You can only send and receive Websocket messages.

    +

    Use gun:ws_send/3 to send messages to the server.

    +
    Send a text frame
    +
    +
    gun:ws_send(ConnPid, StreamRef, {text, "Hello!"}).
    +
    +
    Send a text frame, a binary frame and then close the connection
    +
    +
    gun:ws_send(ConnPid, StreamRef, [
    +    {text, "Hello!"},
    +    {binary, BinaryValue},
    +    close
    +]).
    +
    +

    Note that if you send a close frame, Gun will close the connection cleanly but may attempt to reconnect afterwards depending on the retry configuration.

    +

    Receiving data

    +

    Gun sends an Erlang message to the owner process for every Websocket message it receives.

    +
    +
    receive
    +    {gun_ws, ConnPid, StreamRef, Frame} ->
    +        handle_frame(ConnPid, StreamRef, Frame)
    +end.
    +
    + + + + + + + + + + + + + + + + +
    + +
    + + +

    + Gun + 2.1 + + User Guide +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.await/index.html b/docs/en/gun/2.1/manual/gun.await/index.html new file mode 100644 index 00000000..d0416b94 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.await/index.html @@ -0,0 +1,256 @@ + + + + + + + + + + Nine Nines: gun:await(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:await(3)

    + +

    Name

    +

    gun:await - Wait for a response

    +

    Description

    +
    +
    await(ConnPid, StreamRef)
    +    -> await(ConnPid, StreamRef, 5000, MonitorRef)
    +
    +await(ConnPid, StreamRef, MonitorRef)
    +    -> await(ConnPid, StreamRef, 5000, MonitorRef)
    +
    +await(ConnPid, StreamRef, Timeout)
    +    -> await(ConnPid, StreamRef, Timeout, MonitorRef)
    +
    +await(ConnPid, StreamRef, Timeout, MonitorRef)
    +    -> Result
    +
    +ConnPid    :: pid()
    +StreamRef  :: gun:stream_ref()
    +MonitorRef :: reference()
    +Timeout    :: timeout()
    +Result     :: tuple() - see below
    +
    +

    Wait for a response.

    +

    This function waits for a message from the given stream and returns it as a tuple. An error will be returned should the process fail or a relevant message is not received within the specified duration.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    Timeout
    +

    How long to wait for a message, in milliseconds.

    +
    +
    MonitorRef
    +

    Monitor for the Gun connection process.

    +

    A monitor is automatically created for the duration of this call when one is not provided.

    +
    +
    +

    Return value

    +

    A number of different tuples can be returned. They correspond to the message of the same name and they contain the same elements minus the pid and stream reference. Error tuples may also be returned when a timeout or an error occur.

    +
    +
    Result :: {inform, Status, Headers}
    +        | {response, IsFin, Status, Headers}
    +        | {data, IsFin, Data}
    +        | {trailers, Trailers}
    +        | {push, NewStreamRef, Method, URI, Headers}
    +        | {upgrade, Protocols, Headers}
    +        | {ws, Frame}
    +        | {error, Reason}
    +
    +Reason :: {stream_error | connection_error | down, any()}
    +        | timeout
    +
    +

    Because the messages and returned tuples are equivalent, please refer to the manual pages for each message for further information:

    + +

    Changelog

    +
    • 2.0: upgrade and ws tuples can now be returned. +
    • +
    • 2.0: The error tuple type now includes the type of error. +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Wait for a response
    +
    +
    StreamRef = gun:get(ConnPid, "/articles", [
    +    {<<"accept">>, <<"text/html;q=1.0, application/xml;q=0.1">>}
    +]).
    +{response, nofin, 200, _Headers} = gun:await(ConnPid, StreamRef).
    +{data, fin, <<"Hello world!">>} = gun:await(ConnPid, StreamRef).
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:head(3), gun:options(3), gun:patch(3), gun:post(3), gun:put(3), gun:delete(3), gun:headers(3), gun:request(3), gun:await_body(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.await_body/index.html b/docs/en/gun/2.1/manual/gun.await_body/index.html new file mode 100644 index 00000000..a7a272c4 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.await_body/index.html @@ -0,0 +1,224 @@ + + + + + + + + + + Nine Nines: gun:await_body(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:await_body(3)

    + +

    Name

    +

    gun:await_body - Wait for the complete response body

    +

    Description

    +
    +
    await_body(ConnPid, StreamRef)
    +    -> await_body(ConnPid, StreamRef, 5000, MonitorRef)
    +
    +await_body(ConnPid, StreamRef, MonitorRef)
    +    -> await_body(ConnPid, StreamRef, 5000, MonitorRef)
    +
    +await_body(ConnPid, StreamRef, Timeout)
    +    -> await_body(ConnPid, StreamRef, Timeout, MonitorRef)
    +
    +await_body(ConnPid, StreamRef, Timeout, MonitorRef)
    +    -> {ok, Body} | {ok, Body, Trailers} | {error, Reason}
    +
    +ConnPid    :: pid()
    +StreamRef  :: gun:stream_ref()
    +MonitorRef :: reference()
    +Timeout    :: timeout()
    +Body       :: binary()
    +Trailers   :: [{binary(), binary()}]
    +Reason     :: {stream_error | connection_error | down, any()}
    +            | timeout
    +
    +

    Wait for the complete response body.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    Timeout
    +

    How long to wait for each message, in milliseconds.

    +
    +
    MonitorRef
    +

    Monitor for the Gun connection process.

    +

    A monitor is automatically created for the duration of this call when one is not provided.

    +
    +
    +

    Return value

    +

    The body is returned, possibly with trailers if the request contained a te: trailers header. Error tuples may also be returned when a timeout or an error occur.

    +

    Changelog

    +
    • 2.0: The error tuple type now includes the type of error. +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Wait for the complete response body
    +
    +
    StreamRef = gun:get(ConnPid, "/articles", [
    +    {<<"accept">>, <<"text/html;q=1.0, application/xml;q=0.1">>}
    +]).
    +{response, nofin, 200, _Headers} = gun:await(ConnPid, StreamRef).
    +{ok, _Body} = gun:await_body(ConnPid, StreamRef).
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:head(3), gun:options(3), gun:patch(3), gun:post(3), gun:put(3), gun:delete(3), gun:headers(3), gun:request(3), gun:await(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.await_up/index.html b/docs/en/gun/2.1/manual/gun.await_up/index.html new file mode 100644 index 00000000..dfeede14 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.await_up/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + Nine Nines: gun:await_up(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:await_up(3)

    + +

    Name

    +

    gun:await_up - Wait for the connection to be up

    +

    Description

    +
    +
    await_up(ConnPid)
    +    -> await_up(ConnPid, 5000, MonitorRef)
    +
    +await_up(ConnPid, MonitorRef)
    +    -> await_up(ConnPid, 5000, MonitorRef)
    +
    +await_up(ConnPid, Timeout)
    +    -> await_up(ConnPid, Timeout, MonitorRef)
    +
    +await_up(ConnPid, Timeout, MonitorRef)
    +    -> {ok, Protocol} | {error, Reason}
    +
    +ConnPid    :: pid()
    +MonitorRef :: reference()
    +Timeout    :: timeout()
    +Protocol   :: http | http2 | socks
    +Reason     :: {down, any()} | timeout
    +
    +

    Wait for the connection to be up.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Timeout
    +

    How long to wait for, in milliseconds.

    +
    +
    MonitorRef
    +

    Monitor for the Gun connection process.

    +

    A monitor is automatically created for the duration of this call when one is not provided.

    +
    +
    +

    Return value

    +

    The protocol selected for this connection. It can be used to determine the capabilities of the server. Error tuples may also be returned when a timeout or an error occur.

    +

    Changelog

    +
    • 2.0: The error tuple type now includes the type of error. +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Wait for the connection to be up
    +
    +
    {ok, ConnPid} = gun:open("example.org", 443).
    +{ok, _} = gun:await_up(ConnPid).
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:open_unix(3), gun_tunnel_up(3), gun_up(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.cancel/index.html b/docs/en/gun/2.1/manual/gun.cancel/index.html new file mode 100644 index 00000000..d0919037 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.cancel/index.html @@ -0,0 +1,199 @@ + + + + + + + + + + Nine Nines: gun:cancel(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:cancel(3)

    + +

    Name

    +

    gun:cancel - Cancel the given stream

    +

    Description

    +
    +
    cancel(ConnPid, StreamRef) -> ok
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +
    +

    Cancel the given stream.

    +

    The behavior of this function depends on the protocol selected.

    +

    HTTP/1.1 does not support this feature. Gun will simply silence the stream and stop relaying messages. Gun may also decide to close the connection if the response body is too large, to avoid wasting time and bandwidth.

    +

    HTTP/2 allows cancelling streams at any time.

    +

    This function is asynchronous. Messages related to this stream may still be sent after the function returns.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    +

    Return value

    +

    The atom ok is returned.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Cancel a stream
    +
    +
    gun:cancel(ConnPid, StreamRef).
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:head(3), gun:options(3), gun:patch(3), gun:post(3), gun:put(3), gun:delete(3), gun:headers(3), gun:request(3), gun:stream_info(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.close/index.html b/docs/en/gun/2.1/manual/gun.close/index.html new file mode 100644 index 00000000..3c53c1ce --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.close/index.html @@ -0,0 +1,191 @@ + + + + + + + + + + Nine Nines: gun:close(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:close(3)

    + +

    Name

    +

    gun:close - Brutally close the connection

    +

    Description

    +
    +
    close(ConnPid) -> ok
    +
    +ConnPid :: pid()
    +
    +

    Brutally close the connection.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    +

    Return value

    +

    The atom ok is returned.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Close the connection
    +
    +
    ok = gun:close(ConnPid).
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:open_unix(3), gun:shutdown(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.connect/index.html b/docs/en/gun/2.1/manual/gun.connect/index.html new file mode 100644 index 00000000..63ffa96a --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.connect/index.html @@ -0,0 +1,252 @@ + + + + + + + + + + Nine Nines: gun:connect(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:connect(3)

    + +

    Name

    +

    gun:connect - Establish a tunnel to the origin server

    +

    Description

    +
    +
    connect(ConnPid, Destination)
    +    -> connect(ConnPid, Destination, [], #{}).
    +
    +connect(ConnPid, Destination, Headers)
    +    -> connect(ConnPid, Destination, Headers, #{}).
    +
    +connect(ConnPid, Destination, Headers, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid     :: pid()
    +Destination :: gun:connect_destination()
    +Headers     :: gun:req_headers()
    +ReqOpts     :: gun:req_opts()
    +StreamRef   :: gun:stream_ref()
    +
    +

    Establish a tunnel to the origin server.

    +

    This feature is currently only available for HTTP/1.1 connections. Upon successful completion of the CONNECT request a tunnel is established and subsequent requests will go through the tunnel.

    +

    Gun will not automatically re-issue the CONNECT request upon reconnection to the proxy server. The gun_up message can be used to know when the tunnel needs to be established again.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Destination
    +

    Destination of the CONNECT request.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 1.2: Function introduced. +
    • +
    +

    Examples

    +
    Establish a tunnel
    +
    +
    {ok, ConnPid} = gun:open("proxy.example.org", 1080),
    +{ok, http} = gun:await_up(ConnPid),
    +StreamRef = gun:connect(ConnPid, #{
    +    host => "origin-server.example.org",
    +    port => 80
    +}),
    +{response, fin, 200, _} = gun:await(ConnPid, StreamRef),
    +%% Subsequent requests will be sent to origin-server.example.org.
    +
    +
    Establish a tunnel for a secure HTTP/2 connection
    +
    +
    {ok, ConnPid} = gun:open("proxy.example.org", 1080),
    +{ok, http} = gun:await_up(ConnPid),
    +StreamRef = gun:connect(ConnPid, #{
    +    host => "origin-server.example.org",
    +    port => 443,
    +    protocols => [http2],
    +    transport => tls
    +}),
    +{response, fin, 200, _} = gun:await(ConnPid, StreamRef),
    +%% Subsequent requests will be sent to origin-server.example.org.
    +
    +
    Establish a tunnel using proxy authorization
    +
    +
    {ok, ConnPid} = gun:open("proxy.example.org", 1080),
    +{ok, http} = gun:await_up(ConnPid),
    +StreamRef = gun:connect(ConnPid, #{
    +    host => "origin-server.example.org",
    +    port => 80,
    +    username => "essen",
    +    password => "myrealpasswordis"
    +}),
    +{response, fin, 200, _} = gun:await(ConnPid, StreamRef),
    +%% Subsequent requests will be sent to origin-server.example.org.
    +
    +

    See also

    +

    gun(3), gun:await_up(3), gun_up(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.data/index.html b/docs/en/gun/2.1/manual/gun.data/index.html new file mode 100644 index 00000000..1b725aa3 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.data/index.html @@ -0,0 +1,210 @@ + + + + + + + + + + Nine Nines: gun:data(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:data(3)

    + +

    Name

    +

    gun:data - Stream the body of a request

    +

    Description

    +
    +
    data(ConnPid, StreamRef, IsFin, Data) -> ok
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +IsFin     :: fin | nofin
    +Data      :: iodata()
    +
    +

    Stream the body of a request.

    +

    This function can only be used if the original request had headers indicating that a body would be streamed.

    +

    All calls to this function must use the nofin flag except for the last which must use fin to indicate the end of the request body.

    +

    Empty data is allowed regardless of the value of IsFin. Gun may or may not send empty data chunks, however.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    IsFin
    +

    Whether this message terminates the request.

    +
    +
    Data
    +

    All or part of the response body.

    +
    +
    +

    Return value

    +

    The atom ok is returned.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Stream the body of a request
    +
    +
    StreamRef = gun:put(ConnPid, "/lang/fr_FR/hello", [
    +    {<<"content-type">>, <<"text/plain">>}
    +]).
    +gun:data(ConnPid, StreamRef, nofin, <<"Bonjour !\n">>).
    +gun:data(ConnPid, StreamRef, fin, <<"Bonsoir !\n">>).
    +
    +

    See also

    +

    gun(3), gun:patch(3), gun:post(3), gun:put(3), gun:headers(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.delete/index.html b/docs/en/gun/2.1/manual/gun.delete/index.html new file mode 100644 index 00000000..915871e0 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.delete/index.html @@ -0,0 +1,219 @@ + + + + + + + + + + Nine Nines: gun:delete(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:delete(3)

    + +

    Name

    +

    gun:delete - Delete a resource

    +

    Description

    +
    +
    delete(ConnPid, Path)
    +    -> delete(ConnPid, Path, [], #{}).
    +
    +delete(ConnPid, Path, Headers)
    +    -> delete(ConnPid, Path, Headers, #{})
    +
    +delete(ConnPid, Path, Headers, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Delete a resource.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Delete a resource
    +
    +
    StreamRef = gun:delete(ConnPid, "/drafts/123").
    +
    +
    Delete a resource with request options
    +
    +
    StreamRef = gun:delete(ConnPid, "/drafts/123", [],
    +    #{reply_to => ReplyToPid}).
    +
    +

    See also

    +

    gun(3), gun:put(3), gun:await(3), gun:await_body(3), gun_push(3), gun_inform(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.flush/index.html b/docs/en/gun/2.1/manual/gun.flush/index.html new file mode 100644 index 00000000..74e0ea84 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.flush/index.html @@ -0,0 +1,204 @@ + + + + + + + + + + Nine Nines: gun:flush(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:flush(3)

    + +

    Name

    +

    gun:flush - Flush all messages related to a connection or a stream

    +

    Description

    +
    +
    flush(ConnPid) -> ok
    +flush(StreamRef) -> ok
    +
    +ConnPid    :: pid()
    +StreamRef  :: gun:stream_ref()
    +
    +

    Flush all messages related to a connection or a stream.

    +

    Arguments

    +

    Either of these arguments may be provided:

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    +

    Return value

    +

    The atom ok is returned.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Flush all messages from a connection
    +
    +
    gun:flush(ConnPid).
    +
    +
    Flush messages from a single stream
    +
    +
    gun:flush(StreamRef).
    +
    +

    See also

    +

    gun(3), gun:await(3), gun:await_body(3), gun:await_up(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.get/index.html b/docs/en/gun/2.1/manual/gun.get/index.html new file mode 100644 index 00000000..bcea3ddc --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.get/index.html @@ -0,0 +1,222 @@ + + + + + + + + + + Nine Nines: gun:get(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:get(3)

    + +

    Name

    +

    gun:get - Get a resource representation

    +

    Description

    +
    +
    get(ConnPid, Path)
    +    -> get(ConnPid, Path, [], #{}).
    +
    +get(ConnPid, Path, Headers)
    +    -> get(ConnPid, Path, Headers, #{})
    +
    +get(ConnPid, Path, Headers, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Get a resource representation.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Get a resource representation
    +
    +
    StreamRef = gun:get(ConnPid, "/articles", [
    +    {<<"accept">>, <<"text/html;q=1.0, application/xml;q=0.1">>}
    +]).
    +
    +
    Get a resource representation with request options
    +
    +
    StreamRef = gun:get(ConnPid, "/articles", [], #{
    +    reply_to => ReplyToPid
    +}).
    +
    +

    See also

    +

    gun(3), gun:head(3), gun:await(3), gun:await_body(3), gun_push(3), gun_inform(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.head/index.html b/docs/en/gun/2.1/manual/gun.head/index.html new file mode 100644 index 00000000..7d140d48 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.head/index.html @@ -0,0 +1,224 @@ + + + + + + + + + + Nine Nines: gun:head(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:head(3)

    + +

    Name

    +

    gun:head - Get headers of a resource representation

    +

    Description

    +
    +
    head(ConnPid, Path)
    +    -> head(ConnPid, Path, [], #{}).
    +
    +head(ConnPid, Path, Headers)
    +    -> head(ConnPid, Path, Headers, #{})
    +
    +head(ConnPid, Path, Headers, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Get headers of a resource representation.

    +

    This function performs the same operation as gun:get(3), except the server will not send the resource representation, only the response's status code and headers.

    +

    While servers are supposed to send the same headers as for a GET request, they sometimes will not. For example the content-length header may be dropped from the response.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Get headers of a resource representation
    +
    +
    StreamRef = gun:head(ConnPid, "/articles", [
    +    {<<"accept">>, <<"text/html;q=1.0, application/xml;q=0.1">>}
    +]).
    +
    +
    Get headers of a resource representation with request options
    +
    +
    StreamRef = gun:head(ConnPid, "/articles", [], #{
    +    reply_to => ReplyToPid
    +}).
    +
    +

    See also

    +

    gun(3), gun:head(3), gun:await(3), gun_push(3), gun_inform(3), gun_response(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.headers/index.html b/docs/en/gun/2.1/manual/gun.headers/index.html new file mode 100644 index 00000000..f3ec2e57 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.headers/index.html @@ -0,0 +1,216 @@ + + + + + + + + + + Nine Nines: gun:headers(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:headers(3)

    + +

    Name

    +

    gun:headers - Initiate the given request

    +

    Description

    +
    +
    headers(ConnPid, Method, Path, Headers)
    +    -> headers(ConnPid, Method, Path, Headers, #{})
    +
    +headers(ConnPid, Method, Path, Headers, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Method    :: binary()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Initiate the given request.

    +

    This is a general purpose function that should only be used when other method-specific functions do not apply.

    +

    The function headers/4,5 initiates a request but does not send the request body. It must be sent separately using gun:data(3).

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Method
    +

    Method to be used for the request.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 2.0: Function introduced. +
    • +
    +

    Examples

    +
    Initiate a request
    +
    +
    StreamRef = gun:headers(ConnPid, <<"PUT">>,
    +    "/lang/fr_FR/hello",
    +    [{<<"content-type">>, <<"text/plain">>}]).
    +
    +

    See also

    +

    gun(3), gun:request(3), gun:await(3), gun:await_body(3), gun_push(3), gun_inform(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.info/index.html b/docs/en/gun/2.1/manual/gun.info/index.html new file mode 100644 index 00000000..b93a1820 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.info/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + Nine Nines: gun:info(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:info(3)

    + +

    Name

    +

    gun:info - Obtain information about the connection

    +

    Description

    +
    +
    info(ConnPid) -> Info
    +
    +ConnPid :: pid()
    +Info :: #{
    +    owner          => pid(),
    +    socket         => inet:socket() | ssl:sslsocket(),
    +    transport      => tcp | tls,
    +    protocol       => http | http2 | socks | ws,
    +    sock_ip        => inet:ip_address(),
    +    sock_port      => inet:port_number(),
    +    origin_scheme  => binary() | undefined,
    +    origin_host    => inet:hostname() | inet:ip_address(),
    +    origin_port    => inet:port_number(),
    +    intermediaries => [Intermediary],
    +    cookie_store   => gun_cookies:cookie_store()
    +}
    +Intermediary :: #{
    +    type      => connect | socks5,
    +    host      => inet:hostname() | inet:ip_address(),
    +    port      => inet:port_number(),
    +    transport => tcp | tls,
    +    protocol  => http | http2 | socks | raw
    +}
    +
    +

    Obtain information about the connection.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    +

    Return value

    +

    A map is returned containing various informations about the connection.

    +

    Changelog

    +
    • 2.0: The values owner, origin_scheme and cookie_store were added. +
    • +
    • 1.3: The values socket, transport, protocol, origin_host, origin_port and intermediaries were added. +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Obtain information about the connection
    +
    +
    Info = gun:info(ConnPid).
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:open_unix(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.open/index.html b/docs/en/gun/2.1/manual/gun.open/index.html new file mode 100644 index 00000000..2bd4d270 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.open/index.html @@ -0,0 +1,219 @@ + + + + + + + + + + Nine Nines: gun:open(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:open(3)

    + +

    Name

    +

    gun:open - Open a connection to the given host and port

    +

    Description

    +
    +
    open(Host, Port)       -> open(Host, Port, #{})
    +open(Host, Port, Opts) -> {ok, pid()} | {error, Reason}
    +
    +Host    :: inet:hostname() | inet:ip_address()
    +Port    :: inet:port_number()
    +Opts    :: gun:opts()
    +Reason  :: {options, OptName}
    +         | {options, {http | http2 | socks | ws, OptName}}
    +         | any()
    +OptName :: atom()
    +
    +

    Open a connection to the given host and port.

    +

    Arguments

    +
    Host
    +

    Host or IP address to connect to.

    +
    +
    Port
    +

    Port to connect to.

    +
    +
    Opts
    +

    Options for this connection.

    +
    +
    +

    Return value

    +

    The pid of the newly created Gun process is returned. Note that this does not indicate that the connection has been successfully opened; the gun_up(3) message will be sent for that.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Connect to a server
    +
    +
    {ok, ConnPid} = gun:open("example.org", 443).
    +
    +
    Connect to a server with custom options
    +
    +
    {ok, ConnPid} = gun:open("example.org", 443,
    +    #{protocols => [http2]}).
    +
    +
    Connect to a server using its IP address
    +
    +
    {ok, ConnPid} = gun:open({127,0,0,1}, 443).
    +
    +

    See also

    +

    gun(3), gun:open_unix(3), gun:await_up(3), gun_tunnel_up(3), gun_up(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.open_unix/index.html b/docs/en/gun/2.1/manual/gun.open_unix/index.html new file mode 100644 index 00000000..b6604d9d --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.open_unix/index.html @@ -0,0 +1,207 @@ + + + + + + + + + + Nine Nines: gun:open_unix(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:open_unix(3)

    + +

    Name

    +

    gun:open_unix - Open a connection to the given Unix domain socket

    +

    Description

    +
    +
    open_unix(SocketPath, Opts) -> {ok, pid()} | {error, Reason}
    +
    +SocketPath :: string()
    +Opts       :: gun:opts()
    +Reason     :: {options, OptName}
    +            | {options, {http | http2 | socks | ws, OptName}}
    +            | any()
    +OptName    :: atom()
    +
    +

    Open a connection to the given Unix domain socket.

    +

    Arguments

    +
    SocketPath
    +

    Path to the Unix domain socket to connect to.

    +
    +
    Opts
    +

    Options for this connection.

    +
    +
    +

    Return value

    +

    The pid of the newly created Gun process is returned. Note that this does not indicate that the connection has been successfully opened; the gun_up(3) message will be sent for that.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Connect to a server via a Unix domain socket
    +
    +
    {ok, ConnPid} = gun:open_unix("/var/run/dbus/system_bus_socket", #{}).
    +
    +
    Connect to a server via a Unix domain socket with custom options
    +
    +
    {ok, ConnPid} = gun:open_unix("/var/run/dbus/system_bus_socket",
    +    #{protocols => [http2]}).
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:await_up(3), gun_tunnel_up(3), gun_up(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.options/index.html b/docs/en/gun/2.1/manual/gun.options/index.html new file mode 100644 index 00000000..f2b4493a --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.options/index.html @@ -0,0 +1,219 @@ + + + + + + + + + + Nine Nines: gun:options(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:options(3)

    + +

    Name

    +

    gun:options - Query the capabilities of the server or a resource

    +

    Description

    +
    +
    options(ConnPid, Path)
    +    -> options(ConnPid, Path, [], #{}).
    +
    +options(ConnPid, Path, Headers)
    +    -> options(ConnPid, Path, Headers, #{})
    +
    +options(ConnPid, Path, Headers, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Query the capabilities of the server or a resource.

    +

    The special path "*" can be used to obtain information about the server as a whole. Any other path will return information about that resource specifically.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Query the capabilities of the server
    +
    +
    StreamRef = gun:options(ConnPid, "*").
    +
    +
    Query the capabilities of a resource
    +
    +
    StreamRef = gun:options(ConnPid, "/articles").
    +
    +

    See also

    +

    gun(3), gun:await(3), gun:await_body(3), gun_inform(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.patch/index.html b/docs/en/gun/2.1/manual/gun.patch/index.html new file mode 100644 index 00000000..6c958e29 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.patch/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + Nine Nines: gun:patch(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:patch(3)

    + +

    Name

    +

    gun:patch - Apply a set of changes to a resource

    +

    Description

    +
    +
    patch(ConnPid, Path, Headers)
    +    -> patch(ConnPid, Path, Headers, #{})
    +
    +patch(ConnPid, Path, Headers, ReqOpts)
    +    -> StreamRef
    +
    +patch(ConnPid, Path, Headers, Body)
    +    -> patch(ConnPid, Path, Headers, Body, #{})
    +
    +patch(ConnPid, Path, Headers, Body, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +Body      :: iodata()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Apply a set of changes to a resource.

    +

    The behavior of this function varies depending on whether a body is provided.

    +

    The function patch/3,4 does not send a body. It must be sent separately using gun:data(3).

    +

    The function patch/4,5 sends the entire request, including the request body, immediately. It is therefore not possible to use gun:data(3) after that. You should provide a content-type header. Gun will set the content-length header automatically.

    +

    The body sent in this request should be a patch document with instructions on how to update the resource.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    Body
    +

    Request body.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 2.0: Implicit body detection has been removed. The body must now be provided either directly (even if empty) or using separate calls. +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Patch a resource
    +
    +
    StreamRef = gun:patch(ConnPid, "/users/1",
    +    [{<<"content-type">>, <<"application/json-patch+json">>}],
    +    <<"[{\"op\":\"add\",\"path\":\"/baz\",\"value\":\"qux\"}]">>).
    +
    +
    Patch a resource in multiple calls
    +
    +
    StreamRef = gun:patch(ConnPid, "/users/1", [
    +    {<<"content-type">>, <<"application/json-patch+json">>}
    +]).
    +gun:data(ConnPid, StreamRef, fin,
    +    <<"[{\"op\":\"add\",\"path\":\"/baz\",\"value\":\"qux\"}]">>).
    +
    +
    Patch a resource with request options
    +
    +
    StreamRef = gun:patch(ConnPid, "/users/1",
    +    [{<<"content-type">>, <<"application/json-patch+json">>}],
    +    <<"[{\"op\":\"add\",\"path\":\"/baz\",\"value\":\"qux\"}]">>,
    +    #{reply_to => ReplyToPid}).
    +
    +

    See also

    +

    gun(3), gun:post(3), gun:put(3), gun:await(3), gun:await_body(3), gun_push(3), gun_inform(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.post/index.html b/docs/en/gun/2.1/manual/gun.post/index.html new file mode 100644 index 00000000..6eb5ea1a --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.post/index.html @@ -0,0 +1,245 @@ + + + + + + + + + + Nine Nines: gun:post(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:post(3)

    + +

    Name

    +

    gun:post - Process the enclosed representation according to a resource's own semantics

    +

    Description

    +
    +
    post(ConnPid, Path, Headers)
    +    -> post(ConnPid, Path, Headers, #{})
    +
    +post(ConnPid, Path, Headers, ReqOpts)
    +    -> StreamRef
    +
    +post(ConnPid, Path, Headers, Body)
    +    -> post(ConnPid, Path, Headers, Body, #{})
    +
    +post(ConnPid, Path, Headers, Body, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +Body      :: iodata()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Process the enclosed representation according to a resource's own semantics.

    +

    The behavior of this function varies depending on whether a body is provided.

    +

    The function post/3,4 does not send a body. It must be sent separately using gun:data(3).

    +

    The function post/4,5 sends the entire request, including the request body, immediately. It is therefore not possible to use gun:data(3) after that. You should provide a content-type header. Gun will set the content-length header automatically.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    Body
    +

    Request body.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 2.0: Implicit body detection has been removed. The body must now be provided either directly (even if empty) or using separate calls. +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Post to a resource
    +
    +
    StreamRef = gun:post(ConnPid, "/search",
    +    [{<<"content-type">>, <<"application/x-www-form-urlencoded">>}],
    +    <<"q=nine%20nines">>).
    +
    +
    Post to a resource in multiple calls
    +
    +
    StreamRef = gun:post(ConnPid, "/search", [
    +    {<<"content-type">>, <<"application/x-www-form-urlencoded">>}
    +]).
    +gun:data(ConnPid, StreamRef, fin, <<"q=nine%20nines">>).
    +
    +
    Post to a resource with request options
    +
    +
    StreamRef = gun:post(ConnPid, "/search",
    +    [{<<"content-type">>, <<"application/x-www-form-urlencoded">>}],
    +    <<"q=nine%20nines">>,
    +    #{reply_to => ReplyToPid}).
    +
    +

    See also

    +

    gun(3), gun:patch(3), gun:put(3), gun:await(3), gun:await_body(3), gun_push(3), gun_inform(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.put/index.html b/docs/en/gun/2.1/manual/gun.put/index.html new file mode 100644 index 00000000..d5b54f00 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.put/index.html @@ -0,0 +1,245 @@ + + + + + + + + + + Nine Nines: gun:put(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:put(3)

    + +

    Name

    +

    gun:put - Create or replace a resource

    +

    Description

    +
    +
    put(ConnPid, Path, Headers)
    +    -> put(ConnPid, Path, Headers, #{})
    +
    +put(ConnPid, Path, Headers, ReqOpts)
    +    -> StreamRef
    +
    +put(ConnPid, Path, Headers, Body)
    +    -> put(ConnPid, Path, Headers, Body, #{})
    +
    +put(ConnPid, Path, Headers, Body, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +Body      :: iodata()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Create or replace a resource.

    +

    The behavior of this function varies depending on whether a body is provided.

    +

    The function put/3,4 does not send a body. It must be sent separately using gun:data(3).

    +

    The function put/4,5 sends the entire request, including the request body, immediately. It is therefore not possible to use gun:data(3) after that. You should provide a content-type header. Gun will set the content-length header automatically.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    Body
    +

    Request body.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 2.0: Implicit body detection has been removed. The body must now be provided either directly (even if empty) or using separate calls. +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Put a resource
    +
    +
    StreamRef = gun:put(ConnPid, "/lang/fr_FR/hello",
    +    [{<<"content-type">>, <<"text/plain">>}],
    +    <<"Bonjour !">>).
    +
    +
    Put a resource in multiple calls
    +
    +
    StreamRef = gun:put(ConnPid, "/lang/fr_FR/hello", [
    +    {<<"content-type">>, <<"text/plain">>}
    +]).
    +gun:data(ConnPid, StreamRef, fin, <<"Bonjour !">>).
    +
    +
    Put a resource with request options
    +
    +
    StreamRef = gun:put(ConnPid, "/lang/fr_FR/hello",
    +    [{<<"content-type">>, <<"text/plain">>}],
    +    <<"Bonjour !">>,
    +    #{reply_to => ReplyToPid}).
    +
    +

    See also

    +

    gun(3), gun:patch(3), gun:post(3), gun:await(3), gun:await_body(3), gun_push(3), gun_inform(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.request/index.html b/docs/en/gun/2.1/manual/gun.request/index.html new file mode 100644 index 00000000..a5678fb6 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.request/index.html @@ -0,0 +1,223 @@ + + + + + + + + + + Nine Nines: gun:request(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:request(3)

    + +

    Name

    +

    gun:request - Perform the given request

    +

    Description

    +
    +
    request(ConnPid, Method, Path, Headers, Body)
    +    -> request(ConnPid, Method, Path, Headers, Body, #{})
    +
    +request(ConnPid, Method, Path, Headers, Body, ReqOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Method    :: binary()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +Body      :: iodata()
    +ReqOpts   :: gun:req_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Perform the given request.

    +

    This is a general purpose function that should only be used when other method-specific functions do not apply.

    +

    The function request/5,6 sends the entire request, including the request body, immediately. It is therefore not possible to use gun:data(3) after that. You should provide a content-type header. Gun will set the content-length header automatically.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Method
    +

    Method to be used for the request.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    Body
    +

    Request body.

    +
    +
    ReqOpts
    +

    Request options.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 2.0: Implicit body detection has been removed. The body must now be provided either directly (even if empty) or using gun:headers(3). +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Perform a request
    +
    +
    StreamRef = gun:request(ConnPid, <<"PUT">>,
    +    "/lang/fr_FR/hello",
    +    [{<<"content-type">>, <<"text/plain">>}],
    +    <<"Bonjour !">>).
    +
    +

    See also

    +

    gun(3), gun:headers(3), gun:await(3), gun:await_body(3), gun_push(3), gun_inform(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.set_owner/index.html b/docs/en/gun/2.1/manual/gun.set_owner/index.html new file mode 100644 index 00000000..a8a0ce70 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.set_owner/index.html @@ -0,0 +1,197 @@ + + + + + + + + + + Nine Nines: gun:set_owner(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:set_owner(3)

    + +

    Name

    +

    gun:set_owner - Set a new owner for the connection

    +

    Description

    +
    +
    set_owner(ConnPid, OwnerPid) -> ok
    +
    +ConnPid  :: pid()
    +OwnerPid :: pid()
    +
    +

    Set a new owner for the connection.

    +

    Only the current owner of the connection can set a new owner.

    +

    Gun monitors the owner of the connection and automatically shuts down gracefully when the owner exits.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    OwnerPid
    +

    The pid of the new owner for the connection.

    +
    +
    +

    Return value

    +

    The atom ok is returned.

    +

    Changelog

    +
    • 2.0: Function introduced. +
    • +
    +

    Examples

    +
    Set a new owner for the connection
    +
    +
    ok = gun:set_owner(ConnPid, OwnerPid).
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:open_unix(3), gun:shutdown(3), gun:close(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.shutdown/index.html b/docs/en/gun/2.1/manual/gun.shutdown/index.html new file mode 100644 index 00000000..6e4e0339 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.shutdown/index.html @@ -0,0 +1,201 @@ + + + + + + + + + + Nine Nines: gun:shutdown(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:shutdown(3)

    + +

    Name

    +

    gun:shutdown - Gracefully close the connection

    +

    Description

    +
    +
    shutdown(ConnPid) -> ok
    +
    +ConnPid :: pid()
    +
    +

    Gracefully close the connection.

    +

    Gun will wait for up to closing_timeout milliseconds before brutally closing the connection. The graceful shutdown mechanism varies between the different protocols:

    +
    • For HTTP/1.1 there is no such mechanism and Gun will close the connection once the current response is received. Any pipelined requests are immediately terminated. +
    • +
    • For HTTP/2 Gun will send a GOAWAY frame and wait for the existing streams to terminate. +
    • +
    • For Websocket Gun will send a close frame and wait for the server's close frame before closing the connection. +
    • +
    +

    The function returns immediately. The connection may therefore still be up for some time after this call.

    +

    Gun will not attempt to reconnect once graceful shutdown has been initiated.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    +

    Return value

    +

    The atom ok is returned.

    +

    Changelog

    +
    • 2.0: Function introduced. +
    • +
    +

    Examples

    +
    Gracefully shutdown the connection
    +
    +
    ok = gun:shutdown(ConnPid).
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:open_unix(3), gun:close(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.stream_info/index.html b/docs/en/gun/2.1/manual/gun.stream_info/index.html new file mode 100644 index 00000000..d1bf25cc --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.stream_info/index.html @@ -0,0 +1,216 @@ + + + + + + + + + + Nine Nines: gun:stream_info(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:stream_info(3)

    + +

    Name

    +

    gun:stream_info - Obtain information about a stream

    +

    Description

    +
    +
    stream_info(ConnPid, StreamRef) -> {ok, undefined | Info} | {error, not_connected}
    +
    +ConnPid :: pid()
    +StreamRef :: gun:stream_ref()
    +Info :: #{
    +    ref            => gun:stream_ref(),
    +    reply_to       => pid(),
    +    state          => running | stopping,
    +    intermediaries => [Intermediary],
    +    tunnel         => Tunnel
    +}
    +Intermediary :: #{
    +    type      => connect | socks5,
    +    host      => inet:hostname() | inet:ip_address(),
    +    port      => inet:port_number(),
    +    transport => tcp | tls,
    +    protocol  => http | http2 | socks | raw
    +}
    +Tunnel :: #{
    +    transport     => tcp | tls,
    +    protocol      => http | http2 | socks | raw,
    +    origin_scheme => binary() | undefined,
    +    origin_host   => inet:hostname() | inet:ip_address(),
    +    origin_port   => inet:port_number()
    +}
    +
    +

    Obtain information about a stream.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    +

    Return value

    +

    A map is returned containing various informations about the stream.

    +

    Changelog

    +
    • 2.0: Function introduced. +
    • +
    +

    Examples

    +
    Obtain information about a stream
    +
    +
    Info = gun:stream_info(ConnPid, StreamRef).
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:head(3), gun:options(3), gun:patch(3), gun:post(3), gun:put(3), gun:delete(3), gun:headers(3), gun:request(3), gun:cancel(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.update_flow/index.html b/docs/en/gun/2.1/manual/gun.update_flow/index.html new file mode 100644 index 00000000..5e54a109 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.update_flow/index.html @@ -0,0 +1,201 @@ + + + + + + + + + + Nine Nines: gun:update_flow(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:update_flow(3)

    + +

    Name

    +

    gun:update_flow - Update a stream's flow control value

    +

    Description

    +
    +
    update_flow(ConnPid, StreamRef, Flow) -> ok
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +Flow      :: pos_integer()
    +
    +

    Update a stream's flow control value.

    +

    The flow value can only ever be incremented.

    +

    This function does nothing for streams that have flow control disabled (which is the default).

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    Flow
    +

    Flow control value increment.

    +
    +
    +

    Return value

    +

    The atom ok is returned.

    +

    Changelog

    +
    • 2.0: Function introduced. +
    • +
    +

    Examples

    +
    Update a stream's flow control value
    +
    +
    gun:update_flow(ConnPid, StreamRef, 10).
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:head(3), gun:options(3), gun:patch(3), gun:post(3), gun:put(3), gun:delete(3), gun:headers(3), gun:request(3), gun:ws_upgrade(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.ws_send/index.html b/docs/en/gun/2.1/manual/gun.ws_send/index.html new file mode 100644 index 00000000..23fcf88e --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.ws_send/index.html @@ -0,0 +1,217 @@ + + + + + + + + + + Nine Nines: gun:ws_send(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:ws_send(3)

    + +

    Name

    +

    gun:ws_send - Send Websocket frames

    +

    Description

    +
    +
    ws_send(ConnPid, StreamRef, Frames) -> ok
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +Frames    :: Frame | [Frame]
    +Frame     :: close | ping | pong
    +           | {text | binary | close | ping | pong, iodata()}
    +           | {close, non_neg_integer(), iodata()}
    +
    +

    Send Websocket frames.

    +

    The connection must first be upgraded to Websocket using the function gun:ws_upgrade(3).

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream that was upgraded to Websocket.

    +
    +
    Frames
    +

    One or more Websocket frame(s).

    +
    +
    +

    Return value

    +

    The atom ok is returned.

    +

    Changelog

    +
    • 2.0: The mandatory StreamRef argument was added. +
    • +
    • 2.0: It is now possible to send multiple frames at once. +
    • +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Send a single frame
    +
    +
    gun:ws_send(ConnPid, StreamRef, {text, <<"Hello world!">>}).
    +
    +
    Send many frames including a close frame
    +
    +
    gun:ws_send(ConnPid, StreamRef, [
    +    {text, <<"See you later, world!">>},
    +    close
    +]).
    +
    +

    See also

    +

    gun(3), gun:ws_upgrade(3), gun_upgrade(3), gun_ws(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun.ws_upgrade/index.html b/docs/en/gun/2.1/manual/gun.ws_upgrade/index.html new file mode 100644 index 00000000..34c2cd6e --- /dev/null +++ b/docs/en/gun/2.1/manual/gun.ws_upgrade/index.html @@ -0,0 +1,245 @@ + + + + + + + + + + Nine Nines: gun:ws_upgrade(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun:ws_upgrade(3)

    + +

    Name

    +

    gun:ws_upgrade - Upgrade to Websocket

    +

    Description

    +
    +
    ws_upgrade(ConnPid, Path)
    +    -> ws_upgrade(ConnPid, Path, [])
    +
    +ws_upgrade(ConnPid, Path, Headers)
    +    -> StreamRef
    +
    +ws_upgrade(ConnPid, Path, Headers, WsOpts)
    +    -> StreamRef
    +
    +ConnPid   :: pid()
    +Path      :: iodata()
    +Headers   :: gun:req_headers()
    +WsOpts    :: gun:ws_opts()
    +StreamRef :: gun:stream_ref()
    +
    +

    Upgrade to Websocket.

    +

    The behavior of this function depends on the protocol selected.

    +

    HTTP/1.1 cannot handle Websocket and HTTP requests concurrently. The upgrade, if successful, will result in the complete takeover of the connection. Any subsequent HTTP requests will be rejected.

    +

    Gun does not currently support Websocket over HTTP/2.

    +

    By default Gun will take the Websocket options from the connection's ws_opts.

    +

    Websocket subprotocol negotiation is enabled when the protocols option is given. It takes a subprotocol name and a module implementing the gun_ws_protocol(3) behavior.

    +

    Arguments

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Path
    +

    Path to the resource.

    +
    +
    Headers
    +

    Additional request headers.

    +
    +
    WsOpts
    +

    Configuration for the Websocket protocol.

    +
    +
    +

    Return value

    +

    A reference that identifies the newly created stream is returned. It is this reference that must be passed in subsequent calls and will be received in messages related to this new stream.

    +

    Changelog

    +
    • 1.0: Function introduced. +
    • +
    +

    Examples

    +
    Upgrade to Websocket
    +
    +
    StreamRef = gun:ws_upgrade(ConnPid, "/ws", [
    +    {<<"sec-websocket-protocol">>, <<"chat">>}
    +]).
    +receive
    +    {gun_upgrade, ConnPid, StreamRef, [<<"websocket">>], _} ->
    +        ok
    +after 5000 ->
    +    error(timeout)
    +end.
    +
    +
    Upgrade to Websocket with different options
    +
    +
    StreamRef = gun:ws_upgrade(ConnPid, "/ws", [], #{
    +    compress => false
    +}).
    +
    +
    Upgrade to Websocket with protocol negotiation
    +
    +
    StreamRef = gun:ws_upgrade(ConnPid, "/ws", [], #{
    +    protocols => [
    +        {<<"mqtt">>, gun_ws_mqtt_h},
    +        {<<"v12.stomp">>, gun_ws_stomp_h}
    +    ]
    +}).
    +
    +

    See also

    +

    gun(3), gun:ws_send(3), gun_upgrade(3), gun_ws(3), gun_ws_protocol(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun/index.html b/docs/en/gun/2.1/manual/gun/index.html new file mode 100644 index 00000000..db269a93 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun/index.html @@ -0,0 +1,662 @@ + + + + + + + + + + Nine Nines: gun(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun(3)

    + +

    Name

    +

    gun - Asynchronous HTTP client

    +

    Description

    +

    The gun module provides an asynchronous interface for connecting and communicating with Web servers over HTTP, HTTP/2 or Websocket.

    +

    Exports

    +

    Connection:

    + +

    Requests:

    + +

    Proxies:

    + +

    Messages:

    + +

    Streams:

    + +

    Websocket:

    + +

    Messages

    +

    Gun will inform the calling process of events asynchronously by sending any of the following messages:

    +

    Connection:

    + +

    Responses:

    + +

    Websocket:

    + +

    The response messages will be sent to the process that opened the connection by default. The reply_to request option can be used to redirect request-specific messages to a different process.

    +

    Types

    +

    connect_destination()

    +
    +
    connect_destination() :: #{
    +    host      := inet:hostname() | inet:ip_address(),
    +    port      := inet:port_number(),
    +
    +    username  => iodata(),
    +    password  => iodata(),
    +    protocols => protocols(),
    +    transport => tcp | tls,
    +
    +    tls_opts              => [ssl:tls_client_option()],
    +    tls_handshake_timeout => timeout()
    +}
    +
    +

    Destination of a CONNECT request.

    +

    The default value, if any, is given next to the option name:

    +
    host, port
    +

    Destination hostname and port number. Mandatory.

    +

    Upon successful completion of the CONNECT request, Gun will begin using these as the host and port of the origin server for subsequent requests.

    +
    +
    username, password
    +

    Proxy authorization credentials. They are only sent when both options are provided.

    +
    +
    protocols - see below
    +

    Ordered list of preferred protocols. Please refer to the protocols() type documentation for details.

    +

    Defaults to [http] when the transport is tcp, and [http2, http] when the transport is tls.

    +
    +
    transport (tcp)
    +

    Transport that will be used for tunneled requests.

    +
    +
    tls_opts ([])
    +

    Options to use for tunneled TLS connections.

    +
    +
    tls_handshake_timeout (infinity)
    +

    Handshake timeout for tunneled TLS connections.

    +
    +
    +

    http_opts()

    +
    +
    http_opts() :: #{
    +    closing_timeout             => timeout(),
    +    cookie_ignore_informational => boolean(),
    +    flow                        => pos_integer(),
    +    keepalive                   => timeout(),
    +    transform_header_name       => fun((binary()) -> binary()),
    +    version                     => 'HTTP/1.1' | 'HTTP/1.0'
    +}
    +
    +

    Configuration for the HTTP protocol.

    +

    The default value is given next to the option name:

    + +
    closing_timeout (15000)
    +

    Time to wait before brutally closing the connection when a graceful shutdown was requested via a call to gun:shutdown(3).

    +
    +
    cookie_ignore_informational (false)
    +

    Whether cookies received inside informational responses (1xx status code) must be ignored.

    +
    +
    flow - see below
    +

    The initial flow control value for all HTTP/1.1 streams. By default flow control is disabled.

    +
    +
    keepalive (infinity)
    +

    Time between pings in milliseconds. Since the HTTP protocol has no standardized way to ping the server, Gun will simply send an empty line when the connection is idle. Gun only makes a best effort here as servers usually have configurable limits to drop idle connections. Disabled by default due to potential incompatibilities.

    +
    +
    transform_header_name - see below
    +

    A function that will be applied to all header names before they are sent to the server. Gun assumes that all header names are in lower case. This function is useful if you, for example, need to re-case header names in the event that the server incorrectly considers the case of header names to be significant.

    +
    +
    version ('HTTP/1.1')
    +

    HTTP version to use.

    +
    +
    +

    http2_opts()

    +
    +
    http2_opts() :: #{
    +    closing_timeout             => timeout(),
    +    cookie_ignore_informational => boolean(),
    +    flow                        => pos_integer(),
    +    keepalive                   => timeout(),
    +    keepalive_tolerance         => non_neg_integer(),
    +
    +    %% HTTP/2 state machine configuration.
    +    connection_window_margin_size  => 0..16#7fffffff,
    +    connection_window_update_threshold => 0..16#7fffffff,
    +    enable_connect_protocol        => boolean(),
    +    initial_connection_window_size => 65535..16#7fffffff,
    +    initial_stream_window_size     => 0..16#7fffffff,
    +    max_concurrent_streams         => non_neg_integer() | infinity,
    +    max_connection_window_size     => 0..16#7fffffff,
    +    max_decode_table_size          => non_neg_integer(),
    +    max_encode_table_size          => non_neg_integer(),
    +    max_fragmented_header_block_size => 16384..16#7fffffff,
    +    max_frame_size_received        => 16384..16777215,
    +    max_frame_size_sent            => 16384..16777215 | infinity,
    +    max_stream_window_size         => 0..16#7fffffff,
    +    preface_timeout                => timeout(),
    +    settings_timeout               => timeout(),
    +    stream_window_data_threshold   => 0..16#7fffffff,
    +    stream_window_margin_size      => 0..16#7fffffff,
    +    stream_window_update_threshold => 0..16#7fffffff
    +}
    +
    +

    Configuration for the HTTP/2 protocol.

    +

    The default value is given next to the option name:

    + +
    closing_timeout (15000)
    +

    Time to wait before brutally closing the connection when a graceful shutdown was requested either via a call to gun:shutdown(3) or by the server.

    +
    +
    cookie_ignore_informational (false)
    +

    Whether cookies received inside informational responses (1xx status code) must be ignored.

    +
    +
    flow - see below
    +

    The initial flow control value for all HTTP/2 streams. By default flow control is disabled.

    +
    +
    keepalive (infinity)
    +

    Time between pings in milliseconds.

    +
    +
    keepalive_tolerance - see below
    +

    The number of unacknowledged pings in flight that are tolerated before the connection is closed. By default this mechanism is disabled even if keepalive is enabled.

    +
    +
    +

    opts()

    +
    +
    opts() :: #{
    +    connect_timeout       => timeout(),
    +    cookie_store          => gun_cookies:store(),
    +    domain_lookup_timeout => timeout(),
    +    http_opts             => http_opts(),
    +    http2_opts            => http2_opts(),
    +    protocols             => protocols(),
    +    retry                 => non_neg_integer(),
    +    retry_fun             => fun(),
    +    retry_timeout         => pos_integer(),
    +    supervise             => boolean(),
    +    tcp_opts              => [gen_tcp:connect_option()],
    +    tls_handshake_timeout => timeout(),
    +    tls_opts              => [ssl:tls_client_option()],
    +    trace                 => boolean(),
    +    transport             => tcp | tls,
    +    ws_opts               => ws_opts()
    +}
    +
    +

    Configuration for the connection.

    +

    The default value is given next to the option name:

    +
    connect_timeout (infinity)
    +

    Connection timeout.

    +
    +
    cookie_store - see below
    +

    The cookie store that Gun will use for this connection. When configured, Gun will query the store for cookies and include them in the request headers; and add cookies found in response headers to the store.

    +

    By default no cookie store will be used.

    +
    +
    domain_lookup_timeout (infinity)
    +

    Domain lookup timeout.

    +
    +
    http_opts (#{})
    +

    Options specific to the HTTP protocol.

    +
    +
    http2_opts (#{})
    +

    Options specific to the HTTP/2 protocol.

    +
    +
    protocols - see below
    +

    Ordered list of preferred protocols. Please refer to the protocols() type documentation for details.

    +

    Defaults to [http] when the transport is tcp, and [http2, http] when the transport is tls.

    +
    +
    retry (5)
    +

    Number of times Gun will try to reconnect on failure before giving up.

    +
    +
    retry_fun - see below
    +

    A fun that will be called before every reconnect attempt. It receives the current number of retries left and the Gun options. It returns the next number of retries left and the timeout to apply before reconnecting.

    +
    +
    +

    The default fun will remove one to the number of retries and set the timeout to the retry_timeout value.

    +

    The fun must be defined as follow:

    +
    +
    fun ((non_neg_integer(), opts()) -> #{
    +    retries => non_neg_integer(),
    +    timeout => pos_integer()
    +})
    +
    +

    The fun will never be called when the retry option is set to 0. When this function returns 0 in the retries value, Gun will do one last reconnect attempt before giving up.

    +
    retry_timeout (5000)
    +

    Time between retries in milliseconds.

    +
    +
    supervise (true)
    +

    Whether the Gun process should be started under the gun_sup supervisor. Set to false to use your own supervisor.

    +
    +
    tcp_opts (DefaultOpts)
    +

    TCP options used when establishing the connection. By default Gun enables send timeouts with the options [{send_timeout, 15000}, {send_timeout_close, true}].

    +
    +
    tls_handshake_timeout (infinity)
    +

    TLS handshake timeout.

    +
    +
    tls_opts ([])
    +

    TLS options used for the TLS handshake after the connection has been established, when the transport is set to tls.

    +
    +
    trace (false)
    +

    Whether to enable dbg tracing of the connection process. Should only be used during debugging.

    +
    +
    transport - see below
    +

    Whether to use TLS or plain TCP. The default varies depending on the port used. Port 443 defaults to tls. All other ports default to tcp.

    +
    +
    ws_opts (#{})
    +

    Options specific to the Websocket protocol.

    +
    +
    +

    protocols()

    +
    +
    Protocol :: http | {http, http_opts()}
    +          | http2 | {http2, http2_opts()}
    +          | raw | {raw, raw_opts()}
    +          | socks | {socks, socks_opts()}
    +
    +protocols() :: [Protocol]
    +
    +

    Ordered list of preferred protocols. When the transport is tcp, this list must contain exactly one protocol. When the transport is tls, this list must contain at least one protocol and will be used to negotiate a protocol via ALPN. When the server does not support ALPN then http will be used, except when the list of preferred protocols is set to only accept socks.

    +

    Defaults to [http] when the transport is tcp, and [http2, http] when the transport is tls.

    +

    raw_opts()

    +
    +
    raw_opts() :: #{
    +}
    +
    +

    Configuration for the "raw" protocol.

    + +

    req_headers()

    +
    +
    req_headers() :: [{binary() | string() | atom(),   iodata()}]
    +               | #{binary() | string() | atom() => iodata()}
    +
    +

    Request headers.

    +

    req_opts()

    +
    +
    req_opts() :: #{
    +    flow     => pos_integer(),
    +    reply_to => pid()
    +}
    +
    +

    Configuration for a particular request.

    +

    The default value is given next to the option name:

    +
    flow - see below
    +

    The initial flow control value for the stream. By default flow control is disabled.

    +
    +
    reply_to (self())
    +

    The pid of the process that will receive the response messages.

    +
    +
    +

    socks_opts()

    +
    +
    socks_opts() :: #{
    +    host := inet:hostname() | inet:ip_address(),
    +    port := inet:port_number(),
    +
    +    auth      => [{username_password, binary(), binary()} | none],
    +    protocols => protocols(),
    +    transport => tcp | tls,
    +    version   => 5,
    +
    +    tls_opts              => [ssl:tls_client_option()],
    +    tls_handshake_timeout => timeout()
    +}
    +
    +

    Configuration for the Socks protocol.

    +

    The default value, if any, is given next to the option name:

    +
    host, port
    +

    Destination hostname and port number. Mandatory.

    +

    Upon successful completion of the Socks connection, Gun will begin using these as the host and port of the origin server for subsequent requests.

    +
    +
    auth ([none])
    +

    Authentication methods Gun advertises to the Socks proxy.

    +
    +
    protocols - see below
    +

    Ordered list of preferred protocols. Please refer to the protocols() type documentation for details.

    +

    Defaults to [http] when the transport is tcp, and [http2, http] when the transport is tls.

    +
    +
    transport (tcp)
    +

    Transport that will be used for tunneled requests.

    +
    +
    tls_opts ([])
    +

    Options to use for tunneled TLS connections.

    +
    +
    tls_handshake_timeout (infinity)
    +

    Handshake timeout for tunneled TLS connections.

    +
    +
    version (5)
    +

    Version of the Socks protocol to use.

    +
    +
    +

    stream_ref()

    +
    +
    stream_ref() - see below
    +
    +

    Unique identifier for a stream.

    +

    The exact type is considered to be an implementation detail.

    +

    ws_opts()

    +
    +
    ws_opts() :: #{
    +    closing_timeout  => timeout(),
    +    compress         => boolean(),
    +    default_protocol => module(),
    +    flow             => pos_integer(),
    +    keepalive        => timeout(),
    +    protocols        => [{binary(), module()}],
    +    silence_pings    => boolean(),
    +    user_opts        => any()
    +}
    +
    +

    Configuration for the Websocket protocol.

    +

    The default value is given next to the option name:

    +
    closing_timeout (15000)
    +

    Time to wait before brutally closing the connection when a graceful shutdown was requested either via a call to gun:shutdown(3) or by the server.

    +
    +
    compress (false)
    +

    Whether to enable permessage-deflate compression. This does not guarantee that compression will be used as it is the server that ultimately decides. Defaults to false.

    +
    +
    default_protocol (gun_ws_h)
    +

    Default protocol module when no Websocket subprotocol is negotiated.

    +
    +
    flow - see below
    +

    The initial flow control value for the Websocket connection. By default flow control is disabled.

    +
    +
    keepalive (infinity)
    +

    Time between pings in milliseconds.

    +
    +
    protocols ([])
    +

    A non-empty list enables Websocket protocol negotiation. The list of protocols will be sent in the sec-websocket-protocol request header. The given module must follow the gun_ws_protocol(3) interface. Gun comes with a default interface in gun_ws_h that may be reused for negotiated protocols.

    +
    +
    silence_pings (true)
    +

    Whether the ping and pong frames should be sent to the user. In all cases Gun will automatically send a pong frame back when receiving a ping.

    +
    +
    user_opts - see below
    +

    Additional options that are not in use by Gun unless a custom Websocket subprotocol is configured and negotiated. By default no user option is defined.

    +
    +
    +

    Changelog

    +
    • 2.1: The HTTP/2 option list was updated with new options. +
    • +
    • 2.0: The default_protocol and user_opts Websocket options were added. +
    • +
    • 2.0: The stream_ref() type was added. +
    • +
    • 2.0: The option cookie_store was added. It can be used to configure a cookie store that Gun will use automatically. A related option, cookie_ignore_informational, was added to both http_opts() and http2_opts(). +
    • +
    • 2.0: The types protocols() and socks_opts() have been added. Support for the Socks protocol has been added in every places where protocol selection is available. In addition it is now possible to specify separate HTTP options for the CONNECT proxy and the origin server. +
    • +
    • 2.0: The connect_timeout option has been split into three options: domain_lookup_timeout, connect_timeout and when applicable tls_handshake_timeout. +
    • +
    • 2.0: The option retry_fun was added. It can be used to implement different reconnect strategies. +
    • +
    • 2.0: The transport_opts option has been split into two options: tcp_opts and tls_opts. +
    • +
    • 2.0: Function gun:update_flow/3 introduced. The flow option was added to request options and HTTP/1.1, HTTP/2 and Websocket options as well. +
    • +
    • 2.0: Introduce the type req_headers() and extend the types accepted for header names for greater interoperability. Header names are automatically lowercased as well. +
    • +
    • 2.0: Function gun:headers/4,5 introduced. +
    • +
    • 2.0: The keepalive option is now set to infinity by default for all protocols. This means it is disabled. +
    • +
    • 2.0: Websocket options keepalive and silence_pings introduced. +
    • +
    • 2.0: Remove the protocol option from connect_destination(). +
    • +
    • 1.3: Add the CONNECT destination's protocols option and deprecate the previously introduced protocol option. +
    • +
    • 1.2: Introduce the type connect_destination(). +
    • +
    +

    See also

    +

    gun(7)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_app/index.html b/docs/en/gun/2.1/manual/gun_app/index.html new file mode 100644 index 00000000..2a4f481b --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_app/index.html @@ -0,0 +1,192 @@ + + + + + + + + + + Nine Nines: gun(7) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun(7)

    + +

    Name

    +

    gun - HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP

    +

    Description

    +

    Gun is an HTTP client for Erlang/OTP with support for the HTTP/1.1, HTTP/2 and Websocket protocols.

    +

    Gun aims to provide an easy to use, asynchronous and always-connected client. It maintains a permanent connection to the server and reconnects automatically when necessary.

    +

    Modules

    + +

    Dependencies

    +
    • cowlib(7) - Support library for manipulating Web protocols +
    • +
    • ssl - Secure communication over sockets +
    • +
    +

    All these applications must be started before the gun application. To start Gun and all dependencies at once:

    +
    +
    {ok, _} = application:ensure_all_started(gun).
    +
    +

    Environment

    +

    The gun application does not define any application environment configuration parameters.

    +

    See also

    +

    cowlib(7)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_cookies.domain_match/index.html b/docs/en/gun/2.1/manual/gun_cookies.domain_match/index.html new file mode 100644 index 00000000..2a3e7cba --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_cookies.domain_match/index.html @@ -0,0 +1,196 @@ + + + + + + + + + + Nine Nines: gun_cookies:domain_match(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_cookies:domain_match(3)

    + +

    Name

    +

    gun_cookies:domain_match - Cookie domain match

    +

    Description

    +
    +
    domain_match(String, DomainString) -> boolean()
    +
    +String       :: binary()
    +DomainString :: binary()
    +
    +

    Cookie domain match.

    +

    This function can be used when implementing the set_cookie_secure_match callback of a cookie store.

    +

    Arguments

    +
    String
    +

    The string to match.

    +
    +
    DomainString
    +

    The domain string that will be matched against.

    +
    +
    +

    Return value

    +

    Returns true when String domain-matches DomainString, and false otherwise.

    +

    Changelog

    +
    • 2.0: Function introduced. +
    • +
    +

    Examples

    +
    Perform a domain match
    +
    +
    Match = gun_cookies:domain_match(Domain, CookieDomain).
    +
    +

    See also

    +

    gun_cookies(3), gun_cookies:path_match(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_cookies.path_match/index.html b/docs/en/gun/2.1/manual/gun_cookies.path_match/index.html new file mode 100644 index 00000000..0df92805 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_cookies.path_match/index.html @@ -0,0 +1,196 @@ + + + + + + + + + + Nine Nines: gun_cookies:path_match(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_cookies:path_match(3)

    + +

    Name

    +

    gun_cookies:path_match - Cookie path match

    +

    Description

    +
    +
    path_match(ReqPath, CookiePath) -> boolean()
    +
    +ReqPath    :: binary()
    +CookiePath :: binary()
    +
    +

    Cookie path match.

    +

    This function can be used when implementing the set_cookie_secure_match callback of a cookie store.

    +

    Arguments

    +
    ReqPath
    +

    The request path to match.

    +
    +
    CookiePath
    +

    The cookie path that will be matched against.

    +
    +
    +

    Return value

    +

    Returns true when ReqPath path-matches CookiePath, and false otherwise.

    +

    Changelog

    +
    • 2.0: Function introduced. +
    • +
    +

    Examples

    +
    Perform a path match
    +
    +
    Match = gun_cookies:path_match(ReqPath, CookiePath).
    +
    +

    See also

    +

    gun_cookies(3), gun_cookies:domain_match(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_cookies/index.html b/docs/en/gun/2.1/manual/gun_cookies/index.html new file mode 100644 index 00000000..dcb1f43d --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_cookies/index.html @@ -0,0 +1,295 @@ + + + + + + + + + + Nine Nines: gun_cookies(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_cookies(3)

    + +

    Name

    +

    gun_cookies - Cookie store engine

    +

    Description

    +

    The gun_cookies module implements a cookie store engine. It will be used by Gun when a cookie store is configured. It also defines the interface and provides functions used to implement cookie store backends.

    +

    Callbacks

    +

    Cookie store backends implement the following interface. Functions are organized by theme: initialization, querying, storing and garbage collecting:

    +

    init

    +
    +
    init(Opts :: any()) -> gun_cookies:store()
    +
    +

    Initialize the cookie store.

    +

    query

    +
    +
    query(State, URI) -> {ok, [Cookie], State}
    +
    +URI    :: uri_string:uri_map()
    +Cookie :: gun_cookies:cookie()
    +State  :: any()
    +
    +

    Query the store for the cookies for the given URI.

    + +
    +
    set_cookie_secure_match(State, Match) -> match | nomatch
    +
    +State :: any()
    +Match :: #{
    +    name := binary(),
    +%	secure_only := true,
    +    domain := binary(),
    +    path := binary()
    +}
    +
    +

    Perform a secure match against cookies already in the store. This is part of the heuristics that the cookie store engine applies to decide whether the cookie must be stored.

    +

    The secure_only attribute is implied, it is not actually passed in the argument.

    + +
    +
    set_cookie_get_exact_match(State, Match)
    +    -> {ok, gun_cookies:cookie(), State} | error
    +
    +State :: any()
    +Match :: #{
    +	name := binary(),
    +	domain := binary(),
    +	host_only := boolean(),
    +	path := binary()
    +}
    +
    +

    Perform an exact match against cookies already in the store. This is part of the heuristics that the cookie store engine applies to decide whether the cookie must be stored.

    +

    When a cookie is found, it must be returned so that it gets updated. When nothing is found a new cookie will be stored.

    +

    store

    +
    +
    store(State, gun_cookies:cookie())
    +	-> {ok, State} | {error, any()}
    +
    +State :: any()
    +
    +

    Unconditionally store the cookie into the cookie store.

    +

    gc

    +
    +
    gc(State) -> {ok, State}
    +
    +State :: any()
    +
    +

    Remove all cookies from the cookie store that are expired.

    +

    Other cookies may be removed as well, at the discretion of the cookie store. For example excess cookies may be removed to reduce the memory footprint.

    +

    session_gc

    +
    +
    session_gc(State) -> {ok, State}
    +
    +State :: any()
    +
    +

    Remove all cookies from the cookie store that have the persistent flag set to false.

    +

    Exports

    + +

    Types

    + +
    +
    cookie() :: #{
    +    name             := binary(),
    +    value            := binary(),
    +    domain           := binary(),
    +    path             := binary(),
    +    creation_time    := calendar:datetime(),
    +    last_access_time := calendar:datetime(),
    +    expiry_time      := calendar:datetime() | infinity,
    +    persistent       := boolean(),
    +    host_only        := boolean(),
    +    secure_only      := boolean(),
    +    http_only        := boolean(),
    +    same_site        := strict | lax | none
    +}
    +
    +

    A cookie.

    +

    This contains the cookie name, value, attributes and flags. This is the representation that the cookie store engine and Gun expects. Cookies do not have to be kept in this format in the cookie store backend.

    +

    store()

    +
    +
    store() :: {module(), StoreState :: any()}
    +
    +

    The cookie store.

    +

    This is a tuple containing the cookie store backend module and its current state.

    +

    Changelog

    +
    • 2.0: Module introduced. +
    • +
    +

    See also

    +

    gun(7), gun_cookies_list(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_cookies_list/index.html b/docs/en/gun/2.1/manual/gun_cookies_list/index.html new file mode 100644 index 00000000..adbf05d7 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_cookies_list/index.html @@ -0,0 +1,193 @@ + + + + + + + + + + Nine Nines: gun_cookies_list(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_cookies_list(3)

    + +

    Name

    +

    gun_cookies_list - Cookie store backend: in-memory, per connection

    +

    Description

    +

    The gun_cookies_list module implements a cookie store backend that keeps all the cookie data in-memory and tied to a specific connection.

    +

    It is possible to implement a custom backend on top of gun_cookies_list in order to add persistence or sharing properties.

    +

    Exports

    +

    This module implements the callbacks defined in gun_cookies(3).

    +

    Types

    +

    opts()

    +
    +
    opts() :: #{
    +}
    +
    +

    Cookie store backend options.

    +

    There are currently no options available for this backend.

    + +

    Changelog

    +
    • 2.0: Module introduced. +
    • +
    +

    Examples

    +
    Open a connection with a cookie store configured
    +
    +
    {ok, ConnPid} = gun:open(Host, Port, #{
    +    cookie_store => gun_cookies_list:init(#{})
    +})
    +
    +

    See also

    +

    gun(7), gun_cookies(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_data/index.html b/docs/en/gun/2.1/manual/gun_data/index.html new file mode 100644 index 00000000..86e7f27d --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_data/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + Nine Nines: gun_data(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_data(3)

    + +

    Name

    +

    gun_data - Response body

    +

    Description

    +
    +
    {gun_data, ConnPid, StreamRef, IsFin, Data}
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +IsFin     :: fin | nofin
    +Data      :: binary()
    +
    +

    Response body.

    +

    This message informs the relevant process that the server sent a all or part of the body for the response to the original request.

    +

    A data message is always preceded by a response message.

    +

    The response body may be terminated either by a data message with the flag fin set or by a gun_trailers(3) message.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    IsFin
    +

    Whether this message terminates the response.

    +
    +
    Data
    +

    All or part of the response body.

    +
    +
    +

    Changelog

    +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_data message in a gen_server
    +
    +
    handle_info({gun_data, ConnPid, _StreamRef,
    +             _IsFin, _Data},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:head(3), gun:patch(3), gun:post(3), gun:put(3), gun:delete(3), gun:options(3), gun:headers(3), gun:request(3), gun_response(3), gun_trailers(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_down/index.html b/docs/en/gun/2.1/manual/gun_down/index.html new file mode 100644 index 00000000..2e6d84c7 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_down/index.html @@ -0,0 +1,210 @@ + + + + + + + + + + Nine Nines: gun_down(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_down(3)

    + +

    Name

    +

    gun_down - The connection is down

    +

    Description

    +
    +
    {gun_down, ConnPid, Protocol, Reason, KilledStreams}
    +
    +ConnPid            :: pid()
    +Protocol           :: http | http2 | socks | ws
    +Reason             :: any()
    +KilledStreams      :: [gun:stream_ref()]
    +
    +

    The connection is down.

    +

    This message informs the owner process that the connection was lost. Depending on the retry and retry_timeout options Gun may automatically attempt to reconnect.

    +

    When the connection goes back up, Gun will not attempt to retry requests. It will also not upgrade to Websocket automatically if that was the protocol in use when the connection was lost.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Protocol
    +

    The protocol that was selected for this connection or upgraded to during the course of the connection.

    +
    +
    Reason
    +

    The reason for the loss of the connection.

    +

    It is present for debugging purposes only. You should not rely on this value to perform operations programmatically.

    +
    +
    KilledStreams
    +

    List of streams that have been brutally terminated.

    +

    They are active streams that did not complete before the closing of the connection. Whether they can be retried safely depends on the protocol used and the idempotence property of the requests.

    +
    +
    +

    Changelog

    +
    • 2.0: The last element of the message's tuple, UnprocessedStreams has been removed. +
    • +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_down message in a gen_server
    +
    +
    handle_info({gun_down, ConnPid, _Protocol, _Reason, _Killed},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:open_unix(3), gun_up(3), gun_tunnel_up(3), gun_error(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_error/index.html b/docs/en/gun/2.1/manual/gun_error/index.html new file mode 100644 index 00000000..c9a9bb9d --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_error/index.html @@ -0,0 +1,207 @@ + + + + + + + + + + Nine Nines: gun_error(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_error(3)

    + +

    Name

    +

    gun_error - Stream or connection-wide error

    +

    Description

    +
    +
    {gun_error, ConnPid, StreamRef, Reason}
    +{gun_error, ConnPid, Reason}
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +Reason    :: any()
    +
    +

    Stream or connection-wide error.

    +

    These messages inform the relevant process that an error occurred. A reference is given when the error pertains to a specific stream. Connection-wide errors do not imply that the connection is no longer usable, they are used for all errors that are not specific to a stream.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream that resulted in an error.

    +
    +
    Reason
    +

    The reason for the error.

    +

    It is present for debugging purposes only. You should not rely on this value to perform operations programmatically.

    +
    +
    +

    Changelog

    +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_error message in a gen_server
    +
    +
    handle_info({gun_error, ConnPid, _Reason},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State};
    +handle_info({gun_error, ConnPid, _StreamRef, _Reason},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun_up(3), gun_tunnel_up(3), gun_down(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_event/index.html b/docs/en/gun/2.1/manual/gun_event/index.html new file mode 100644 index 00000000..6a1e5381 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_event/index.html @@ -0,0 +1,574 @@ + + + + + + + + + + Nine Nines: gun_event(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_event(3)

    + +

    Name

    +

    gun_event - Events

    +

    Description

    +

    The gun_event module provides the callback interface and types for implementing event handlers.

    +

    Callbacks

    +

    Event handlers implement the following interface. Because types are tied to specific events, they are documented alongside them. All event types are exported and can be referred to as gun_event:Type().

    +

    The events are ordered by the order they are likely to be triggered, with the most frequent events listed first.

    +

    init

    +
    +
    init_event() :: #{
    +    owner := pid(),
    +    transport := tcp | tls,
    +    origin_scheme := binary(),
    +    origin_host := inet:hostname() | inet:ip_address(),
    +    origin_port := inet:port_number(),
    +    opts := gun:opts()
    +}
    +
    +init(init_event(), State) -> State
    +
    +

    Gun is initializing.

    +

    domain_lookup_start

    +
    +
    domain_lookup_event() :: #{
    +    host := inet:hostname() | inet:ip_address(),
    +    port := inet:port_number(),
    +    tcp_opts := [gen_tcp:connect_option()],
    +    timeout := timeout(),
    +    lookup_info => gun_tcp:lookup_info(),
    +    error => any()
    +}
    +
    +domain_lookup_start(domain_lookup_event(), State) -> State
    +
    +

    Gun is starting to resolve the host address.

    +

    The lookup_info and error keys are never set for this event.

    +

    domain_lookup_end

    +
    +
    domain_lookup_end(domain_lookup_event(), State) -> State
    +
    +

    Gun has finished resolving the host address.

    +

    The lookup_info key is only set when the lookup is successful. The error key is set otherwise.

    +

    connect_start

    +
    +
    connect_event() :: #{
    +    lookup_info := gun_tcp:lookup_info(),
    +    timeout := timeout(),
    +    socket => inet:socket(),
    +    protocol => http | http2 | socks | raw,
    +    error => any()
    +}
    +
    +connect_start(connect_event(), State) -> State
    +
    +

    Gun is starting to connect to the host address and port.

    +

    The socket, protocol and error keys are never set for this event.

    +

    connect_end

    +
    +
    connect_end(connect_event(), State) -> State
    +
    +

    Gun has finished connecting to the host address and port.

    +

    The socket key is set on connect success. The error key is set otherwise.

    +

    The protocol key is only set when the transport is tcp and the connection is successful. The protocol is only known in the tls_handshake_end event otherwise.

    +

    tls_handshake_start

    +
    +
    tls_handshake_event() :: #{
    +    stream_ref => gun:stream_ref(),
    +    reply_to => pid(),
    +    socket := inet:socket() | ssl:sslsocket() | pid(), %% The socket before/after will be different.
    +    tls_opts := [ssl:tls_client_option()],
    +    timeout := timeout(),
    +    protocol => http | http2 | socks | raw,
    +    error => any()
    +}
    +
    +tls_handshake_start(tls_handshake_event(), State) -> State
    +
    +

    Gun has started a TLS handshake.

    +

    This and the tls_handshake_end event only occur when connecting to a TLS server or when upgrading the connection or a stream to use TLS, for example when using CONNECT or when connecting to a secure SOCKS server.

    +

    The stream_ref and reply_to keys are only set when the TLS handshake occurs as a result of a CONNECT request or inside an existing CONNECT tunnel.

    +

    The protocol and error keys are never set for this event.

    +

    tls_handshake_end

    +
    +
    tls_handshake_end(tls_handshake_event(), State) -> State
    +
    +

    Gun has finished a TLS handshake.

    +

    The protocol key is set on TLS handshake success. The error key is set otherwise.

    +

    request_start

    +
    +
    request_start_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    function := headers | request | ws_upgrade | connect,
    +    method := iodata(),
    +    scheme => binary(),
    +    authority := iodata(),
    +    path => iodata(),
    +    headers := [{binary(), iodata()}]
    +}
    +
    +request_start(request_start_event(), State) -> State
    +
    +

    Gun is starting to send a request.

    +

    The scheme and path keys are never set when the function is set to connect.

    +

    request_headers

    +
    +
    request_headers(request_start_event(), State) -> State
    +
    +

    Gun has finished sending the request headers.

    +

    request_end

    +
    +
    request_end_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid()
    +}
    +
    +request_end(request_end_event(), State) -> State
    +
    +

    Gun has finished sending the request.

    +

    push_promise_start

    +
    +
    push_promise_start_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid()
    +}
    +
    +push_promise_start(push_promise_start_event(), State) -> State
    +
    +

    Gun has begun receiving a promised request (server push).

    +

    push_promise_end

    +
    +
    push_promise_end_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    promised_stream_ref => gun:stream_ref(),
    +    method := binary(),
    +    uri := binary(),
    +    headers := [{binary(), iodata()}]
    +}
    +
    +push_promise_end(push_promise_end_event(), State) -> State
    +
    +

    Gun has finished receiving a promised request (server push). Promised requests never include a body.

    +

    Promised requests received during the graceful shutdown of the connection get canceled immediately.

    + +

    response_start

    +
    +
    response_start_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid()
    +}
    +
    +response_start(response_start_event(), State) -> State
    +
    +

    Gun has begun receiving a response.

    +

    response_inform

    +
    +
    response_headers_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    status := non_neg_integer(),
    +    headers := [{binary(), binary()}]
    +}
    +
    +response_inform(response_headers_event(), State) -> State
    +
    +

    Gun has received an informational response (1xx status code).

    +

    A status with value 101 indicates that the response has concluded as the stream will be upgraded to a new protocol.

    +

    response_headers

    +
    +
    response_headers(response_headers_event(), State) -> State
    +
    +

    Gun has finished receiving response headers.

    +

    response_trailers

    +
    +
    response_trailers_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    headers := [{binary(), binary()}]
    +}
    +
    +response_trailers(response_trailers_event(), State) -> State
    +
    +

    Gun has received response trailers.

    +

    response_end

    +
    +
    response_end_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid()
    +}
    +
    +response_end(response_end_event(), State) -> State
    +
    +

    Gun has finished receiving a response.

    +

    ws_upgrade

    +
    +
    ws_upgrade_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    opts := gun:ws_opts()
    +}
    +
    +ws_upgrade(ws_upgrade_event(), State) -> State
    +
    +

    A Websocket upgrade was requested.

    +

    Success is indicated by a response (101 informational if HTTP/1.1, 2xx if HTTP/2) followed by a protocol_changed event.

    +

    ws_recv_frame_start

    +
    +
    ws_recv_frame_start_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    frag_state := cow_ws:frag_state(),
    +    extensions := cow_ws:extensions()
    +}
    +
    +ws_recv_frame_start(ws_recv_frame_start_event(), State) -> State
    +
    +

    Gun has begun receiving a Websocket frame.

    +

    ws_recv_frame_header

    +
    +
    ws_recv_frame_header_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    frag_state := cow_ws:frag_state(),
    +    extensions := cow_ws:extensions(),
    +    type := cow_ws:frame_type(),
    +    rsv := cow_ws:rsv(),
    +    len := non_neg_integer(),
    +    mask_key := cow_ws:mask_key()
    +}
    +
    +ws_recv_frame_header(ws_recv_frame_header_event(), State) -> State
    +
    +

    Gun has received the header part of a Websocket frame.

    +

    It will be immediately be followed by the frame's payload.

    +

    ws_recv_frame_end

    +
    +
    ws_recv_frame_end_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    extensions := cow_ws:extensions(),
    +    close_code := undefined | cow_ws:close_code(),
    +    payload := binary()
    +}
    +
    +ws_recv_frame_end(ws_recv_frame_end_event(), State) -> State
    +
    +

    Gun has finished receiving a Websocket frame.

    +

    ws_send_frame_start

    +
    +
    ws_send_frame_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    extensions := cow_ws:extensions(),
    +    frame := gun:ws_frame()
    +}
    +
    +ws_send_frame_start(ws_send_frame_event(), State) -> State
    +
    +

    Gun has started sending a Websocket frame.

    +

    ws_send_frame_end

    +
    +
    ws_send_frame_end(ws_send_frame_event(), State) -> State
    +
    +

    Gun has finished sending a Websocket frame.

    +

    protocol_changed

    +
    +
    protocol_changed_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    protocol := http | http2 | socks | raw | ws
    +}
    +
    +protocol_changed(protocol_changed_event(), State) -> State
    +
    +

    The protocol has changed for either the entire Gun connection or for a specific stream.

    +

    The stream_ref key is only set when the protocol has changed for a specific stream or inside a CONNECT tunnel.

    +

    This event occurs during successful Websocket upgrades, as a result of successful CONNECT requests or after a SOCKS tunnel was successfully established.

    +

    origin_changed

    +
    +
    origin_changed_event() :: #{
    +    stream_ref => gun:stream_ref(),
    +    type := connect | socks5,
    +    origin_scheme := binary(),
    +    origin_host := inet:hostname() | inet:ip_address(),
    +    origin_port := inet:port_number()
    +}
    +
    +origin_changed(origin_changed_event(), State) -> State
    +
    +

    The origin server has changed for either the Gun connection or for a specific stream.

    +

    The stream_ref key is only set when the origin has changed for a specific stream or inside a CONNECT tunnel.

    +

    cancel

    +
    +
    cancel_event() :: #{
    +    stream_ref := gun:stream_ref(),
    +    reply_to := pid(),
    +    endpoint := local | remote,
    +    reason := atom()
    +}
    +
    +cancel(cancel_event(), State) -> State
    +
    +

    A stream has been canceled.

    +

    HTTP/1.1 streams can't be canceled at the protocol level. In this case Gun will silence the stream for the user but events may still occur.

    +

    HTTP/2 streams can be canceled both by the client and the server. Events may still occur for a short time after the stream has been canceled.

    +

    disconnect

    +
    +
    disconnect_event() :: #{
    +    reason := normal | closed | {error, any()}
    +}
    +
    +disconnect(disconnect_event(), State) -> State
    +
    +

    Gun has been disconnected from the server.

    +

    terminate

    +
    +
    terminate_event() :: #{
    +    state := not_connected
    +        | domain_lookup | connecting | initial_tls_handshake | tls_handshake
    +        | connected | connected_data_only | connected_ws_only,
    +    reason := normal | shutdown | {shutdown, any()} | any()
    +}
    +
    +terminate(terminate_event(), State) -> State
    +
    +

    Gun is terminating.

    +

    Changelog

    +
    • 2.0: Module introduced. +
    • +
    +

    See also

    +

    gun(7), gun(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_inform/index.html b/docs/en/gun/2.1/manual/gun_inform/index.html new file mode 100644 index 00000000..18f50ce3 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_inform/index.html @@ -0,0 +1,207 @@ + + + + + + + + + + Nine Nines: gun_inform(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_inform(3)

    + +

    Name

    +

    gun_inform - Informational response

    +

    Description

    +
    +
    {gun_inform, ConnPid, StreamRef, Status, Headers}
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +Status    :: 100..199
    +Headers   :: [{binary(), binary()}]
    +
    +

    Informational response.

    +

    This message informs the relevant process that the server sent an informational response to the original request.

    +

    Informational responses are only intermediate responses and provide no guarantees as to what the final response will be. An informational response always precedes the response to the original request.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    Status
    +

    Status code for the informational response.

    +
    +
    Headers
    +

    Headers sent with the informational response.

    +
    +
    +

    Changelog

    +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_inform message in a gen_server
    +
    +
    handle_info({gun_inform, ConnPid, _StreamRef,
    +             _Status, _Headers},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:patch(3), gun:post(3), gun:put(3), gun_response(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_push/index.html b/docs/en/gun/2.1/manual/gun_push/index.html new file mode 100644 index 00000000..fb9e5ff5 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_push/index.html @@ -0,0 +1,227 @@ + + + + + + + + + + Nine Nines: gun_push(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_push(3)

    + +

    Name

    +

    gun_push - Server-initiated push

    +

    Description

    +
    +
    {gun_push, ConnPid, StreamRef, NewStreamRef, Method, URI, Headers}
    +
    +ConnPid      :: pid()
    +StreamRef    :: gun:stream_ref()
    +NewStreamRef :: gun:stream_ref()
    +Method       :: binary()
    +URI          :: binary()
    +Headers      :: [{binary(), binary()}]
    +
    +

    Server-initiated push.

    +

    This message informs the relevant process that the server is pushing a resource related to the effective target URI of the original request.

    +

    A server-initiated push message always precedes the response to the original request.

    +

    This message will not be sent when using the HTTP/1.1 protocol because it lacks the concept of server-initiated push.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    NewStreamRef
    +

    Identifier of the stream being pushed.

    +
    +
    Method
    +

    Method of the equivalent HTTP request.

    +
    +
    URI
    +

    URI of the resource being pushed.

    +
    +
    Headers
    +

    Headers of the equivalent HTTP request.

    +
    +
    +

    Changelog

    +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_push message in a gen_server
    +
    +
    handle_info({gun_push, ConnPid, _StreamRef,
    +             _NewStreamRef, _Method, _URI, _Headers},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +
    Cancel an unwanted push
    +
    +
    handle_info({gun_push, ConnPid, _StreamRef,
    +             NewStreamRef, _Method, _URI, _Headers},
    +            State=#state{conn_pid=ConnPid}) ->
    +    gun:cancel(ConnPid, NewStreamRef),
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:cancel(3), gun_response(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_response/index.html b/docs/en/gun/2.1/manual/gun_response/index.html new file mode 100644 index 00000000..6a8ca517 --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_response/index.html @@ -0,0 +1,210 @@ + + + + + + + + + + Nine Nines: gun_response(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_response(3)

    + +

    Name

    +

    gun_response - Response

    +

    Description

    +
    +
    {gun_response, ConnPid, StreamRef, IsFin, Status, Headers}
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +IsFin     :: fin | nofin
    +Status    :: non_neg_integer()
    +Headers   :: [{binary(), binary()}]
    +
    +

    Response.

    +

    This message informs the relevant process that the server sent a response to the original request.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    IsFin
    +

    Whether this message terminates the response.

    +
    +
    Status
    +

    Status code for the response.

    +
    +
    Headers
    +

    Headers sent with the response.

    +
    +
    +

    Changelog

    +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_response message in a gen_server
    +
    +
    handle_info({gun_response, ConnPid, _StreamRef,
    +             _IsFin, _Status, _Headers},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:head(3), gun:patch(3), gun:post(3), gun:put(3), gun:delete(3), gun:options(3), gun:headers(3), gun:request(3), gun_inform(3), gun_push(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_trailers/index.html b/docs/en/gun/2.1/manual/gun_trailers/index.html new file mode 100644 index 00000000..69a60bab --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_trailers/index.html @@ -0,0 +1,202 @@ + + + + + + + + + + Nine Nines: gun_trailers(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_trailers(3)

    + +

    Name

    +

    gun_trailers - Response trailers

    +

    Description

    +
    +
    {gun_trailers, ConnPid, StreamRef, Headers}
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +Headers   :: [{binary(), binary()}]
    +
    +

    Response trailers.

    +

    This message informs the relevant process that the server sent response trailers for the response to the original request.

    +

    A trailers message terminates the response.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream for the original request.

    +
    +
    Headers
    +

    Trailing headers sent after the response body.

    +
    +
    +

    Changelog

    +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_trailers message in a gen_server
    +
    +
    handle_info({gun_trailers, ConnPid, _StreamRef, _Headers},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:get(3), gun:head(3), gun:patch(3), gun:post(3), gun:put(3), gun:delete(3), gun:options(3), gun:headers(3), gun:request(3), gun_response(3), gun_data(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_tunnel_up/index.html b/docs/en/gun/2.1/manual/gun_tunnel_up/index.html new file mode 100644 index 00000000..da47b88c --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_tunnel_up/index.html @@ -0,0 +1,202 @@ + + + + + + + + + + Nine Nines: gun_tunnel_up(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_tunnel_up(3)

    + +

    Name

    +

    gun_tunnel_up - The tunnel is up

    +

    Description

    +
    +
    {gun_tunnel_up, ConnPid, StreamRef, Protocol}
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref() | undefined
    +Protocol  :: http | http2 | socks
    +
    +

    The tunnel is up.

    +

    This message informs the owner/calling process that the connection completed through the SOCKS or CONNECT proxy.

    +

    If Gun is configured to connect to another SOCKS server, then the connection is not usable yet. One or more gun_tunnel_up(3) messages will follow.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    The stream reference the tunnel is running on, or undefined if there are no underlying stream.

    +
    +
    Protocol
    +

    The protocol selected for this connection. It can be used to determine the capabilities of the server.

    +
    +
    +

    Changelog

    +
    • 2.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_tunnel_up message in a gen_server
    +
    +
    handle_info({gun_tunnel_up, ConnPid, _StreamRef, _Protocol},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:open_unix(3), gun:await_up(3), gun_up(3), gun_down(3), gun_error(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_up/index.html b/docs/en/gun/2.1/manual/gun_up/index.html new file mode 100644 index 00000000..c4d90ecb --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_up/index.html @@ -0,0 +1,199 @@ + + + + + + + + + + Nine Nines: gun_up(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_up(3)

    + +

    Name

    +

    gun_up - The connection is up

    +

    Description

    +
    +
    {gun_up, ConnPid, Protocol}
    +
    +ConnPid  :: pid()
    +Protocol :: http | http2 | raw | socks
    +
    +

    The connection is up.

    +

    This message informs the owner process that the connection or reconnection completed.

    +

    If Gun is configured to connect to a Socks server, then the connection is not usable yet. One or more gun_tunnel_up(3) messages will follow.

    +

    Otherwise, Gun will start processing the messages it received while waiting for the connection to be up. If this is a reconnection, then this may not be desirable for all requests. Those requests should be cancelled when the connection goes down, and any subsequent messages ignored.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    Protocol
    +

    The protocol selected for this connection. It can be used to determine the capabilities of the server.

    +
    +
    +

    Changelog

    +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_up message in a gen_server
    +
    +
    handle_info({gun_up, ConnPid, _Protocol},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:open(3), gun:open_unix(3), gun:await_up(3), gun_tunnel_up(3), gun_down(3), gun_error(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_upgrade/index.html b/docs/en/gun/2.1/manual/gun_upgrade/index.html new file mode 100644 index 00000000..0bdb8adc --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_upgrade/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + Nine Nines: gun_upgrade(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_upgrade(3)

    + +

    Name

    +

    gun_upgrade - Successful protocol upgrade

    +

    Description

    +
    +
    {gun_upgrade, ConnPid, StreamRef, Protocols, Headers}
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +Protocols :: [<<"websocket">>]
    +Headers   :: [{binary(), binary()}]
    +
    +

    Successful protocol upgrade.

    +

    This message informs the relevant process that the server accepted to upgrade to one or more protocols given in the original request.

    +

    The exact semantics of this message depend on the original protocol. HTTP/1.1 upgrades apply to the entire connection. HTTP/2 uses a different mechanism which allows switching specific streams to a different protocol.

    +

    Gun currently only supports upgrading HTTP/1.1 connections to the Websocket protocol.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream that resulted in an upgrade.

    +
    +
    Protocols
    +

    List of protocols this stream was upgraded to.

    +
    +
    Headers
    +

    Headers sent with the upgrade response.

    +
    +
    +

    Changelog

    +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_upgrade message in a gen_server
    +
    +
    handle_info({gun_upgrade, ConnPid, _StreamRef,
    +             _Protocols, _Headers},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:ws_upgrade(3), gun:ws_send(3), gun_ws(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_ws/index.html b/docs/en/gun/2.1/manual/gun_ws/index.html new file mode 100644 index 00000000..5d6fd65b --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_ws/index.html @@ -0,0 +1,207 @@ + + + + + + + + + + Nine Nines: gun_ws(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_ws(3)

    + +

    Name

    +

    gun_ws - Websocket frame

    +

    Description

    +
    +
    {gun_ws, ConnPid, StreamRef, Frame}
    +
    +ConnPid   :: pid()
    +StreamRef :: gun:stream_ref()
    +Frame     :: close | ping | pong
    +           | {text | binary | close, binary()}
    +           | {close, non_neg_integer(), binary()}
    +           | {ping | pong, binary()}
    +
    +

    Websocket frame.

    +

    This message informs the relevant process that the server sent the enclosed frame.

    +

    This message can only be sent on streams that were upgraded to the Websocket protocol.

    +

    Elements

    +
    ConnPid
    +

    The pid of the Gun connection process.

    +
    +
    StreamRef
    +

    Identifier of the stream that was upgraded to Websocket.

    +
    +
    Frame
    +

    The Websocket frame in question.

    +
    +
    +

    Changelog

    +
    • 2.0: Depending on the option silence_pings, ping and pong frames may be sent as well. +
    • +
    • 1.0: Message introduced. +
    • +
    +

    Examples

    +
    Receive a gun_ws message in a gen_server
    +
    +
    handle_info({gun_ws, ConnPid, _StreamRef, _Frame},
    +            State=#state{conn_pid=ConnPid}) ->
    +    %% Do something.
    +    {noreply, State}.
    +
    +

    See also

    +

    gun(3), gun:ws_upgrade(3), gun:ws_send(3), gun_upgrade(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/gun_ws_protocol/index.html b/docs/en/gun/2.1/manual/gun_ws_protocol/index.html new file mode 100644 index 00000000..07d5daff --- /dev/null +++ b/docs/en/gun/2.1/manual/gun_ws_protocol/index.html @@ -0,0 +1,233 @@ + + + + + + + + + + Nine Nines: gun_ws_protocol(3) + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    gun_ws_protocol(3)

    + +

    Name

    +

    gun_ws_protocol - Websocket subprotocols

    +

    Description

    +

    The gun_ws_protocol module provides the callback interface and types for implementing Websocket subprotocols.

    +

    Callbacks

    +

    Websocket subprotocols implement the following interface.

    +

    init

    +
    +
    init(ReplyTo, StreamRef, Headers, Opts) -> {ok, State}
    +
    +ReplyTo   :: pid()
    +StreamRef :: reference()
    +Headers   :: cow_http:headers()
    +Opts      :: gun:ws_opts()
    +State     :: protocol_state()
    +
    +

    Initialize the Websocket protocol.

    +
    ReplyTo
    +

    The pid of the process that owns the stream and to which messages will be sent to.

    +
    +
    StreamRef
    +

    The reference for the stream. Must be sent in messages to distinguish between different streams.

    +
    +
    Headers
    +

    Headers that were sent in the response establishing the Websocket connection.

    +
    +
    Opts
    +

    Websocket options. Custom options can be provided in the user_opts key.

    +
    +
    State
    +

    State for the protocol.

    +
    +
    +

    handle

    +
    +
    handle(Frame, State) -> {ok, FlowDec, State}
    +
    +Frame   :: cow_ws:frame()
    +State   :: protocol_state()
    +FlowDec :: non_neg_integer()
    +
    +

    Handle a Websocket frame.

    +

    This callback may receive fragmented frames depending on the protocol and may need to rebuild the full frame to process it.

    +
    Frame
    +

    Websocket frame.

    +
    +
    State
    +

    State for the protocol.

    +
    +
    FlowDec
    +

    How many messages were sent. Used to update the flow control state when the feature is enabled.

    +
    +
    +

    Types

    +

    protocol_state()

    +
    +
    protocol_state() :: any()
    +
    +

    State for the protocol.

    +

    As this part of the implementation of the protocol the type may differ between different Websocket protocol modules.

    +

    Changelog

    +
    • 2.0: Module introduced. +
    • +
    +

    See also

    +

    gun(7), gun(3), gun:ws_upgrade(3)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + diff --git a/docs/en/gun/2.1/manual/index.html b/docs/en/gun/2.1/manual/index.html new file mode 100644 index 00000000..60aff555 --- /dev/null +++ b/docs/en/gun/2.1/manual/index.html @@ -0,0 +1,192 @@ + + + + + + + + + + Nine Nines: Gun Function Reference + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Gun Function Reference

    + +

    Name

    +

    gun - HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP

    +

    Description

    +

    Gun is an HTTP client for Erlang/OTP with support for the HTTP/1.1, HTTP/2 and Websocket protocols.

    +

    Gun aims to provide an easy to use, asynchronous and always-connected client. It maintains a permanent connection to the server and reconnects automatically when necessary.

    +

    Modules

    + +

    Dependencies

    +
    • cowlib(7) - Support library for manipulating Web protocols +
    • +
    • ssl - Secure communication over sockets +
    • +
    +

    All these applications must be started before the gun application. To start Gun and all dependencies at once:

    +
    +
    {ok, _} = application:ensure_all_started(gun).
    +
    +

    Environment

    +

    The gun application does not define any application environment configuration parameters.

    +

    See also

    +

    cowlib(7)

    + + + + + + +
    + +
    + + +

    + Gun + 2.1 + Function Reference + +

    + + + +

    Navigation

    + +

    Version select

    + + +

    Like my work? Donate!

    +

    Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

    +
    + + + + + + + + + +

    Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.

    + + + +
    +
    +
    +
    + + + + + + + + + -- cgit v1.2.3