提交 f3ae194b112d60b1887e5350aace61e57d68f4a2

作者 LJH 李佳桓
1 个父辈 a287541d

add

正在显示 1 个修改的文件 包含 125 行增加0 行删除
  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 +
... ...
注册登录 后发表评论