⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod_trace.erl

📁 OTP是开放电信平台的简称
💻 ERL
字号:
%% ``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 Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %%     $Id$%%-module(mod_trace).-export([do/1]).-include("httpd.hrl").do(Info) ->    %%?vtrace("do",[]),    case Info#mod.method of	"TRACE" ->	    case response_generated(Info) of		false->		    generate_trace_response(Info);	        true->		    {proceed,Info#mod.data}	    end;	_ ->	    {proceed,Info#mod.data}    end.%%---------------------------------------------------------------------%%Generate the trace response the trace response consists of a %%http-header and the body will be the request.%5----------------------------------------------------------------------generate_trace_response(Info)->    RequestHead=Info#mod.parsed_header,    Body=generate_trace_response_body(RequestHead),    Len = length(Info#mod.request_line ++ Body),    Response=["HTTP/1.1 200 OK\r\n",	      "Content-Type:message/http\r\n",	      "Content-Length:",integer_to_list(Len),"\r\n\r\n",	      Info#mod.request_line,Body],    httpd_socket:deliver(Info#mod.socket_type,Info#mod.socket,Response),    {proceed,[{response,{already_sent,200,Len}}|Info#mod.data]}.generate_trace_response_body(Parsed_header)->    generate_trace_response_body(Parsed_header,[]).generate_trace_response_body([],Head)->    lists:flatten(Head);generate_trace_response_body([{[],[]}|Rest],Head) ->    generate_trace_response_body(Rest,Head);generate_trace_response_body([{Field,Value}|Rest],Head) ->    generate_trace_response_body(Rest,[Field ++ ":" ++ Value ++ "\r\n"|Head]).%%----------------------------------------------------------------------%%Function that controls whether a response is generated or not%%----------------------------------------------------------------------response_generated(Info)->    case httpd_util:key1search(Info#mod.data,status) of	%% A status code has been generated!	{_StatusCode,_PhraseArgs,_Reason}->	    true;	%%No status code control repsonsxe	undefined ->	    case httpd_util:key1search(Info#mod.data, response) of		%% No response has been generated!		undefined ->		    false;		%% A response has been generated or sent!		_Response ->		    true	    end    end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -