aboutsummaryrefslogtreecommitdiffstats
path: root/src/gun_ws.erl
AgeCommit message (Collapse)Author
2020-11-02Initial implementation of Websocket over HTTP/2http2-websocketLoïc Hoguin
2020-10-21Fix cookie handling when tunnel and origin schemes mismatchLoïc Hoguin
The cookie_ignore_informational has been moved to http_opts and http2_opts. Also fix an issue when using 'protocols' in gun:open. When connecting via TLS the protocol's options were discarded.
2020-10-16Add or fix events inside or related to CONNECT tunnelsLoïc Hoguin
2020-10-07Default keepalive to infinity for all protocolsLoïc Hoguin
For HTTP/2 some servers are not fond of receiving pings, especially if there's no stream at the time. (particularly gRPC servers). This is an odd decision for sure. Rather than trying to accomodate for their logic the ping is no longer sent by default. For Websocket sending a ping is a new feature in Gun 2.0 so I'm just being conservative there.
2020-04-16Add tests for cookie_ignore_informational optionLoïc Hoguin
2019-09-26Remove UnprocessedStreams from the gun_down messageLoïc Hoguin
2019-09-26Add reply_to option to ws_upgrade; remove notowner entirelyLoïc Hoguin
The reply_to option is also propagated when we switch protocols.
2019-09-24Add auto-ping to Websocket and a silence_pings optionLoïc Hoguin
The auto-ping will at regular interval send a ping frame. The silence_pings option defaults to true. It can be set to false when the user needs to receive ping/pong frames.
2019-09-24Reject requests/data when using WebsocketLoïc Hoguin
2019-09-23Use the proper options type for socks/ws statesLoïc Hoguin
2019-09-22Rework state transitions resulting from from protocol changesLoïc Hoguin
2019-09-22Supports going through multiple Socks proxiesLoïc Hoguin
This commit also reworks the switch_protocol command. The `P | {P, Opts}` type is used here as well. This allows us to remove the code specific to Websocket. In addition a few new protocol functions allow us to declare what's the name of the options key for the protocol and what the capabilities are with regard to keepalive.
2019-09-05Implement graceful shutdownLoïc Hoguin
The graceful shutdown is implemented through a new 'closing' state. This state is entered under different circumstances depending on the protocol. The gun:shutdown/1 function is now implemented and documented. It allows shutting down the connection gracefully regardless of the current state of the connection and for all protocols. The behavior is entirely dependent on the protocol. For HTTP/1.1 the connection stays up only until after the current stream is complete; other streams are immediately canceled. For HTTP/2 a GOAWAY frame is sent and existing streams continue to be processed. The connection is closed after all streams are processed and the server's GOAWAY frame is received. For Websocket a close frame is sent. The connection is closed when receiving the server's close frame. In all cases the closing_timeout option defines how long we wait, as a maximum, before closing the connection after the graceful shutdown was started. The graceful shutdown is also initiated when the owner process goes away; when sending an HTTP/1.1 request with the connection: close header; when receiving an HTTP/1.1 response with the connection: close header; when receiving an HTTP/1.0 response without a connection header; when the server sends a GOAWAY HTTP/2 frame; or when we send or receive a Websocket close frame. Along with these changes, the gun:ws_send/2 function now accepts a list of frames as argument. Those frames may include a close frame that initiates the graceful shutdown.
2019-08-05Add flow controlLoïc Hoguin
Flow control is disabled by default. The initial flow value must be set to enable it (either for the entire connection or on a per-request basis). Flow applies to all HTTP streams as well as Websocket. HTTP/2 pushed streams receive the same value as their originating stream.
2019-07-15Add Websocket frames related eventsLoïc Hoguin
2019-06-02Add request_start, request_headers and request_end eventsLoïc Hoguin
2019-04-26Rename owner_gone into owner_downLoïc Hoguin
2019-01-03Update copyright yearsLoïc Hoguin
2018-12-31Ignore socket errors in gun_ws:close/2Loïc Hoguin
2018-12-19Convert the gun process to gen_statemLoïc Hoguin
2018-09-17Add HTTP/1.1 CONNECT supportLoïc Hoguin
Gun can now be used to connect through TCP HTTP/1.1 proxies using all supported protocols. It is also possible to create a tunnel through multiple proxies. Also updates Cowlib to 2.6.0.
2018-06-04Update copyright yearsLoïc Hoguin
2018-06-03Change messages to gun_upgrade and gun_ws with stream referenceLoïc Hoguin
2017-08-11Add missing Websocket clause detecting owner is goneLoïc Hoguin
2017-05-23add missing call to lists:usort/1Peter Morgan
2017-04-28Add 'user_opts' options for use in Websocket handlersLoïc Hoguin
2017-04-28Add Gun Websocket handlers and protocol supportLoïc Hoguin
This functionality can be used to implement custom protocols on top of Websocket, but may also be used to decode frame contents on the fly if necessary. The default_protocol option defines what module should be used when no protocol was selected. The protocols option is a list of key/value pairs used to select the handler depending on the protocol that the server accepted. The feature is currently experimental.
2015-04-10Add headers to gun_ws_upgrade messageLoïc Hoguin
Also improves the code and documentation about this message. It was incorrectly specified that a gun_ws_upgrade message could be sent on error; instead a gun_response is sent.
2015-04-10Add Websocket optionsLoïc Hoguin
Allow passing Websocket options through either open or ws_upgrade. Document ws_upgrade/4.
2015-04-10Make Dialyzer happyLoïc Hoguin
2015-04-09Add gun_up and gun_down messagesLoïc Hoguin
The flush(Pid) function was enhanced to also discard Websocket messages and the new up/down messages.
2015-03-12Add initial Websocket supportLoïc Hoguin
All autobahntestsuite tests pass including the permessage-deflate compression tests. Some of the tests pass in a non-strict fashion. They are testing for protocol errors and expect events to happen in a particular order, which is not respected by Gun. Gun fails earlier than is expected due to concurrent processing of frames. The implementation when error occurs during handshake is probably a bit rough at this point. The documentation is also incomplete and/or wrong at this time, though this is the general state of the Gun documentation and will be resolved in a separate commit.