From 2b588340af501825f3ab03f2e76dba0353c98fae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?=
Date: Mon, 4 Jun 2018 12:59:26 +0200
Subject: Update documentation for Gun 1.0
---
docs/en/gun/1.0/guide/connect.asciidoc | 94 ++++++------
docs/en/gun/1.0/guide/connect/index.html | 57 +++-----
docs/en/gun/1.0/guide/gun.sty | 8 ++
docs/en/gun/1.0/guide/http.asciidoc | 199 ++++++++++++++------------
docs/en/gun/1.0/guide/http/index.html | 141 +++++++++---------
docs/en/gun/1.0/guide/index.html | 2 -
docs/en/gun/1.0/guide/introduction.asciidoc | 38 +++--
docs/en/gun/1.0/guide/introduction/index.html | 45 ++++--
docs/en/gun/1.0/guide/protocols.asciidoc | 46 +++---
docs/en/gun/1.0/guide/protocols/index.html | 51 ++++---
docs/en/gun/1.0/guide/start.asciidoc | 46 ++----
docs/en/gun/1.0/guide/start/index.html | 42 +-----
docs/en/gun/1.0/guide/websocket.asciidoc | 97 ++++++-------
docs/en/gun/1.0/guide/websocket/index.html | 62 +++-----
14 files changed, 452 insertions(+), 476 deletions(-)
create mode 100644 docs/en/gun/1.0/guide/gun.sty
(limited to 'docs/en/gun/1.0/guide')
diff --git a/docs/en/gun/1.0/guide/connect.asciidoc b/docs/en/gun/1.0/guide/connect.asciidoc
index e0b09d6c..dd4297d1 100644
--- a/docs/en/gun/1.0/guide/connect.asciidoc
+++ b/docs/en/gun/1.0/guide/connect.asciidoc
@@ -1,3 +1,4 @@
+[[connect]]
== Connection
This chapter describes how to open, monitor and close
@@ -26,31 +27,33 @@ to reconnect automatically.
=== Opening a new connection
-The `gun:open/{2,3}` function must be used to open a 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
-SSL. The protocol will be selected automatically using the
+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 SSL.
+and HTTP/1.1 when connecting using TLS.
-For any other port, Gun will attempt to connect using TCP
-and will use the HTTP/1.1 protocol.
+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 using
+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 an SSL connection to example.org on port 8443
-
+.Opening a TLS connection to example.org on port 8443
[source,erlang]
-{ok, ConnPid} = gun:open("example.org", 8443, #{transport=>ssl}).
+----
+{ok, ConnPid} = gun:open("example.org", 8443, #{transport => tls}).
+----
=== Waiting for the connection to be established
@@ -58,22 +61,23 @@ 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
+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 list of stream references.
+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
@@ -81,41 +85,41 @@ streams that the server did not process.
=== Monitoring the connection process
-@todo Gun should detect the owner process being killed
-
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}`
+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}`
+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);
+ %% 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.
@@ -125,30 +129,32 @@ 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.
+//=== 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/1.0/guide/connect/index.html b/docs/en/gun/1.0/guide/connect/index.html
index 1e35e16b..ac1e6eb3 100644
--- a/docs/en/gun/1.0/guide/connect/index.html
+++ b/docs/en/gun/1.0/guide/connect/index.html
@@ -7,8 +7,6 @@
-
-
Nine Nines: Connection
@@ -89,7 +87,7 @@ to reconnect automatically.
Opening a new connection
-
The gun:open/{2,3} function must be used to open a 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
-SSL. The protocol will be selected automatically using the
+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 SSL.
-
For any other port, Gun will attempt to connect using TCP
-and will use the HTTP/1.1 protocol.
-
The transport and protocol used can be overriden using
+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 an SSL connection to example.org on port 8443
+
Opening a TLS connection to example.org on port 8443
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
+
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.
When the connection is lost, Gun will send a gun_down
message indicating the current protocol, the reason the
-connection was lost and two list of stream references.
+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.
@@ -150,18 +148,17 @@ streams that the server did not process.
Monitoring the connection process
-
@todo Gun should detect the owner process being killed
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}
+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}
+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
@@ -180,10 +177,10 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
What to do when you receive a DOWN message is entirely up to you.
@@ -204,28 +201,6 @@ http://www.gnu.org/software/src-highlite -->
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
-
-
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/1.0/guide/gun.sty b/docs/en/gun/1.0/guide/gun.sty
new file mode 100644
index 00000000..d5e0d3be
--- /dev/null
+++ b/docs/en/gun/1.0/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/1.0/guide/http.asciidoc b/docs/en/gun/1.0/guide/http.asciidoc
index ff4aa0aa..652030a3 100644
--- a/docs/en/gun/1.0/guide/http.asciidoc
+++ b/docs/en/gun/1.0/guide/http.asciidoc
@@ -1,3 +1,4 @@
+[[http]]
== HTTP
This chapter describes how to use the Gun client for
@@ -7,7 +8,7 @@ communicating with an HTTP/1.1 or HTTP/2 server.
Every time a request is initiated, Gun creates a _stream_.
A _stream reference_ uniquely identifies a set of request and
-response(s) and must be used to perform additional operations
+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
@@ -24,7 +25,9 @@ not be used.
.Cancelling a stream
[source,erlang]
+----
gun:cancel(ConnPid, StreamRef).
+----
=== Sending requests
@@ -45,39 +48,43 @@ handling of responses will be explained further on.
==== GET and HEAD
-Use `gun:get/{2,3,4}` to request a resource.
+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"}
+ {<<"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.
+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"}
+ {<<"accept">>, "application/json"},
+ {<<"user-agent">>, "revolver/1.0"}
]).
+----
It is not possible to send a request body with a GET or HEAD
request.
@@ -87,7 +94,7 @@ request.
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 the resource. POST can also be used to
+in advance when creating a resource. POST can also be used to
replace an existing resource, although PUT is more appropriate
in that situation.
@@ -101,7 +108,7 @@ 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 `gun:post/{4,5}`, `gun:put/{4,5}` and `gun:patch/{4,5}` functions
+The `gun:post/4,5`, `gun:put/4,5` and `gun:patch/4,5` functions
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.
@@ -112,12 +119,13 @@ 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"}
+ {<<"content-type">>, "application/json"}
], Body).
+----
The `gun:post/3`, `gun:put/3` and `gun:patch/3` functions
do not take a body in their arguments. If a body is to be
@@ -133,14 +141,15 @@ 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"}
+ {<<"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
@@ -148,79 +157,82 @@ 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.
-@todo what to do about empty chunk, ignore?
-
.Streaming the request body
-
[source,erlang]
----
sendfile(ConnPid, StreamRef, Filepath) ->
- {ok, IoDevice} = file:open(Filepath, [read, binary, raw]),
- do_sendfile(ConnPid, StreamRef, IoDevice).
+ {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.
+ 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.
+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"}
+ {<<"user-agent">>, "revolver/1.0"}
]).
+----
==== OPTIONS
-Use `gun:options/{2,3}` to request information about a resource.
+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"}
+ {<<"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 `gun:request/{4,5,6}` function can be used to send requests
+The `gun:request/4,5,6` function 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"}
+ {<<"max-forwards">>, "30"}
]).
+----
=== Processing responses
@@ -242,36 +254,35 @@ 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.
+ 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.
+ 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
@@ -283,29 +294,30 @@ 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
+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
+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
+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])
+ {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
@@ -323,26 +335,28 @@ 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()
+ {gun_push, ConnPid, OriginalStreamRef, PushedStreamRef,
+ Method, Host, Path, Headers} ->
+ enjoy()
end.
+----
-If you use the `gun:await/{2,3,4}` function, however, Gun
+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, Host, Path, Headers}
- = gun:await(ConnPid, OriginalStreamRef).
+----
+{push, PushedStreamRef, Method, URI, Headers}
+ = gun:await(ConnPid, OriginalStreamRef).
+----
-The `PushedStreamRef` variable can then be used with `gun:await_body/{2,3,4}`
-if needed.
+The `PushedStreamRef` variable can then be used with `gun:await/2,3,4`
+and `gun:await_body/2,3,4`.
=== Flushing unwanted messages
@@ -352,14 +366,16 @@ 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
@@ -367,7 +383,8 @@ 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}).
+ #{reply_to => Pid}).
+----
diff --git a/docs/en/gun/1.0/guide/http/index.html b/docs/en/gun/1.0/guide/http/index.html
index 2753588e..6c32ab5d 100644
--- a/docs/en/gun/1.0/guide/http/index.html
+++ b/docs/en/gun/1.0/guide/http/index.html
@@ -7,8 +7,6 @@
-
-
Nine Nines: HTTP
@@ -71,7 +69,7 @@ communicating with an HTTP/1.1 or HTTP/2 server.
Every time a request is initiated, Gun creates a stream.
A stream reference uniquely identifies a set of request and
-response(s) and must be used to perform additional operations
+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.
@@ -107,7 +105,7 @@ header if it has not been provided in the request arguments.
handling of responses will be explained further on.
It is not possible to send a request body with a GET or HEAD
request.
@@ -153,7 +151,7 @@ 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 the resource. POST can also be used to
+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.
@@ -163,7 +161,7 @@ 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 gun:post/{4,5}, gun:put/{4,5} and gun:patch/{4,5} functions
+
The gun:post/4,5, gun:put/4,5 and gun:patch/4,5 functions
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.
@@ -179,7 +177,7 @@ http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
The gun:post/3, gun:put/3 and gun:patch/3 functions
do not take a body in their arguments. If a body is to be
@@ -200,8 +198,8 @@ http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
The atom fin indicates this is the last chunk of data to
@@ -209,7 +207,6 @@ 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.
The gun:request/{4,5,6} function can be used to send requests
+
The gun:request/4,5,6 function 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.
@@ -291,7 +288,7 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
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
@@ -352,13 +349,13 @@ 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
+
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
+
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
+
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.
If you use the gun:await/{2,3,4} function, however, Gun
+
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.
@@ -410,10 +407,10 @@ will return a tuple that doesn’t contain it.
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-
+ #{reply_to=>Pid}).
diff --git a/docs/en/gun/1.0/guide/index.html b/docs/en/gun/1.0/guide/index.html
index f7e4b26e..cb30dd5b 100644
--- a/docs/en/gun/1.0/guide/index.html
+++ b/docs/en/gun/1.0/guide/index.html
@@ -7,8 +7,6 @@
-
-
Nine Nines: Gun User Guide
diff --git a/docs/en/gun/1.0/guide/introduction.asciidoc b/docs/en/gun/1.0/guide/introduction.asciidoc
index f437769a..f7cd9c10 100644
--- a/docs/en/gun/1.0/guide/introduction.asciidoc
+++ b/docs/en/gun/1.0/guide/introduction.asciidoc
@@ -1,6 +1,9 @@
+[[introduction]]
== Introduction
-Gun is an Erlang HTTP client with support for HTTP/1.1, HTTP/2 and Websocket.
+Gun is an HTTP client for Erlang/OTP.
+
+Gun supports the HTTP/2, HTTP/1.1 and Websocket protocols.
=== Prerequisites
@@ -9,12 +12,33 @@ protocols is required in order to read this guide.
=== Supported platforms
-Gun is tested and supported on Linux.
+Gun is tested and supported on Linux, FreeBSD, Windows and OSX.
+
+Gun is developed for Erlang/OTP 19.0 and newer.
+
+=== License
-Gun is developed for Erlang 19+.
+Gun uses the ISC License.
-Gun may be compiled on earlier Erlang versions with small source code
-modifications but there is no guarantee that it will work as intended.
+----
+Copyright (c) 2013-2018, 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
@@ -26,7 +50,3 @@ to lowercase, and expects your application to provide lowercase header
names.
The same applies to any other case insensitive value.
-
-=== Versioning
-
-Gun uses [Semantic Versioning 2.0.0](http://semver.org/).
diff --git a/docs/en/gun/1.0/guide/introduction/index.html b/docs/en/gun/1.0/guide/introduction/index.html
index 5a59d78a..6a3ed2e7 100644
--- a/docs/en/gun/1.0/guide/introduction/index.html
+++ b/docs/en/gun/1.0/guide/introduction/index.html
@@ -7,8 +7,6 @@
-
-
Nine Nines: Introduction
@@ -64,7 +62,8 @@
Introduction
-
Gun is an Erlang HTTP client with support for HTTP/1.1, HTTP/2 and Websocket.
+
Gun is an HTTP client for Erlang/OTP.
+
Gun supports the HTTP/2, HTTP/1.1 and Websocket protocols.
Prerequisites
@@ -75,10 +74,36 @@ protocols is required in order to read this guide.
Supported platforms
-
Gun is tested and supported on Linux.
-
Gun is developed for Erlang 19+.
-
Gun may be compiled on earlier Erlang versions with small source code
-modifications but there is no guarantee that it will work as intended.
+
Gun is tested and supported on Linux, FreeBSD, Windows and OSX.
+
Gun is developed for Erlang/OTP 19.0 and newer.
+
+
+
+
License
+
+
Gun uses the ISC License.
+
+
+
Copyright (c) 2013-2018, 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.
diff --git a/docs/en/gun/1.0/guide/protocols.asciidoc b/docs/en/gun/1.0/guide/protocols.asciidoc
index ae7705ff..2c4fd10e 100644
--- a/docs/en/gun/1.0/guide/protocols.asciidoc
+++ b/docs/en/gun/1.0/guide/protocols.asciidoc
@@ -1,3 +1,4 @@
+[[protocols]]
== Supported protocols
This chapter describes the protocols supported and the
@@ -10,31 +11,36 @@ 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:request/{4,5,6}` for each respective
+functions are aliases of `gun:request/4,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. If something goes wrong, a `gun_error`
+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's body. The `gun:flush/1` function can be used to clear all
+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 process.
+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 response can be received.
+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_ws_upgrade` message will be sent on success;
+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
@@ -42,25 +48,26 @@ a `gun_response` message otherwise.
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 multiple responses to a single
-request.
+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.
-Because a HTTP/2 server can push multiple responses to a
-single request, Gun might send `gun_push` messages for
-every push received. They can be ignored safely if they
-are not needed.
+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.
-It is not possible to upgrade an HTTP/2 connection to Websocket
-due to protocol limitations.
+It is not currently possible to upgrade an HTTP/2 connection
+to Websocket. Support for this will be added in a future
+release.
=== Websocket
@@ -110,10 +117,11 @@ current protocol.
|===
| 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_error (StreamRef) | yes | yes | no
+| gun_trailers | yes | yes | no
| gun_error | yes | yes | yes
-| gun_ws_upgrade | yes | no | no
+| gun_upgrade | yes | no | no
| gun_ws | no | no | yes
|===
diff --git a/docs/en/gun/1.0/guide/protocols/index.html b/docs/en/gun/1.0/guide/protocols/index.html
index b94891f0..00d70ad6 100644
--- a/docs/en/gun/1.0/guide/protocols/index.html
+++ b/docs/en/gun/1.0/guide/protocols/index.html
@@ -7,8 +7,6 @@
-
-
Nine Nines: Supported protocols
@@ -73,27 +71,31 @@ operations available to them.
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:request/{4,5,6} for each respective
+functions are aliases of gun:request/4,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. If something goes wrong, a gun_error
+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’s body. The gun:flush/1 function can be used to clear all
+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 process.
+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 response can be received.
+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_ws_upgrade message will be sent on success;
+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.
@@ -103,21 +105,22 @@ a gun_response message otherwise.
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 multiple responses to a single
-request.
+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.
-
Because a HTTP/2 server can push multiple responses to a
-single request, Gun might send gun_push messages for
-every push received. They can be ignored safely if they
-are not needed.
+
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.
-
It is not possible to upgrade an HTTP/2 connection to Websocket
-due to protocol limitations.
+
It is not currently possible to upgrade an HTTP/2 connection
+to Websocket. Support for this will be added in a future
+release.
diff --git a/docs/en/gun/1.0/guide/start.asciidoc b/docs/en/gun/1.0/guide/start.asciidoc
index 6d93e2e8..09720dca 100644
--- a/docs/en/gun/1.0/guide/start.asciidoc
+++ b/docs/en/gun/1.0/guide/start.asciidoc
@@ -1,21 +1,21 @@
+[[start]]
== Starting and stopping
This chapter describes how to start and stop the Gun application.
=== Setting up
-Before Gun can be used it needs to be in Erlang's `ERL_LIBS` path variable.
-If you use `erlang.mk` or a similar build tool, you only need to specify
-Gun as a dependency to your application and the tool will take care
-of downloading Gun and setting up paths.
+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
+With Erlang.mk this is done by adding `gun` to the `DEPS` variable
in your Makefile.
-.Adding Gun as an erlang.mk dependency
-
+.Adding Gun as an Erlang.mk dependency
[source,make]
+----
DEPS = gun
+----
=== Starting
@@ -23,45 +23,21 @@ 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,[ranch,crypto,cowlib,asn1,public_key,ssl,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 equivalent of `application:start/1`.
+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).
-
-=== Using Gun with releases
-
-An _OTP release_ starts applications automatically. All you need
-to do is to set up your application resource file so that Gun can
-be included in the release. The application resource file can be
-found in `ebin/your_application.app`, or in `src/your_application.app.src`
-if you are using a build tool like `erlang.mk`.
-
-The key you need to change is the `applications` key. By default
-it only includes `kernel` and `stdlib`. You need to add `gun` to
-that list.
-
-.Adding Gun to the application resource file
-
-[source,erlang]
-{applications, [
- kernel,
- stdlib,
- gun
-]}
-
-Do not put an extra comma at the end, the comma is a separator
-between the elements of the list.
+----
diff --git a/docs/en/gun/1.0/guide/start/index.html b/docs/en/gun/1.0/guide/start/index.html
index d2e8f0aa..6611c3ea 100644
--- a/docs/en/gun/1.0/guide/start/index.html
+++ b/docs/en/gun/1.0/guide/start/index.html
@@ -7,8 +7,6 @@
-
-
Nine Nines: Starting and stopping
@@ -68,14 +66,12 @@
Setting up
-
Before Gun can be used it needs to be in Erlang’s ERL_LIBS path variable.
-If you use erlang.mk or a similar build tool, you only need to specify
-Gun as a dependency to your application and the tool will take care
-of downloading Gun and setting up paths.
-
With erlang.mk this is done by adding gun to the DEPS variable
+
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.
You can stop Gun using the application:stop/1 function, however
-only Gun will be stopped. This is the equivalent of application:start/1.
+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.
An OTP release starts applications automatically. All you need
-to do is to set up your application resource file so that Gun can
-be included in the release. The application resource file can be
-found in ebin/your_application.app, or in src/your_application.app.src
-if you are using a build tool like erlang.mk.
-
The key you need to change is the applications key. By default
-it only includes kernel and stdlib. You need to add gun to
-that list.
-
-
Adding Gun to the application resource file
-
-
{applications, [
- kernel,
- stdlib,
- gun
-]}
-
Do not put an extra comma at the end, the comma is a separator
-between the elements of the list.
-
-
diff --git a/docs/en/gun/1.0/guide/websocket.asciidoc b/docs/en/gun/1.0/guide/websocket.asciidoc
index f99dea70..cf32291f 100644
--- a/docs/en/gun/1.0/guide/websocket.asciidoc
+++ b/docs/en/gun/1.0/guide/websocket.asciidoc
@@ -1,10 +1,10 @@
+[[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.
+// @todo recovering from connection failure, reconnecting to Websocket etc.
=== HTTP upgrade
@@ -14,33 +14,33 @@ 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
+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 request a custom sub-protocol.
.Upgrade to Websocket and request a protocol
-
[source,erlang]
+----
gun:ws_upgrade(ConnPid, "/websocket", [
- {<<"sec-websocket-protocol">>, "mychat"}
+ {<<"sec-websocket-protocol">>, "mychat"}
]).
+----
-You can pass the Websocket options as part of the `gun:open/{2,3}`
+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. This function call
-will crash if the options are incorrect, unlike when passing
-them through `gun:open/{2,3}`.
+The fourth argument is those same options.
-When the upgrade succeeds, a `gun_ws_upgrade` message is sent.
+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
@@ -52,21 +52,19 @@ a meaningful response which should be processed. In the
following example we however ignore it:
[source,erlang]
+----
receive
- {gun_ws_upgrade, ConnPid, ok, Headers} ->
- upgrade_success(ConnPid);
- {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.
+ {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)
+ exit(timeout)
end.
-
-Note that you shouldn't use the `reply_to` request option
-for connections you plan to upgrade, because only the
-owner of the connection will receive messages about it.
+----
=== Sending data
@@ -74,27 +72,28 @@ 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/2` to send one or more messages to the server.
-
-@todo Implement sending of N frames
+Use `gun:ws_send/2` to send messages to the server.
.Send a text frame
-
[source,erlang]
+----
gun:ws_send(ConnPid, {text, "Hello!"}).
-
-.Send a text frame, a binary frame and then close the connection
-
-[source,erlang]
-gun:ws_send(ConnPid, [
- {text, "Hello!"},
- {binary, BinaryValue},
- close
-]).
+----
+
+// @todo Implement sending of N frames
+//
+//.Send a text frame, a binary frame and then close the connection
+//[source,erlang]
+//----
+//gun:ws_send(ConnPid, [
+// {text, "Hello!"},
+// {binary, BinaryValue},
+// close
+//]).
+//----
Note that if you send a close frame, Gun will close the connection
-cleanly and will not attempt to reconnect afterwards, similar to
-calling `gun:shutdown/1`.
+cleanly and will not attempt to reconnect afterwards.
=== Receiving data
@@ -102,15 +101,17 @@ Gun sends an Erlang message to the owner process for every
Websocket message it receives.
[source,erlang]
+----
receive
- {gun_ws, ConnPid, Frame} ->
- handle_frame(ConnPid, Frame)
+ {gun_ws, ConnPid, StreamRef, Frame} ->
+ handle_frame(ConnPid, StreamRef, Frame)
end.
-
-@todo auto ping has not been implemented yet
-
-Gun will automatically send ping messages to the server to keep
-the connection alive, however if the connection dies and Gun has
-to reconnect it will not upgrade to Websocket automatically, you
-need to perform the operation when you receive the `gun_error`
-message.
+----
+
+// @todo auto ping has not been implemented yet
+//
+//Gun will automatically send ping messages to the server to keep
+//the connection alive, however if the connection dies and Gun has
+//to reconnect it will not upgrade to Websocket automatically, you
+//need to perform the operation when you receive the `gun_error`
+//message.
diff --git a/docs/en/gun/1.0/guide/websocket/index.html b/docs/en/gun/1.0/guide/websocket/index.html
index b34a290d..a77f1319 100644
--- a/docs/en/gun/1.0/guide/websocket/index.html
+++ b/docs/en/gun/1.0/guide/websocket/index.html
@@ -7,8 +7,6 @@
-
-
Nine Nines: Websocket
@@ -66,8 +64,6 @@
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
@@ -76,7 +72,7 @@ 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
+
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.
@@ -96,14 +92,12 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
You can pass the Websocket options as part of the gun:open/{2,3}
+
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. This function call
-will crash if the options are incorrect, unlike when passing
-them through gun:open/{2,3}.
-
When the upgrade succeeds, a gun_ws_upgrade message is sent.
+The fourth argument is those same options.
+
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
@@ -118,19 +112,16 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
Note that you shouldn’t use the reply_to request option
-for connections you plan to upgrade, because only the
-owner of the connection will receive messages about it.
@@ -139,8 +130,7 @@ owner of the connection will receive messages about it.
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/2 to send one or more messages to the server.
-
@todo Implement sending of N frames
+
Use gun:ws_send/2 to send messages to the server.
Send a text frame
gun:ws_send(ConnPid, {text, "Hello!"}).
-
-
Send a text frame, a binary frame and then close the connection
Note that if you send a close frame, Gun will close the connection
-cleanly and will not attempt to reconnect afterwards, similar to
-calling gun:shutdown/1.
+cleanly and will not attempt to reconnect afterwards.
@@ -175,15 +153,9 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
Gun will automatically send ping messages to the server to keep
-the connection alive, however if the connection dies and Gun has
-to reconnect it will not upgrade to Websocket automatically, you
-need to perform the operation when you receive the gun_error
-message.