libiqxmlrpc  0.12.4
 All Classes Namespaces Files Functions Typedefs Enumerations
server_conn.h
1 // Libiqxmlrpc - an object-oriented XML-RPC solution.
2 // Copyright (C) 2011 Anton Dedov
3 
4 #ifndef _iqxmlrpc_server_conn_h_
5 #define _iqxmlrpc_server_conn_h_
6 
7 #include "connection.h"
8 #include "conn_factory.h"
9 #include "http.h"
10 
11 namespace iqnet
12 {
13  class Reactor_base;
14 }
15 
16 namespace iqxmlrpc {
17 
18 class Server;
19 
20 #ifdef _MSC_VER
21 #pragma warning(push)
22 #pragma warning(disable: 4251)
23 #endif
24 
26 class LIBIQXMLRPC_API Server_connection {
27 protected:
28  iqnet::Inet_addr peer_addr;
29  Server *server;
30  http::Packet_reader preader;
31 
32  size_t read_buf_sz;
33  char *read_buf;
34 
35  std::string response;
36 
37 protected:
38  bool keep_alive;
39 
40 public:
42  virtual ~Server_connection() = 0;
43 
44  const iqnet::Inet_addr& get_peer_addr() const { return peer_addr; }
45 
46  void set_read_sz( size_t );
47 
48  void set_server( Server* s )
49  {
50  server = s;
51  }
52 
53  void schedule_response( http::Packet* );
54 
55 protected:
56  http::Packet* read_request( const std::string& );
57 
58  virtual void do_schedule_response() = 0;
59 };
60 
61 #ifdef _MSC_VER
62 #pragma warning(pop)
63 #pragma warning(disable: 4251)
64 #endif
65 
67 template < class Transport >
69 {
70  Server* server;
71  iqnet::Reactor_base* reactor;
72 
73 public:
75  server(0), reactor(0) {}
76 
77  void post_init( Server* s, iqnet::Reactor_base* r )
78  {
79  server = s;
80  reactor = r;
81  }
82 
83  void post_create( Transport* c )
84  {
85  c->set_server( server );
86  c->set_reactor( reactor );
87  }
88 };
89 
90 } // namespace iqxmlrpc
91 
92 #endif