Loïc Hoguin
9fe8141d2a
Allow Handler:init/3 to request a protocol upgrade.
2011-03-22 23:03:43 +01:00
Loïc Hoguin
7888be00d2
Forward transport and protocol name to Handler:init.
2011-03-22 19:50:02 +01:00
Loïc Hoguin
e0185dd27f
Add cowboy_tcp_transport:name/0 to ease transport identification later on.
2011-03-22 19:40:28 +01:00
Loïc Hoguin
3865415a60
Boring 80-col change.
2011-03-22 13:23:40 +01:00
Loïc Hoguin
06274cd8ab
Introduce cowboy_http_req:body_qs/1 for automated urlencoded body parsing.
2011-03-22 13:20:21 +01:00
Loïc Hoguin
775a03e6eb
Fix spec for cowboy_http_req:parse_qs/1.
2011-03-22 13:19:38 +01:00
Loïc Hoguin
c645b682e7
Fix spec for cowboy_http_req:body/1 and body/2.
2011-03-22 13:18:53 +01:00
Loïc Hoguin
c3a36246b5
Explicitly ignore the return value of cowboy_http_req:reply in error_response.
2011-03-22 12:27:34 +01:00
Loïc Hoguin
1ebfa5eb1f
Fix spec for cowboy_tcp_transport:close/1.
...
Apparently the documentation is wrong for gen_tcp:close/1, it returns only ok.
2011-03-21 22:57:07 +01:00
Loïc Hoguin
545116edfa
Fix spec for cowboy_http_req:reply/4.
2011-03-21 22:47:37 +01:00
Loïc Hoguin
fdd9d4c0ef
Fix spec for cowboy_http_req:qs_vals/1.
2011-03-21 22:33:42 +01:00
Loïc Hoguin
c366343ac6
Fix spec for cowboy_http_protocol:init/3.
2011-03-21 22:22:30 +01:00
Loïc Hoguin
0b13835bfe
Fix tests for cowboy_dispatcher:split_path/1.
2011-03-21 22:18:24 +01:00
Loïc Hoguin
8e55c2e2b8
Fix spec for cowboy_dispatcher:split_path/1.
2011-03-21 22:13:35 +01:00
Loïc Hoguin
7cacb88fec
Introduce cowboy_http_req:body/1 to read the full request body.
2011-03-21 22:08:27 +01:00
Loïc Hoguin
e9781e77f1
Make sure error_response always returns ok.
2011-03-21 17:52:27 +01:00
Loïc Hoguin
e3dc9b2694
Add specs to ensure_response and change the clauses order.
2011-03-21 17:51:21 +01:00
Loïc Hoguin
8b02992e6a
Skip the request body if it hasn't been read by the handler.
2011-03-21 17:47:17 +01:00
Loïc Hoguin
e40001a884
Ensure a response is sent when the handler doesn't reply anything.
2011-03-20 19:38:45 +01:00
Loïc Hoguin
a1e56a2fba
Move the error response code into a separate function.
2011-03-20 19:29:32 +01:00
Loïc Hoguin
71b31cee92
Make sure we can only reply to an HTTP request inside Handler:handle.
...
Of course since requests are a record the response state can be explicitly
overriden, but standard use prevents errors by making sure only one reply
is sent.
2011-03-20 18:03:36 +01:00
Loïc Hoguin
d69d0adfa7
Lazy-retrieve the peer name and port to avoid wasting time each request.
2011-03-20 16:09:05 +01:00
Loïc Hoguin
f5e7178651
Change a @todo for Handler:init possible return values.
2011-03-20 15:30:29 +01:00
Loïc Hoguin
a3fff2f5b0
Rename a variable in cowboy_http_protocol for clarity.
2011-03-20 15:10:58 +01:00
Loïc Hoguin
df35916d2a
Allow code reloading inside the cowboy_http_protocol module during keep-alive.
2011-03-20 14:24:43 +01:00
Loïc Hoguin
6fad3f7824
Default the connection to keep-alive on HTTP/1.1 and close on 1.0.
2011-03-20 00:09:15 +01:00
Loïc Hoguin
896b854908
Remove a dead code clause for split_path.
2011-03-20 00:03:02 +01:00
Loïc Hoguin
b874b28561
Save the raw path string in the request.
2011-03-20 00:01:29 +01:00
Loïc Hoguin
8085529f48
Save the raw host string in the request.
2011-03-19 23:57:23 +01:00
Loïc Hoguin
bd3a646316
Protect the calls to the handler using catch.
...
* Handler:init shouldn't reply anything; send an error 500.
* Handler:handle may have sent something to the client; close the socket.
* Handler:terminate failed to clean itself up. Close the socket.
2011-03-19 19:51:44 +01:00
Loïc Hoguin
a4f8bb6573
Add support for the '*' path.
...
Mostly used by the following request: OPTIONS * HTTP/1.1
2011-03-19 18:53:59 +01:00
Loïc Hoguin
2c52a30b0a
Rewrite the dispatcher to take a list of host each having a list of paths.
...
* Makes more sense to parse the host only once instead of for each path.
* Allows proper handling of: If the host is not a valid host on the server,
the response MUST be a 400 (Bad Request) error.
2011-03-19 17:42:03 +01:00
Loïc Hoguin
ebe638165e
Ignore all extra Host values sent in the request.
2011-03-19 16:49:06 +01:00
Loïc Hoguin
673c7e2cb5
Reply with error 501 on all non absolute path URIs for now.
2011-03-19 14:46:45 +01:00
Loïc Hoguin
7ef67d08fe
Reply with error 400 on all bad Request-Lines received.
2011-03-19 14:40:39 +01:00
Loïc Hoguin
c9eb3ce5fc
Ignore empty lines when expecting the Request-Line.
...
In the interest of robustness, servers SHOULD ignore any empty
line(s) received where a Request-Line is expected. In other words,
if the server is reading the protocol stream at the beginning of a
message and receives a CRLF first, it should ignore the CRLF.
2011-03-19 14:38:31 +01:00
Loïc Hoguin
db715a3eb1
Comparisons of host names MUST be case-insensitive.
2011-03-19 14:16:17 +01:00
Loïc Hoguin
2131a935e6
Notify the client that we're closing the connection after the error reply.
2011-03-19 02:21:55 +01:00
Loïc Hoguin
408f167621
Move the reply function to cowboy_http_req.
2011-03-18 22:38:26 +01:00
Loïc Hoguin
c6ad0273a8
Introduce Handler:terminate to cleanup the handler's state.
2011-03-18 13:47:37 +01:00
Loïc Hoguin
5e80e4baac
Handler:init/2 should also return the Request in case it changed.
2011-03-18 01:52:46 +01:00
Loïc Hoguin
f53235549d
Introduce Handler:init/2 for initializing the handler state.
...
We need an init function in order to process upgrade instructions
for protocols like WebSockets, but also to request an active receive
mode for long-polling connections, both of which will be implemented
at a later time.
2011-03-18 00:15:46 +01:00
Loïc Hoguin
a77b906b9f
Don't crash on Transport:controlling_process return in the acceptor.
...
Crashes can happen if we close the connection too fast, leading to
controlling_process returning {error, closed} instead of ok. This can
happen when we receive bad requests, reply with 404 Not Found and more.
Simply do not match the return value of controlling_process to avoid this.
2011-03-17 22:22:09 +01:00
Loïc Hoguin
0069e2465d
Remove a superfluous terminate call in error_terminate.
2011-03-17 22:06:39 +01:00
Loïc Hoguin
786a05a129
Run the dispatcher as early as possible to quickly dismiss 404 errors.
2011-03-17 22:02:47 +01:00
Loïc Hoguin
da72255940
Initial commit.
2011-03-17 00:29:35 +01:00