TFCweb  1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
Uri.h
Veure la documentació d'aquest fitxer.
1 #if !defined(_TFCWEB_URLV2_H_)
2 #define _TFCWEB_URLV2_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 "Excepcions.h"
30 #include "portabilitat.h"
31 
32 #include <ostream>
33 #include <stdexcept>
34 #include <string>
35 
36 namespace tfc {
37 
41 class ErrorAnalisiUrl : public ErrorTFC {
42 public:
43  explicit ErrorAnalisiUrl(const std::string & w = "Error analitzant URL")
44  : ErrorTFC(w)
45  {
46  // buit
47  }
48 };
49 
54 class Uri {
55 public:
61  explicit Uri(const std::string & u) throw (ErrorAnalisiUrl);
62 
64  Uri(const Uri & u)
65  : esquema_(u.esquema_),
67  ruta_(u.ruta_),
68  params_(u.params_),
69  query_(u.query_),
71  {
72  // buit
73  }
74 
76  bool operator==(const Uri &) const;
77 
79  Uri& operator=(const Uri &);
80 
81  // Getters
82 
84  const std::string& esquema() const { return esquema_; }
86  const std::string& autoritat() const { return autoritat_; }
88  const std::string& host() const { return autoritat(); } // FIXME: host ==? autoritat
90  const std::string& ruta() const { return ruta_; }
92  const std::string& params() const { return params_; }
94  const std::string& query() const { return query_; }
96  const std::string& fragment() const { return fragment_; }
97 
98  // Setters
99 
101  void esquema(const std::string & v) { esquema_ = v; }
103  void autoritat(const std::string & v) { autoritat_ = v; }
108  void ruta(const std::string & v) throw (ErrorAnalisiUrl);
110  void params(const std::string & p) { params_ = p; }
112  void query(const std::string & v) { query_ = v; }
114  void fragment(const std::string & v) { fragment_ = v; }
115 
120  bool es_uri_absoluta() const;
121 
127  bool te_ruta_absoluta() const;
128 
133  operator std::string() const { return str(); }
134 
138  std::string str() const;
139 
152  static Uri normalitza(const Uri & u);
153 
163  static std::string descodifica(const std::string & url, bool & error) throw ();
164  // TODO: Caràcters segurs
172  static std::string codifica(const std::string & s) throw ();
173 
175  Uri normalitzada() const { return normalitza(*this); }
176 
177 private:
182  static std::string descodifica(const std::string&) throw (ErrorAnalisiUrl);
183 
184  std::string esquema_,
185  autoritat_,
186  ruta_,
187  params_,
188  query_,
189  fragment_;
190 
192  friend std::ostream& operator<<(std::ostream & os, const Uri & u);
193 };
194 
195 } // ns tfc
196 
197 #endif // _TFCWEB_URLV2_H_
198 
199 // vim:set ts=4 et ai: //