From 39de3072bcf9fdeec6d3faeb125924c401242205 Mon Sep 17 00:00:00 2001 From: Christopher Lenz Date: Tue, 15 Apr 2008 12:21:00 +0000 Subject: Merged mochiweb branch back into trunk. git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@648222 13f79535-47bb-0310-9956-ffa450edef68 --- src/couch_inets/httpd_cgi.erl | 122 ------------------------------------------ 1 file changed, 122 deletions(-) delete mode 100644 src/couch_inets/httpd_cgi.erl (limited to 'src/couch_inets/httpd_cgi.erl') diff --git a/src/couch_inets/httpd_cgi.erl b/src/couch_inets/httpd_cgi.erl deleted file mode 100644 index 0e0d7f2b..00000000 --- a/src/couch_inets/httpd_cgi.erl +++ /dev/null @@ -1,122 +0,0 @@ -%% ``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(httpd_cgi). - --export([parse_headers/1, handle_headers/1]). - --include("inets_internal.hrl"). - -%%%========================================================================= -%%% Internal application API -%%%========================================================================= - -%%-------------------------------------------------------------------------- -%% parse_headers([Bin, Data, Header, Headers]) -> {RevHeaders, Body} | -%% {Module, Function, Args} -%% Bin = Data = binary() -%% Header = string() - Accumulator should be [] in first call -%% Headers = [Header] - Accumulator should be [] in first call -%% Body = string() -%% RevHeaders = string() - Note CGI-headers not HTTP-headers -%% -%% Description: Parses "<>" returned from the -%% CGI-script until it findes the end of the CGI-headers (at least one -%% CGI-HeaderField must be supplied) then it returns the CGI-headers -%% and maybe some body data. If {Module, Function, Args} is -%% returned it means that more data needs to be collected from the -%% cgi-script as the end of the headers was not yet found. When more -%% data has been collected call Module:Function([NewData | Args]). -%% -%% NOTE: The headers are backwards and should -%% be so, devide_and_reverse_headers will reverse them back after -%% taking advantage of the fact that they where backwards. -%%-------------------------------------------------------------------------- -parse_headers([Data, Bin, Header, Headers]) -> - parse_headers(<>, Header, Headers). - -%%-------------------------------------------------------------------------- -%% handle_headers(CGIHeaders) -> {ok, HTTPHeaders, StatusCode} | -%% {proceed, AbsPath} -%% CGIHeaders = [string()] -%% HTTPHeaders = [{HeaderField, HeaderValue}] -%% HeaderField = string() -%% HeaderValue = string() -%% StatusCode = integer() -%% -%% Description: Interprets CGI headers and creates HTTP headers and a -%% appropriate HTTP status code. Note if a CGI location header is present -%% the return value will be {proceed, AbsPath} -%%-------------------------------------------------------------------------- -handle_headers(CGIHeaders) -> - handle_headers(CGIHeaders, [], {200, "ok"}). - -%%%======================================================================== -%%% Internal functions -%%%======================================================================== -parse_headers(<<>>, Header, Headers) -> - {?MODULE, parse_headers, [<<>>, Header, Headers]}; -parse_headers(<>, Header, Headers) -> - {?MODULE, parse_headers, [<>, Header, Headers]}; -parse_headers(<>, Header, Headers) -> - {?MODULE, parse_headers, [<>, Header, Headers]}; -parse_headers(<>, Header, Headers) -> - {ok, {[lists:reverse([?LF, ?CR | Header]) | Headers], Rest}}; -parse_headers(<>, Header, Headers) -> - {ok, {[lists:reverse([?LF | Header]) | Headers], Rest}}; -parse_headers(<>, Header, Headers) -> - parse_headers(Rest, [], [lists:reverse([?LF, ?CR | Header]) | Headers]); -parse_headers(<>, Header, Headers) -> - parse_headers(Rest, [], [lists:reverse([?LF | Header]) | Headers]); -parse_headers(<>, Header, Headers) -> - parse_headers(Rest, [Octet | Header], Headers). - -handle_headers([], HTTPHeaders, Status) -> - {ok, HTTPHeaders, Status}; - -handle_headers([CGIHeader | CGIHeaders], HTTPHeaders, Status) -> - - {FieldName, FieldValue} = httpd_response:split_header(CGIHeader, []), - - case FieldName of - "content-type" -> - handle_headers(CGIHeaders, - [{FieldName, FieldValue} | HTTPHeaders], - Status); - "location" -> - case http_request:is_absolut_uri(FieldValue) of - true -> - handle_headers(CGIHeaders, - [{FieldName, FieldValue} | - HTTPHeaders], {302, "Redirect"}); - false -> - {proceed, FieldValue} - end; - "status" -> - CodePhrase = - case httpd_util:split(FieldValue," ",2) of - {ok,[Code, Phrase]} -> - {list_to_integer(Code), Phrase}; - _ -> - {200, "OK"} - end, - handle_headers(CGIHeaders, HTTPHeaders, CodePhrase); - _ -> %% Extension headers - handle_headers(CGIHeaders, - [{FieldName, FieldValue} | HTTPHeaders], Status) - end. - -- cgit v1.2.3