Move request cookie processing down to base class.
[shibboleth/xmltooling.git] / xmltooling / io / HTTPRequest.cpp
1 /*
2  *  Copyright 2001-2007 Internet2
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * HTTPRequest.cpp
19  * 
20  * Interface to HTTP requests  
21  */
22
23 #include "internal.h"
24 #include "HTTPRequest.h"
25
26 using namespace xmltooling;
27 using namespace std;
28
29 const char* HTTPRequest::getCookie(const char* name) const
30 {
31     if (m_cookieMap.empty()) {
32         string cookies=getHeader("Cookie");
33
34         string::size_type pos=0,cname,namelen,val,vallen;
35         while (pos !=string::npos && pos < cookies.length()) {
36             while (isspace(cookies[pos])) pos++;
37             cname=pos;
38             pos=cookies.find_first_of("=",pos);
39             if (pos == string::npos)
40                 break;
41             namelen=pos-cname;
42             pos++;
43             if (pos==cookies.length())
44                 break;
45             val=pos;
46             pos=cookies.find_first_of(";",pos);
47             if (pos != string::npos) {
48                 vallen=pos-val;
49                 pos++;
50                 m_cookieMap.insert(make_pair(cookies.substr(cname,namelen),cookies.substr(val,vallen)));
51             }
52             else
53                 m_cookieMap.insert(make_pair(cookies.substr(cname,namelen),cookies.substr(val)));
54         }
55     }
56     map<string,string>::const_iterator lookup=m_cookieMap.find(name);
57     return (lookup==m_cookieMap.end()) ? NULL : lookup->second.c_str();
58 }