00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025 #ifndef SFML_HTTP_HPP
00026 #define SFML_HTTP_HPP
00027
00029
00031 #include <SFML/System/NonCopyable.hpp>
00032 #include <SFML/Network/IPAddress.hpp>
00033 #include <SFML/Network/SocketTCP.hpp>
00034 #include <map>
00035 #include <string>
00036
00037
00038 namespace sf
00039 {
00045 class SFML_API Http : NonCopyable
00046 {
00047 public :
00048
00054 class SFML_API Request
00055 {
00056 public :
00057
00061 enum Method
00062 {
00063 Get,
00064 Post,
00065 Head
00066 };
00067
00076 Request(Method RequestMethod = Get, const std::string& URI = "/", const std::string& Body = "");
00077
00085 void SetField(const std::string& Field, const std::string& Value);
00086
00094 void SetMethod(Method RequestMethod);
00095
00103 void SetURI(const std::string& URI);
00104
00113 void SetHttpVersion(unsigned int Major, unsigned int Minor);
00114
00123 void SetBody(const std::string& Body);
00124
00125 private :
00126
00127 friend class Http;
00128
00135 std::string ToString() const;
00136
00145 bool HasField(const std::string& Field) const;
00146
00148
00150 typedef std::map<std::string, std::string> FieldTable;
00151
00153
00155 FieldTable myFields;
00156 Method myMethod;
00157 std::string myURI;
00158 unsigned int myMajorVersion;
00159 unsigned int myMinorVersion;
00160 std::string myBody;
00161 };
00162
00168 class SFML_API Response
00169 {
00170 public :
00171
00176 enum Status
00177 {
00178
00179 Ok = 200,
00180 Created = 201,
00181 Accepted = 202,
00182 NoContent = 204,
00183
00184
00185 MultipleChoices = 300,
00186 MovedPermanently = 301,
00187 MovedTemporarily = 302,
00188 NotModified = 304,
00189
00190
00191 BadRequest = 400,
00192 Unauthorized = 401,
00193 Forbidden = 403,
00194 NotFound = 404,
00195
00196
00197 InternalServerError = 500,
00198 NotImplemented = 501,
00199 BadGateway = 502,
00200 ServiceNotAvailable = 503,
00201
00202
00203 InvalidResponse = 1000,
00204 ConnectionFailed = 1001
00205 };
00206
00211 Response();
00212
00221 const std::string& GetField(const std::string& Field) const;
00222
00229 Status GetStatus() const;
00230
00237 unsigned int GetMajorHttpVersion() const;
00238
00245 unsigned int GetMinorHttpVersion() const;
00246
00257 const std::string& GetBody() const;
00258
00259 private :
00260
00261 friend class Http;
00262
00269 void FromString(const std::string& Data);
00270
00272
00274 typedef std::map<std::string, std::string> FieldTable;
00275
00277
00279 FieldTable myFields;
00280 Status myStatus;
00281 unsigned int myMajorVersion;
00282 unsigned int myMinorVersion;
00283 std::string myBody;
00284 };
00285
00290 Http();
00291
00299 Http(const std::string& Host, unsigned short Port = 0);
00300
00308 void SetHost(const std::string& Host, unsigned short Port = 0);
00309
00323 Response SendRequest(const Request& Req);
00324
00325 private :
00326
00328
00330 SocketTCP myConnection;
00331 IPAddress myHost;
00332 std::string myHostName;
00333 unsigned short myPort;
00334 };
00335
00336 }
00337
00338
00339 #endif // SFML_HTTP_HPP