aboutsummaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)Author
2019-12-26Use binary append instead of lists:reverseLoïc Hoguin
2019-12-26Remove unused cow_hpack:decode/3 Opts argumentLoïc Hoguin
2019-12-26HPACK encode: conditionally call an iolist_to_binaryLoïc Hoguin
This provides a small but noticeable improvement so it's probably worth doing.
2019-12-25Fix typo in commentLoïc Hoguin
2019-12-25Optimize HPACK Huffman decodingLoïc Hoguin
The previous naive implementation ended up not benefitting from binary match context reuse because it was matching on bit boundaries (and not bytes). This new implementation matches a byte at a time. The result is almost twice faster when decoding the examples from the HPACK RFC (before/after): cow_hpack:decode_huffman in 0.250666s cow_hpack:decode_huffman in 0.133743s
2019-12-19Accept iodata() when building linksLoïc Hoguin
2019-12-19Escape attribute values when building link headersLoïc Hoguin
2019-12-18Rename cow_uri_templates to cow_uri_templateLoïc Hoguin
Fits better since we are dealing with a single template at a time.
2019-12-18Add cow_uri_templatesLoïc Hoguin
Implements RFC6570 level 4.
2019-11-25Reorganize cow_http_hdLoïc Hoguin
2019-11-25Add structured headers, variants and variant-key buildingLoïc Hoguin
2019-11-23Add cow_http_struct_hdLoïc Hoguin
Implements draft-ietf-httpbis-header-structure-14.
2019-11-23Add cow_link implementing RFC8288 (link header)Loïc Hoguin
2019-10-10Add cow_http2_machine:is_lingering_stream/22.8.0Loïc Hoguin
2019-10-10Fix cow_http_te:decode_ret() typeLoïc Hoguin
2019-10-10Fix cookie_opts() type in code and documentationLoïc Hoguin
It's supposed to be a map, not a proplist.
2019-10-05Allow disabling the UTF-8 Websocket text frames validationLoïc Hoguin
2019-10-05Make sure ensure_window doesn't crash if stream is closedLoïc Hoguin
2019-10-04Add manual for cow_cookieLoïc Hoguin
2019-10-03Remove HTTP/1.1 connection headers in HTTP/2 messagesLoïc Hoguin
2019-10-01Don't return lingering_data tuples anymoreLoïc Hoguin
The better solution is to use the ensure_window functions, if updating the window is necessary.
2019-10-01Add HTTP/2 option stream_window_data_thresholdLoïc Hoguin
This controls how large the window should be before we are willing to send data. We of course always send data when the data we need to send is lower than the current window. This is both an optimization and a fix for the data dribble denial of service vulnerability (CVE-2019-9511).
2019-10-01Add cow_http2_machine:get_connection_local_buffer_size/1Loïc Hoguin
The function can be used to restrict how big all the buffers of a single connection can get.
2019-10-01Don't filter HTTP/2 optionsLoïc Hoguin
It's not a big gain and causes issues when forgetting to update the list. Maybe it can be added back again at a later time.
2019-10-01Reject empty HTTP/2 header namesLoïc Hoguin
2019-09-14Add cow_http2_machine:get_stream_local_buffer_size/2Loïc Hoguin
2019-09-12Fix a bug where final empty frames were ignoredLoïc Hoguin
When a final empty frame was queued and the data sent made the window go to 0 and the remote end didn't increase the window anymore, the final empty frame could get stuck in the queue and never sent. Also ensure that we never queue empty non-final data.
2019-09-06Add missing specs to cow_http2_machine:ensure_windowLoïc Hoguin
2019-09-06Authentication scheme is case insensitiveBip Thelin
2019-09-06Add status codes 208 and 508Loïc Hoguin
2019-09-02Add cow_http2_machine:ensure_window/2,3Loïc Hoguin
These functions apply heuristics to reduce the number of times we send WINDOW_UPDATE frames.
2019-07-27Add missing lingering_data in the specLoïc Hoguin
2019-07-26Don't return lingering_data when the length is 0Loïc Hoguin
2019-04-28Return lingering_data when received data in lingeringTony Han
2019-04-03Don't use string:lowercase yet, not available in OTP-192.7.2Loïc Hoguin
2019-03-26:authority is not required by spec2.7.1Fredrik Enestad
2019-03-25Lowercase file extension in cow_mimetypesDavid.Gao
2019-03-25Make sure iolist split uses N lengthJosé Valim
The previous implementation would return "ok" under certain situations when more data could be fit into the buffer. By making "ok" explicitly mean length is 0, then we can simplify other parts of the codebase and fix a bug that could cause us to send less data then desired over the wire.
2018-11-13Support uncompressed Websocket frames when deflate is enabledLoïc Hoguin
2018-11-12Add deflate options for Websocket compressionLoïc Hoguin
They allow the server to configure what it is willing to accept for the negotiated configuration (takeover and window bits).
2018-11-03Make cow_http_hd:parse_accept/1 lowercase charsetsLoïc Hoguin
Charsets are case insensitive. This is now in line with parse_accept_charset/1 and parse_content_type/1.
2018-10-30Fixes various client issues in cow_http2_machineLoïc Hoguin
2018-10-27Handle HTTP/2 timeouts in the state machineLoïc Hoguin
2018-10-26Add cow_http2:parse_sequence/1Loïc Hoguin
2018-10-26Introduce cow_http2_machine, an HTTP/2 state machineLoïc Hoguin
This is the result of a merge of the Cowboy and Gun HTTP/2 codes. It can probably do a little more but it's at a point where Cowboy works fine when using it so additional work will be done in other commits. The Gun code has not been switched to this module yet. I expect for example the PUSH_PROMISE code to fail at this point. This will be the next step.
2018-09-28Add support for SameSite cookiesECrownofFire
The SameSite cookie attribute has yet to appear in an official RFC, and until recently was exclusive to Chrome. However, Firefox has recently implemented it as well, so it seems prudent to support it.
2018-09-17Add cow_http:parse_request_line/1Loïc Hoguin
2018-08-06Export two cow_http types used by GunLoïc Hoguin
2018-08-06Fix typespecs causing Dialyzer errors in user projectsLoïc Hoguin
2018-08-03Refactor some code to fix a Dialyzer warningLoïc Hoguin