(file) Return to HTTPMessage.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

  1 martin 1.32 //%LICENSE////////////////////////////////////////////////////////////////
  2 martin 1.33 //
  3 martin 1.32 // Licensed to The Open Group (TOG) under one or more contributor license
  4             // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
  5             // this work for additional information regarding copyright ownership.
  6             // Each contributor licenses this file to you under the OpenPegasus Open
  7             // Source License; you may not use this file except in compliance with the
  8             // License.
  9 martin 1.33 //
 10 martin 1.32 // Permission is hereby granted, free of charge, to any person obtaining a
 11             // copy of this software and associated documentation files (the "Software"),
 12             // to deal in the Software without restriction, including without limitation
 13             // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 14             // and/or sell copies of the Software, and to permit persons to whom the
 15             // Software is furnished to do so, subject to the following conditions:
 16 martin 1.33 //
 17 martin 1.32 // The above copyright notice and this permission notice shall be included
 18             // in all copies or substantial portions of the Software.
 19 martin 1.33 //
 20 martin 1.32 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 21 martin 1.33 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 22 martin 1.32 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 23             // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 24             // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 25             // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 26             // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 27 martin 1.33 //
 28 martin 1.32 //////////////////////////////////////////////////////////////////////////
 29 mike   1.2  //
 30             //%/////////////////////////////////////////////////////////////////////////////
 31             
 32             #ifndef Pegasus_HTTPMessage_h
 33             #define Pegasus_HTTPMessage_h
 34             
 35             #include <iostream>
 36             #include <Pegasus/Common/Config.h>
 37             #include <Pegasus/Common/MessageQueue.h>
 38             #include <Pegasus/Common/Pair.h>
 39             #include <Pegasus/Common/String.h>
 40             #include <Pegasus/Common/Message.h>
 41 kumpf  1.13 #include <Pegasus/Common/ArrayInternal.h>
 42 mike   1.2  #include <Pegasus/Common/AuthenticationInfo.h>
 43 kumpf  1.12 #include <Pegasus/Common/Linkage.h>
 44 kumpf  1.23 #include <Pegasus/Common/AcceptLanguageList.h>
 45             #include <Pegasus/Common/ContentLanguageList.h>
 46 mike   1.22 #include <Pegasus/Common/Buffer.h>
 47 mike   1.2  
 48             PEGASUS_NAMESPACE_BEGIN
 49             
 50 kumpf  1.35 typedef Pair<Buffer, Buffer> HTTPHeader;
 51 mike   1.2  
 52             /** This message is sent from a connection to its output queue when
 53                 a complete HTTP message is received.
 54             */
 55             class PEGASUS_COMMON_LINKAGE HTTPMessage : public Message
 56             {
 57 kumpf  1.26 public:
 58 kumpf  1.27 
 59 kumpf  1.26     typedef Message Base;
 60 kumpf  1.27 
 61 kumpf  1.26     HTTPMessage(
 62                     const Buffer& message_,
 63                     Uint32 queueId_ = 0,
 64                     const CIMException* cimException_ = 0);
 65             
 66                 HTTPMessage(const HTTPMessage & msg);
 67             
 68                 Buffer message;
 69                 Uint32 queueId;
 70                 String ipAddress;
 71                 AuthenticationInfo* authInfo;
 72                 AcceptLanguageList acceptLanguages;
 73                 ContentLanguageList contentLanguages;
 74                 Boolean acceptLanguagesDecoded;
 75                 Boolean contentLanguagesDecoded;
 76                 CIMException cimException;
 77 marek  1.36     bool binaryResponse;
 78 kumpf  1.26 
 79 marek  1.37     Boolean parse(
 80 kumpf  1.26         String& startLine,
 81                     Array<HTTPHeader>& headers,
 82                     Uint32& contentLength) const;
 83             
 84 lawrence.luo 1.39 
 85 kumpf        1.26     void printAll(PEGASUS_STD(ostream)& os) const;
 86 lawrence.luo 1.39 
 87 kumpf        1.26 
 88                       static void lookupHeaderPrefix(
 89                           Array<HTTPHeader>& headers,
 90 kumpf        1.35         const char* fieldName,
 91 kumpf        1.26         String& prefix);
 92                   
 93                       static Boolean lookupHeader(
 94                           Array<HTTPHeader>& headers,
 95 kumpf        1.35         const char* fieldName,
 96 kumpf        1.26         String& fieldValue,
 97                           Boolean allowNamespacePrefix = false);
 98                   
 99 kumpf        1.35     static Boolean lookupHeader(
100                           Array<HTTPHeader>& headers,
101                           const char* fieldName,
102                           const char*& fieldValue,
103                           Boolean allowNamespacePrefix = false);
104                   
105 kumpf        1.26     static Boolean parseRequestLine(
106                           const String& startLine,
107                           String& methodName,
108                           String& requestUri,
109                           String& httpVersion);
110                   
111                       static Boolean parseStatusLine(
112                           const String& statusLine,
113                           String& httpVersion,
114                           Uint32& statusCode,
115                           String& reasonPhrase);
116 venkat.puvvada 1.28 
117 kumpf          1.31     static Boolean parseContentTypeHeader(
118 kumpf          1.35         const char* contentTypeHeader,
119 kumpf          1.31         String& type,
120                             String& charset);
121                     
122 thilo.boehm    1.30     static Boolean parseLocalAuthHeader(
123                             const String& authHeader,
124                             String& authType,
125                             String& userName,
126                             String& cookie);
127                     
128                         static Boolean parseHttpAuthHeader(
129                             const String& authHeader,
130                             String& authType,
131                             String& cookie);
132                     
133 sushma.fernandes 1.29     /**
134                               Advances a given pointer to the first character that is not
135                               HTTP header whitespace (space or tabs).
136                       
137                               @param  str    Input string.
138                           */
139                           static void skipHeaderWhitespace(const char*& str);
140                       
141                           /**
142                               Looks for a token in the beginning of a given string.
143                       
144                               @param  str    input string to be searched
145                               @param  token  token to look for
146 kumpf            1.34 
147                               @return true   if the token is found in the string after skipping
148 sushma.fernandes 1.29                         the leading whitespaces if any.
149                               @return false  if the token is not found.
150                           */
151                           static Boolean expectHeaderToken(const char*& str, const char *token);
152                       
153                           /**
154                               Returns a pointer to the first CRLF or a LF separator.
155                       
156 kumpf            1.34         @param  data   input string.
157 marek            1.38         
158 kumpf            1.34         @return pointer to the first CRLF or LF separator if any, else
159 sushma.fernandes 1.29                 returns NULL.
160                           */
161 marek            1.38     static char* findSeparator(const char* data);
162 kumpf            1.35 
163                       private:
164                       
165                           static Boolean _lookupHeaderIndex(
166                               Array<HTTPHeader>& headers,
167                               const char* fieldName,
168                               Uint32& headerIndex,
169                               Boolean allowNamespacePrefix);
170 kumpf            1.4  };
171 kumpf            1.5  
172                       PEGASUS_NAMESPACE_END
173 mike             1.2  
174                       #endif /* Pegasus_HTTPMessage_h */

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2