μHAL (v2.8.17)
Part of the IPbus software repository
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
HttpResponseGrammar.cpp
Go to the documentation of this file.
1/*
2---------------------------------------------------------------------------
3
4 This file is part of uHAL.
5
6 uHAL is a hardware access library and programming framework
7 originally developed for upgrades of the Level-1 trigger of the CMS
8 experiment at CERN.
9
10 uHAL is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 3 of the License, or
13 (at your option) any later version.
14
15 uHAL is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with uHAL. If not, see <http://www.gnu.org/licenses/>.
22
23
24 Andrew Rose, Imperial College, London
25 email: awr01 <AT> imperial.ac.uk
26
27 Marc Magrans de Abril, CERN
28 email: marc.magrans.de.abril <AT> cern.ch
29
30---------------------------------------------------------------------------
31*/
32
34
35
36#include <boost/spirit/include/qi.hpp>
37
38
39namespace uhal {
40
41 std::ostream& operator<< ( std::ostream& aStr , const uhal::HttpResponseType& aHttpResponse )
42 {
43 aStr << " > method = " << aHttpResponse.method << "\n";
44 aStr << " > version = " << aHttpResponse.version << "\n";
45 aStr << " > status = " << aHttpResponse.status << "\n";
46 aStr << " > status_string = " << aHttpResponse.status_string << "\n";
47 aStr << " > NameValuePairs =\n" << aHttpResponse.headers << "\n";
48 aStr << " > Content =\n";
49
50 for ( auto& x: aHttpResponse.content )
51 {
52 aStr << char ( x );
53 }
54
55 aStr << std::endl;
56 return aStr;
57 }
58
59}
60
61
62namespace uhal
63{
64namespace grammars
65{
66
67 HttpResponseGrammar::HttpResponseGrammar() :
68 HttpResponseGrammar::base_type ( response )
69 {
70 using namespace boost::spirit;
71 response = + ( qi::char_ - qi::lit ( "/" ) ) >> qi::lit ( "/" ) >> double_ >> int_ >> nonewline_sequence >> noblankline_sequence >> qi::lexeme[ * ( qi::char_ ) ] ;
72 nospace_sequence = qi::lexeme[ + ( qi::char_ - " " ) > " " ];
73 nonewline_sequence = qi::lexeme[ + ( qi::char_ - "\r\n" ) >> -qi::lit ( "\r\n" ) ];
74 noblankline_sequence = qi::lexeme[ + ( qi::char_ - "\r\n\r\n" ) >> -qi::lit ( "\r\n\r\n" ) ];
75 }
76
77}
78}
79
Definition: pytypes.h:1475
std::ostream & operator<<(std::ostream &aStr, const uhal::HttpResponseType &aHttpResponse)
Struct to store an http response received from a server when parsed by boost spirit.
std::string status_string
the response status string
std::string method
the http transport method
std::string headers
parsed headers
int status
the response status
std::vector< uint8_t > content
parsed message content
double version
the http version number