diff --git a/tcpcgi/TcpCgi.cpp b/tcpcgi/TcpCgi.cpp new file mode 100644 index 0000000..a8aefe2 --- /dev/null +++ b/tcpcgi/TcpCgi.cpp @@ -0,0 +1,72 @@ +#include "TcpCgi.hpp" + + +namespace{ +LocalServer *cidwServer = LocalServer::instance(); +} + +TcpCgi::TcpCgi() +{ + print_light_green("TcpCgi Init\n"); +} + +void TcpCgi::startCgiServer() +{ + int listenfd, connfd; + int mw_optval = 1; + + struct sockaddr_in servaddr; + char buff[40960]; + int n; + if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){ + printf("create socket error: %s(errno: %d)\n",strerror(errno),errno); + return; + } + setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (char *)&mw_optval,sizeof(mw_optval)); + + memset(&servaddr, 0, sizeof(servaddr)); + servaddr.sin_family = AF_INET; + servaddr.sin_addr.s_addr = htonl(INADDR_ANY); + servaddr.sin_port = htons(7305); + + if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ + printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno); + return; + } + + if( listen(listenfd, 10) == -1){ + printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno); + return; + } + + while(1){ + if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1) { + printf("accept socket error: %s(errno: %d)",strerror(errno),errno); + continue; + } + n = recv(connfd, buff, 40960, 0); + if ( n <= 0) { + print_info("recv fail\n"); + close(connfd); + } else { + buff[n] = '\0'; + + std::string recvData = std::string(buff); + std::string reqData = cidwServer->HandleCgi_cmd(recvData); + //print_info("send cgi : %s\n length = %d\n", reqData.c_str(),reqData.length()); + if( send(connfd, reqData.c_str(), reqData.length(), 0) < 0){ + printf("send msg error: %s(errno: %d)\n", strerror(errno), errno); + } + close(connfd); + } + } + close(listenfd); + return; + +} + +TcpCgi::~TcpCgi() +{ + +} + diff --git a/tcpcgi/TcpCgi.hpp b/tcpcgi/TcpCgi.hpp new file mode 100644 index 0000000..c2b30b3 --- /dev/null +++ b/tcpcgi/TcpCgi.hpp @@ -0,0 +1,31 @@ +#ifndef TCPCGI_H +#define TCPCGI_H + +#include +#include +#include +#include +#include +#include +#include +#include "../common/SH_CommonFunc.hpp" +#include "../API_log/SH_log.h" +#include "../utility/SH_MySingleton.hpp" +#include "../common/SH_global.h" +#include "../localserver/SH_LocalServer.hpp" + + +class TcpCgi : public MySingleton { + +public: + TcpCgi(); + ~TcpCgi(); + + void startCgiServer(); +}; + +#endif + + + +