/* * Copyright 2007 Stephen Liu * For license terms, see the file COPYING along with this library. */ #include #include #include #include #include #include #include "spmsgdecoder.hpp" #include "spbuffer.hpp" #include "spserver.hpp" #include "sphandler.hpp" #include "spresponse.hpp" #include "sprequest.hpp" #include "spmatrixssl.hpp" class SP_EchoHandler : public SP_Handler { public: SP_EchoHandler(){} virtual ~SP_EchoHandler(){} // return -1 : terminate session, 0 : continue virtual int start( SP_Request * request, SP_Response * response ) { request->setMsgDecoder( new SP_LineMsgDecoder() ); response->getReply()->getMsg()->append( "Welcome to line echo server, enter 'quit' to quit.\r\n" ); return 0; } // return -1 : terminate session, 0 : continue virtual int handle( SP_Request * request, SP_Response * response ) { SP_LineMsgDecoder * decoder = (SP_LineMsgDecoder*)request->getMsgDecoder(); if( 0 != strcasecmp( (char*)decoder->getMsg(), "quit" ) ) { response->getReply()->getMsg()->append( (char*)decoder->getMsg() ); response->getReply()->getMsg()->append( "\r\n" ); return 0; } else { response->getReply()->getMsg()->append( "Byebye\r\n" ); return -1; } } virtual void error( SP_Response * response ) {} virtual void timeout( SP_Response * response ) {} virtual void close() {} }; class SP_EchoHandlerFactory : public SP_HandlerFactory { public: SP_EchoHandlerFactory() {} virtual ~SP_EchoHandlerFactory() {} virtual SP_Handler * create() const { return new SP_EchoHandler(); } }; //--------------------------------------------------------- int main( int argc, char * argv[] ) { #ifdef LOG_PERROR openlog( "testechos", LOG_CONS | LOG_PID | LOG_PERROR, LOG_USER ); #else openlog( "testechos", LOG_CONS | LOG_PID, LOG_USER ); #endif int port = 1995; SP_Server server( "", port, new SP_EchoHandlerFactory() ); SP_MatrixsslChannelFactory * matrixsslFactory = new SP_MatrixsslChannelFactory(); matrixsslFactory->init( "demo.crt", "demo.key" ); server.setIOChannelFactory( matrixsslFactory ); server.runForever(); return 0; }