source: cheroxy/trunk/src/main.cpp@ 35

Last change on this file since 35 was 35, checked in by cheese, 12 years ago

#1 add debugging message

File size: 3.9 KB
RevLine 
[6]1#ifdef _WIN32
2# define _CRT_SECURE_NO_WARNINGS
3#endif
4
5#include "CRXSocket.h"
[18]6#include "CRXProxy.h"
[6]7
8#include <iostream>
9#include <iomanip>
10#include <sstream>
11
12#include <stdio.h>
[29]13#include <stdlib.h>
[6]14#include <string.h>
15
16using namespace std;
17
[24]18#ifdef _WIN32
19# include <process.h>
20# define THREAD_TYPE void *
21# define THREAD_FUNCTION_RETURN unsigned int
22# define THREAD_FUNCTION_CALLING_CONVENTION WINAPI
23#else
24# define THREAD_TYPE pthread_t
25# define THREAD_FUNCTION_RETURN void *
26# define THREAD_FUNCTION_CALLING_CONVENTION
27#endif
28
29THREAD_FUNCTION_RETURN
30THREAD_FUNCTION_CALLING_CONVENTION
31CRXProxyMTWrapper (void * aThreadArg);
32
33int ThreadPool (CRXSocket * aProxySocket,
34 const int aThreadPoolCount);
35
[6]36int main (int argc, char* argv[])
37{
[24]38 int aResult = 0;
39 const short aPort = 8080;
40 const int aThreadPoolCount = 30;
[6]41
[24]42 CRXSocket aProxySocket;
[6]43
44 /*----------------------------------------------------------------*/
[24]45 /* 1. create proxy server */
46 aResult = aProxySocket.CreateServer (aPort);
[6]47 if (aResult < 0)
48 {
[22]49 cout << "Failed to create server." << endl;
[6]50 return aResult;
51 }
52
[24]53 /* 2. ready proxy servers */
54 aResult = ThreadPool (&aProxySocket, aThreadPoolCount);
55 if (aResult)
56 {
57 cout << "Failed to create thread pool." << endl;
58 return aResult;
59 }
60
61 /* 3. keep process */
62 while (true);
63
64 /*----------------------------------------------------------------*/
65 aProxySocket.Close ();
66
67 return aResult;
68}
69
70THREAD_FUNCTION_RETURN
71THREAD_FUNCTION_CALLING_CONVENTION
72CRXProxyMTWrapper (void * aThreadArg)
73{
74 int aResult = 0;
75
76 CRXSocket * aProxySocket = (CRXSocket *)aThreadArg;
77 CRXProxy * aProxy = NULL;
78
[35]79 char aFilterFileExtension[] = "exe|gif|jpg|png|css|js|ico|swf|";
[34]80 char * aHttpMessage = NULL;
81 int aHttpMessageLength = 0;
[28]82
[24]83 /*----------------------------------------------------------------*/
[6]84 for (;;)
85 {
[24]86 aResult = aProxySocket->Accept ();
[6]87 if (aResult < 0)
88 {
[24]89 cerr << "Failed to accept." << endl;
[6]90 break;
91 }
92
[24]93 if ((aProxy = CRXProxy::GetNewInstance ()) == NULL)
[6]94 {
[24]95 cerr << "Failed to get proxy." << endl;
[6]96 aResult = -1;
97 break;
98 }
99
[24]100 aProxy->SetClientSocket (aResult);
[28]101 aProxy->SetRequestFilter (CRX_FILTER_REQUEST_FILE_EXTENSION,
102 CRX_FILTER_MATCHED,
103 aFilterFileExtension);
[24]104
105 aResult = aProxy->Forward ();
[6]106 if (aResult < 0)
107 {
[35]108 cout << aProxy->GetErrorMessage () << endl;
[6]109 }
[24]110
[28]111 if (!aProxy->CheckRequestFilter (CRX_FILTER_REQUEST_FILE_EXTENSION))
112 {
[34]113 aHttpMessageLength = aProxy->GetHttpRequestLength ();
114 aHttpMessage = (char *) calloc (aHttpMessageLength + 1, 1);
115 cout << aProxy->GetHttpRequest (aHttpMessage, aHttpMessageLength) << endl;
116 free (aHttpMessage);
117
[35]118 aHttpMessageLength = aProxy->GetHttpResponseHeaderLength ();
[34]119 aHttpMessage = (char *) calloc (aHttpMessageLength + 1, 1);
[35]120 cout << aProxy->GetHttpResponseHeader (aHttpMessage, aHttpMessageLength) << endl;
[34]121 free (aHttpMessage);
[28]122 }
123
[24]124 aProxy->ReleaseInstance ();
[6]125 }
126
[35]127 cout << " thread exit." << endl;
[6]128 /*----------------------------------------------------------------*/
129
[24]130 return (THREAD_FUNCTION_RETURN)0;
131}
132
133int ThreadPool (CRXSocket * aProxySocket,
134 const int aThreadPoolCount)
135{
136 int aResult = 0;
137 int aIter = 0;
138 THREAD_TYPE aThreadID = (THREAD_TYPE)0;
139
140 /*----------------------------------------------------------------*/
141 for (aIter = 0 ; aIter < aThreadPoolCount ; aIter++)
142 {
143#ifdef _WIN32
144 aThreadID = (void *)_beginthreadex (0, 0, CRXProxyMTWrapper, aProxySocket, 0, 0);
145 if (aThreadID == NULL)
146 {
147 aResult = -1;
148 break;
149 }
150 CloseHandle (aThreadID);
151#else
152 aResult = pthread_create (&aThreadID, NULL, CRXProxyMTWrapper, aProxySocket);
153 if (aResult < 0)
154 {
155 break;
156 }
157#endif
158 cout << "Thread(" << aIter + 1 << ") is created successfully." << endl;
159 }
160 /*----------------------------------------------------------------*/
161
[6]162 return aResult;
[35]163}
Note: See TracBrowser for help on using the repository browser.