1 #include <Sockets/HTTPSocket.h>
2 #include <Sockets/SocketHandler.h>
3 #include <Sockets/ListenSocket.h>
4 #include <Sockets/Exception.h>
5 
6 #ifdef SOCKETS_NAMESPACE
7 using namespace SOCKETS_NAMESPACE;
8 #endif
9 
10 
11 class tSocket : public HTTPSocket
12 {
13 public:
tSocket(ISocketHandler & h)14 	tSocket(ISocketHandler& h) : HTTPSocket(h)
15 	, m_first(false)
16 	, m_sz(0) {
17 		EnableSSL();
18 	}
19 
tSocket(ISocketHandler & h,const std::string & host)20 	tSocket(ISocketHandler& h, const std::string& host) : HTTPSocket(h), m_host(host)
21 	, m_first(false)
22 	, m_sz(0) {
23 		EnableSSL();
24 		Open(host, 4443);
25 	}
26 
InitSSLServer()27 	void InitSSLServer() {
28 		InitializeContext("", "comb.pem", "", SSLv23_method());
29 	}
30 
OnSSLAccept()31 	void OnSSLAccept() {
32 		printf("OnSSLAccept()\n");
33 		HTTPSocket::OnSSLAccept();
34 	}
35 
OnSSLConnect()36 	void OnSSLConnect() {
37 		printf("OnSSLConnect()\n");
38 		HTTPSocket::OnSSLConnect();
39 	}
40 
OnAccept()41 	void OnAccept() {
42 printf("OnAccept\n");
43 	}
44 
OnConnect()45 	void OnConnect() {
46 printf("OnConnect\n");
47 		Send("GET /index.html HTTP/1.0\r\n");
48 		Send("Host: " + m_host + "\r\n");
49 		Send("\r\n");
50 	}
51 
OnFirst()52 	void OnFirst() {
53 	}
54 
OnHeader(const std::string & key,const std::string & value)55 	void OnHeader(const std::string& key, const std::string& value) {
56 		fprintf(stderr, "%s: %s\n", key.c_str(), value.c_str());
57 	}
58 
OnHeaderComplete()59 	void OnHeaderComplete() {
60 		fprintf(stderr, "\n");
61 	}
62 
OnData(const char * buf,size_t sz)63 	void OnData(const char *buf, size_t sz) {
64 		if (1||!m_first)
65 		{
66 			std::string str = buf;
67 			str.resize( sz );
68 			printf("%s", str.c_str());
69 			m_first = true;
70 		}
71 		m_sz += sz;
72 	}
73 
OnDelete()74 	void OnDelete() {
75 		fprintf(stderr, "Content length: %d\n", m_sz);
76 	}
77 
78 private:
79 	std::string m_host;
80 	bool m_first;
81 	size_t m_sz;
82 };
83 
84 
main(int argc,char * argv[])85 int main(int argc, char *argv[])
86 {
87 	try
88 	{
89 		SocketHandler h;
90 		if (argc > 1 && !strcmp(argv[1], "-server"))
91 		{
92 			ListenSocket<tSocket> l(h);
93 			l.Bind(4443);
94 			h.Add(&l);
95 			while (h.GetCount())
96 			{
97 				h.Select(1, 0);
98 			}
99 		}
100 		else
101 		{
102 			std::string host = argc > 1 ? argv[1] : "www.alhem.net";
103 			tSocket sock(h, host);
104 			h.Add(&sock);
105 			while (h.GetCount())
106 			{
107 				h.Select(1, 0);
108 			}
109 		}
110 	}
111 	catch (const Exception& e)
112 	{
113 		printf("%s\n", e.ToString().c_str());
114 	}
115 }
116 
117 
118