%% ``The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved via the world wide web at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% The Initial Developer of the Original Code is Mobile Arts AB
%% Portions created by Mobile Arts are Copyright 2002, Mobile Arts AB
%% All Rights Reserved.''
%%
%%

-include_lib("kernel/include/file.hrl").

-define(SOCKET_CHUNK_SIZE,8192).
-define(SOCKET_MAX_POLL,25).
-define(FILE_CHUNK_SIZE,64*1024).
-define(NICE(Reason),lists:flatten(atom_to_list(?MODULE)++": "++Reason)).
-define(DEFAULT_CONTEXT,
	[{errmsg,"[an error occurred while processing this directive]"},
	 {timefmt,"%A, %d-%b-%y %T %Z"},
	 {sizefmt,"abbrev"}]).


-ifdef(inets_debug).
-define(DEBUG(Format, Args), io:format("D(~p:~p:~p) : "++Format++"~n",
				       [self(),?MODULE,?LINE]++Args)).
-else.
-define(DEBUG(F,A),[]).
-endif.

-define(MAXBODYSIZE,16#ffffffff).

-define(HTTP_VERSION_10,0).
-define(HTTP_VERSION_11,1).

-define(CR,13).
-define(LF,10).


-record(init_data,{peername,resolve}).


-record(mod,{
	  init_data,           %
	  data= [],            % list() Used to propagate data between modules
	  socket_type=ip_comm, % socket_type() IP or SSL socket
	  socket,              % socket() Actual socket
	  config_db,           % ets() {key,val} db with config entries
	  method,              % atom() HTTP method, e.g. 'GET'
%	  request_uri,         % string() Request URI
	  path,                % string() Absolute path. May include query etc
	  http_version,        % int() HTTP minor version number, e.g. 0 or 1
%	  request_line,        % string() Request Line
	  headers,             % #req_headers{} Parsed request headers
	  entity_body= <<>>,   % binary() Body of request
	  connection,          % boolean() true if persistant connection
	  status_code,         % int() Status code
	  logging              % int() 0=No logging
	                       %       1=Only mod_log present
	                       %       2=Only mod_disk_log present
	                       %       3=Both mod_log and mod_disk_log present
	 }).

% -record(ssl,{
% 	  certfile,      %
% 	  keyfile,       %
% 	  verify= 0,     %
% 	  ciphers,       %
% 	  password,      %
% 	  depth = 1,     %
% 	  cacertfile,    %

% 	  cachetimeout   % Found in yaws....
% 	 }).


-record(http_request,{
	  method,  % atom() if known else string() HTTP methd
	  path,    % {abs_path,string()} URL path
	  version  % {int(),int()}  {Major,Minor} HTTP version
	 }).

-record(http_response,{
	  version, % {int(),int()}  {Major,Minor} HTTP version
	  status,  % int() Status code
	  phrase   % string() HTTP Reason phrase
	 }).


%%% Request headers
-record(req_headers,{
%%% --- Standard "General" headers
% 	  cache_control,
	  connection="keep-alive",
% 	  date,
% 	  pragma,
% 	  trailer,
	  transfer_encoding,
% 	  upgrade,
% 	  via,
% 	  warning,
%%% --- Standard "Request" headers
% 	  accept,
% 	  accept_charset,
% 	  accept_encoding,
% 	  accept_language,
	  authorization,
	  expect, %% FIXME! Update inet_drv.c!!
% 	  from,
	  host,
	  if_match,
	  if_modified_since,
	  if_none_match,
	  if_range,
	  if_unmodified_since,
% 	  max_forwards,
% 	  proxy_authorization,
	  range,
% 	  referer,
% 	  te, %% FIXME! Update inet_drv.c!!
	  user_agent,
%%% --- Standard "Entity" headers
% 	  content_encoding,
% 	  content_language,
	  content_length="0",
% 	  content_location,
% 	  content_md5,
% 	  content_range,
	  content_type,
% 	  last_modified,
	  other=[]        % (list) Key/Value list with other headers
	 }).
