8ca93c340f1cd80d7dfd703e2c46997fedaf7d09
[shibboleth/cpp-xmltooling.git] / xmltooling / io / HTTPRequest.cpp
1 /*
2  *  Copyright 2001-2010 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 GenericRequest::GenericRequest()
30 {
31 }
32
33 GenericRequest::~GenericRequest()
34 {
35 }
36
37 HTTPRequest::HTTPRequest()
38 {
39 }
40
41 HTTPRequest::~HTTPRequest()
42 {
43 }
44
45 bool HTTPRequest::isSecure() const
46 {
47     return strcmp(getScheme(),"https")==0;
48 }
49
50 const char* HTTPRequest::getCookie(const char* name) const
51 {
52     if (m_cookieMap.empty()) {
53         string cookies=getHeader("Cookie");
54
55         string::size_type pos=0,cname,namelen,val,vallen;
56         while (pos !=string::npos && pos < cookies.length()) {
57             while (isspace(cookies[pos])) pos++;
58             cname=pos;
59             pos=cookies.find_first_of("=",pos);
60             if (pos == string::npos)
61                 break;
62             namelen=pos-cname;
63             pos++;
64             if (pos==cookies.length())
65                 break;
66             val=pos;
67             pos=cookies.find_first_of(";",pos);
68             if (pos != string::npos) {
69                 vallen=pos-val;
70                 pos++;
71                 m_cookieMap.insert(make_pair(cookies.substr(cname,namelen),cookies.substr(val,vallen)));
72             }
73             else
74                 m_cookieMap.insert(make_pair(cookies.substr(cname,namelen),cookies.substr(val)));
75         }
76     }
77     map<string,string>::const_iterator lookup=m_cookieMap.find(name);
78     return (lookup==m_cookieMap.end()) ? nullptr : lookup->second.c_str();
79 }