Guitar
inetclient.h
Go to the documentation of this file.
1 #ifndef INETCLIENT_H
2 #define INETCLIENT_H
3 
4 #include <cassert>
5 #include <memory>
6 #include <string>
7 #include <vector>
8 
9 class InetClient {
10 public:
11  class Error {
12  private:
13  std::string msg_;
14  public:
15  Error() = default;
16  Error(std::string const &message)
17  : msg_(message)
18  {
19  }
20  std::string what() const
21  {
22  return msg_;
23  }
24  };
25  class URL {
26  private:
27  struct Data {
28  std::string full_request;
29  std::string scheme;
30  std::string host;
31  int port = 0;
32  std::string path;
33  } data_;
34  public:
35  URL() = default;
36  URL(std::string const &addr);
37  std::string const &full_request() const { return data_.full_request; }
38  std::string const &scheme() const { return data_.scheme; }
39  std::string const &host() const { return data_.host; }
40  int port() const { return data_.port; }
41  std::string const &path() const { return data_.path; }
42  bool is_ssl() const;
43  };
44  struct Authorization {
45  enum Type {
48  } type = None;
49  std::string uid;
50  std::string pwd;
51  };
52  struct Post {
53  std::string content_type;
54  std::string boundary;
55  std::vector<char> data;
56  };
57  class Request {
58  private:
61  std::vector<std::string> headers_;
62  public:
63  Request() = default;
64  Request(std::string const &loc, std::vector<std::string> const &headers = {})
65  : url_(loc)
66  , headers_(headers)
67  {
68  }
69  InetClient::URL const &url() const
70  {
71  return url_;
72  }
74  {
75  return auth_;
76  }
77  std::vector<std::string> const &headers() const
78  {
79  return headers_;
80  }
81  void set_location(std::string const &loc)
82  {
83  url_ = InetClient::URL(loc);
84  }
85  void set_authorization(Authorization::Type type, std::string const &uid, std::string const &pwd)
86  {
87  auth_.type = type;
88  auth_.uid = uid;
89  auth_.pwd = pwd;
90  }
91  void set_basic_authorization(std::string const &uid, std::string const &pwd)
92  {
94  }
95  void add_header(std::string const &s)
96  {
97  headers_.push_back(s);
98  }
99  };
100  struct Response {
101  int code = 0;
102  struct Version {
103  unsigned int hi = 0;
104  unsigned int lo = 0;
106  std::vector<std::string> header;
107  std::vector<char> content;
108  bool empty() const
109  {
110  return content.empty();
111  }
112  void clear()
113  {
114  code = 0;
115  content.clear();
116  }
117  };
118 };
119 
121 protected:
123  {
124  return this;
125  }
126 public:
127  virtual ~AbstractInetClient() = default;
129  {
130  return clientptr();
131  }
132  AbstractInetClient const *client() const
133  {
134  return const_cast<AbstractInetClient *>(this)->clientptr();
135  }
136  virtual void reset() = 0;
137  virtual void close() = 0;
138  virtual InetClient::Error const &error() const = 0;
139  virtual int get(InetClient::Request const &req) = 0;
140  virtual int post(InetClient::Request const &req, InetClient::Post const *post) = 0;
141  virtual InetClient::Response const &response() const = 0;
142  virtual size_t content_length() const = 0;
143  virtual char const *content_data() const = 0;
144 };
145 
146 #endif // INETCLIENT_H
Definition: inetclient.h:120
virtual char const * content_data() const =0
AbstractInetClient * client()
Definition: inetclient.h:128
virtual ~AbstractInetClient()=default
virtual InetClient::Error const & error() const =0
virtual void reset()=0
virtual int post(InetClient::Request const &req, InetClient::Post const *post)=0
virtual int get(InetClient::Request const &req)=0
virtual void close()=0
virtual size_t content_length() const =0
virtual AbstractInetClient * clientptr()
Definition: inetclient.h:122
AbstractInetClient const * client() const
Definition: inetclient.h:132
virtual InetClient::Response const & response() const =0
Definition: inetclient.h:11
std::string what() const
Definition: inetclient.h:20
Error(std::string const &message)
Definition: inetclient.h:16
std::string msg_
Definition: inetclient.h:13
Definition: inetclient.h:57
InetClient::URL url_
Definition: inetclient.h:59
std::vector< std::string > const & headers() const
Definition: inetclient.h:77
InetClient::URL const & url() const
Definition: inetclient.h:69
std::vector< std::string > headers_
Definition: inetclient.h:61
Authorization auth_
Definition: inetclient.h:60
void add_header(std::string const &s)
Definition: inetclient.h:95
Request(std::string const &loc, std::vector< std::string > const &headers={})
Definition: inetclient.h:64
Authorization auth() const
Definition: inetclient.h:73
void set_location(std::string const &loc)
Definition: inetclient.h:81
void set_authorization(Authorization::Type type, std::string const &uid, std::string const &pwd)
Definition: inetclient.h:85
void set_basic_authorization(std::string const &uid, std::string const &pwd)
Definition: inetclient.h:91
Definition: inetclient.h:25
std::string const & full_request() const
Definition: inetclient.h:37
int port() const
Definition: inetclient.h:40
std::string const & scheme() const
Definition: inetclient.h:38
std::string const & path() const
Definition: inetclient.h:41
bool is_ssl() const
Definition: inetclient.cpp:85
struct InetClient::URL::Data data_
std::string const & host() const
Definition: inetclient.h:39
Definition: inetclient.h:9
Definition: inetclient.h:44
Type
Definition: inetclient.h:45
@ Basic
Definition: inetclient.h:47
@ None
Definition: inetclient.h:46
std::string pwd
Definition: inetclient.h:50
std::string uid
Definition: inetclient.h:49
enum InetClient::Authorization::Type type
Definition: inetclient.h:52
std::string content_type
Definition: inetclient.h:53
std::string boundary
Definition: inetclient.h:54
std::vector< char > data
Definition: inetclient.h:55
Definition: inetclient.h:102
unsigned int lo
Definition: inetclient.h:104
unsigned int hi
Definition: inetclient.h:103
Definition: inetclient.h:100
void clear()
Definition: inetclient.h:112
std::vector< std::string > header
Definition: inetclient.h:106
std::vector< char > content
Definition: inetclient.h:107
struct InetClient::Response::Version version
bool empty() const
Definition: inetclient.h:108
int code
Definition: inetclient.h:101
Definition: inetclient.h:27
std::string path
Definition: inetclient.h:32
std::string scheme
Definition: inetclient.h:29
std::string full_request
Definition: inetclient.h:28
std::string host
Definition: inetclient.h:30
int port
Definition: inetclient.h:31