aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy.erl
AgeCommit message (Collapse)Author
2018-10-31Improve a few types, including cowboy_req:req()Loïc Hoguin
2018-10-26Simplify a case clauseLoïc Hoguin
2018-10-02Fix ranch:start_tls when transport options are a mapLoïc Hoguin
2018-08-13Update Ranch to 1.6.1Loïc Hoguin
2018-06-28Introduce undocumented option loggerLoïc Hoguin
This commit reworks the logging that Cowboy does via error_logger to make the module that will do the actual logging configurable. The logger module interface must be the same as logger and lager: a separate function per log level with the same log levels they support. The default behavior remains to call error_logger, although some messages were downgraded to warnings instead of errors. Since error_logger only supports three different log levels, some messages may get downgraded/upgraded depending on what the original log level was to make them compatible with error_logger. The {log, Level, Format, Args} command was also added to stream handlers. Stream handlers should use this command to log messages because it allows writing a stream handler to intercept some of those messages and extract information or block them as necessary. The logger option only applies to Cowboy itself, not to the messages Ranch logs, so more work remains to be done in that area.
2017-10-02Fix cowboy:set_env when the env value is missingLoïc Hoguin
2017-06-07Remove NumAcceptors argument from start_clear/tlsLoïc Hoguin
They are now cowboy:start_clear/3 and cowboy:start_tls/3. The NumAcceptors argument can be specified via the num_acceptor transport option. Ranch has been updated to 1.4.0 to that effect.
2017-05-07make set_env working with maps.Alexandre Snarskii
2017-01-16Add support for multiple stream handlersLoïc Hoguin
The stream handlers can be specified using the protocol option 'stream_handlers'. It defaults to [cowboy_stream_h]. The cowboy_stream_h module currently does not forward the calls to further stream handlers. It feels like an edge case; usually we'd want to put our own handlers between the protocol code and the request process. I am therefore going to focus on other things for now. The various types and specifications for stream handlers have been updated and the cowboy_stream module can now be safely used as a behavior. The interface might change a little more, though. This commit does not include tests or documentation. They will follow separately.
2017-01-02Welcome to 2017Loïc Hoguin
2017-01-02Numerous Dialyzer fixesLoïc Hoguin
2016-08-10Add a lot of todosLoïc Hoguin
2016-08-10Add tests for responses and request body readingLoïc Hoguin
This is a large commit. The cowboy_req interface has largely changed, and will change a little more. It's possible that some examples or tests have not been converted to the new interface yet. The documentation has not yet been updated. All of this will be fixed in smaller subsequent commits. Gotta start somewhere...
2016-06-06Use the correct process type for clear connectionsLoïc Hoguin
2016-03-06Completely remove SPDYLoïc Hoguin
2016-03-05Initial commit with connection/streamsLoïc Hoguin
Breaking changes with previous commit. This is a very large change, and I am giving up on making a single commit that fixes everything. More commits will follow slowly adding back features, introducing new tests and fixing the documentation. This change contains most of the work toward unifying the interface for handling both HTTP/1.1 and HTTP/2. HTTP/1.1 connections are now no longer 1 process per connection; instead by default 1 process per request is also created. This has a number of pros and cons. Because it has cons, we also allow users to use a lower-level API that acts on "streams" (requests/responses) directly at the connection process-level. If performance is a concern, one can always write a stream handler. The performance in this case will be even greater than with Cowboy 1, although all the special handlers are unavailable. When switching to Websocket, after the handler returns from init/2, Cowboy stops the stream and the Websocket protocol takes over the connection process. Websocket then calls websocket_init/2 for any additional initialization such as timers, because the process is different in init/2 and websocket_*/* functions. This however would allow us to use websocket_init/2 for sending messages on connect, instead of sending ourselves a message and be subject to races. Note that websocket_init/2 is optional. This is all a big change and while most of the tests pass, some functionality currently doesn't. SPDY is broken and will be removed soon in favor of HTTP/2. Automatic compression is currently disabled. The cowboy_req interface probably still have a few functions that need to be updated. The docs and examples do not refer the current functionality anymore. Everything will be fixed over time. Feedback is more than welcome. Open a ticket!
2015-06-11Add HTTP/2 support preview2.0.0-pre.2Loïc Hoguin
This commit is not only an early preview of HTTP/2, it is an early preview of the new Cowboy architecture that will be presented tomorrow in my talk. If you have found it before the talk, great! It's not complete so you better go watch the talk anyway.
2014-09-24Remove the onrequest hookLoïc Hoguin
It was redundant with middlewares. Allows us to save a few operations for every incoming requests.
2014-09-23Breaking update of the cowboy_req interfaceLoïc Hoguin
Simplify the interface for most cowboy_req functions. They all return a single value except the four body reading functions. The reply functions now only return a Req value. Access functions do not return a Req anymore. Functions that used to cache results do not have a cache anymore. The interface for accessing query string and cookies has therefore been changed. There are now three query string functions: qs/1 provides access to the raw query string value; parse_qs/1 returns the query string as a list of key/values; match_qs/2 returns a map containing the values requested in the second argument, after applying constraints and default value. Similarly, there are two cookie functions: parse_cookies/1 and match_cookies/2. More match functions will be added in future commits. None of the functions return an error tuple anymore. It either works or crashes. Cowboy will attempt to provide an appropriate status code in the response of crashed handlers. As a result, the content decode function has its return value changed to a simple binary, and the body reading functions only return on success.
2014-03-26Remove outdated comments, all edoc, plus a few minor tweaksLoïc Hoguin
2014-02-16Fix stop_listener/1 specSina Samavati
2014-02-06Update copyright yearsLoïc Hoguin
2013-06-02Fix cowboy:start_http/https/spdy typespecsRadosław Szymczyszyn
2013-05-30Add experimental and incomplete SPDY supportLoïc Hoguin
The SPDY connection processes are also supervisors. Missing: * sendfile support * request body reading support
2013-05-16Use the ranch_ssl:opts() type in cowboy:start_https/4 specLoïc Hoguin
2013-05-16Use the ranch_tcp:opts() type in cowboy:start_http/4 specLoïc Hoguin
2013-05-16Use the type ranch:ref() instead of any() where applicableLoïc Hoguin
2013-05-16Add cowboy_protocol:opts() typeLoïc Hoguin
Should improve the detection of wrong protocol options.
2013-05-16Move cowboy_protocol:onresponse_fun() to cowboy:onresponse_fun()Loïc Hoguin
2013-05-16Move cowboy_protocol:onrequest_fun() to cowboy:onrequest_fun()Loïc Hoguin
2013-05-16Move cowboy_http:status() to cowboy:http_status()Loïc Hoguin
2013-05-16Move cowboy_http:headers() to cowboy:http_headers()Loïc Hoguin
2013-05-16Move cowboy_http:version() to cowboy:http_version()Loïc Hoguin
2013-02-20Add cowboy:set_env/3Loïc Hoguin
2013-01-04Hello 2013Loïc Hoguin
2012-08-27Rename cowboy_http_protocol to cowboy_protocolLoïc Hoguin
2012-08-27Switch to Ranch for connection handlingLoïc Hoguin
This is the first of many API incompatible changes. You have been warned.
2012-05-23Update version to 0.6.00.6.0Loïc Hoguin
Also update the CHANGELOG and copyright years.
2012-05-21Small updates to the ROADMAP and doc commentsLoïc Hoguin
2012-01-31Add cowboy:get_protocol_options/1 and cowboy_set_protocol_options/2Loïc Hoguin
This allows any application to upgrade the protocol options without having to restart the listener. This is most useful to update the dispatch list of HTTP servers, for example. The upgrade is done at the acceptor level, meaning only new connections receive the new protocol options.
2011-12-15Add cowboy:accept_ack/1 for a cleaner handling of the shoot messageLoïc Hoguin
2011-10-10Add cowboy:child_spec/6Jesper Louis Andersen
This new exported function returns a Child Spec suitable for embedding cowboy in another applications supervisor structure. While here, implement `start_listener/6` in terms of it.
2011-08-10Introduce cowboy_listener for managing a listenerLoïc Hoguin
Currently only supports limiting the maximum number of connections by managing connection pools.
2011-07-18Fail fast when a wrong type is given to API functionsLoïc Hoguin
Idea given by bfrog, fixes issue #34.
2011-07-06Add documentation for the public interface.Loïc Hoguin
This is probably not perfect yet but it should be better than nothing. We'll improve things with feedback received from the many users.
2011-05-25Refresh the type specifications.Loïc Hoguin
Following discussions on #erlounge. Also fixes compilation in R14B03 and fixes a few underspecs dialyzer warnings.
2011-04-03Don't ignore the return values in cowboy:stop_listener/1.Loïc Hoguin
2011-04-03Make Cowboy an OTP application again, properly this time.Loïc Hoguin
As requested by many people on IRC Cowboy is now a proper OTP application to support soft code upgrades. It should also be easier to start and stop listeners now using cowboy:start_listener/6 and cowboy:stop_listener/1.