summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2020-03-25 14:09:51 +0100
committerLoïc Hoguin <[email protected]>2020-03-25 14:09:51 +0100
commit5ff790b8d2b04152d0bf851cbf759f3c33cf53e7 (patch)
tree2f68660f9022bfdbe518412f6bcce55502cc9f94
parentad0ff34015a56c429ddb094976dad3ebc53252e5 (diff)
downloadninenines.eu-5ff790b8d2b04152d0bf851cbf759f3c33cf53e7.tar.gz
ninenines.eu-5ff790b8d2b04152d0bf851cbf759f3c33cf53e7.tar.bz2
ninenines.eu-5ff790b8d2b04152d0bf851cbf759f3c33cf53e7.zip
Gun 2.0.0-pre.2 and Cowlib 2.9.0
-rw-r--r--_build/content/articles/cowboy2-performance.asciidoc80
-rw-r--r--_build/content/articles/gun-2.0.0-pre.2.asciidoc59
-rw-r--r--_build/data/projects/cowlib.toml4
-rw-r--r--articles/asciideck/index.html4
-rw-r--r--articles/cowboy-2.0.0-pre.4/index.html4
-rw-r--r--articles/cowboy-2.0.0-rc.1/index.html4
-rw-r--r--articles/cowboy-2.0.0-rc.2/index.html4
-rw-r--r--articles/cowboy-2.0.0/index.html4
-rw-r--r--articles/cowboy-2.1.0/index.html4
-rw-r--r--articles/cowboy-2.2.0/index.html4
-rw-r--r--articles/cowboy-2.3.0/index.html4
-rw-r--r--articles/cowboy-2.4.0/index.html4
-rw-r--r--articles/cowboy-2.5.0/index.html4
-rw-r--r--articles/cowboy-2.6.0/index.html4
-rw-r--r--articles/cowboy-2.7.0/index.html4
-rw-r--r--articles/cowboy2-qs/index.html4
-rw-r--r--articles/dont-let-it-crash/index.html4
-rw-r--r--articles/erlang-meetup-10-septembre-2019/index.html4
-rw-r--r--articles/erlang-scalability/index.html4
-rw-r--r--articles/erlang-validate-utf8/index.html4
-rw-r--r--articles/erlang.mk-and-relx/index.html4
-rw-r--r--articles/erlanger-playbook-september-2015-update/index.html4
-rw-r--r--articles/erlanger-playbook/index.html4
-rw-r--r--articles/farwest-funded/index.html4
-rw-r--r--articles/github-sponsors/index.html4
-rw-r--r--articles/gun-1.0.0-rc.1/index.html4
-rw-r--r--articles/gun-1.0.0/index.html4
-rw-r--r--articles/gun-1.2.0/index.html4
-rw-r--r--articles/gun-1.3.0/index.html4
-rw-r--r--articles/gun-2.0.0-pre.1/index.html4
-rw-r--r--articles/gun-2.0.0-pre.2/index.html321
-rw-r--r--articles/index.html37
-rw-r--r--articles/index.xml12
-rw-r--r--articles/january-2014-status/index.html4
-rw-r--r--articles/joe_the_rubber_duck/index.html4
-rw-r--r--articles/merry-christmas-2018/index.html4
-rw-r--r--articles/merry-christmas-2019/index.html4
-rw-r--r--articles/ml-archives/index.html4
-rw-r--r--articles/on-open-source/index.html4
-rw-r--r--articles/page/2/index.html36
-rw-r--r--articles/page/3/index.html18
-rw-r--r--articles/ranch-1.3/index.html4
-rw-r--r--articles/ranch-1.6.0/index.html4
-rw-r--r--articles/ranch-1.7.0/index.html4
-rw-r--r--articles/ranch-2.0.0-rc.1/index.html4
-rw-r--r--articles/ranch-ftp/index.html4
-rw-r--r--articles/the-elephant-in-the-room/index.html4
-rw-r--r--articles/the-story-so-far/index.html4
-rw-r--r--articles/tictactoe/index.html4
-rw-r--r--articles/website-update/index.html4
-rw-r--r--articles/xerl-0.1-empty-modules/index.html4
-rw-r--r--articles/xerl-0.2-two-modules/index.html4
-rw-r--r--articles/xerl-0.3-atomic-expressions/index.html4
-rw-r--r--articles/xerl-0.4-expression-separator/index.html4
-rw-r--r--articles/xerl-0.5-intermediate-module/index.html4
-rw-r--r--docs/en/cowlib/2.8/manual/cow_cookie.parse_cookie/index.html2
-rw-r--r--docs/en/cowlib/2.8/manual/cow_cookie.setcookie/index.html2
-rw-r--r--docs/en/cowlib/2.8/manual/cow_cookie/index.html2
-rw-r--r--docs/en/cowlib/2.8/manual/cowlib_app/index.html2
-rw-r--r--docs/en/cowlib/2.8/manual/index.html2
-rw-r--r--docs/en/cowlib/2.9/manual/cow_cookie.cookie/index.html182
-rw-r--r--docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/index.html184
-rw-r--r--docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/index.html191
-rw-r--r--docs/en/cowlib/2.9/manual/cow_cookie.setcookie/index.html192
-rw-r--r--docs/en/cowlib/2.9/manual/cow_cookie/index.html223
-rw-r--r--docs/en/cowlib/2.9/manual/cowlib_app/index.html173
-rw-r--r--docs/en/cowlib/2.9/manual/index.html173
-rw-r--r--docs/en/gun/2.0/guide/introduction.asciidoc8
-rw-r--r--docs/en/gun/2.0/guide/introduction/index.html3
-rw-r--r--docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc34
-rw-r--r--docs/en/gun/2.0/guide/migrating_from_1.3/index.html18
-rw-r--r--docs/en/gun/2.0/manual/gun.info/index.html5
-rw-r--r--docs/en/gun/2.0/manual/gun/index.html9
-rw-r--r--docs/en/gun/2.0/manual/gun_app/index.html4
-rw-r--r--docs/en/gun/2.0/manual/gun_cookies.domain_match/index.html195
-rw-r--r--docs/en/gun/2.0/manual/gun_cookies.path_match/index.html195
-rw-r--r--docs/en/gun/2.0/manual/gun_cookies/index.html294
-rw-r--r--docs/en/gun/2.0/manual/gun_cookies_list/index.html192
-rw-r--r--docs/en/gun/2.0/manual/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/internals.asciidoc5
-rw-r--r--docs/en/ranch/2.0/guide/internals/index.html1
-rw-r--r--docs/index.html5
-rw-r--r--docs/index.xml156
-rw-r--r--donate/index.html24
-rw-r--r--index.html26
-rw-r--r--index.xml168
-rw-r--r--services/index.html24
-rw-r--r--sitemap.xml49
88 files changed, 3435 insertions, 67 deletions
diff --git a/_build/content/articles/cowboy2-performance.asciidoc b/_build/content/articles/cowboy2-performance.asciidoc
new file mode 100644
index 00000000..269be791
--- /dev/null
+++ b/_build/content/articles/cowboy2-performance.asciidoc
@@ -0,0 +1,80 @@
++++
+date = "2020-12-07T07:00:00+01:00"
+title = "Cowboy 2 performance"
+
++++
+
+https://github.com/sponsors/essen[You can now reward my work via GitHub Sponsors].
+
+Recently an article was published by Stressgrid entitled
+https://stressgrid.com/blog/cowboy_performance/[Survey of Cowboy Webserver Performance]
+that compares Cowboy performance across the different versions
+as well as Erlang/OTP versions. The results are not very surprising
+to me personally (although the drop is bigger than I expected),
+but they might be to others.
+
+This prompted an experiment that I will now describe in two parts.
+The first part is about modifying Cowboy to use `active,N` instead
+of `active,once` to reduce the amount of time spent in the TCP
+driver. The second part is about writing a stream handler in order
+to squeeze the most performance out of Cowboy 2.
+
+In order to support both HTTP/1.1 and HTTP/2 with a common interface
+(as well as HTTP/3 in the future), Cowboy 2 switched from the model
+of "one process per connection" to "one process per connection +
+one process per request". This is required because from HTTP/2
+onward requests are processed concurrently rather than sequentially,
+not to mention the protocols include a number of control messages
+that must be handled at the same time.
+
+But this necessarily has some impact on the performance of HTTP/1.1
+connections, and this is what the Stressgrid benchmarks show. Note
+that while I will demonstrate in this article that it is indeed the
+use of multiple processes that causes this reduction in performance,
+I do not really know why this happens, though.
+
+After reading the blog post I started experimenting. I took Cowboy's
+`hello_world` example and added https://github.com/rabbitmq/looking_glass[Looking Glass]
+to the release. I then ran a quick benchmark against the example with
+Looking Glass enabled:
+
+``` erlang
+$ make run
+...
+(hello_world_example@host)1> lg:trace([
+ {app, ranch}, {app, cowlib}, {app, cowboy}, {app, stdlib}
+], lg_file_tracer, "traces.lz4", #{mode => profile, running => true}).
+ok
+... Run the benchmark here for a few seconds.
+(hello_world_example@host)2> lg:stop().
+ok
+(hello_world_example@host)3> lg_callgrind:profile_many("traces.lz4.*", "callgrind.out", #{running => true}).
+ok
+(hello_world_example@host)4> q().
+...
+$ qcachegrind _rel/hello_world_example/callgrind.out
+```
+
+The benchmark can be done with `wrk` for example:
+
+``` bash
+$ wrk -c100 -d10s http://localhost:8080
+```
+
+The benchmark results don't matter, what we want is to see what
+`qcachegrind` tells us about what happened in the system while
+the benchmark was running.
+
+// @todo Need to run the above again in order to extract a picture to put here.
+
+What we can see in the above picture is that around 8% of the
+active time (the time when processes are not waiting for messages)
+is spent in `ranch_tcp:setopts/2`. This is when Cowboy sets
+`active,once`. Turns out this is really expensive, at least
+with synthetic benchmarks, if not more.
+
+A few years ago Steve Vinoski added `active,N` to Erlang/OTP
+to reduce the amount of time spent in the TCP driver. Instead
+of having to call `setops/2` for every packet we want to get
+from the socket, we can tell the driver how many packets we
+want and reduce the number of `setopts/2` calls.
diff --git a/_build/content/articles/gun-2.0.0-pre.2.asciidoc b/_build/content/articles/gun-2.0.0-pre.2.asciidoc
new file mode 100644
index 00000000..441e27aa
--- /dev/null
+++ b/_build/content/articles/gun-2.0.0-pre.2.asciidoc
@@ -0,0 +1,59 @@
++++
+date = "2019-09-27T07:00:00+01:00"
+title = "Gun 2.0 pre-release 2"
+
++++
+
+Gun `2.0.0-pre.2` has been released!
+
+The second pre-release version of Gun 2.0 has been released!
+Gun 2.0 adds a ton of features along with a small number of
+breaking changes.
+
+The main highlight of this pre-release is the support for
+a pluggable cookie store mechanism. Gun 2.0 comes with a
+cookie store engine that can automatically process cookies
+and store them to and retrieve them from a pluggable backend.
+
+Gun 2.0 comes with the `gun_cookies_list` backend which can
+be enabled via the new `cookie_store` option. This backend
+will keep cookies in-memory on a per-connection basis and
+without any persistence built-in. It should however be easy
+to create a backend on top of this one to add persistence
+or share the cookie store backend between multiple connections
+should that be necessary.
+
+The cookie store engine implements the RFC6265bis draft that
+will become a proper RFC in the nearby future and includes
+all the most recent improvements to cookies that modern
+browsers have implemented. Gun is not a browser however so
+some features were skipped (at least for now): there is no
+support for setting cookies from the Erlang side; and there
+is no SameSite checks because Gun does not have a concept of
+a "browsing context".
+
+Please consult the link:/articles/gun-2.0.0-pre.1/[announcement for the first pre-release]
+for information about other Gun 2.0 features.
+
+Gun 2.0 currently requires Erlang/OTP 22 or above and is tested
+and supported on Linux, FreeBSD, macOS and Windows.
+
+A complete
+list of changes can be found in the migration guide:
+https://ninenines.eu/docs/en/gun/2.0/guide/migrating_from_1.3/[Migrating from Gun 1.3 to 2.0].
+
+I will have more free time available for consulting or for
+paid open source development starting from next week. If you
+are interested, drop me an email at mailto:[email protected][[email protected]].
+A feature that may be useful for some of you could be for
+example an implementation for the "Happy Eyeballs" mechanism
+(RFC 8305) as this would allow faster connections to servers
+on dual IPv4 and IPv6 environments.
+
+You can donate to this project via
+https://github.com/sponsors/essen[GitHub Sponsors].
+These funds are used to pay for additional servers for
+testing.
+
+As usual, feedback is appreciated, and issues or
+questions should be sent via Github tickets. Thanks!
diff --git a/_build/data/projects/cowlib.toml b/_build/data/projects/cowlib.toml
index 21b72bad..a28a4569 100644
--- a/_build/data/projects/cowlib.toml
+++ b/_build/data/projects/cowlib.toml
@@ -3,7 +3,7 @@ catchphrase = "Support library for the Web."
description = "The Web toolbox for HTTP/1.1, HTTP/2, Websocket, Multipart, Cookies, URL encoding..."
name = "cowlib"
repository = "https://github.com/ninenines/cowlib"
-versions = ["2.8"]
-branches = ["master"]
+versions = ["2.9", "2.8"]
+branches = ["2.9.0", "2.8.0"]
has_source = true
has_manual = true
diff --git a/articles/asciideck/index.html b/articles/asciideck/index.html
index a5e302f9..4256fa56 100644
--- a/articles/asciideck/index.html
+++ b/articles/asciideck/index.html
@@ -126,6 +126,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.0.0-pre.4/index.html b/articles/cowboy-2.0.0-pre.4/index.html
index d8a2abdc..09e71e49 100644
--- a/articles/cowboy-2.0.0-pre.4/index.html
+++ b/articles/cowboy-2.0.0-pre.4/index.html
@@ -145,6 +145,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.0.0-rc.1/index.html b/articles/cowboy-2.0.0-rc.1/index.html
index 06d3efce..9446294f 100644
--- a/articles/cowboy-2.0.0-rc.1/index.html
+++ b/articles/cowboy-2.0.0-rc.1/index.html
@@ -116,6 +116,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.0.0-rc.2/index.html b/articles/cowboy-2.0.0-rc.2/index.html
index 1c71e9c8..d8cf07dc 100644
--- a/articles/cowboy-2.0.0-rc.2/index.html
+++ b/articles/cowboy-2.0.0-rc.2/index.html
@@ -109,6 +109,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.0.0/index.html b/articles/cowboy-2.0.0/index.html
index 65b10838..fcd74d6d 100644
--- a/articles/cowboy-2.0.0/index.html
+++ b/articles/cowboy-2.0.0/index.html
@@ -115,6 +115,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.1.0/index.html b/articles/cowboy-2.1.0/index.html
index 77491e3d..15442c77 100644
--- a/articles/cowboy-2.1.0/index.html
+++ b/articles/cowboy-2.1.0/index.html
@@ -112,6 +112,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.2.0/index.html b/articles/cowboy-2.2.0/index.html
index ce56659f..558b9d79 100644
--- a/articles/cowboy-2.2.0/index.html
+++ b/articles/cowboy-2.2.0/index.html
@@ -110,6 +110,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.3.0/index.html b/articles/cowboy-2.3.0/index.html
index d4e81b53..3262bd3e 100644
--- a/articles/cowboy-2.3.0/index.html
+++ b/articles/cowboy-2.3.0/index.html
@@ -102,6 +102,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.4.0/index.html b/articles/cowboy-2.4.0/index.html
index a3f0e770..6bc5e237 100644
--- a/articles/cowboy-2.4.0/index.html
+++ b/articles/cowboy-2.4.0/index.html
@@ -104,6 +104,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.5.0/index.html b/articles/cowboy-2.5.0/index.html
index 27e1c52d..d5d283b6 100644
--- a/articles/cowboy-2.5.0/index.html
+++ b/articles/cowboy-2.5.0/index.html
@@ -108,6 +108,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.6.0/index.html b/articles/cowboy-2.6.0/index.html
index 034de9ae..4e91153d 100644
--- a/articles/cowboy-2.6.0/index.html
+++ b/articles/cowboy-2.6.0/index.html
@@ -105,6 +105,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy-2.7.0/index.html b/articles/cowboy-2.7.0/index.html
index a83a037a..9f2411d8 100644
--- a/articles/cowboy-2.7.0/index.html
+++ b/articles/cowboy-2.7.0/index.html
@@ -106,6 +106,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/cowboy2-qs/index.html b/articles/cowboy2-qs/index.html
index 838d30ad..551a250f 100644
--- a/articles/cowboy2-qs/index.html
+++ b/articles/cowboy2-qs/index.html
@@ -146,6 +146,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/dont-let-it-crash/index.html b/articles/dont-let-it-crash/index.html
index b4648a27..0004db14 100644
--- a/articles/dont-let-it-crash/index.html
+++ b/articles/dont-let-it-crash/index.html
@@ -121,6 +121,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/erlang-meetup-10-septembre-2019/index.html b/articles/erlang-meetup-10-septembre-2019/index.html
index 79b4b51c..25196983 100644
--- a/articles/erlang-meetup-10-septembre-2019/index.html
+++ b/articles/erlang-meetup-10-septembre-2019/index.html
@@ -101,6 +101,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/erlang-scalability/index.html b/articles/erlang-scalability/index.html
index f983e8d8..9900149d 100644
--- a/articles/erlang-scalability/index.html
+++ b/articles/erlang-scalability/index.html
@@ -133,6 +133,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/erlang-validate-utf8/index.html b/articles/erlang-validate-utf8/index.html
index 4ba95d01..f31f2e86 100644
--- a/articles/erlang-validate-utf8/index.html
+++ b/articles/erlang-validate-utf8/index.html
@@ -249,6 +249,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/erlang.mk-and-relx/index.html b/articles/erlang.mk-and-relx/index.html
index 97c1d182..59ab22ca 100644
--- a/articles/erlang.mk-and-relx/index.html
+++ b/articles/erlang.mk-and-relx/index.html
@@ -135,6 +135,10 @@ cowboy-0.8.5 erlydtl-0.7.0 ninenines-0.2.0 stdlib-1.19.1</pre></div></div>
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/erlanger-playbook-september-2015-update/index.html b/articles/erlanger-playbook-september-2015-update/index.html
index 7c87ec25..a65ccf57 100644
--- a/articles/erlanger-playbook-september-2015-update/index.html
+++ b/articles/erlanger-playbook-september-2015-update/index.html
@@ -104,6 +104,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/erlanger-playbook/index.html b/articles/erlanger-playbook/index.html
index b7ccb935..e2b5a8d1 100644
--- a/articles/erlanger-playbook/index.html
+++ b/articles/erlanger-playbook/index.html
@@ -145,6 +145,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/farwest-funded/index.html b/articles/farwest-funded/index.html
index cdb45a2a..34685e2f 100644
--- a/articles/farwest-funded/index.html
+++ b/articles/farwest-funded/index.html
@@ -105,6 +105,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/github-sponsors/index.html b/articles/github-sponsors/index.html
index 36405117..cb16e47f 100644
--- a/articles/github-sponsors/index.html
+++ b/articles/github-sponsors/index.html
@@ -102,6 +102,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/gun-1.0.0-rc.1/index.html b/articles/gun-1.0.0-rc.1/index.html
index b44fc307..3bd2030a 100644
--- a/articles/gun-1.0.0-rc.1/index.html
+++ b/articles/gun-1.0.0-rc.1/index.html
@@ -106,6 +106,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/gun-1.0.0/index.html b/articles/gun-1.0.0/index.html
index 6667201b..386d72ad 100644
--- a/articles/gun-1.0.0/index.html
+++ b/articles/gun-1.0.0/index.html
@@ -105,6 +105,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/gun-1.2.0/index.html b/articles/gun-1.2.0/index.html
index 4afaf9e0..2f5663fa 100644
--- a/articles/gun-1.2.0/index.html
+++ b/articles/gun-1.2.0/index.html
@@ -105,6 +105,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/gun-1.3.0/index.html b/articles/gun-1.3.0/index.html
index 7a85e2f0..f4a0adc0 100644
--- a/articles/gun-1.3.0/index.html
+++ b/articles/gun-1.3.0/index.html
@@ -103,6 +103,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/gun-2.0.0-pre.1/index.html b/articles/gun-2.0.0-pre.1/index.html
index bb61eeae..1ec8170d 100644
--- a/articles/gun-2.0.0-pre.1/index.html
+++ b/articles/gun-2.0.0-pre.1/index.html
@@ -110,6 +110,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/gun-2.0.0-pre.2/index.html b/articles/gun-2.0.0-pre.2/index.html
new file mode 100644
index 00000000..6afcd8bd
--- /dev/null
+++ b/articles/gun-2.0.0-pre.2/index.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Gun 2.0 pre-release 2</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li class="active"><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents">
+<div class="container">
+<div class="row">
+<div class="span9 maincol">
+
+<article class="blog_item">
+<header>
+ <h1 class="lined-header"><span>Gun 2.0 pre-release 2</span></h1>
+ <p class="date">
+ <span class="year">2019</span>
+ <span class="day-month">27 Sep</span>
+ </p>
+</header>
+
+<p>Gun <code>2.0.0-pre.2</code> has been released!</p>
+<p>The second pre-release version of Gun 2.0 has been released! Gun 2.0 adds a ton of features along with a small number of breaking changes.</p>
+<p>The main highlight of this pre-release is the support for a pluggable cookie store mechanism. Gun 2.0 comes with a cookie store engine that can automatically process cookies and store them to and retrieve them from a pluggable backend.</p>
+<p>Gun 2.0 comes with the <code>gun_cookies_list</code> backend which can be enabled via the new <code>cookie_store</code> option. This backend will keep cookies in-memory on a per-connection basis and without any persistence built-in. It should however be easy to create a backend on top of this one to add persistence or share the cookie store backend between multiple connections should that be necessary.</p>
+<p>The cookie store engine implements the RFC6265bis draft that will become a proper RFC in the nearby future and includes all the most recent improvements to cookies that modern browsers have implemented. Gun is not a browser however so some features were skipped (at least for now): there is no support for setting cookies from the Erlang side; and there is no SameSite checks because Gun does not have a concept of a &quot;browsing context&quot;.</p>
+<p>Please consult the <a href="/articles/gun-2.0.0-pre.1/">announcement for the first pre-release</a> for information about other Gun 2.0 features.</p>
+<p>Gun 2.0 currently requires Erlang/OTP 22 or above and is tested and supported on Linux, FreeBSD, macOS and Windows.</p>
+<p>A complete list of changes can be found in the migration guide: <a href="https://ninenines.eu/docs/en/gun/2.0/guide/migrating_from_1.3/">Migrating from Gun 1.3 to 2.0</a>.</p>
+<p>I will have more free time available for consulting or for paid open source development starting from next week. If you are interested, drop me an email at <a href="mailto:[email protected]">[email protected]</a>. A feature that may be useful for some of you could be for example an implementation for the &quot;Happy Eyeballs&quot; mechanism (RFC 8305) as this would allow faster connections to servers on dual IPv4 and IPv6 environments.</p>
+<p>You can donate to this project via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to pay for additional servers for testing.</p>
+<p>As usual, feedback is appreciated, and issues or questions should be sent via Github tickets. Thanks!</p>
+
+
+</article>
+</div>
+
+<div class="span3 sidecol">
+<h3>More articles</h3>
+<ul id="articles-nav" class="extra_margin">
+
+
+
+
+ <li><a href="https://ninenines.eu/articles/merry-christmas-2019/">Merry Christmas 2019: New Beginnings</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/github-sponsors/">GitHub Sponsors</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.7.0/">Cowboy 2.7</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.1/">Gun 2.0 pre-release 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Ranch 2.0 release candidate 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/joe_the_rubber_duck/">Joe Armstrong the rubber duck</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/merry-christmas-2018/">Merry Christmas 2018: A Recap</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.6.0/">Cowboy 2.6</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-1.7.0/">Ranch 1.7</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.5.0/">Cowboy 2.5</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-1.3.0/">Gun 1.3</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-1.2.0/">Gun 1.2</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-1.6.0/">Ranch 1.6</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-1.0.0/">Gun 1.0</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/asciideck/">Asciideck: Asciidoc for Erlang</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-1.0.0-rc.1/">Gun 1.0 release candidate 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.4.0/">Cowboy 2.4</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.3.0/">Cowboy 2.3</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.2.0/">Cowboy 2.2</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.1.0/">Cowboy 2.1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.0.0/">Cowboy 2.0</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.2/">Cowboy 2.0 release candidate 2</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.1/">Cowboy 2.0 release candidate 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don&#39;t let it crash</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-pre.4/">Cowboy 2.0 pre-release 4</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ml-archives/">Mailing list archived</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/website-update/">Website update</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlang-validate-utf8/">Validating UTF-8 binaries with Erlang</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/the-story-so-far/">The story so far</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy2-qs/">Cowboy 2.0 and query strings</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/january-2014-status/">January 2014 status</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/farwest-funded/">Farwest got funded!</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlang.mk-and-relx/">Build Erlang releases with Erlang.mk and Relx</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlang-scalability/">Erlang Scalability</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.3-atomic-expressions/">Xerl: atomic expressions</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.2-two-modules/">Xerl: two modules</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></li>
+
+
+</ul>
+
+<h3>Feedback</h3>
+<p>Feel free to <a href="mailto:[email protected]">email us</a>
+if you found any mistake or need clarification on any of the
+articles.</p>
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
diff --git a/articles/index.html b/articles/index.html
index 6d41883f..8470effe 100644
--- a/articles/index.html
+++ b/articles/index.html
@@ -138,6 +138,25 @@ Before listing the features please note that this pre-release includes a fix for
<article class="blog_item">
<header>
+ <h2><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></h2>
+ <p class="date">
+ <span class="year">2019</span>
+ <span class="day-month">27 Sep</span>
+ </p>
+ </header>
+
+ <p>Gun 2.0.0-pre.2 has been released!
+The second pre-release version of Gun 2.0 has been released! Gun 2.0 adds a ton of features along with a small number of breaking changes.
+The main highlight of this pre-release is the support for a pluggable cookie store mechanism. Gun 2.0 comes with a cookie store engine that can automatically process cookies and store them to and retrieve them from a pluggable backend.
+Gun 2.</p>
+
+ <p style="text-align:right">
+ <a class="read_more" href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Read More</a>
+ </p>
+ </article>
+
+ <article class="blog_item">
+ <header>
<h2><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></h2>
<p class="date">
<span class="year">2019</span>
@@ -416,24 +435,6 @@ As usual, feedback is appreciated, and issues should be reported by opening a ti
</p>
</article>
- <article class="blog_item">
- <header>
- <h2><a href="https://ninenines.eu/articles/cowboy-2.2.0/">Cowboy 2.2</a></h2>
- <p class="date">
- <span class="year">2017</span>
- <span class="day-month">13 Dec</span>
- </p>
- </header>
-
- <p>Cowboy 2.2.0 has been released!
-This release focused on adding features required for writing gRPC servers and on completing test suites for the core HTTP RFCs.
-The cowboy_req:stream_trailers/2 function has been added. It terminates the streamed response by adding some trailer field values. This feature is required for gRPC. The max_skip_body_length option was added. It controls how much of the request body we are willing to skip to get to the next request for HTTP/1.</p>
-
- <p style="text-align:right">
- <a class="read_more" href="https://ninenines.eu/articles/cowboy-2.2.0/">Read More</a>
- </p>
- </article>
-
<nav class="pagination" role="pagination">
diff --git a/articles/index.xml b/articles/index.xml
index ca212dc5..1eec93ed 100644
--- a/articles/index.xml
+++ b/articles/index.xml
@@ -55,6 +55,18 @@ Before listing the features please note that this pre-release includes a fix for
</item>
<item>
+ <title>Gun 2.0 pre-release 2</title>
+ <link>https://ninenines.eu/articles/gun-2.0.0-pre.2/</link>
+ <pubDate>Fri, 27 Sep 2019 07:00:00 +0100</pubDate>
+
+ <guid>https://ninenines.eu/articles/gun-2.0.0-pre.2/</guid>
+ <description>Gun 2.0.0-pre.2 has been released!
+The second pre-release version of Gun 2.0 has been released! Gun 2.0 adds a ton of features along with a small number of breaking changes.
+The main highlight of this pre-release is the support for a pluggable cookie store mechanism. Gun 2.0 comes with a cookie store engine that can automatically process cookies and store them to and retrieve them from a pluggable backend.
+Gun 2.</description>
+ </item>
+
+ <item>
<title>Erlang meetup: 10 septembre 2019</title>
<link>https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/</link>
<pubDate>Thu, 22 Aug 2019 07:00:00 +0100</pubDate>
diff --git a/articles/january-2014-status/index.html b/articles/january-2014-status/index.html
index 11f0ee89..d9b04868 100644
--- a/articles/january-2014-status/index.html
+++ b/articles/january-2014-status/index.html
@@ -131,6 +131,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/joe_the_rubber_duck/index.html b/articles/joe_the_rubber_duck/index.html
index e5e73c6e..68831670 100644
--- a/articles/joe_the_rubber_duck/index.html
+++ b/articles/joe_the_rubber_duck/index.html
@@ -105,6 +105,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/merry-christmas-2018/index.html b/articles/merry-christmas-2018/index.html
index e5828080..0a079da2 100644
--- a/articles/merry-christmas-2018/index.html
+++ b/articles/merry-christmas-2018/index.html
@@ -112,6 +112,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/merry-christmas-2019/index.html b/articles/merry-christmas-2019/index.html
index f817ed33..c98f0e56 100644
--- a/articles/merry-christmas-2019/index.html
+++ b/articles/merry-christmas-2019/index.html
@@ -108,6 +108,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/ml-archives/index.html b/articles/ml-archives/index.html
index 98eab7b0..e6766ffb 100644
--- a/articles/ml-archives/index.html
+++ b/articles/ml-archives/index.html
@@ -102,6 +102,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/on-open-source/index.html b/articles/on-open-source/index.html
index 5892d05a..4ecd7c04 100644
--- a/articles/on-open-source/index.html
+++ b/articles/on-open-source/index.html
@@ -114,6 +114,10 @@ much left to look at today</a>. This was followed by a <a href="https://github.c
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/page/2/index.html b/articles/page/2/index.html
index cc841b06..83d0b456 100644
--- a/articles/page/2/index.html
+++ b/articles/page/2/index.html
@@ -67,6 +67,24 @@
<article class="blog_item">
<header>
+ <h2><a href="https://ninenines.eu/articles/cowboy-2.2.0/">Cowboy 2.2</a></h2>
+ <p class="date">
+ <span class="year">2017</span>
+ <span class="day-month">13 Dec</span>
+ </p>
+ </header>
+
+ <p>Cowboy 2.2.0 has been released!
+This release focused on adding features required for writing gRPC servers and on completing test suites for the core HTTP RFCs.
+The cowboy_req:stream_trailers/2 function has been added. It terminates the streamed response by adding some trailer field values. This feature is required for gRPC. The max_skip_body_length option was added. It controls how much of the request body we are willing to skip to get to the next request for HTTP/1.</p>
+
+ <p style="text-align:right">
+ <a class="read_more" href="https://ninenines.eu/articles/cowboy-2.2.0/">Read More</a>
+ </p>
+ </article>
+
+ <article class="blog_item">
+ <header>
<h2><a href="https://ninenines.eu/articles/cowboy-2.1.0/">Cowboy 2.1</a></h2>
<p class="date">
<span class="year">2017</span>
@@ -408,24 +426,6 @@ There is two steps to building a release. First you need to build the various OT
</p>
</article>
- <article class="blog_item">
- <header>
- <h2><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></h2>
- <p class="date">
- <span class="year">2013</span>
- <span class="day-month">25 Mar</span>
- </p>
- </header>
-
- <p>Today we will start the work on the intermediate module that will be used to run the code for the expressions found in our file&apos;s body, replacing our interpreter.
-This is what we want to have when all the work is done:
-xerl -&gt; tokens -&gt; AST -&gt; intermediate -&gt; cerl Today we will perform this work only on the atomic integer expression however, so we will not build any module at the end.</p>
-
- <p style="text-align:right">
- <a class="read_more" href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Read More</a>
- </p>
- </article>
-
<nav class="pagination" role="pagination">
diff --git a/articles/page/3/index.html b/articles/page/3/index.html
index e0a1751b..3e2823bd 100644
--- a/articles/page/3/index.html
+++ b/articles/page/3/index.html
@@ -67,6 +67,24 @@
<article class="blog_item">
<header>
+ <h2><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></h2>
+ <p class="date">
+ <span class="year">2013</span>
+ <span class="day-month">25 Mar</span>
+ </p>
+ </header>
+
+ <p>Today we will start the work on the intermediate module that will be used to run the code for the expressions found in our file&apos;s body, replacing our interpreter.
+This is what we want to have when all the work is done:
+xerl -&gt; tokens -&gt; AST -&gt; intermediate -&gt; cerl Today we will perform this work only on the atomic integer expression however, so we will not build any module at the end.</p>
+
+ <p style="text-align:right">
+ <a class="read_more" href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Read More</a>
+ </p>
+ </article>
+
+ <article class="blog_item">
+ <header>
<h2><a href="https://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></h2>
<p class="date">
<span class="year">2013</span>
diff --git a/articles/ranch-1.3/index.html b/articles/ranch-1.3/index.html
index abf57d4c..04613274 100644
--- a/articles/ranch-1.3/index.html
+++ b/articles/ranch-1.3/index.html
@@ -143,6 +143,10 @@ Primary key fingerprint<font color="#990000">:</font> F19F 189C ECC7 <font color
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/ranch-1.6.0/index.html b/articles/ranch-1.6.0/index.html
index 575e71d0..9c010b0f 100644
--- a/articles/ranch-1.6.0/index.html
+++ b/articles/ranch-1.6.0/index.html
@@ -105,6 +105,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/ranch-1.7.0/index.html b/articles/ranch-1.7.0/index.html
index 0f019950..bf271b86 100644
--- a/articles/ranch-1.7.0/index.html
+++ b/articles/ranch-1.7.0/index.html
@@ -104,6 +104,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/ranch-2.0.0-rc.1/index.html b/articles/ranch-2.0.0-rc.1/index.html
index cca446ca..0f5fdc39 100644
--- a/articles/ranch-2.0.0-rc.1/index.html
+++ b/articles/ranch-2.0.0-rc.1/index.html
@@ -113,6 +113,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/ranch-ftp/index.html b/articles/ranch-ftp/index.html
index 4ed3f275..e50e79ac 100644
--- a/articles/ranch-ftp/index.html
+++ b/articles/ranch-ftp/index.html
@@ -245,6 +245,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/the-elephant-in-the-room/index.html b/articles/the-elephant-in-the-room/index.html
index c80c938e..e749180d 100644
--- a/articles/the-elephant-in-the-room/index.html
+++ b/articles/the-elephant-in-the-room/index.html
@@ -127,6 +127,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/the-story-so-far/index.html b/articles/the-story-so-far/index.html
index b5f0ab48..c4eaf40d 100644
--- a/articles/the-story-so-far/index.html
+++ b/articles/the-story-so-far/index.html
@@ -118,6 +118,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/tictactoe/index.html b/articles/tictactoe/index.html
index d89b3410..fabfbd88 100644
--- a/articles/tictactoe/index.html
+++ b/articles/tictactoe/index.html
@@ -150,6 +150,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/website-update/index.html b/articles/website-update/index.html
index ff5acbf7..fb124edc 100644
--- a/articles/website-update/index.html
+++ b/articles/website-update/index.html
@@ -107,6 +107,10 @@
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/xerl-0.1-empty-modules/index.html b/articles/xerl-0.1-empty-modules/index.html
index f6de0a9a..ae45e72d 100644
--- a/articles/xerl-0.1-empty-modules/index.html
+++ b/articles/xerl-0.1-empty-modules/index.html
@@ -185,6 +185,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/xerl-0.2-two-modules/index.html b/articles/xerl-0.2-two-modules/index.html
index 6911bb8b..cc54cbf8 100644
--- a/articles/xerl-0.2-two-modules/index.html
+++ b/articles/xerl-0.2-two-modules/index.html
@@ -213,6 +213,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/xerl-0.3-atomic-expressions/index.html b/articles/xerl-0.3-atomic-expressions/index.html
index ca567e38..b49559d1 100644
--- a/articles/xerl-0.3-atomic-expressions/index.html
+++ b/articles/xerl-0.3-atomic-expressions/index.html
@@ -182,6 +182,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/xerl-0.4-expression-separator/index.html b/articles/xerl-0.4-expression-separator/index.html
index 85116189..5abedc72 100644
--- a/articles/xerl-0.4-expression-separator/index.html
+++ b/articles/xerl-0.4-expression-separator/index.html
@@ -134,6 +134,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/articles/xerl-0.5-intermediate-module/index.html b/articles/xerl-0.5-intermediate-module/index.html
index 3c724986..3c9c2fc6 100644
--- a/articles/xerl-0.5-intermediate-module/index.html
+++ b/articles/xerl-0.5-intermediate-module/index.html
@@ -178,6 +178,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
diff --git a/docs/en/cowlib/2.8/manual/cow_cookie.parse_cookie/index.html b/docs/en/cowlib/2.8/manual/cow_cookie.parse_cookie/index.html
index 25e3b2cc..cfb7dabe 100644
--- a/docs/en/cowlib/2.8/manual/cow_cookie.parse_cookie/index.html
+++ b/docs/en/cowlib/2.8/manual/cow_cookie.parse_cookie/index.html
@@ -128,6 +128,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
<li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
</ul>
diff --git a/docs/en/cowlib/2.8/manual/cow_cookie.setcookie/index.html b/docs/en/cowlib/2.8/manual/cow_cookie.setcookie/index.html
index 090481ac..9c12c18d 100644
--- a/docs/en/cowlib/2.8/manual/cow_cookie.setcookie/index.html
+++ b/docs/en/cowlib/2.8/manual/cow_cookie.setcookie/index.html
@@ -138,6 +138,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
<li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
</ul>
diff --git a/docs/en/cowlib/2.8/manual/cow_cookie/index.html b/docs/en/cowlib/2.8/manual/cow_cookie/index.html
index 1b8a3a40..6ab9cda6 100644
--- a/docs/en/cowlib/2.8/manual/cow_cookie/index.html
+++ b/docs/en/cowlib/2.8/manual/cow_cookie/index.html
@@ -143,6 +143,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
<li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
</ul>
diff --git a/docs/en/cowlib/2.8/manual/cowlib_app/index.html b/docs/en/cowlib/2.8/manual/cowlib_app/index.html
index 2251b562..75322d42 100644
--- a/docs/en/cowlib/2.8/manual/cowlib_app/index.html
+++ b/docs/en/cowlib/2.8/manual/cowlib_app/index.html
@@ -119,6 +119,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
<li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
</ul>
diff --git a/docs/en/cowlib/2.8/manual/index.html b/docs/en/cowlib/2.8/manual/index.html
index 57057316..587d783f 100644
--- a/docs/en/cowlib/2.8/manual/index.html
+++ b/docs/en/cowlib/2.8/manual/index.html
@@ -119,6 +119,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
<li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
</ul>
diff --git a/docs/en/cowlib/2.9/manual/cow_cookie.cookie/index.html b/docs/en/cowlib/2.9/manual/cow_cookie.cookie/index.html
new file mode 100644
index 00000000..c18b41a4
--- /dev/null
+++ b/docs/en/cowlib/2.9/manual/cow_cookie.cookie/index.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: cow_cookie:cookie(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>cow_cookie:cookie(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>cow_cookie:cookie - Generate a cookie header</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">cookie</font></b>(<font color="#009900">Cookies</font>) <font color="#990000">-&gt;</font> <b><font color="#000000">iolist</font></b>()
+
+<font color="#009900">Cookies</font> <font color="#990000">::</font> [{<font color="#009900">Name</font> <font color="#990000">::</font> <b><font color="#000000">iodata</font></b>(), <font color="#009900">Value</font> <font color="#990000">::</font> <b><font color="#000000">iodata</font></b>()}]</tt></pre>
+</div></div>
+<p>Generate a cookie header.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Cookies</dt>
+<dd><p>A list of pairs of cookie name and value.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An iolist with the generated cookie header value.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.9</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Generate a cookie header</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Cookie</font> <font color="#990000">=</font> <b><font color="#000000">cow_cookie:cookie</font></b>([{<font color="#990000">&lt;&lt;</font><font color="#FF0000">"sessionid"</font><font color="#990000">&gt;&gt;</font>, <font color="#009900">ID</font>}])<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../cow_cookie">cow_cookie(3)</a>, <a href="../cow_cookie.parse_cookie">cow_cookie:parse_cookie(3)</a>, <a href="../cow_cookie.parse_set_cookie">cow_cookie:parse_set_cookie(3)</a>, <a href="../cow_cookie.setcookie">cow_cookie:setcookie(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Cowlib
+ 2.9
+ Function Reference
+
+</h3>
+
+<ul>
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
+ <li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/index.html b/docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/index.html
new file mode 100644
index 00000000..089b5599
--- /dev/null
+++ b/docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/index.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: cow_cookie:parse_cookie(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>cow_cookie:parse_cookie(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>cow_cookie:parse_cookie - Parse a cookie header</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">parse_cookie</font></b>(<font color="#009900">Cookie</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>())
+ <font color="#990000">-&gt;</font> [{<b><font color="#000080">binary</font></b>(), <b><font color="#000080">binary</font></b>()}]</tt></pre>
+</div></div>
+<p>Parse a cookie header.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Cookie</dt>
+<dd><p>The cookie header value.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>A list of cookie name/value pairs is returned on success.</p>
+<p>An exception is thrown in the event of a parse error.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.9</strong>: Fixes to the parser may lead to potential incompatibilities. A cookie name starting with <code>$</code> is no longer ignored. A cookie without a <code>=</code> will be parsed as the value of the cookie named <code>&lt;&lt;&gt;&gt;</code> (empty name).
+</li>
+<li><strong>1.0</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Parse a cookie header</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Cookies</font> <font color="#990000">=</font> <b><font color="#000000">cow_cookie:parse_cookie</font></b>(<font color="#009900">CookieHd</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../cow_cookie">cow_cookie(3)</a>, <a href="../cow_cookie.parse_set_cookie">cow_cookie:parse_set_cookie(3)</a>, <a href="../cow_cookie.cookie">cow_cookie:cookie(3)</a>, <a href="../cow_cookie.setcookie">cow_cookie:setcookie(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Cowlib
+ 2.9
+ Function Reference
+
+</h3>
+
+<ul>
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
+ <li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/index.html b/docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/index.html
new file mode 100644
index 00000000..ec50d655
--- /dev/null
+++ b/docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/index.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: cow_cookie:parse_set_cookie(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>cow_cookie:parse_set_cookie(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>cow_cookie:parse_set_cookie - Parse a set-cookie header</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">parse_set_cookie</font></b>(<font color="#009900">SetCookie</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Name</font>, <font color="#009900">Value</font>, <font color="#009900">Attrs</font>} | <font color="#FF6600">ignore</font>
+
+<font color="#009900">Name</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>()
+<font color="#009900">Value</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>()
+<font color="#009900">Attrs</font> <font color="#990000">::</font> <b><font color="#000000">cow_cookie:cookie_attrs</font></b>()</tt></pre>
+</div></div>
+<p>Parse a set-cookie header.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>SetCookie</dt>
+<dd><p>The set-cookie header value.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An <code>ok</code> tuple with the cookie name, value and attributes is returned on success.</p>
+<p>An atom <code>ignore</code> is returned when the cookie has both an empty name and an empty value, and must be ignored.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.9</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Parse a cookie header</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#0000FF">case</font></b> <b><font color="#000000">cow_cookie:parse_set_cookie</font></b>(<font color="#009900">SetCookieHd</font>) <b><font color="#0000FF">of</font></b>
+ {<font color="#FF6600">ok</font>, <font color="#009900">Name</font>, <font color="#009900">Value</font>, <font color="#009900">Attrs</font>} <font color="#990000">-&gt;</font>
+ <b><font color="#000000">cookie_engine_set_cookie</font></b>(<font color="#009900">Name</font>, <font color="#009900">Value</font>, <font color="#009900">Attrs</font>);
+ <font color="#FF6600">ignore</font> <font color="#990000">-&gt;</font>
+ <b><font color="#000000">do_nothing</font></b>()
+<b><font color="#0000FF">end</font></b><font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../cow_cookie">cow_cookie(3)</a>, <a href="../cow_cookie.parse_cookie">cow_cookie:parse_cookie(3)</a>, <a href="../cow_cookie.cookie">cow_cookie:cookie(3)</a>, <a href="../cow_cookie.setcookie">cow_cookie:setcookie(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Cowlib
+ 2.9
+ Function Reference
+
+</h3>
+
+<ul>
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
+ <li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/cowlib/2.9/manual/cow_cookie.setcookie/index.html b/docs/en/cowlib/2.9/manual/cow_cookie.setcookie/index.html
new file mode 100644
index 00000000..1e68718d
--- /dev/null
+++ b/docs/en/cowlib/2.9/manual/cow_cookie.setcookie/index.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: cow_cookie:setcookie(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>cow_cookie:setcookie(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>cow_cookie:setcookie - Generate a set-cookie header</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">setcookie</font></b>(<font color="#009900">Name</font> <font color="#990000">::</font> <b><font color="#000000">iodata</font></b>(),
+ <font color="#009900">Value</font> <font color="#990000">::</font> <b><font color="#000000">iodata</font></b>(),
+ <font color="#009900">Opts</font> <font color="#990000">::</font> <b><font color="#000000">cow_cookie:cookie_opts</font></b>())
+ <font color="#990000">-&gt;</font> <b><font color="#000000">iolist</font></b>()</tt></pre>
+</div></div>
+<p>Generate a set-cookie header.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Name</dt>
+<dd><p>Cookie name.</p>
+</dd>
+<dt>Value</dt>
+<dd><p>Cookie value.</p>
+</dd>
+<dt>Opts</dt>
+<dd><p>Options added to the set-cookie header as attributes.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An iolist with the generated set-cookie header value.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.0</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Generate a set-cookie header</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">SetCookie</font> <font color="#990000">=</font> <b><font color="#000000">cow_cookie:setcookie</font></b>(<font color="#990000">&lt;&lt;</font><font color="#FF0000">"sessionid"</font><font color="#990000">&gt;&gt;</font>, <font color="#009900">ID</font>, #{
+ <font color="#0000FF">http_only</font> <font color="#990000">=&gt;</font> <font color="#000080">true</font>,
+ <font color="#0000FF">secure</font> <font color="#990000">=&gt;</font> <font color="#000080">true</font>
+})<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../cow_cookie">cow_cookie(3)</a>, <a href="../cow_cookie.parse_cookie">cow_cookie:parse_cookie(3)</a>, <a href="../cow_cookie.parse_set_cookie">cow_cookie:parse_set_cookie(3)</a>, <a href="../cow_cookie.cookie">cow_cookie:cookie(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Cowlib
+ 2.9
+ Function Reference
+
+</h3>
+
+<ul>
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
+ <li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/cowlib/2.9/manual/cow_cookie/index.html b/docs/en/cowlib/2.9/manual/cow_cookie/index.html
new file mode 100644
index 00000000..ccfb687b
--- /dev/null
+++ b/docs/en/cowlib/2.9/manual/cow_cookie/index.html
@@ -0,0 +1,223 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: cow_cookie(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>cow_cookie(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>cow_cookie - Cookies</p>
+<h2 id="_description">Description</h2>
+<p>The module <code>cow_cookie</code> provides functions for parsing and manipulating cookie headers.</p>
+<h2 id="_exports">Exports</h2>
+<ul><li><a href="../cow_cookie.parse_cookie">cow_cookie:parse_cookie(3)</a> - Parse a cookie header
+</li>
+<li><a href="../cow_cookie.parse_set_cookie">cow_cookie:parse_set_cookie(3)</a> - Parse a set-cookie header
+</li>
+<li><a href="../cow_cookie.cookie">cow_cookie:cookie(3)</a> - Generate a cookie header
+</li>
+<li><a href="../cow_cookie.setcookie">cow_cookie:setcookie(3)</a> - Generate a set-cookie header
+</li>
+</ul>
+<h2 id="_types">Types</h2>
+<h3 id="_cookie_attrs">cookie_attrs()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">cookie_attrs</font></b>() <font color="#990000">::</font> #{
+ <font color="#0000FF">expires</font> <font color="#990000">=&gt;</font> <b><font color="#000000">calendar:datetime</font></b>(),
+ <font color="#0000FF">max_age</font> <font color="#990000">=&gt;</font> <b><font color="#000000">calendar:datetime</font></b>(),
+ <font color="#0000FF">domain</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#0000FF">path</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#0000FF">secure</font> <font color="#990000">=&gt;</font> <font color="#000080">true</font>,
+ <font color="#0000FF">http_only</font> <font color="#990000">=&gt;</font> <font color="#000080">true</font>,
+ <font color="#0000FF">same_site</font> <font color="#990000">=&gt;</font> <font color="#FF6600">strict</font> | <font color="#FF6600">lax</font>
+}</tt></pre>
+</div></div>
+<p>Cookie attributes parsed from the set-cookie header. The attributes must be passed as-is to a cookie store engine for processing, along with the cookie name and value. More information about the attributes can be found in <a href="https://tools.ietf.org/html/rfc6265">RFC 6265</a>.</p>
+<h3 id="_cookie_opts">cookie_opts()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">cookie_opts</font></b>() <font color="#990000">::</font> #{
+ <font color="#0000FF">domain</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#0000FF">http_only</font> <font color="#990000">=&gt;</font> <b><font color="#000000">boolean</font></b>(),
+ <font color="#0000FF">max_age</font> <font color="#990000">=&gt;</font> <b><font color="#000000">non_neg_integer</font></b>(),
+ <font color="#0000FF">path</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#0000FF">same_site</font> <font color="#990000">=&gt;</font> <font color="#FF6600">lax</font> | <font color="#FF6600">strict</font>,
+ <font color="#0000FF">secure</font> <font color="#990000">=&gt;</font> <b><font color="#000000">boolean</font></b>()
+}</tt></pre>
+</div></div>
+<p>Options for the set-cookie header. They are added to the header as attributes. More information about the options can be found in <a href="https://tools.ietf.org/html/rfc6265">RFC 6265</a>.</p>
+<p>The following options are defined:</p>
+<dl><dt>domain</dt>
+<dd><p>Hosts to which the cookie will be sent. By default it will only be sent to the origin server.</p>
+</dd>
+<dt>http_only</dt>
+<dd><p>Whether the cookie should be restricted to HTTP requests, or it should also be exposed to other APIs, for example Javascript. By default there are no restrictions.</p>
+</dd>
+<dt>max_age</dt>
+<dd><p>Maximum lifetime of the cookie, in seconds. By default the cookie is kept for the duration of the session.</p>
+</dd>
+<dt>path</dt>
+<dd><p>Path to which the cookie will be sent. By default it will be sent to the current &quot;directory&quot; of the effective request URI.</p>
+</dd>
+<dt>same_site</dt>
+<dd><p>Whether the cookie should be sent along with cross-site requests. This header is currently non-standard but is in the process of being standardized. Please refer to the <a href="https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7">RFC 6265 (bis) draft</a> for details.</p>
+</dd>
+<dt>secure</dt>
+<dd><p>Whether the cookie should be sent only on secure channels (for example TLS). Note that this does not guarantee the integrity of the cookie, only its confidentiality during transfer. By default there are no restrictions.</p>
+</dd>
+</dl>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.9</strong>: The <code>cookie_attrs</code> type was added.
+</li>
+<li><strong>1.0</strong>: Module introduced.
+</li>
+</ul>
+<h2 id="_see_also">See also</h2>
+<p><a href="..">cowlib(7)</a>, <a href="https://tools.ietf.org/html/rfc6265">RFC 6265</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Cowlib
+ 2.9
+ Function Reference
+
+</h3>
+
+<ul>
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
+ <li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/cowlib/2.9/manual/cowlib_app/index.html b/docs/en/cowlib/2.9/manual/cowlib_app/index.html
new file mode 100644
index 00000000..1c43ad84
--- /dev/null
+++ b/docs/en/cowlib/2.9/manual/cowlib_app/index.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: cowlib(7)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>cowlib(7)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>cowlib - Support library for manipulating Web protocols</p>
+<h2 id="_description">Description</h2>
+<p>Cowlib provides libraries for parsing and building messages for various Web protocols, including HTTP/1.1, HTTP/2 and Websocket.</p>
+<p>It is optimized for completeness rather than speed. No value is ignored, they are all returned.</p>
+<h2 id="_modules">Modules</h2>
+<ul><li><a href="../cow_cookie">cow_cookie(3)</a> - Cookies
+</li>
+</ul>
+<h2 id="_dependencies">Dependencies</h2>
+<ul><li>crypto - Crypto functions
+</li>
+</ul>
+<p>All these applications must be started before the <code>cowlib</code> application. To start Cowlib and all dependencies at once:</p>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">application:ensure_all_started</font></b>(<font color="#FF6600">cowlib</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_environment">Environment</h2>
+<p>The <code>cowlib</code> application does not define any application environment configuration parameters.</p>
+<h2 id="_see_also">See also</h2>
+<p><a href="../cowboy">cowboy(7)</a>, <a href="../gun">gun(7)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Cowlib
+ 2.9
+ Function Reference
+
+</h3>
+
+<ul>
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
+ <li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/cowlib/2.9/manual/index.html b/docs/en/cowlib/2.9/manual/index.html
new file mode 100644
index 00000000..33e04ecc
--- /dev/null
+++ b/docs/en/cowlib/2.9/manual/index.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Cowlib Function Reference</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Cowlib Function Reference</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>cowlib - Support library for manipulating Web protocols</p>
+<h2 id="_description">Description</h2>
+<p>Cowlib provides libraries for parsing and building messages for various Web protocols, including HTTP/1.1, HTTP/2 and Websocket.</p>
+<p>It is optimized for completeness rather than speed. No value is ignored, they are all returned.</p>
+<h2 id="_modules">Modules</h2>
+<ul><li><a href="cow_cookie">cow_cookie(3)</a> - Cookies
+</li>
+</ul>
+<h2 id="_dependencies">Dependencies</h2>
+<ul><li>crypto - Crypto functions
+</li>
+</ul>
+<p>All these applications must be started before the <code>cowlib</code> application. To start Cowlib and all dependencies at once:</p>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">application:ensure_all_started</font></b>(<font color="#FF6600">cowlib</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_environment">Environment</h2>
+<p>The <code>cowlib</code> application does not define any application environment configuration parameters.</p>
+<h2 id="_see_also">See also</h2>
+<p><a href="cowboy_app">cowboy(7)</a>, <a href="gun_app">gun(7)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Cowlib
+ 2.9
+ Function Reference
+
+</h3>
+
+<ul>
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/cowlib/2.9/manual">2.9</a></li>
+
+ <li><a href="/docs/en/cowlib/2.8/manual">2.8</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/gun/2.0/guide/introduction.asciidoc b/docs/en/gun/2.0/guide/introduction.asciidoc
index dfbe1e30..a54a8d1d 100644
--- a/docs/en/gun/2.0/guide/introduction.asciidoc
+++ b/docs/en/gun/2.0/guide/introduction.asciidoc
@@ -14,13 +14,7 @@ protocols is required in order to read this guide.
Gun is tested and supported on Linux, FreeBSD, Windows and OSX.
-Gun is developed for Erlang/OTP 20.0 and newer.
-
-Note that Gun will not work on the Windows build of Erlang/OTP 20.3
-due to a bug in Erlang/OTP's stdlib application. The ticket number
-for this bug is OTP-13995 and it was fixed in the patch release
-OTP-20.3.2. Replacing the `gen_statem.beam` file on an 20.3
-installation is enough to fix the issue.
+Gun is developed for Erlang/OTP 22.0 and newer.
=== License
diff --git a/docs/en/gun/2.0/guide/introduction/index.html b/docs/en/gun/2.0/guide/introduction/index.html
index 1b833e46..6f8f0006 100644
--- a/docs/en/gun/2.0/guide/introduction/index.html
+++ b/docs/en/gun/2.0/guide/introduction/index.html
@@ -68,8 +68,7 @@
<p>Knowledge of Erlang, but also of the HTTP/1.1, HTTP/2 and Websocket protocols is required in order to read this guide.</p>
<h2 id="_supported_platforms">Supported platforms</h2>
<p>Gun is tested and supported on Linux, FreeBSD, Windows and OSX.</p>
-<p>Gun is developed for Erlang/OTP 20.0 and newer.</p>
-<p>Note that Gun will not work on the Windows build of Erlang/OTP 20.3 due to a bug in Erlang/OTP&apos;s stdlib application. The ticket number for this bug is OTP-13995 and it was fixed in the patch release OTP-20.3.2. Replacing the <code>gen_statem.beam</code> file on an 20.3 installation is enough to fix the issue.</p>
+<p>Gun is developed for Erlang/OTP 22.0 and newer.</p>
<h2 id="_license">License</h2>
<p>Gun uses the ISC License.</p>
<div class="listingblock"><div class="content"><pre>Copyright (c) 2013-2019, Loïc Hoguin &lt;[email protected]&gt;
diff --git a/docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc b/docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc
index 1e2b8943..a20a0582 100644
--- a/docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc
+++ b/docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc
@@ -19,10 +19,21 @@ much more advanced.
The Gun connection process is now implemented using `gen_statem`.
-Gun 2.0 requires Erlang/OTP 20.0 or greater.
+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
@@ -76,8 +87,7 @@ Gun 2.0 requires Erlang/OTP 20.0 or greater.
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.
+* Headers can now be provided as a map.
* Header names may now be provided as binary, string or atom.
@@ -218,3 +228,21 @@ Gun 2.0 requires Erlang/OTP 20.0 or greater.
* 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.
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 de7015dc..6d9a22a9 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
@@ -66,9 +66,11 @@
<p>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.</p>
<p>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.</p>
<p>The Gun connection process is now implemented using <code>gen_statem</code>.</p>
-<p>Gun 2.0 requires Erlang/OTP 20.0 or greater.</p>
+<p>Gun 2.0 requires Erlang/OTP 22.0 or greater.</p>
<h2 id="_features_added">Features added</h2>
-<ul><li>Graceful shutdown has been implemented. Graceful shutdown can be initiated on the client side by calling the new function <code>gun:shutdown/1</code> 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 <code>closing_timeout</code> option controls how long we are willing to wait at most before closing the connection.
+<ul><li>Cookie store support has been added. The <code>cookie_store</code> option allows configuring the cookie store backend. The <code>gun_cookies</code> module provides functions to help implementing such a backend. Gun comes with the backend <code>gun_cookies_list</code> 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 &quot;browsing context&quot;.
+</li>
+<li>Graceful shutdown has been implemented. Graceful shutdown can be initiated on the client side by calling the new function <code>gun:shutdown/1</code> 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 <code>closing_timeout</code> option controls how long we are willing to wait at most before closing the connection.
</li>
<li>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&apos;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.
</li>
@@ -84,7 +86,7 @@
</li>
<li>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&apos;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.
</li>
-<li>Headers can now be provided as a map. Header names may now be provided as binary, string or atom.
+<li>Headers can now be provided as a map.
</li>
<li>Header names may now be provided as binary, string or atom.
</li>
@@ -166,6 +168,16 @@
</li>
<li>An invalid stream reference was sent on failed Websocket upgrade responses. This has been corrected.
</li>
+<li>HTTP/2 connection preface errors are now properly detected and propagated in the <code>gun_down</code> message to the connection owner as well as the exit reason of the Gun process.
+</li>
+<li>HTTP/2 connection preface errors now provide a different human readable error when the data received looks like an HTTP/1.x response.
+</li>
+<li>HTTP/2 connection errors were missing the human readable reason in the <code>gun_error</code> message. This has been corrected.
+</li>
+<li>Fix the host and :authority (pseudo-)headers when connecting to an IPv6 address given as a tuple. They were lacking the surrounding brackets.
+</li>
+<li>Fix a crash in gun:info/1 when the socket was closed before we call Transport:sockname/1.
+</li>
</ul>
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 4721d81f..6fbaaf8b 100644
--- a/docs/en/gun/2.0/manual/gun.info/index.html
+++ b/docs/en/gun/2.0/manual/gun.info/index.html
@@ -81,7 +81,8 @@ http://www.gnu.org/software/src-highlite -->
<font color="#0000FF">sock_port</font> <font color="#990000">=&gt;</font> <b><font color="#000000">inet:port_number</font></b>(),
<font color="#0000FF">origin_host</font> <font color="#990000">=&gt;</font> <b><font color="#000000">inet:hostname</font></b>() | <b><font color="#000000">inet:ip_address</font></b>(),
<font color="#0000FF">origin_port</font> <font color="#990000">=&gt;</font> <b><font color="#000000">inet:port_number</font></b>(),
- <font color="#0000FF">intermediaries</font> <font color="#990000">=&gt;</font> [<font color="#009900">Intermediary</font>]
+ <font color="#0000FF">intermediaries</font> <font color="#990000">=&gt;</font> [<font color="#009900">Intermediary</font>],
+ <font color="#0000FF">cookie_store</font> <font color="#990000">=&gt;</font> <b><font color="#000000">gun_cookies:cookie_store</font></b>()
}
<font color="#009900">Intermediary</font> <font color="#990000">::</font> #{
<font color="#0000FF">type</font> <font color="#990000">=&gt;</font> <font color="#FF6600">connect</font> | <font color="#FF6600">socks5</font>,
@@ -100,7 +101,7 @@ http://www.gnu.org/software/src-highlite -->
<h2 id="_return_value">Return value</h2>
<p>A map is returned containing various informations about the connection.</p>
<h2 id="_changelog">Changelog</h2>
-<ul><li><strong>2.0</strong>: The value <code>owner</code> was added.
+<ul><li><strong>2.0</strong>: The values <code>owner</code> and <code>cookie_store</code> were added.
</li>
<li><strong>1.3</strong>: The values <code>socket</code>, <code>transport</code>, <code>protocol</code>, <code>origin_host</code>, <code>origin_port</code> and <code>intermediaries</code> were added.
</li>
diff --git a/docs/en/gun/2.0/manual/gun/index.html b/docs/en/gun/2.0/manual/gun/index.html
index a59704f5..2ee49896 100644
--- a/docs/en/gun/2.0/manual/gun/index.html
+++ b/docs/en/gun/2.0/manual/gun/index.html
@@ -286,6 +286,7 @@ http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000000">opts</font></b>() <font color="#990000">::</font> #{
<font color="#0000FF">connect_timeout</font> <font color="#990000">=&gt;</font> <b><font color="#000000">timeout</font></b>(),
+ <font color="#0000FF">cookie_store</font> <font color="#990000">=&gt;</font> <b><font color="#000000">gun_cookies:store</font></b>(),
<font color="#0000FF">domain_lookup_timeout</font> <font color="#990000">=&gt;</font> <b><font color="#000000">timeout</font></b>(),
<font color="#0000FF">http_opts</font> <font color="#990000">=&gt;</font> <b><font color="#000000">http_opts</font></b>(),
<font color="#0000FF">http2_opts</font> <font color="#990000">=&gt;</font> <b><font color="#000000">http2_opts</font></b>(),
@@ -307,6 +308,10 @@ http://www.gnu.org/software/src-highlite -->
<dl><dt>connect_timeout (infinity)</dt>
<dd><p>Connection timeout.</p>
</dd>
+<dt>cookie_store - see below</dt>
+<dd><p>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.</p>
+<p>By default no cookie store will be used.</p>
+</dd>
<dt>domain_lookup_timeout (infinity)</dt>
<dd><p>Domain lookup timeout.</p>
</dd>
@@ -484,7 +489,9 @@ http://www.gnu.org/software/src-highlite -->
</dl>
<!-- @todo Document default_protocol and user_opts.-->
<h2 id="_changelog">Changelog</h2>
-<ul><li><strong>2.0</strong>: The types <code>protocols()</code> and <code>socks_opts()</code> 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.
+<ul><li><strong>2.0</strong>: The option <code>cookie_store</code> was added. It can be used to configure a cookie store that Gun will use automatically.
+</li>
+<li><strong>2.0</strong>: The types <code>protocols()</code> and <code>socks_opts()</code> 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.
</li>
<li><strong>2.0</strong>: The <code>connect_timeout</code> option has been split into three options: <code>domain_lookup_timeout</code>, <code>connect_timeout</code> and when applicable <code>tls_handshake_timeout</code>.
</li>
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 cc05d96c..128f9228 100644
--- a/docs/en/gun/2.0/manual/gun_app/index.html
+++ b/docs/en/gun/2.0/manual/gun_app/index.html
@@ -70,6 +70,10 @@
<h2 id="_modules">Modules</h2>
<ul><li><a href="../gun">gun(3)</a> - Asynchronous HTTP client
</li>
+<li><a href="../gun_cookies">gun_cookies(3)</a> - Cookie store engine
+</li>
+<li><a href="../gun_cookies_list">gun_cookies_list(3)</a> - Cookie store backend: in-memory, per connection
+</li>
</ul>
<h2 id="_dependencies">Dependencies</h2>
<ul><li><a href="../cowlib">cowlib(7)</a> - Support library for manipulating Web protocols
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
new file mode 100644
index 00000000..a67600e6
--- /dev/null
+++ b/docs/en/gun/2.0/manual/gun_cookies.domain_match/index.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: gun_cookies:domain_match(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>gun_cookies:domain_match(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>gun_cookies:domain_match - Cookie domain match</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">domain_match</font></b>(<font color="#009900">String</font>, <font color="#009900">DomainString</font>) <font color="#990000">-&gt;</font> <b><font color="#000000">boolean</font></b>()
+
+<font color="#009900">String</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>()
+<font color="#009900">DomainString</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>()</tt></pre>
+</div></div>
+<p>Cookie domain match.</p>
+<p>This function can be used when implementing the <code>set_cookie_secure_match</code> callback of a cookie store.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>String</dt>
+<dd><p>The string to match.</p>
+</dd>
+<dt>DomainString</dt>
+<dd><p>The domain string that will be matched against.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>Returns <code>true</code> when <code>String</code> domain-matches <code>DomainString</code>, and <code>false</code> otherwise.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Perform a domain match</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Match</font> <font color="#990000">=</font> <b><font color="#000000">gun_cookies:domain_match</font></b>(<font color="#009900">Domain</font>, <font color="#009900">CookieDomain</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../gun_cookies">gun_cookies(3)</a>, <a href="../gun_cookies.path_match">gun_cookies:path_match(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Gun
+ 2.0
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/gun/2.0/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/gun/2.0/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/gun/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/gun/1.3/manual">1.3</a></li>
+
+ <li><a href="/docs/en/gun/1.2/manual">1.2</a></li>
+
+ <li><a href="/docs/en/gun/1.1/manual">1.1</a></li>
+
+ <li><a href="/docs/en/gun/1.0/manual">1.0</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
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
new file mode 100644
index 00000000..930286a7
--- /dev/null
+++ b/docs/en/gun/2.0/manual/gun_cookies.path_match/index.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: gun_cookies:path_match(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>gun_cookies:path_match(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>gun_cookies:path_match - Cookie path match</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">path_match</font></b>(<font color="#009900">ReqPath</font>, <font color="#009900">CookiePath</font>) <font color="#990000">-&gt;</font> <b><font color="#000000">boolean</font></b>()
+
+<font color="#009900">ReqPath</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>()
+<font color="#009900">CookiePath</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>()</tt></pre>
+</div></div>
+<p>Cookie path match.</p>
+<p>This function can be used when implementing the <code>set_cookie_secure_match</code> callback of a cookie store.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>ReqPath</dt>
+<dd><p>The request path to match.</p>
+</dd>
+<dt>CookiePath</dt>
+<dd><p>The cookie path that will be matched against.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>Returns <code>true</code> when <code>ReqPath</code> path-matches <code>CookiePath</code>, and <code>false</code> otherwise.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Perform a path match</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Match</font> <font color="#990000">=</font> <b><font color="#000000">gun_cookies:path_match</font></b>(<font color="#009900">ReqPath</font>, <font color="#009900">CookiePath</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../gun_cookies">gun_cookies(3)</a>, <a href="../gun_cookies.domain_match">gun_cookies:domain_match(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Gun
+ 2.0
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/gun/2.0/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/gun/2.0/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/gun/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/gun/1.3/manual">1.3</a></li>
+
+ <li><a href="/docs/en/gun/1.2/manual">1.2</a></li>
+
+ <li><a href="/docs/en/gun/1.1/manual">1.1</a></li>
+
+ <li><a href="/docs/en/gun/1.0/manual">1.0</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/gun/2.0/manual/gun_cookies/index.html b/docs/en/gun/2.0/manual/gun_cookies/index.html
new file mode 100644
index 00000000..4d75dab8
--- /dev/null
+++ b/docs/en/gun/2.0/manual/gun_cookies/index.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: gun_cookies(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>gun_cookies(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>gun_cookies - Cookie store engine</p>
+<h2 id="_description">Description</h2>
+<p>The <code>gun_cookies</code> 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.</p>
+<h2 id="_callbacks">Callbacks</h2>
+<p>Cookie store backends implement the following interface. Functions are organized by theme: initialization, querying, storing and garbage collecting:</p>
+<h3 id="_init">init</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">init</font></b>(<font color="#009900">Opts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()) <font color="#990000">-&gt;</font> <b><font color="#000000">gun_cookies:store</font></b>()</tt></pre>
+</div></div>
+<p>Initialize the cookie store.</p>
+<h3 id="_query">query</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#0000FF">query</font></b>(<font color="#009900">State</font>, <font color="#009900">URI</font>) <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, [<font color="#009900">Cookie</font>], <font color="#009900">State</font>}
+
+<font color="#009900">URI</font> <font color="#990000">::</font> <b><font color="#000000">uri_string:uri_map</font></b>()
+<font color="#009900">Cookie</font> <font color="#990000">::</font> <b><font color="#000000">gun_cookies:cookie</font></b>()
+<font color="#009900">State</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>Query the store for the cookies for the given URI.</p>
+<h3 id="_set_cookie_secure_match">set_cookie_secure_match</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">set_cookie_secure_match</font></b>(<font color="#009900">State</font>, <font color="#009900">Match</font>) <font color="#990000">-&gt;</font> <font color="#FF6600">match</font> | <font color="#FF6600">nomatch</font>
+
+<font color="#009900">State</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()
+<font color="#009900">Match</font> <font color="#990000">::</font> #{
+ <font color="#FF6600">name</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>(),
+<i><font color="#9A1900">% secure_only := true,</font></i>
+ <font color="#FF6600">domain</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#FF6600">path</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>()
+}</tt></pre>
+</div></div>
+<p>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.</p>
+<p>The <code>secure_only</code> attribute is implied, it is not actually passed in the argument.</p>
+<h3 id="_set_cookie_get_exact_match">set_cookie_get_exact_match</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">set_cookie_get_exact_match</font></b>(<font color="#009900">State</font>, <font color="#009900">Match</font>)
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <b><font color="#000000">gun_cookies:cookie</font></b>(), <font color="#009900">State</font>} | <font color="#FF6600">error</font>
+
+<font color="#009900">State</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()
+<font color="#009900">Match</font> <font color="#990000">::</font> #{
+ <font color="#FF6600">name</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#FF6600">domain</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#FF6600">host_only</font> <font color="#990000">:=</font> <b><font color="#000000">boolean</font></b>(),
+ <font color="#FF6600">path</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>()
+}</tt></pre>
+</div></div>
+<p>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.</p>
+<p>When a cookie is found, it must be returned so that it gets updated. When nothing is found a new cookie will be stored.</p>
+<h3 id="_store">store</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">store</font></b>(<font color="#009900">State</font>, <b><font color="#000000">gun_cookies:cookie</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">State</font>} | {<font color="#FF6600">error</font>, <b><font color="#000000">any</font></b>()}
+
+<font color="#009900">State</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>Unconditionally store the cookie into the cookie store.</p>
+<h3 id="_gc">gc</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">gc</font></b>(<font color="#009900">State</font>) <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">State</font>}
+
+<font color="#009900">State</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>Remove all cookies from the cookie store that are expired.</p>
+<p>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.</p>
+<h3 id="_session_gc">session_gc</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">session_gc</font></b>(<font color="#009900">State</font>) <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">State</font>}
+
+<font color="#009900">State</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>Remove all cookies from the cookie store that have the <code>persistent</code> flag set to <code>false</code>.</p>
+<h2 id="_exports">Exports</h2>
+<ul><li><a href="../gun_cookies.domain_match">gun_cookies:domain_match(3)</a> - Cookie domain match
+</li>
+<li><a href="../gun_cookies.path_match">gun_cookies:path_match(3)</a> - Cookie path match
+</li>
+</ul>
+<h2 id="_types">Types</h2>
+<h3 id="_cookie">cookie()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">cookie</font></b>() <font color="#990000">::</font> #{
+ <font color="#FF6600">name</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#FF6600">value</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#FF6600">domain</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#FF6600">path</font> <font color="#990000">:=</font> <b><font color="#000080">binary</font></b>(),
+ <font color="#FF6600">creation_time</font> <font color="#990000">:=</font> <b><font color="#000000">calendar:datetime</font></b>(),
+ <font color="#FF6600">last_access_time</font> <font color="#990000">:=</font> <b><font color="#000000">calendar:datetime</font></b>(),
+ <font color="#FF6600">expiry_time</font> <font color="#990000">:=</font> <b><font color="#000000">calendar:datetime</font></b>() | <font color="#FF6600">infinity</font>,
+ <font color="#FF6600">persistent</font> <font color="#990000">:=</font> <b><font color="#000000">boolean</font></b>(),
+ <font color="#FF6600">host_only</font> <font color="#990000">:=</font> <b><font color="#000000">boolean</font></b>(),
+ <font color="#FF6600">secure_only</font> <font color="#990000">:=</font> <b><font color="#000000">boolean</font></b>(),
+ <font color="#FF6600">http_only</font> <font color="#990000">:=</font> <b><font color="#000000">boolean</font></b>(),
+ <font color="#FF6600">same_site</font> <font color="#990000">:=</font> <font color="#FF6600">strict</font> | <font color="#FF6600">lax</font> | <font color="#FF6600">none</font>
+}</tt></pre>
+</div></div>
+<p>A cookie.</p>
+<p>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.</p>
+<h3 id="_store">store()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">store</font></b>() <font color="#990000">::</font> {<b><font color="#000000">module</font></b>(), <font color="#009900">StoreState</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()}</tt></pre>
+</div></div>
+<p>The cookie store.</p>
+<p>This is a tuple containing the cookie store backend module and its current state.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: Module introduced.
+</li>
+</ul>
+<h2 id="_see_also">See also</h2>
+<p><a href="..">gun(7)</a>, <a href="../gun_cookies_list">gun_cookies_list(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Gun
+ 2.0
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/gun/2.0/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/gun/2.0/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/gun/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/gun/1.3/manual">1.3</a></li>
+
+ <li><a href="/docs/en/gun/1.2/manual">1.2</a></li>
+
+ <li><a href="/docs/en/gun/1.1/manual">1.1</a></li>
+
+ <li><a href="/docs/en/gun/1.0/manual">1.0</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
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
new file mode 100644
index 00000000..c7eea531
--- /dev/null
+++ b/docs/en/gun/2.0/manual/gun_cookies_list/index.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: gun_cookies_list(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>gun_cookies_list(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>gun_cookies_list - Cookie store backend: in-memory, per connection</p>
+<h2 id="_description">Description</h2>
+<p>The <code>gun_cookies_list</code> module implements a cookie store backend that keeps all the cookie data in-memory and tied to a specific connection.</p>
+<p>It is possible to implement a custom backend on top of <code>gun_cookies_list</code> in order to add persistence or sharing properties.</p>
+<h2 id="_exports">Exports</h2>
+<p>This module implements the callbacks defined in <a href="../gun_cookies">gun_cookies(3)</a>.</p>
+<h2 id="_types">Types</h2>
+<h3 id="_opts">opts()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">opts</font></b>() <font color="#990000">::</font> #{
+}</tt></pre>
+</div></div>
+<p>Cookie store backend options.</p>
+<p>There are currently no options available for this backend.</p>
+<!-- The default value is given next to the option name:-->
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: Module introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Open a connection with a cookie store configured</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#009900">ConnPid</font>} <font color="#990000">=</font> <b><font color="#000000">gun:open</font></b>(<font color="#009900">Host</font>, <font color="#009900">Port</font>, #{
+ <font color="#0000FF">cookie_store</font> <font color="#990000">=&gt;</font> <b><font color="#000000">gun_cookies_list:init</font></b>(#{})
+})</tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="..">gun(7)</a>, <a href="../gun_cookies">gun_cookies(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Gun
+ 2.0
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/gun/2.0/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/gun/2.0/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/gun/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/gun/1.3/manual">1.3</a></li>
+
+ <li><a href="/docs/en/gun/1.2/manual">1.2</a></li>
+
+ <li><a href="/docs/en/gun/1.1/manual">1.1</a></li>
+
+ <li><a href="/docs/en/gun/1.0/manual">1.0</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/gun/2.0/manual/index.html b/docs/en/gun/2.0/manual/index.html
index 0816163a..70ff07c7 100644
--- a/docs/en/gun/2.0/manual/index.html
+++ b/docs/en/gun/2.0/manual/index.html
@@ -70,6 +70,10 @@
<h2 id="_modules">Modules</h2>
<ul><li><a href="gun">gun(3)</a> - Asynchronous HTTP client
</li>
+<li><a href="gun_cookies">gun_cookies(3)</a> - Cookie store engine
+</li>
+<li><a href="gun_cookies_list">gun_cookies_list(3)</a> - Cookie store backend: in-memory, per connection
+</li>
</ul>
<h2 id="_dependencies">Dependencies</h2>
<ul><li><a href="cowlib_app">cowlib(7)</a> - Support library for manipulating Web protocols
diff --git a/docs/en/ranch/2.0/guide/internals.asciidoc b/docs/en/ranch/2.0/guide/internals.asciidoc
index c5bde58f..600920fc 100644
--- a/docs/en/ranch/2.0/guide/internals.asciidoc
+++ b/docs/en/ranch/2.0/guide/internals.asciidoc
@@ -10,6 +10,11 @@ matter to you. Generic benchmarks found on the web may or may not
be of use to you, you can never know until you benchmark your own
system.
+A third party dive into the internals of Ranch is available should
+you be interested: https://baozi.technology/ranch-under-the-hood/[Ranch: what's under the hood?]
+We make no claims with regard to its freshness or accuracy but this
+is a nice document to read along this section.
+
=== Architecture
Ranch is an OTP application.
diff --git a/docs/en/ranch/2.0/guide/internals/index.html b/docs/en/ranch/2.0/guide/internals/index.html
index 936a4c41..ca802f1f 100644
--- a/docs/en/ranch/2.0/guide/internals/index.html
+++ b/docs/en/ranch/2.0/guide/internals/index.html
@@ -64,6 +64,7 @@
<p>This chapter may not apply to embedded Ranch as embedding allows you to use an architecture specific to your application, which may or may not be compatible with the description of the Ranch application.</p>
<p>Note that for everything related to efficiency and performance, you should perform the benchmarks yourself to get the numbers that matter to you. Generic benchmarks found on the web may or may not be of use to you, you can never know until you benchmark your own system.</p>
+<p>A third party dive into the internals of Ranch is available should you be interested: <a href="https://baozi.technology/ranch-under-the-hood/">Ranch: what&apos;s under the hood?</a> We make no claims with regard to its freshness or accuracy but this is a nice document to read along this section.</p>
<h2 id="_architecture">Architecture</h2>
<p>Ranch is an OTP application.</p>
<p>Like all OTP applications, Ranch has a top supervisor. It is responsible for supervising the <code>ranch_server</code> process and all the listeners that will be started.</p>
diff --git a/docs/index.html b/docs/index.html
index 04b15dc2..0c91b60e 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -120,6 +120,11 @@
+ <li><a href="/docs/en/cowlib/2.9/manual">Cowlib 2.9 Function Reference</a></li>
+
+
+
+
<li><a href="/docs/en/cowlib/2.8/manual">Cowlib 2.8 Function Reference</a></li>
diff --git a/docs/index.xml b/docs/index.xml
index 622149bf..c18574d4 100644
--- a/docs/index.xml
+++ b/docs/index.xml
@@ -80,8 +80,9 @@ Copyright (c) 2013-2018, Loïc Hoguin &amp;lt;[email protected]&amp;gt; Permiss
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 20.0 and newer.
-Note that Gun will not work on the Windows build of Erlang/OTP 20.3 due to a bug in Erlang/OTP&amp;apos;s stdlib application.</description>
+Gun is developed for Erlang/OTP 22.0 and newer.
+License Gun uses the ISC License.
+Copyright (c) 2013-2019, Loïc Hoguin &amp;lt;[email protected]&amp;gt; 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.</description>
</item>
<item>
@@ -3097,6 +3098,30 @@ Exports cow_cookie:parse_cookie(3) - Parse a cookie header cow_cookie:setcookie
</item>
<item>
+ <title>cow_cookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie/</guid>
+ <description>Name cow_cookie - Cookies
+Description The module cow_cookie provides functions for parsing and manipulating cookie headers.
+Exports cow_cookie:parse_cookie(3) - Parse a cookie header cow_cookie:parse_set_cookie(3) - Parse a set-cookie header cow_cookie:cookie(3) - Generate a cookie header cow_cookie:setcookie(3) - Generate a set-cookie header Types cookie_attrs() cookie_attrs() :: #{ expires =&amp;gt; calendar:datetime(), max_age =&amp;gt; calendar:datetime(), domain =&amp;gt; binary(), path =&amp;gt; binary(), secure =&amp;gt; true, http_only =&amp;gt; true, same_site =&amp;gt; strict | lax } Cookie attributes parsed from the set-cookie header.</description>
+ </item>
+
+ <item>
+ <title>cow_cookie:cookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.cookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.cookie/</guid>
+ <description>Name cow_cookie:cookie - Generate a cookie header
+Description cookie(Cookies) -&amp;gt; iolist() Cookies :: [{Name :: iodata(), Value :: iodata()}] Generate a cookie header.
+Arguments Cookies A list of pairs of cookie name and value.
+ Return value An iolist with the generated cookie header value.
+Changelog 2.9: Function introduced. Examples Generate a cookie header Cookie = cow_cookie:cookie([{&amp;lt;&amp;lt;&#34;sessionid&#34;&amp;gt;&amp;gt;, ID}]). See also cow_cookie(3), cow_cookie:parse_cookie(3), cow_cookie:parse_set_cookie(3), cow_cookie:setcookie(3)</description>
+ </item>
+
+ <item>
<title>cow_cookie:parse_cookie(3)</title>
<link>https://ninenines.eu/docs/en/cowlib/2.8/manual/cow_cookie.parse_cookie/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -3111,6 +3136,33 @@ Changelog 1.0: Function introduced. Examples Parse a cookie header Cookies = c
</item>
<item>
+ <title>cow_cookie:parse_cookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/</guid>
+ <description>Name cow_cookie:parse_cookie - Parse a cookie header
+Description parse_cookie(Cookie :: binary()) -&amp;gt; [{binary(), binary()}] Parse a cookie header.
+Arguments Cookie The cookie header value.
+ Return value A list of cookie name/value pairs is returned on success.
+An exception is thrown in the event of a parse error.
+Changelog 2.9: Fixes to the parser may lead to potential incompatibilities. A cookie name starting with $ is no longer ignored.</description>
+ </item>
+
+ <item>
+ <title>cow_cookie:parse_set_cookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/</guid>
+ <description>Name cow_cookie:parse_set_cookie - Parse a set-cookie header
+Description parse_set_cookie(SetCookie :: binary()) -&amp;gt; {ok, Name, Value, Attrs} | ignore Name :: binary() Value :: binary() Attrs :: cow_cookie:cookie_attrs() Parse a set-cookie header.
+Arguments SetCookie The set-cookie header value.
+ Return value An ok tuple with the cookie name, value and attributes is returned on success.
+An atom ignore is returned when the cookie has both an empty name and an empty value, and must be ignored.</description>
+ </item>
+
+ <item>
<title>cow_cookie:setcookie(3)</title>
<link>https://ninenines.eu/docs/en/cowlib/2.8/manual/cow_cookie.setcookie/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -3126,6 +3178,21 @@ Changelog 1.0: Function introduced. Examples Generate a set-cookie header SetC
</item>
<item>
+ <title>cow_cookie:setcookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.setcookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.setcookie/</guid>
+ <description>Name cow_cookie:setcookie - Generate a set-cookie header
+Description setcookie(Name :: iodata(), Value :: iodata(), Opts :: cow_cookie:cookie_opts()) -&amp;gt; iolist() Generate a set-cookie header.
+Arguments Name Cookie name.
+ Value Cookie value.
+ Opts Options added to the set-cookie header as attributes.
+ Return value An iolist with the generated set-cookie header value.
+Changelog 1.0: Function introduced. Examples Generate a set-cookie header SetCookie = cow_cookie:setcookie(&amp;lt;&amp;lt;&#34;sessionid&#34;&amp;gt;&amp;gt;, ID, #{ http_only =&amp;gt; true, secure =&amp;gt; true }).</description>
+ </item>
+
+ <item>
<title>Cowboy Function Reference</title>
<link>https://ninenines.eu/docs/en/cowboy/2.2/manual/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -8387,6 +8454,18 @@ Modules cow_cookie(3) - Cookies Dependencies crypto - Crypto functions All t
</item>
<item>
+ <title>Cowlib Function Reference</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/</guid>
+ <description>Name cowlib - Support library for manipulating Web protocols
+Description Cowlib provides libraries for parsing and building messages for various Web protocols, including HTTP/1.1, HTTP/2 and Websocket.
+It is optimized for completeness rather than speed. No value is ignored, they are all returned.
+Modules cow_cookie(3) - Cookies Dependencies crypto - Crypto functions All these applications must be started before the cowlib application. To start Cowlib and all dependencies at once:</description>
+ </item>
+
+ <item>
<title>cowlib(7)</title>
<link>https://ninenines.eu/docs/en/cowlib/2.8/manual/cowlib_app/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -8399,6 +8478,18 @@ Modules cow_cookie(3) - Cookies Dependencies crypto - Crypto functions All t
</item>
<item>
+ <title>cowlib(7)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cowlib_app/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cowlib_app/</guid>
+ <description>Name cowlib - Support library for manipulating Web protocols
+Description Cowlib provides libraries for parsing and building messages for various Web protocols, including HTTP/1.1, HTTP/2 and Websocket.
+It is optimized for completeness rather than speed. No value is ignored, they are all returned.
+Modules cow_cookie(3) - Cookies Dependencies crypto - Crypto functions All these applications must be started before the cowlib application. To start Cowlib and all dependencies at once:</description>
+ </item>
+
+ <item>
<title>Gun Function Reference</title>
<link>https://ninenines.eu/docs/en/gun/1.0/manual/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -8455,7 +8546,7 @@ Modules gun(3) - Asynchronous HTTP client Dependencies cowlib(7) - Support lib
<description>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 gun(3) - Asynchronous HTTP client Dependencies cowlib(7) - Support library for manipulating Web protocols ssl - Secure communication over sockets All these applications must be started before the gun application.</description>
+Modules gun(3) - Asynchronous HTTP client gun_cookies(3) - Cookie store engine gun_cookies_list(3) - Cookie store backend: in-memory, per connection Dependencies cowlib(7) - Support library for manipulating Web protocols ssl - Secure communication over sockets All these applications must be started before the gun application.</description>
</item>
<item>
@@ -8620,7 +8711,7 @@ Modules gun(3) - Asynchronous HTTP client Dependencies cowlib(7) - Support lib
<description>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 gun(3) - Asynchronous HTTP client Dependencies cowlib(7) - Support library for manipulating Web protocols ssl - Secure communication over sockets All these applications must be started before the gun application.</description>
+Modules gun(3) - Asynchronous HTTP client gun_cookies(3) - Cookie store engine gun_cookies_list(3) - Cookie store backend: in-memory, per connection Dependencies cowlib(7) - Support library for manipulating Web protocols ssl - Secure communication over sockets All these applications must be started before the gun application.</description>
</item>
<item>
@@ -9330,7 +9421,7 @@ Description info(ConnPid) -&amp;gt; Info ConnPid :: pid() Info :: #{ socket =&am
<guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun.info/</guid>
<description>Name gun:info - Obtain information about the connection
-Description info(ConnPid) -&amp;gt; Info ConnPid :: pid() Info :: #{ owner =&amp;gt; pid(), socket =&amp;gt; inet:socket() | ssl:sslsocket(), transport =&amp;gt; tcp | tls, protocol =&amp;gt; http | http2 | socks | ws, sock_ip =&amp;gt; inet:ip_address(), sock_port =&amp;gt; inet:port_number(), origin_host =&amp;gt; inet:hostname() | inet:ip_address(), origin_port =&amp;gt; inet:port_number(), intermediaries =&amp;gt; [Intermediary] } Intermediary :: #{ type =&amp;gt; connect | socks5, host =&amp;gt; inet:hostname() | inet:ip_address(), port =&amp;gt; inet:port_number(), transport =&amp;gt; tcp | tls, protocol =&amp;gt; http | http2 | socks } Obtain information about the connection.</description>
+Description info(ConnPid) -&amp;gt; Info ConnPid :: pid() Info :: #{ owner =&amp;gt; pid(), socket =&amp;gt; inet:socket() | ssl:sslsocket(), transport =&amp;gt; tcp | tls, protocol =&amp;gt; http | http2 | socks | ws, sock_ip =&amp;gt; inet:ip_address(), sock_port =&amp;gt; inet:port_number(), origin_host =&amp;gt; inet:hostname() | inet:ip_address(), origin_port =&amp;gt; inet:port_number(), intermediaries =&amp;gt; [Intermediary], cookie_store =&amp;gt; gun_cookies:cookie_store() } Intermediary :: #{ type =&amp;gt; connect | socks5, host =&amp;gt; inet:hostname() | inet:ip_address(), port =&amp;gt; inet:port_number(), transport =&amp;gt; tcp | tls, protocol =&amp;gt; http | http2 | socks } Obtain information about the connection.</description>
</item>
<item>
@@ -9916,6 +10007,61 @@ HTTP/1.1 cannot handle Websocket and HTTP requests concurrently. The upgrade, if
</item>
<item>
+ <title>gun_cookies(3)</title>
+ <link>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies/</guid>
+ <description>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()) -&amp;gt; gun_cookies:store() Initialize the cookie store.</description>
+ </item>
+
+ <item>
+ <title>gun_cookies:domain_match(3)</title>
+ <link>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.domain_match/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.domain_match/</guid>
+ <description>Name gun_cookies:domain_match - Cookie domain match
+Description domain_match(String, DomainString) -&amp;gt; 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).</description>
+ </item>
+
+ <item>
+ <title>gun_cookies:path_match(3)</title>
+ <link>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.path_match/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.path_match/</guid>
+ <description>Name gun_cookies:path_match - Cookie path match
+Description path_match(ReqPath, CookiePath) -&amp;gt; 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).</description>
+ </item>
+
+ <item>
+ <title>gun_cookies_list(3)</title>
+ <link>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies_list/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies_list/</guid>
+ <description>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.</description>
+ </item>
+
+ <item>
<title>gun_data(3)</title>
<link>https://ninenines.eu/docs/en/gun/1.0/manual/gun_data/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
diff --git a/donate/index.html b/donate/index.html
index 9cd7de6c..04a4a669 100644
--- a/donate/index.html
+++ b/donate/index.html
@@ -712,6 +712,8 @@
+
+
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
@@ -2203,6 +2205,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
</div>
</div>
</div>
diff --git a/index.html b/index.html
index 74f49d9b..7a84443a 100644
--- a/index.html
+++ b/index.html
@@ -137,7 +137,7 @@
<a class="btn btn-large" href="https://github.com/ninenines/cowlib">Source Code</a>
- <a class="btn btn-large" href="/docs/en/cowlib/2.8/manual/">Manual</a>
+ <a class="btn btn-large" href="/docs/en/cowlib/2.9/manual/">Manual</a>
</p>
@@ -853,6 +853,8 @@
+
+
<p>Reward my work via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a> and<br/>GitHub will double the funds I receive!</p>
@@ -2328,6 +2330,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
</div></div>
</div>
diff --git a/index.xml b/index.xml
index 0adf185a..1ebe3942 100644
--- a/index.xml
+++ b/index.xml
@@ -81,8 +81,9 @@ Copyright (c) 2013-2018, Loïc Hoguin &amp;lt;[email protected]&amp;gt; Permiss
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 20.0 and newer.
-Note that Gun will not work on the Windows build of Erlang/OTP 20.3 due to a bug in Erlang/OTP&amp;apos;s stdlib application.</description>
+Gun is developed for Erlang/OTP 22.0 and newer.
+License Gun uses the ISC License.
+Copyright (c) 2013-2019, Loïc Hoguin &amp;lt;[email protected]&amp;gt; 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.</description>
</item>
<item>
@@ -3130,6 +3131,18 @@ Before listing the features please note that this pre-release includes a fix for
</item>
<item>
+ <title>Gun 2.0 pre-release 2</title>
+ <link>https://ninenines.eu/articles/gun-2.0.0-pre.2/</link>
+ <pubDate>Fri, 27 Sep 2019 07:00:00 +0100</pubDate>
+
+ <guid>https://ninenines.eu/articles/gun-2.0.0-pre.2/</guid>
+ <description>Gun 2.0.0-pre.2 has been released!
+The second pre-release version of Gun 2.0 has been released! Gun 2.0 adds a ton of features along with a small number of breaking changes.
+The main highlight of this pre-release is the support for a pluggable cookie store mechanism. Gun 2.0 comes with a cookie store engine that can automatically process cookies and store them to and retrieve them from a pluggable backend.
+Gun 2.</description>
+ </item>
+
+ <item>
<title>Erlang meetup: 10 septembre 2019</title>
<link>https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/</link>
<pubDate>Thu, 22 Aug 2019 07:00:00 +0100</pubDate>
@@ -3679,6 +3692,30 @@ Exports cow_cookie:parse_cookie(3) - Parse a cookie header cow_cookie:setcookie
</item>
<item>
+ <title>cow_cookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie/</guid>
+ <description>Name cow_cookie - Cookies
+Description The module cow_cookie provides functions for parsing and manipulating cookie headers.
+Exports cow_cookie:parse_cookie(3) - Parse a cookie header cow_cookie:parse_set_cookie(3) - Parse a set-cookie header cow_cookie:cookie(3) - Generate a cookie header cow_cookie:setcookie(3) - Generate a set-cookie header Types cookie_attrs() cookie_attrs() :: #{ expires =&amp;gt; calendar:datetime(), max_age =&amp;gt; calendar:datetime(), domain =&amp;gt; binary(), path =&amp;gt; binary(), secure =&amp;gt; true, http_only =&amp;gt; true, same_site =&amp;gt; strict | lax } Cookie attributes parsed from the set-cookie header.</description>
+ </item>
+
+ <item>
+ <title>cow_cookie:cookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.cookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.cookie/</guid>
+ <description>Name cow_cookie:cookie - Generate a cookie header
+Description cookie(Cookies) -&amp;gt; iolist() Cookies :: [{Name :: iodata(), Value :: iodata()}] Generate a cookie header.
+Arguments Cookies A list of pairs of cookie name and value.
+ Return value An iolist with the generated cookie header value.
+Changelog 2.9: Function introduced. Examples Generate a cookie header Cookie = cow_cookie:cookie([{&amp;lt;&amp;lt;&#34;sessionid&#34;&amp;gt;&amp;gt;, ID}]). See also cow_cookie(3), cow_cookie:parse_cookie(3), cow_cookie:parse_set_cookie(3), cow_cookie:setcookie(3)</description>
+ </item>
+
+ <item>
<title>cow_cookie:parse_cookie(3)</title>
<link>https://ninenines.eu/docs/en/cowlib/2.8/manual/cow_cookie.parse_cookie/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -3693,6 +3730,33 @@ Changelog 1.0: Function introduced. Examples Parse a cookie header Cookies = c
</item>
<item>
+ <title>cow_cookie:parse_cookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/</guid>
+ <description>Name cow_cookie:parse_cookie - Parse a cookie header
+Description parse_cookie(Cookie :: binary()) -&amp;gt; [{binary(), binary()}] Parse a cookie header.
+Arguments Cookie The cookie header value.
+ Return value A list of cookie name/value pairs is returned on success.
+An exception is thrown in the event of a parse error.
+Changelog 2.9: Fixes to the parser may lead to potential incompatibilities. A cookie name starting with $ is no longer ignored.</description>
+ </item>
+
+ <item>
+ <title>cow_cookie:parse_set_cookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/</guid>
+ <description>Name cow_cookie:parse_set_cookie - Parse a set-cookie header
+Description parse_set_cookie(SetCookie :: binary()) -&amp;gt; {ok, Name, Value, Attrs} | ignore Name :: binary() Value :: binary() Attrs :: cow_cookie:cookie_attrs() Parse a set-cookie header.
+Arguments SetCookie The set-cookie header value.
+ Return value An ok tuple with the cookie name, value and attributes is returned on success.
+An atom ignore is returned when the cookie has both an empty name and an empty value, and must be ignored.</description>
+ </item>
+
+ <item>
<title>cow_cookie:setcookie(3)</title>
<link>https://ninenines.eu/docs/en/cowlib/2.8/manual/cow_cookie.setcookie/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -3708,6 +3772,21 @@ Changelog 1.0: Function introduced. Examples Generate a set-cookie header SetC
</item>
<item>
+ <title>cow_cookie:setcookie(3)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.setcookie/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.setcookie/</guid>
+ <description>Name cow_cookie:setcookie - Generate a set-cookie header
+Description setcookie(Name :: iodata(), Value :: iodata(), Opts :: cow_cookie:cookie_opts()) -&amp;gt; iolist() Generate a set-cookie header.
+Arguments Name Cookie name.
+ Value Cookie value.
+ Opts Options added to the set-cookie header as attributes.
+ Return value An iolist with the generated set-cookie header value.
+Changelog 1.0: Function introduced. Examples Generate a set-cookie header SetCookie = cow_cookie:setcookie(&amp;lt;&amp;lt;&#34;sessionid&#34;&amp;gt;&amp;gt;, ID, #{ http_only =&amp;gt; true, secure =&amp;gt; true }).</description>
+ </item>
+
+ <item>
<title>Cowboy Function Reference</title>
<link>https://ninenines.eu/docs/en/cowboy/2.2/manual/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -8969,6 +9048,18 @@ Modules cow_cookie(3) - Cookies Dependencies crypto - Crypto functions All t
</item>
<item>
+ <title>Cowlib Function Reference</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/</guid>
+ <description>Name cowlib - Support library for manipulating Web protocols
+Description Cowlib provides libraries for parsing and building messages for various Web protocols, including HTTP/1.1, HTTP/2 and Websocket.
+It is optimized for completeness rather than speed. No value is ignored, they are all returned.
+Modules cow_cookie(3) - Cookies Dependencies crypto - Crypto functions All these applications must be started before the cowlib application. To start Cowlib and all dependencies at once:</description>
+ </item>
+
+ <item>
<title>cowlib(7)</title>
<link>https://ninenines.eu/docs/en/cowlib/2.8/manual/cowlib_app/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -8981,6 +9072,18 @@ Modules cow_cookie(3) - Cookies Dependencies crypto - Crypto functions All t
</item>
<item>
+ <title>cowlib(7)</title>
+ <link>https://ninenines.eu/docs/en/cowlib/2.9/manual/cowlib_app/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/cowlib/2.9/manual/cowlib_app/</guid>
+ <description>Name cowlib - Support library for manipulating Web protocols
+Description Cowlib provides libraries for parsing and building messages for various Web protocols, including HTTP/1.1, HTTP/2 and Websocket.
+It is optimized for completeness rather than speed. No value is ignored, they are all returned.
+Modules cow_cookie(3) - Cookies Dependencies crypto - Crypto functions All these applications must be started before the cowlib application. To start Cowlib and all dependencies at once:</description>
+ </item>
+
+ <item>
<title>Gun Function Reference</title>
<link>https://ninenines.eu/docs/en/gun/1.0/manual/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -9037,7 +9140,7 @@ Modules gun(3) - Asynchronous HTTP client Dependencies cowlib(7) - Support lib
<description>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 gun(3) - Asynchronous HTTP client Dependencies cowlib(7) - Support library for manipulating Web protocols ssl - Secure communication over sockets All these applications must be started before the gun application.</description>
+Modules gun(3) - Asynchronous HTTP client gun_cookies(3) - Cookie store engine gun_cookies_list(3) - Cookie store backend: in-memory, per connection Dependencies cowlib(7) - Support library for manipulating Web protocols ssl - Secure communication over sockets All these applications must be started before the gun application.</description>
</item>
<item>
@@ -9202,7 +9305,7 @@ Modules gun(3) - Asynchronous HTTP client Dependencies cowlib(7) - Support lib
<description>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 gun(3) - Asynchronous HTTP client Dependencies cowlib(7) - Support library for manipulating Web protocols ssl - Secure communication over sockets All these applications must be started before the gun application.</description>
+Modules gun(3) - Asynchronous HTTP client gun_cookies(3) - Cookie store engine gun_cookies_list(3) - Cookie store backend: in-memory, per connection Dependencies cowlib(7) - Support library for manipulating Web protocols ssl - Secure communication over sockets All these applications must be started before the gun application.</description>
</item>
<item>
@@ -9912,7 +10015,7 @@ Description info(ConnPid) -&amp;gt; Info ConnPid :: pid() Info :: #{ socket =&am
<guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun.info/</guid>
<description>Name gun:info - Obtain information about the connection
-Description info(ConnPid) -&amp;gt; Info ConnPid :: pid() Info :: #{ owner =&amp;gt; pid(), socket =&amp;gt; inet:socket() | ssl:sslsocket(), transport =&amp;gt; tcp | tls, protocol =&amp;gt; http | http2 | socks | ws, sock_ip =&amp;gt; inet:ip_address(), sock_port =&amp;gt; inet:port_number(), origin_host =&amp;gt; inet:hostname() | inet:ip_address(), origin_port =&amp;gt; inet:port_number(), intermediaries =&amp;gt; [Intermediary] } Intermediary :: #{ type =&amp;gt; connect | socks5, host =&amp;gt; inet:hostname() | inet:ip_address(), port =&amp;gt; inet:port_number(), transport =&amp;gt; tcp | tls, protocol =&amp;gt; http | http2 | socks } Obtain information about the connection.</description>
+Description info(ConnPid) -&amp;gt; Info ConnPid :: pid() Info :: #{ owner =&amp;gt; pid(), socket =&amp;gt; inet:socket() | ssl:sslsocket(), transport =&amp;gt; tcp | tls, protocol =&amp;gt; http | http2 | socks | ws, sock_ip =&amp;gt; inet:ip_address(), sock_port =&amp;gt; inet:port_number(), origin_host =&amp;gt; inet:hostname() | inet:ip_address(), origin_port =&amp;gt; inet:port_number(), intermediaries =&amp;gt; [Intermediary], cookie_store =&amp;gt; gun_cookies:cookie_store() } Intermediary :: #{ type =&amp;gt; connect | socks5, host =&amp;gt; inet:hostname() | inet:ip_address(), port =&amp;gt; inet:port_number(), transport =&amp;gt; tcp | tls, protocol =&amp;gt; http | http2 | socks } Obtain information about the connection.</description>
</item>
<item>
@@ -10498,6 +10601,61 @@ HTTP/1.1 cannot handle Websocket and HTTP requests concurrently. The upgrade, if
</item>
<item>
+ <title>gun_cookies(3)</title>
+ <link>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies/</guid>
+ <description>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()) -&amp;gt; gun_cookies:store() Initialize the cookie store.</description>
+ </item>
+
+ <item>
+ <title>gun_cookies:domain_match(3)</title>
+ <link>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.domain_match/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.domain_match/</guid>
+ <description>Name gun_cookies:domain_match - Cookie domain match
+Description domain_match(String, DomainString) -&amp;gt; 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).</description>
+ </item>
+
+ <item>
+ <title>gun_cookies:path_match(3)</title>
+ <link>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.path_match/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.path_match/</guid>
+ <description>Name gun_cookies:path_match - Cookie path match
+Description path_match(ReqPath, CookiePath) -&amp;gt; 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).</description>
+ </item>
+
+ <item>
+ <title>gun_cookies_list(3)</title>
+ <link>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies_list/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies_list/</guid>
+ <description>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.</description>
+ </item>
+
+ <item>
<title>gun_data(3)</title>
<link>https://ninenines.eu/docs/en/gun/1.0/manual/gun_data/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
diff --git a/services/index.html b/services/index.html
index 75c79435..9ebe58f4 100644
--- a/services/index.html
+++ b/services/index.html
@@ -738,6 +738,8 @@
+
+
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
@@ -2229,6 +2231,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
</div>
</div>
</div>
diff --git a/sitemap.xml b/sitemap.xml
index 943ed347..c96a46a7 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1153,6 +1153,11 @@
</url>
<url>
+ <loc>https://ninenines.eu/articles/gun-2.0.0-pre.2/</loc>
+ <lastmod>2019-09-27T07:00:00+01:00</lastmod>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/</loc>
<lastmod>2019-08-22T07:00:00+01:00</lastmod>
</url>
@@ -1401,14 +1406,34 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie/</loc>
+ </url>
+
+ <url>
+ <loc>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.cookie/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowlib/2.8/manual/cow_cookie.parse_cookie/</loc>
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_cookie/</loc>
+ </url>
+
+ <url>
+ <loc>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.parse_set_cookie/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowlib/2.8/manual/cow_cookie.setcookie/</loc>
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/cowlib/2.9/manual/cow_cookie.setcookie/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowboy/2.2/manual/</loc>
</url>
@@ -3077,10 +3102,18 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/cowlib/2.9/manual/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowlib/2.8/manual/cowlib_app/</loc>
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/cowlib/2.9/manual/cowlib_app/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/</loc>
</url>
@@ -3597,6 +3630,22 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies/</loc>
+ </url>
+
+ <url>
+ <loc>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.domain_match/</loc>
+ </url>
+
+ <url>
+ <loc>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies.path_match/</loc>
+ </url>
+
+ <url>
+ <loc>https://ninenines.eu/docs/en/gun/2.0/manual/gun_cookies_list/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/gun/1.0/manual/gun_data/</loc>
</url>