正在显示
1 个修改的文件
包含
125 行增加
和
0 行删除
src/server/spserver/testunp.cpp
0 → 100644
1 | +/* | ||
2 | + * Copyright 2007 Stephen Liu | ||
3 | + * For license terms, see the file COPYING along with this library. | ||
4 | + */ | ||
5 | + | ||
6 | +#include <stdio.h> | ||
7 | +#include <stdlib.h> | ||
8 | +#include <string.h> | ||
9 | +#include <syslog.h> | ||
10 | +#include <signal.h> | ||
11 | +#include <unistd.h> | ||
12 | + | ||
13 | +#include "spmsgdecoder.hpp" | ||
14 | +#include "spbuffer.hpp" | ||
15 | + | ||
16 | +#include "spserver.hpp" | ||
17 | +#include "splfserver.hpp" | ||
18 | +#include "sphandler.hpp" | ||
19 | +#include "spresponse.hpp" | ||
20 | +#include "sprequest.hpp" | ||
21 | + | ||
22 | +#define MAXN 16384 /* max # bytes client can request */ | ||
23 | +#define MAXLINE 4096 /* max text line length */ | ||
24 | + | ||
25 | +class SP_UnpHandler : public SP_Handler { | ||
26 | +public: | ||
27 | + SP_UnpHandler(){} | ||
28 | + virtual ~SP_UnpHandler(){} | ||
29 | + | ||
30 | + // return -1 : terminate session, 0 : continue | ||
31 | + virtual int start( SP_Request * request, SP_Response * response ) { | ||
32 | + request->setMsgDecoder( new SP_LineMsgDecoder() ); | ||
33 | + return 0; | ||
34 | + } | ||
35 | + | ||
36 | + // return -1 : terminate session, 0 : continue | ||
37 | + virtual int handle( SP_Request * request, SP_Response * response ) { | ||
38 | + SP_LineMsgDecoder * decoder = (SP_LineMsgDecoder*)request->getMsgDecoder(); | ||
39 | + | ||
40 | + int ntowrite = atol( (char*)decoder->getMsg() ); | ||
41 | + | ||
42 | + if ((ntowrite <= 0) || (ntowrite > MAXN)) { | ||
43 | + syslog( LOG_WARNING, "WARN: client request for %d bytes", ntowrite ); | ||
44 | + return -1; | ||
45 | + } | ||
46 | + | ||
47 | + char result[ MAXN ]; | ||
48 | + | ||
49 | + response->getReply()->getMsg()->append( result, ntowrite ); | ||
50 | + | ||
51 | + return -1; | ||
52 | + } | ||
53 | + | ||
54 | + virtual void error( SP_Response * response ) {} | ||
55 | + | ||
56 | + virtual void timeout( SP_Response * response ) {} | ||
57 | + | ||
58 | + virtual void close() {} | ||
59 | +}; | ||
60 | + | ||
61 | +class SP_UnpHandlerFactory : public SP_HandlerFactory { | ||
62 | +public: | ||
63 | + SP_UnpHandlerFactory() {} | ||
64 | + virtual ~SP_UnpHandlerFactory() {} | ||
65 | + | ||
66 | + virtual SP_Handler * create() const { | ||
67 | + return new SP_UnpHandler(); | ||
68 | + } | ||
69 | +}; | ||
70 | + | ||
71 | +//--------------------------------------------------------- | ||
72 | + | ||
73 | +int main( int argc, char * argv[] ) | ||
74 | +{ | ||
75 | + int port = 1770, maxThreads = 10; | ||
76 | + const char * serverType = "lf"; | ||
77 | + | ||
78 | + extern char *optarg ; | ||
79 | + int c ; | ||
80 | + | ||
81 | + while( ( c = getopt ( argc, argv, "p:t:s:v" )) != EOF ) { | ||
82 | + switch ( c ) { | ||
83 | + case 'p' : | ||
84 | + port = atoi( optarg ); | ||
85 | + break; | ||
86 | + case 't': | ||
87 | + maxThreads = atoi( optarg ); | ||
88 | + break; | ||
89 | + case 's': | ||
90 | + serverType = optarg; | ||
91 | + break; | ||
92 | + case '?' : | ||
93 | + case 'v' : | ||
94 | + printf( "Usage: %s [-p <port>] [-t <threads>] [-s <hahs|lf>]\n", argv[0] ); | ||
95 | + exit( 0 ); | ||
96 | + } | ||
97 | + } | ||
98 | + | ||
99 | + openlog( "testunp", LOG_CONS | LOG_PID | LOG_PERROR, LOG_USER ); | ||
100 | + | ||
101 | + setlogmask( LOG_UPTO( LOG_WARNING ) ); | ||
102 | + | ||
103 | + if( 0 == strcasecmp( serverType, "hahs" ) ) { | ||
104 | + SP_Server server( "", port, new SP_UnpHandlerFactory() ); | ||
105 | + | ||
106 | + server.setTimeout( 60 ); | ||
107 | + server.setMaxThreads( maxThreads ); | ||
108 | + server.setReqQueueSize( 100, "Sorry, server is busy now!\r\n" ); | ||
109 | + | ||
110 | + server.runForever(); | ||
111 | + } else { | ||
112 | + SP_LFServer server( "", port, new SP_UnpHandlerFactory() ); | ||
113 | + | ||
114 | + server.setTimeout( 60 ); | ||
115 | + server.setMaxThreads( maxThreads ); | ||
116 | + server.setReqQueueSize( 100, "Sorry, server is busy now!\r\n" ); | ||
117 | + | ||
118 | + server.runForever(); | ||
119 | + } | ||
120 | + | ||
121 | + closelog(); | ||
122 | + | ||
123 | + return 0; | ||
124 | +} | ||
125 | + |
请
注册
或
登录
后发表评论