正在显示
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 | + | ... | ... |
请
注册
或
登录
后发表评论