181 lines
4.7 KiB
Erlang
181 lines
4.7 KiB
Erlang
|
%% @author Justin Sheehy <justin@basho.com>
|
||
|
%% @author Andy Gross <andy@basho.com>
|
||
|
%% @copyright 2007-2009 Basho Technologies
|
||
|
%% Based on mochiweb_request.erl, which is Copyright 2007 Mochi Media, Inc.
|
||
|
%%
|
||
|
%% Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
%% you may not use this file except in compliance with the License.
|
||
|
%% You may obtain a copy of the License at
|
||
|
%%
|
||
|
%% http://www.apache.org/licenses/LICENSE-2.0
|
||
|
%%
|
||
|
%% Unless required by applicable law or agreed to in writing, software
|
||
|
%% distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
%% See the License for the specific language governing permissions and
|
||
|
%% limitations under the License.
|
||
|
|
||
|
%% @doc Webmachine HTTP Request Abstraction.
|
||
|
|
||
|
-module(webmachine_request, [Pid]).
|
||
|
-author('Justin Sheehy <justin@basho.com>').
|
||
|
-author('Andy Gross <andy@basho.com>').
|
||
|
|
||
|
-export([
|
||
|
get_reqdata/0,
|
||
|
set_reqdata/1,
|
||
|
socket/0,
|
||
|
method/0,
|
||
|
version/0,
|
||
|
disp_path/0,
|
||
|
path/0,
|
||
|
raw_path/0,
|
||
|
req_headers/0,
|
||
|
req_body/1,
|
||
|
stream_req_body/1,
|
||
|
headers/0,
|
||
|
resp_headers/0,
|
||
|
out_headers/0,
|
||
|
get_out_header/1,
|
||
|
has_out_header/1,
|
||
|
peer/0,
|
||
|
get_header_value/1,
|
||
|
add_response_header/2,
|
||
|
add_response_headers/1,
|
||
|
remove_response_header/1,
|
||
|
merge_response_headers/1,
|
||
|
append_to_response_body/1,
|
||
|
send_response/1,
|
||
|
response_code/0,
|
||
|
set_response_code/1,
|
||
|
set_resp_body/1,
|
||
|
response_body/0,
|
||
|
has_response_body/0,
|
||
|
stop/0,
|
||
|
do_redirect/0,
|
||
|
resp_redirect/0,
|
||
|
set_metadata/2,
|
||
|
get_metadata/1,
|
||
|
get_path_info/0,
|
||
|
get_path_info/1,
|
||
|
load_dispatch_data/7,
|
||
|
get_path_tokens/0,
|
||
|
get_app_root/0,
|
||
|
parse_cookie/0,
|
||
|
get_cookie_value/1,
|
||
|
parse_qs/0,
|
||
|
get_qs_value/1,
|
||
|
get_qs_value/2,
|
||
|
range/0,
|
||
|
log_data/0,
|
||
|
call/1
|
||
|
]).
|
||
|
|
||
|
-define(TIMEOUT, 150000).
|
||
|
|
||
|
call(Message) -> gen_server:call(Pid, Message, ?TIMEOUT).
|
||
|
|
||
|
get_reqdata() -> call(get_reqdata).
|
||
|
|
||
|
set_reqdata(RD) -> call({set_reqdata, RD}).
|
||
|
|
||
|
socket() -> call(socket).
|
||
|
|
||
|
method() -> call(method).
|
||
|
|
||
|
version() -> call(version).
|
||
|
|
||
|
disp_path() -> call(disp_path).
|
||
|
|
||
|
path() -> call(path).
|
||
|
|
||
|
raw_path() -> call(raw_path).
|
||
|
|
||
|
req_headers() -> call(req_headers).
|
||
|
headers() -> req_headers().
|
||
|
|
||
|
req_body(MaxRevBody) -> call({req_body,MaxRevBody}).
|
||
|
stream_req_body(MaxHunk) -> call({stream_req_body, MaxHunk}).
|
||
|
|
||
|
resp_headers() -> call(resp_headers).
|
||
|
out_headers() -> resp_headers().
|
||
|
|
||
|
get_resp_header(HeaderName) -> call({get_resp_header, HeaderName}).
|
||
|
get_out_header(HeaderName) -> get_resp_header(HeaderName).
|
||
|
|
||
|
has_resp_header(HeaderName) ->
|
||
|
case get_out_header(HeaderName) of
|
||
|
undefined -> false;
|
||
|
_ -> true
|
||
|
end.
|
||
|
has_out_header(HeaderName) -> has_resp_header(HeaderName).
|
||
|
|
||
|
has_resp_body() -> call(has_resp_body).
|
||
|
has_response_body() -> has_resp_body().
|
||
|
|
||
|
response_code() -> call(response_code).
|
||
|
set_response_code(Code) -> call({set_response_code, Code}).
|
||
|
|
||
|
peer() -> call(peer).
|
||
|
|
||
|
range() -> call(range).
|
||
|
|
||
|
req_cookie() -> call(req_cookie).
|
||
|
parse_cookie() -> req_cookie().
|
||
|
get_cookie_value(Key) -> proplists:get_value(Key, req_cookie()).
|
||
|
|
||
|
req_qs() -> call(req_qs).
|
||
|
parse_qs() -> req_qs().
|
||
|
get_qs_value(Key) -> proplists:get_value(Key, req_qs()).
|
||
|
get_qs_value(Key, Default) -> proplists:get_value(Key, req_qs(), Default).
|
||
|
|
||
|
stop() -> gen_server:cast(Pid, stop).
|
||
|
|
||
|
set_resp_body(Body) -> call({set_resp_body, Body}).
|
||
|
resp_body() -> call(resp_body).
|
||
|
response_body() -> resp_body().
|
||
|
|
||
|
get_req_header(K) -> call({get_req_header, K}).
|
||
|
get_header_value(K) -> get_req_header(K).
|
||
|
|
||
|
set_resp_header(K, V) -> call({set_resp_header, K, V}).
|
||
|
add_response_header(K, V) -> set_resp_header(K, V).
|
||
|
|
||
|
set_resp_headers(Hdrs) -> call({set_resp_headers, Hdrs}).
|
||
|
add_response_headers(Hdrs) -> set_resp_headers(Hdrs).
|
||
|
|
||
|
remove_resp_header(K) -> call({remove_resp_header, K}).
|
||
|
remove_response_header(K) -> remove_resp_header(K).
|
||
|
|
||
|
merge_resp_headers(Hdrs) -> call({merge_resp_headers, Hdrs}).
|
||
|
merge_response_headers(Hdrs) -> merge_resp_headers(Hdrs).
|
||
|
|
||
|
append_to_response_body(Data) -> call({append_to_response_body, Data}).
|
||
|
|
||
|
do_redirect() -> call({do_redirect}).
|
||
|
|
||
|
resp_redirect() -> call({resp_redirect}).
|
||
|
|
||
|
send_response(Code) -> call({send_response, Code}).
|
||
|
|
||
|
get_metadata(Key) -> call({get_metadata, Key}).
|
||
|
|
||
|
set_metadata(Key, Value) -> call({set_metadata, Key, Value}).
|
||
|
|
||
|
get_path_info() -> call(get_path_info).
|
||
|
|
||
|
get_path_info(Key) -> call({get_path_info, Key}).
|
||
|
|
||
|
path_tokens() -> call(path_tokens).
|
||
|
get_path_tokens() -> path_tokens().
|
||
|
|
||
|
app_root() -> call(app_root).
|
||
|
get_app_root() -> app_root().
|
||
|
|
||
|
load_dispatch_data(Bindings, HostTokens, Port, PathTokens,
|
||
|
AppRoot, DispPath, Req) ->
|
||
|
call({load_dispatch_data, Bindings, HostTokens, Port,
|
||
|
PathTokens, AppRoot, DispPath, Req}).
|
||
|
|
||
|
log_data() -> call(log_data).
|