From 6dbc1f9ef98eda6cfdffc0a47b68fb50eeb3863a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sun, 16 Sep 2012 15:51:15 +0200 Subject: Add a private cowboy_req function to create a Req object Private means you must not used it. It's meant for internal use. --- include/http.hrl | 4 ++-- src/cowboy_protocol.erl | 17 ++++++----------- src/cowboy_req.erl | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/include/http.hrl b/include/http.hrl index e2a130b..e03e2d3 100644 --- a/include/http.hrl +++ b/include/http.hrl @@ -28,10 +28,10 @@ host = undefined :: undefined | binary(), host_info = undefined :: undefined | cowboy_dispatcher:tokens(), port = undefined :: undefined | inet:port_number(), - path = undefined :: undefined | binary(), + path = undefined :: binary(), path_info = undefined :: undefined | cowboy_dispatcher:tokens(), qs_vals = undefined :: undefined | list({binary(), binary() | true}), - raw_qs = undefined :: undefined | binary(), + raw_qs = undefined :: binary(), bindings = undefined :: undefined | cowboy_dispatcher:bindings(), headers = [] :: cowboy_http:headers(), p_headers = [] :: [any()], %% @todo Improve those specs. diff --git a/src/cowboy_protocol.erl b/src/cowboy_protocol.erl index ad0987b..9b04ec3 100644 --- a/src/cowboy_protocol.erl +++ b/src/cowboy_protocol.erl @@ -139,10 +139,8 @@ request({http_request, Method, {abs_path, AbsPath}, Version}, ConnAtom = if Keepalive < MaxKeepalive -> version_to_connection(Version); true -> close end, - parse_header(#http_req{socket=Socket, transport=Transport, - connection=ConnAtom, pid=self(), method=Method, version=Version, - path=RawPath, raw_qs=Qs, onresponse=OnResponse, urldecode=URLDec}, - State#state{path_tokens=PathTokens}); + parse_header(cowboy_req:new(Socket, Transport, ConnAtom, Method, Version, + RawPath, Qs, OnResponse, URLDec), State#state{path_tokens=PathTokens}); request({http_request, Method, '*', Version}, State=#state{socket=Socket, transport=Transport, req_keepalive=Keepalive, max_keepalive=MaxKeepalive, @@ -150,10 +148,8 @@ request({http_request, Method, '*', Version}, ConnAtom = if Keepalive < MaxKeepalive -> version_to_connection(Version); true -> close end, - parse_header(#http_req{socket=Socket, transport=Transport, - connection=ConnAtom, pid=self(), method=Method, version=Version, - path= <<"*">>, raw_qs= <<>>, onresponse=OnResponse, - urldecode=URLDec}, State#state{path_tokens='*'}); + parse_header(cowboy_req:new(Socket, Transport, ConnAtom, Method, Version, + <<"*">>, <<>>, OnResponse, URLDec), State#state{path_tokens='*'}); request({http_request, _Method, _URI, _Version}, State) -> error_terminate(501, State); request({http_error, <<"\r\n">>}, @@ -427,9 +423,8 @@ error_terminate(Code, State=#state{socket=Socket, transport=Transport, receive {cowboy_req, resp_sent} -> ok after 0 -> - _ = cowboy_req:reply(Code, #http_req{ - socket=Socket, transport=Transport, onresponse=OnResponse, - connection=close, pid=self(), resp_state=waiting}), + _ = cowboy_req:reply(Code, cowboy_req:new(Socket, Transport, + close, 'GET', {1, 1}, <<>>, <<>>, OnResponse, undefined)), ok end, terminate(State). diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl index 741a8f1..80d68a9 100644 --- a/src/cowboy_req.erl +++ b/src/cowboy_req.erl @@ -42,6 +42,7 @@ -module(cowboy_req). %% Request API. +-export([new/9]). -export([method/1]). -export([version/1]). -export([peer/1]). @@ -115,6 +116,20 @@ %% Request API. +%% @doc Create a new HTTP Req object. +%% +%% This function takes care of setting the owner's pid to self(). +%% @private +-spec new(inet:socket(), module(), keepalive | close, + cowboy_http:method(), cowboy_http:version(), binary(), binary(), + undefined | fun(), undefined | {fun(), atom()}) + -> req(). +new(Socket, Transport, Connection, Method, Version, Path, Qs, + OnResponse, URLDecode) -> + #http_req{socket=Socket, transport=Transport, connection=Connection, + pid=self(), method=Method, version=Version, path=Path, raw_qs=Qs, + onresponse=OnResponse, urldecode=URLDecode}. + %% @doc Return the HTTP method of the request. -spec method(Req) -> {cowboy_http:method(), Req} when Req::req(). method(Req) -> -- cgit v1.2.3