TFCweb  1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
PeticioHTTP.h
Veure la documentació d'aquest fitxer.
1 #if !defined(_PETICIO_HTTP_H_)
2 #define _PETICIO_HTTP_H_
3 
10 /*
11  * Copyright (c) 2012 Toni Corvera
12  *
13  * This file is part of TFCWeb.
14  *
15  * TFCWeb is free software: you can redistribute it and/or modify
16  * it under the terms of the GNU General Public License as published by
17  * the Free Software Foundation, either version 3 of the License, or
18  * (at your option) any later version.
19  *
20  * TFCWeb is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with TFCWeb. If not, see <http://www.gnu.org/licenses/>.
27  */
28 
29 #include "CapsaleraHTTP.h"
30 #include "CosPeticio.h"
31 #include "Excepcions.h"
32 #include "MissatgeHTTP.h"
33 #include "portabilitat.h"
34 #include "Uri.h"
35 
36 #include <algorithm>
37 #include <cassert>
38 #include <list>
39 #include <map>
40 #include <ostream>
41 
42 namespace tfc {
43 
49  GET = 1,
52  OPTIONS, // XXX: CONNECT ??
54  PUT,
55  METODE_DELETE, // DELETE és una macro a Windows! (winnt.h)
56  CONNECT, // Introduït en l'RFC 2616
59 };
60 
65 public:
66  explicit ErrorMetodeDesconegut(const std::string & w = "Mètode HTTP desconegut")
67  : ErrorTFC(w)
68  {
69  // buit
70  }
71 };
72 
73 
77 namespace NomTipusPeticioHTTP {
82  const std::string& nom(TipusPeticioHTTP tipus);
83 
89  TipusPeticioHTTP tipus(const std::string & nom) throw (ErrorMetodeDesconegut);
90 }
91 
95 enum VersioHTTP {
100  HTTP_1_X, // HTTP 1.x > 1.1
101  HTTP_SUPERIOR // HTTP >= 2.0
102 };
104 std::ostream& operator<<(std::ostream & os, tfc::VersioHTTP v);
105 
109 class PeticioHTTP : public MissatgeHTTP<CosPeticio> {
110 public:
112  const Uri & ruta,
114  : MissatgeHTTP<CosPeticio>(), tipus_(tipus), ruta_(ruta), versio_(versio)
115  {
116  // buit
117  }
118 
122  {
123  // buit
124  }
125 
126  // Getters
127 
129  TipusPeticioHTTP tipus() const { return tipus_; }
130 
132  VersioHTTP versio() const { return versio_; }
133 
135  const Uri& ruta() const { return ruta_; }
136 
137  // Setters
138 
140  void tipus(TipusPeticioHTTP t) { tipus_ = t; }
141 
144 
146  void ruta(const Uri & ruta) { ruta_ = ruta; }
147 private:
151 
156  friend std::ostream& operator<< (std::ostream & os, const PeticioHTTP & r) {
157  os << NomTipusPeticioHTTP::nom(r.tipus()) << ", " << r.ruta()
158  << ", " << r.versio() << " [\n";
159  r.imprimeix_capsaleres(os);
160  return os << "]\n";
161  }
162 };
163 
164 } // ns tfc
165 
166 #endif // _PETICIO_HTTP_H_
167 
168 // vim:set ts=4 et ai: //