From 6d3b1b7d7daa7d6383a7c02275d8b410f822e4d2 Mon Sep 17 00:00:00 2001 From: Andreas Oberritter Date: Sat, 15 Aug 2009 18:32:30 +0200 Subject: [PATCH] remove unused lib/network --- lib/network/.cvsignore | 3 - lib/network/Makefile.am | 9 - lib/network/http.cpp | 33 --- lib/network/http.h | 28 -- lib/network/http_dyn.cpp | 74 ----- lib/network/http_dyn.h | 38 --- lib/network/http_file.cpp | 241 ----------------- lib/network/http_file.h | 41 --- lib/network/httpd.cpp | 623 ------------------------------------------- lib/network/httpd.h | 130 --------- lib/network/serversocket.cpp | 55 ---- lib/network/serversocket.h | 18 -- lib/network/socket.cpp | 291 -------------------- lib/network/socket.h | 63 ----- lib/network/socket.lo | Bin 224317 -> 0 bytes 15 files changed, 1647 deletions(-) delete mode 100644 lib/network/.cvsignore delete mode 100644 lib/network/Makefile.am delete mode 100644 lib/network/http.cpp delete mode 100644 lib/network/http.h delete mode 100644 lib/network/http_dyn.cpp delete mode 100644 lib/network/http_dyn.h delete mode 100644 lib/network/http_file.cpp delete mode 100644 lib/network/http_file.h delete mode 100644 lib/network/httpd.cpp delete mode 100644 lib/network/httpd.h delete mode 100644 lib/network/serversocket.cpp delete mode 100644 lib/network/serversocket.h delete mode 100644 lib/network/socket.cpp delete mode 100644 lib/network/socket.h delete mode 100644 lib/network/socket.lo diff --git a/lib/network/.cvsignore b/lib/network/.cvsignore deleted file mode 100644 index e995588..0000000 --- a/lib/network/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -.deps -Makefile -Makefile.in diff --git a/lib/network/Makefile.am b/lib/network/Makefile.am deleted file mode 100644 index f9677a1..0000000 --- a/lib/network/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -INCLUDES = \ - -I$(top_srcdir)/include - -noinst_LIBRARIES = libenigma_network.a - -libenigma_network_a_SOURCES = \ - httpd.cpp http_dyn.cpp http_file.cpp http.cpp serversocket.cpp socket.cpp - -# xmlrpc.cpp diff --git a/lib/network/http.cpp b/lib/network/http.cpp deleted file mode 100644 index dc98a0b..0000000 --- a/lib/network/http.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include - -eHTTPServer *eHTTPServer::m_instance; - -RESULT eHTTPServer::getDynResolver(eHTTPDynPathResolverPtr &ptr) -{ - ptr = m_dyn; - if (!m_dyn) - return -1; - return 0; -} - -RESULT eHTTPServer::getFileResolver(eHTTPFilePathResolverPtr &ptr) -{ - ptr = m_file; - if (!m_file) - return -1; - return 0; -} - -eHTTPServer::eHTTPServer(): m_httpd(8080, eApp) -{ - m_instance = this; - m_dyn = new eHTTPDynPathResolver(); - m_file = new eHTTPFilePathResolver(); - - m_httpd.addResolver(m_dyn); - m_httpd.addResolver(m_file); -} - -eAutoInitP0 init_eHTTPServer(eAutoInitNumbers::network, "main http server"); diff --git a/lib/network/http.h b/lib/network/http.h deleted file mode 100644 index fa2a4fb..0000000 --- a/lib/network/http.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __http_h -#define __http_h - -#include -#include -#include - -class eHTTPDynPathResolver; -class eHTTPFilePathResolver; - -typedef ePtr eHTTPDynPathResolverPtr; -typedef ePtr eHTTPFilePathResolverPtr; - -class eHTTPServer -{ - eHTTPD m_httpd; - static eHTTPServer *m_instance; - eHTTPDynPathResolverPtr m_dyn; - eHTTPFilePathResolverPtr m_file; -public: - RESULT getDynResolver(eHTTPDynPathResolverPtr &ptr); - RESULT getFileResolver(eHTTPFilePathResolverPtr &ptr); - - eHTTPServer(); - static eHTTPServer *getInstance() { return m_instance; } -}; - -#endif diff --git a/lib/network/http_dyn.cpp b/lib/network/http_dyn.cpp deleted file mode 100644 index c3a4904..0000000 --- a/lib/network/http_dyn.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#include - -DEFINE_REF(eHTTPDyn); -eHTTPDyn::eHTTPDyn(eHTTPConnection *c, std::string result): eHTTPDataSource(c), result(result) -{ - wptr=0; - char buffer[10]; - snprintf(buffer, 10, "%d", size=result.length()); - c->local_header["Content-Length"]=std::string(buffer); - if (c->code == -1) - { - c->code=200; - c->code_descr="OK"; - } -} - -eHTTPDyn::~eHTTPDyn() -{ -} - -int eHTTPDyn::doWrite(int hm) -{ - int tw=size-wptr; - if (tw>hm) - tw=hm; - if (tw<=0) - return -1; - connection->writeBlock(result.c_str()+wptr, tw); - wptr+=tw; - return (size > wptr) ? 1 : -1; -} - -DEFINE_REF(eHTTPDynPathResolver); -DEFINE_REF(eHTTPDynPathResolver::eHTTPDynEntry); - -eHTTPDynPathResolver::eHTTPDynPathResolver() -{ -} - -void eHTTPDynPathResolver::addDyn(std::string request, std::string path, std::string (*function)(std::string, std::string, std::string, eHTTPConnection*)) -{ - dyn.push_back(new eHTTPDynEntry(request, path, function)); -} - -RESULT eHTTPDynPathResolver::getDataSource(eHTTPDataSourcePtr &ptr, std::string request, std::string path, eHTTPConnection *conn) -{ - std::string p, opt; - if (path.find('?')!=std::string::npos) - { - p=path.substr(0, path.find('?')); - opt=path.substr(path.find('?')+1); - } else - { - p=path; - opt=""; - } - for (eSmartPtrList::iterator i(dyn); i != dyn.end(); ++i) - if ((i->path==p) && (i->request==request)) - { - conn->code=-1; - std::string s=i->function(request, path, opt, conn); - - if (!s.empty()) - { - ptr = new eHTTPDyn(conn, s); - return 0; - } - - ptr = new eHTTPError(conn, 500); - return 0; - } - ptr = 0; - return -1; -} diff --git a/lib/network/http_dyn.h b/lib/network/http_dyn.h deleted file mode 100644 index 26fca87..0000000 --- a/lib/network/http_dyn.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __http_dyn_h_ -#define __http_dyn_h_ -#include -#include - -class eHTTPDyn: public eHTTPDataSource -{ - DECLARE_REF(eHTTPDyn); - std::string result; - int wptr, size; -public: - eHTTPDyn(eHTTPConnection *c, std::string result); - ~eHTTPDyn(); - int doWrite(int); -}; - -class eHTTPDynPathResolver: public iHTTPPathResolver -{ - DECLARE_REF(eHTTPDynPathResolver); - struct eHTTPDynEntry: public iObject - { - DECLARE_REF(eHTTPDynEntry); - public: - std::string request, path; - std::string (*function)(std::string request, std::string path, std::string opt, eHTTPConnection *content); - - eHTTPDynEntry(std::string request, std::string path, std::string (*function)(std::string, std::string, std::string, eHTTPConnection *)): request(request), path(path), function(function) - { - } - }; - eSmartPtrList dyn; -public: - void addDyn(std::string request, std::string path, std::string (*function)(std::string, std::string, std::string, eHTTPConnection *conn)); - eHTTPDynPathResolver(); - RESULT getDataSource(eHTTPDataSourcePtr &ptr, std::string request, std::string path, eHTTPConnection *conn); -}; - -#endif diff --git a/lib/network/http_file.cpp b/lib/network/http_file.cpp deleted file mode 100644 index 6c6abc8..0000000 --- a/lib/network/http_file.cpp +++ /dev/null @@ -1,241 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -DEFINE_REF(eHTTPFile); - -eHTTPFile::eHTTPFile(eHTTPConnection *c, int _fd, int method, const char *mime): eHTTPDataSource(c), method(method) -{ - fd=_fd; - if (method == methodGET) - { - c->local_header["Content-Type"]=std::string(mime); - size=lseek(fd, 0, SEEK_END); - char asize[10]; - snprintf(asize, 10, "%d", size); - lseek(fd, 0, SEEK_SET); - c->local_header["Content-Length"]=std::string(asize); - } - connection->code_descr="OK"; - connection->code=200; -} - -int eHTTPFile::doWrite(int bytes) -{ - if (method == methodGET) - { - char buff[bytes]; - if (!size) - return -1; - int len=bytes; - if (len>size) - len=size; - len=read(fd, buff, len); - if (len<=0) - return -1; - size-=connection->writeBlock(buff, len); - if (!size) - return -1; - else - return 1; - } else - return -1; -} - -void eHTTPFile::haveData(void *data, int len) -{ - if (method != methodPUT) - return; - ::write(fd, data, len); -} - -eHTTPFile::~eHTTPFile() -{ - close(fd); -} - -eHTTPFilePathResolver::eHTTPFilePathResolver() -{ -} - - -static char _base64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - -static int unbase64(std::string &dst, const std::string string) -{ - dst=""; - char c[4]; - int pos=0; - unsigned int i=0; - - while (1) - { - if (i == string.size()) - break; - char *ch=strchr(_base64, string[i++]); - if (!ch) - { - i++; - continue; - } - c[pos++]=ch-_base64; - if (pos == 4) - { - char d[3]; - d[0]=c[0]<<2; - d[0]|=c[1]>>4; - d[1]=c[1]<<4; - d[1]|=c[2]>>2; - d[2]=c[2]<<6; - d[2]|=c[3]; - - dst+=d[0]; - if (c[2] != 64) - dst+=d[1]; - if (c[3] != 64) - dst+=d[2]; - pos=0; - } - } - return pos; -} - -int CheckUnixPassword(const char *user, const char *pass) -{ - passwd *pwd=getpwnam(user); - if (!pwd) - return -1; - char *cpwd=pwd->pw_passwd; - if (pwd && (!strcmp(pwd->pw_passwd, "x"))) - { - spwd *sp=getspnam(user); - if (!sp) // no shadow password defined. - return -1; - cpwd=sp->sp_pwdp; - } - if (!cpwd) - return -1; - if ((*cpwd=='!')||(*cpwd=='*')) // disabled user - return -2; - char *cres=crypt(pass, cpwd); - return !!strcmp(cres, cpwd); -} - -static int checkAuth(const std::string cauth) -{ - std::string auth; - if (cauth.substr(0, 6) != "Basic ") - return -1; - if (unbase64(auth, cauth.substr(6))) - return -1; - std::string username=auth.substr(0, auth.find(":")); - std::string password=auth.substr(auth.find(":")+1); - if (CheckUnixPassword(username.c_str(), password.c_str())) - return -1; - return 0; -} - -DEFINE_REF(eHTTPFilePathResolver); - -RESULT eHTTPFilePathResolver::getDataSource(eHTTPDataSourcePtr &ptr, std::string request, std::string path, eHTTPConnection *conn) -{ - int method; - eDebug("request = %s, path = %s", request.c_str(), path.c_str()); - if (request == "GET") - method=eHTTPFile::methodGET; - else if (request == "PUT") - method=eHTTPFile::methodPUT; - else - { - ptr = new eHTTPError(conn, 405); // method not allowed - return 0; - } - if (path.find("../")!=std::string::npos) // evil hax0r - { - ptr = new eHTTPError(conn, 403); - return 0; - } - if (path[0] != '/') // prepend '/' - path.insert(0,"/"); - if (path[path.length()-1]=='/') - path+="index.html"; - - eHTTPDataSource *data=0; - for (ePtrList::iterator i(translate); i != translate.end(); ++i) - { - if (i->root==path.substr(0, i->root.length())) - { - std::string newpath=i->path+path.substr(i->root.length()); - if (newpath.find('?')) - newpath=newpath.substr(0, newpath.find('?')); - eDebug("translated %s to %s", path.c_str(), newpath.c_str()); - - if (i->authorized & ((method==eHTTPFile::methodGET)?1:2)) - { - std::map::iterator i=conn->remote_header.find("Authorization"); - if ((i == conn->remote_header.end()) || checkAuth(i->second)) - { - conn->local_header["WWW-Authenticate"]="Basic realm=\"dreambox\""; - ptr = new eHTTPError(conn, 401); // auth req'ed - return 0; - } - } - - int fd=open(newpath.c_str(), (method==eHTTPFile::methodGET)?O_RDONLY:(O_WRONLY|O_CREAT|O_TRUNC), 0644); - - if (fd==-1) - { - switch (errno) - { - case ENOENT: - data=new eHTTPError(conn, 404); - break; - case EACCES: - data=new eHTTPError(conn, 403); - break; - default: - data=new eHTTPError(conn, 403); // k.a. - break; - } - break; - } - - std::string ext=path.substr(path.rfind('.')); - const char *mime="text/unknown"; - if ((ext==".html") || (ext==".htm")) - mime="text/html"; - else if ((ext==".jpeg") || (ext==".jpg")) - mime="image/jpeg"; - else if (ext==".gif") - mime="image/gif"; - else if (ext==".css") - mime="text/css"; - else if (ext==".png") - mime="image/png"; - else if (ext==".xml") - mime="text/xml"; - else if (ext==".xsl") - mime="text/xsl"; - - data=new eHTTPFile(conn, fd, method, mime); - break; - } - } - if (!data) - return -1; - ptr = data; - return 0; -} - -void eHTTPFilePathResolver::addTranslation(std::string path, std::string root, int authorized) -{ - if (path[path.length()-1]!='/') - path+='/'; - if (root[root.length()-1]!='/') - root+='/'; - translate.push_back(new eHTTPFilePath(path, root, authorized)); -} diff --git a/lib/network/http_file.h b/lib/network/http_file.h deleted file mode 100644 index a9c86c5..0000000 --- a/lib/network/http_file.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef __http_file_h -#define __http_file_h - -#include "httpd.h" - -class eHTTPFile: public eHTTPDataSource -{ - DECLARE_REF(eHTTPFile); -private: - int fd, size; - const char *mime; - int method; -public: - enum { methodGET, methodPUT }; - eHTTPFile(eHTTPConnection *c, int fd, int method, const char *mime); - ~eHTTPFile(); - int doWrite(int); - void haveData(void *data, int len); -}; - -class eHTTPFilePathResolver: public iHTTPPathResolver -{ - DECLARE_REF(eHTTPFilePathResolver); -public: - struct eHTTPFilePath - { - std::string path; - std::string root; - int authorized; // must be authorized (1 means read, 2 write) - eHTTPFilePath(std::string path, std::string root, int authorized): path(path), root(root), authorized(authorized) - { - } - }; - ePtrList translate; -public: - eHTTPFilePathResolver(); - RESULT getDataSource(eHTTPDataSourcePtr &ptr, std::string request, std::string path, eHTTPConnection *conn); - void addTranslation(std::string path, std::string root, int auth); -}; - -#endif diff --git a/lib/network/httpd.cpp b/lib/network/httpd.cpp deleted file mode 100644 index c89ad7e..0000000 --- a/lib/network/httpd.cpp +++ /dev/null @@ -1,623 +0,0 @@ -// #define DEBUG_HTTPD -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -eHTTPDataSource::eHTTPDataSource(eHTTPConnection *c): connection(c) -{ -} - -eHTTPDataSource::~eHTTPDataSource() -{ -} - -void eHTTPDataSource::haveData(void *data, int len) -{ -} - -int eHTTPDataSource::doWrite(int) -{ - return 0; -} - -DEFINE_REF(eHTTPError); - -eHTTPError::eHTTPError(eHTTPConnection *c, int errcode): eHTTPDataSource(c), errcode(errcode) -{ - std::string error="unknown error"; - switch (errcode) - { - case 400: error="Bad Request"; break; - case 401: error="Unauthorized"; break; - case 403: error="Forbidden"; break; - case 404: error="Not found"; break; - case 405: error="Method not allowed"; break; - case 500: error="Internal server error"; break; - } - connection->code_descr=error; - connection->code=errcode; - - connection->local_header["Content-Type"]=std::string("text/html"); -} - -int eHTTPError::doWrite(int w) -{ - std::string html; - html+="Error " + getNum(connection->code) + ""+ - "

Error " + getNum(errcode) + ": " + connection->code_descr + "

\n"; - connection->writeBlock(html.c_str(), html.length()); - return -1; -} - -eHTTPConnection::eHTTPConnection(int socket, int issocket, eHTTPD *parent, int persistent): eSocket(socket, issocket, parent->ml), parent(parent), persistent(persistent) -{ -#ifdef DEBUG_HTTPD - eDebug("eHTTPConnection"); -#endif - CONNECT(this->readyRead_ , eHTTPConnection::readData); - CONNECT(this->bytesWritten_ , eHTTPConnection::bytesWritten); - CONNECT(this->error_ , eHTTPConnection::gotError); - CONNECT(this->connectionClosed_ , eHTTPConnection::destruct); - CONNECT(this->hangup , eHTTPConnection::gotHangup); - - buffersize=128*1024; - localstate=stateWait; - remotestate=stateRequest; - data=0; -} - -void eHTTPConnection::destruct() -{ - eDebug("destruct, this %p!", this); - gotHangup(); - delete this; -} - -eHTTPConnection::eHTTPConnection(eMainloop *ml): eSocket(ml), parent(0), persistent(0) -{ - CONNECT(this->readyRead_ , eHTTPConnection::readData); - CONNECT(this->bytesWritten_ , eHTTPConnection::bytesWritten); - CONNECT(this->error_ , eHTTPConnection::gotError); - CONNECT(this->connected_ , eHTTPConnection::hostConnected); - CONNECT(this->connectionClosed_ , eHTTPConnection::destruct); - - localstate=stateWait; - remotestate=stateWait; - - buffersize=64*1024; - data=0; -} - -void eHTTPConnection::hostConnected() -{ - processLocalState(); -} - -void eHTTPConnection::start() -{ - if (localstate==stateWait) - { - localstate=stateRequest; - processLocalState(); - } -} - -void eHTTPConnection::gotHangup() -{ - if (data && remotestate == stateData) - data->haveData(0, 0); - data = 0; - transferDone(0); - - localstate=stateWait; - remotestate=stateRequest; - - remote_header.clear(); - local_header.clear(); -} - -eHTTPConnection *eHTTPConnection::doRequest(const char *uri, eMainloop *ml, int *error) -{ - if (error) - *error=0; - - char *defaultproto="http"; - std::string proto, host, path; - int port=80; - - int state=0; // 0 proto, 1 host, 2 port 3 path - - while (*uri) - { - switch (state) - { - case 0: - if (!strncmp(uri, "://", 3)) - { - state=1; - uri+=3; - } else if ((*uri=='/') || (*uri==':')) - { - host=proto; - state=1; - proto=defaultproto; - } else - proto.push_back(*uri++); - break; - case 1: - if (*uri=='/') - state=3; - else if (*uri==':') - { - state=2; - port=0; - uri++; - } else - host.push_back(*uri++); - break; - case 2: - if (*uri=='/') - state=3; - else - { - if (!isdigit(*uri)) - { - port=-1; - state=3; - } else - { - port*=10; - port+=*uri++-'0'; - } - } - break; - case 3: - path.push_back(*uri++); - } - } - - if (state==0) - { - path=proto; - proto=defaultproto; - } - -#ifdef DEBUG_HTTPD - eDebug("proto: '%s', host '%s', path '%s', port '%d'", proto.c_str(), host.c_str(), path.c_str(), port); -#endif - - if (!host.size()) - { - eDebug("no host given"); - if (error) - *error=ENOENT; - return 0; - } - - if (strcmp(proto.c_str(), "http")) - { - eDebug("invalid protocol (%s)", proto.c_str()); - if (error) - *error=EINVAL; - return 0; - } - - if (port == -1) - { - eDebug("invalid port"); - if (error) - *error=EINVAL; - return 0; - } - - if (!path.size()) - path="/"; - - eHTTPConnection *c=new eHTTPConnection(ml); - c->request="GET"; - c->requestpath=path.c_str(); - c->httpversion="HTTP/1.0"; - c->local_header["Host"]=host; - if ((*error=c->connectToHost(host, port))) // already deleted by error - return 0; - return c; -} - -void eHTTPConnection::readData() -{ - processRemoteState(); -} - -void eHTTPConnection::bytesWritten(int) -{ - processLocalState(); -} - -int eHTTPConnection::processLocalState() -{ - switch (state()) - { - case Connection: - break; - default: - return 0; - } - int done=0; - while (!done) - { -#ifdef DEBUG_HTTPD - eDebug("processing local state %d", localstate); -#endif - switch (localstate) - { - case stateWait: -#ifdef DEBUG_HTTPD - eDebug("local wait"); -#endif - done=1; - break; - case stateRequest: - { -#ifdef DEBUG_HTTPD - eDebug("local request"); -#endif - std::string req=request+" "+requestpath+" "+httpversion+"\r\n"; - writeBlock(req.c_str(), req.length()); - localstate=stateHeader; - remotestate=stateResponse; - break; - } - case stateResponse: - { -#ifdef DEBUG_HTTPD - eDebug("local Response"); -#endif - writeString( (httpversion + " " + getNum(code) + " " + code_descr + "\r\n").c_str() ); - localstate=stateHeader; - local_header["Connection"]="close"; - break; - } - case stateHeader: -#ifdef DEBUG_HTTPD - eDebug("local header"); -#endif - for (std::map::iterator cur=local_header.begin(); cur!=local_header.end(); ++cur) - { - writeString(cur->first.c_str()); - writeString(": "); - writeString(cur->second.c_str()); - writeString("\r\n"); - } - writeString("\r\n"); - if (request=="HEAD") - localstate=stateDone; - else - localstate=stateData; - break; - case stateData: -#ifdef DEBUG_HTTPD - eDebug("local data"); -#endif - if (data) - { - int btw=buffersize-bytesToWrite(); - if (btw>0) - { - if (data->doWrite(btw)<0) - { - localstate=stateDone; - } else - done=1; - } else - done=1; - } else - done=1; // wait for remote response - break; - case stateDone: -#if 0 - // move to stateClose - if (remote_header.find("Connection") != remote_header.end()) - { - std::string &connection=remote_header["Connection"]; - if (connection == "keep-alive") - localstate=stateWait; - else - localstate=stateClose; - } -#endif -#ifdef DEBUG_HTTPD - eDebug("locate state done"); -#endif - if (!persistent) - localstate=stateClose; - else - localstate=stateWait; - break; - case stateClose: -#ifdef DEBUG_HTTPD - eDebug("closedown"); -#endif - if (persistent) - { - data = 0; - localstate = stateWait; - } else - close(); // bye, bye, remote - return 1; - } - } -#ifdef DEBUG_HTTPD - eDebug("end local"); -#endif - return 0; -} - -int eHTTPConnection::processRemoteState() -{ - int abort=0, done=0; -#ifdef DEBUG_HTTPD - eDebug("%d bytes avail", bytesAvailable()); -#endif - while (((!done) || bytesAvailable()) && !abort) - { - switch (remotestate) - { - case stateWait: - { - int i=0; -#ifdef DEBUG_HTTPD - eDebug("remote stateWait"); -#endif - char buffer[1024]; - while (bytesAvailable()) { - i=readBlock(buffer, 1024); - } - done=1; - break; - } - case stateRequest: - { -#ifdef DEBUG_HTTPD - eDebug("stateRequest"); -#endif - std::string line; - if (!getLine(line)) - { - done=1; - abort=1; - break; - } - - int del[2]; - del[0]=line.find(" "); - del[1]=line.find(" ", del[0]+1); - if (del[0]==-1) - { - data = 0; - eDebug("request buggy"); - httpversion="HTTP/1.0"; - data=new eHTTPError(this, 400); - done=0; - localstate=stateResponse; - remotestate=stateDone; - if (processLocalState()) - return -1; - break; - } - request=line.substr(0, del[0]); - requestpath=line.substr(del[0]+1, (del[1]==-1)?-1:(del[1]-del[0]-1)); - if (del[1]!=-1) - { - is09=0; - httpversion=line.substr(del[1]+1); - } else - is09=1; - - if (is09 || (httpversion.substr(0, 7) != "HTTP/1.") || httpversion.size()!=8) - { - remotestate=stateData; - done=0; - httpversion="HTTP/1.0"; - content_length_remaining=content_length_remaining=0; - data=new eHTTPError(this, 400); // bad request - not supporting version 0.9 yet - } else - remotestate=stateHeader; - break; - } - case stateResponse: - { -#ifdef DEBUG_HTTPD - eDebug("state response.."); -#endif - std::string line; - if (!getLine(line)) - { - done=1; - abort=1; - break; - } -#ifdef DEBUG_HTTPD - eDebug("line: %s", line.c_str()); -#endif - int del[2]; - del[0]=line.find(" "); - del[1]=line.find(" ", del[0]+1); - if (del[0]==-1) - code=-1; - else - { - httpversion=line.substr(0, del[0]); - code=atoi(line.substr(del[0]+1, (del[1]==-1)?-1:(del[1]-del[0]-1)).c_str()); - if (del[1] != -1) - code_descr=line.substr(del[1]+1); - else - code_descr=""; - } - - remotestate=stateHeader; - break; - } - case stateHeader: - { -#ifdef DEBUG_HTTPD - eDebug("remote stateHeader"); -#endif - std::string line; - if (!getLine(line)) - { - done=1; - abort=1; - break; - } - if (!line.length()) - { - content_length=0; - content_length_remaining=-1; - if (remote_header.count("Content-Length")) - { - content_length=atoi(remote_header["Content-Length"].c_str()); - content_length_remaining=content_length; - } - - if (parent) - { - for (eSmartPtrList::iterator i(parent->resolver); i != parent->resolver.end(); ++i) - if (!(i->getDataSource(data, request, requestpath, this))) - break; - localstate=stateResponse; // can be overridden by dataSource - } else - data=createDataSource(this); - - if (!data) - { - data = 0; - data = new eHTTPError(this, 404); - } - - if (content_length || // if content-length is set, we have content - remote_header.count("Content-Type") || // content-type - the same - (localstate != stateResponse)) // however, if we are NOT in response-state, so we are NOT server, there's ALWAYS more data to come. (exception: http/1.1 persistent) - remotestate=stateData; - else - { - data->haveData(0, 0); - remotestate=stateDone; - } - if (processLocalState()) - return -1; - } else - { - int del=line.find(":"); - std::string name=line.substr(0, del), value=line.substr(del+1); - if (value[0]==' ') - value=value.substr(1); - remote_header[std::string(name)]=std::string(value); - } - done=1; - break; - } - case stateData: - { -#ifdef DEBUG_HTTPD - eDebug("remote stateData"); -#endif - ASSERT(data); - char buffer[16284]; - int len; - while (bytesAvailable()) - { - int tr=sizeof(buffer); - if (content_length_remaining != -1) - if (tr>content_length_remaining) - tr=content_length_remaining; - len=readBlock(buffer, tr); - data->haveData(buffer, len); - if (content_length_remaining != -1) - content_length_remaining-=len; - if (!content_length_remaining) - { - data->haveData(0, 0); - remotestate=stateDone; - break; - } - } - done=1; - if (processLocalState()) - return -1; - break; - } - case stateDone: - remotestate=stateClose; - break; - case stateClose: -// if (!persistent) - remotestate=stateWait; -// else -// remotestate=stateRequest; - abort=1; - break; - default: - eDebug("HTTP: invalid state %d", remotestate); - done=1; - } - } -#ifdef DEBUG_HTTPD - eDebug("end remote"); -#endif - return 0; -} - -void eHTTPConnection::writeString(const char *data) -{ - writeBlock(data, strlen(data)); -} - -int eHTTPConnection::getLine(std::string &line) -{ - if (!canReadLine()) - return 0; - - line = readLine(); - line.erase(line.length()-1); - - if (line[(line.length()-1)] == '\r') - line.erase(line.length()-1); - - return 1; -} - -void eHTTPConnection::gotError(int err) -{ - data = 0; - transferDone(err); - delete this; -} - -eHTTPD::eHTTPD(int port, eMainloop *ml): eServerSocket(port, ml), ml(ml) -{ - if (!ok()) - eDebug("[NET] httpd server FAILED on port %d", port); - else - eDebug("[NET] httpd server started on port %d", port); -} - -eHTTPConnection::~eHTTPConnection() -{ - eDebug("HTTP connection destruct"); - if ((!persistent) && (state()!=Idle)) - eWarning("~eHTTPConnection, status still %d", state()); -} - -void eHTTPD::newConnection(int socket) -{ - new eHTTPConnection(socket, 1, this); -} diff --git a/lib/network/httpd.h b/lib/network/httpd.h deleted file mode 100644 index 1c6678b..0000000 --- a/lib/network/httpd.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef __httpd_h -#define __httpd_h - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -class eHTTPConnection; -class eHTTPDataSource; -class eHTTPD; - -class eHTTPDataSource; -typedef ePtr eHTTPDataSourcePtr; - -class iHTTPPathResolver: public iObject -{ -public: - virtual ~iHTTPPathResolver() {}; - virtual RESULT getDataSource(eHTTPDataSourcePtr &source, std::string request, std::string path, eHTTPConnection *conn)=0; -}; - -class eHTTPDataSource: public iObject -{ -protected: - eHTTPConnection *connection; -public: - eHTTPDataSource(eHTTPConnection *c); - virtual ~eHTTPDataSource(); - virtual void haveData(void *data, int len); - virtual int doWrite(int bytes); // number of written bytes, -1 for "no more" -}; - -typedef ePtr eHTTPDataSourcePtr; - -class eHTTPError: public eHTTPDataSource -{ - DECLARE_REF(eHTTPError); - int errcode; -public: - eHTTPError(eHTTPConnection *c, int errcode); - ~eHTTPError() { } - void haveData(); - int doWrite(int bytes); -}; - -class eHTTPConnection: public eSocket -{ - void doError(int error); - - int getLine(std::string &line); - - int processLocalState(); - int processRemoteState(); - void writeString(const char *data); - - eHTTPDataSourcePtr data; - eHTTPD *parent; - - int buffersize; -private: - void readData(); - void gotError(int); - void bytesWritten(int); - void hostConnected(); - void destruct(); -public: - Signal1 transferDone; - Signal1 createDataSource; - enum - { - /* - - < GET / HTTP/1.0 - < If-modified-since: bla - < - < Data - > 200 OK HTTP/1.0 - > Content-Type: text/html - > - > Data - */ - - stateWait, stateRequest, stateResponse, stateHeader, stateData, stateDone, stateClose - }; - int localstate, remotestate; - int persistent; - - eHTTPConnection(int socket, int issocket, eHTTPD *parent, int persistent=0); - eHTTPConnection(eMainloop *ml); // ready to do "connectToHost" - static eHTTPConnection *doRequest(const char *uri, eMainloop *ml, int *error=0); - void start(); - void gotHangup(); - ~eHTTPConnection(); - - // stateRequest - std::string request, requestpath, httpversion; - int is09; - - // stateResponse - - int code; - std::string code_descr; - - std::map remote_header, local_header; - - // stateData - int content_length, content_length_remaining; -}; - -class eHTTPD: public eServerSocket -{ - friend class eHTTPConnection; - eSmartPtrList resolver; - eMainloop *ml; -public: - eHTTPD(int port, eMainloop *ml); - void newConnection(int socket); - - void addResolver(iHTTPPathResolver *r) { resolver.push_back(r); } - void removeResolver(iHTTPPathResolver *r) { resolver.remove(r); } -}; - -#endif diff --git a/lib/network/serversocket.cpp b/lib/network/serversocket.cpp deleted file mode 100644 index fe2737e..0000000 --- a/lib/network/serversocket.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include - -bool eServerSocket::ok() -{ - return okflag; -} - -void eServerSocket::notifier(int) -{ - int clientfd, clientlen; - struct sockaddr_in client_addr; - - eDebug("[SERVERSOCKET] incoming connection!"); - - clientlen=sizeof(client_addr); - clientfd=accept(getDescriptor(), - (struct sockaddr *) &client_addr, - (socklen_t*)&clientlen); - if(clientfd<0) - eDebug("[SERVERSOCKET] error on accept()"); - - newConnection(clientfd); -} - -eServerSocket::eServerSocket(int port, eMainloop *ml): eSocket(ml) -{ - struct sockaddr_in serv_addr; - - serv_addr.sin_family=AF_INET; - serv_addr.sin_addr.s_addr=INADDR_ANY; - serv_addr.sin_port=htons(port); - - okflag=1; - int val=1; - - setsockopt(getDescriptor(), SOL_SOCKET, SO_REUSEADDR, &val, 4); - - if(bind(getDescriptor(), - (struct sockaddr *) &serv_addr, - sizeof(serv_addr))<0) - { - eDebug("[SERVERSOCKET] ERROR on bind() (%m)"); - okflag=0; - } - listen(getDescriptor(), 0); - - rsn->setRequested(eSocketNotifier::Read); -} - -eServerSocket::~eServerSocket() -{ -#if 0 - eDebug("[SERVERSOCKET] destructed"); -#endif -} diff --git a/lib/network/serversocket.h b/lib/network/serversocket.h deleted file mode 100644 index 6bd59f1..0000000 --- a/lib/network/serversocket.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __serversocket_h -#define __serversocket_h - -#include "socket.h" - -class eServerSocket: public eSocket -{ - void notifier(int handle); - int okflag; -protected: - virtual void newConnection(int socket)=0; -public: - eServerSocket(int port, eMainloop *ml); - virtual ~eServerSocket(); - bool ok(); -}; - -#endif /* __serversocket_h */ diff --git a/lib/network/socket.cpp b/lib/network/socket.cpp deleted file mode 100644 index 162ead8..0000000 --- a/lib/network/socket.cpp +++ /dev/null @@ -1,291 +0,0 @@ -#include -#include -#include -#include - -#include - -void eSocket::close() -{ - if (writebuffer.empty()) - { - int wasconnected=(mystate==Connection) || (mystate==Closing); - rsn=0; - ::close(socketdesc); - socketdesc=-1; - mystate=Idle; - if (wasconnected) - connectionClosed_(); - } else - { - mystate=Closing; - rsn->setRequested(rsn->getRequested()|eSocketNotifier::Write); - } -} - -void eSocket::enableRead() -{ - if (rsn) - rsn->setRequested(rsn->getRequested()|eSocketNotifier::Read); -} - -void eSocket::disableRead() -{ - if (rsn) - rsn->setRequested(rsn->getRequested()&~eSocketNotifier::Read); -} - -void eSocket::inject(const char *data, int len) -{ - readbuffer.write(data, len); - if (mystate == Connection) - readyRead_(); -} - -std::string eSocket::readLine() -{ - int size=readbuffer.searchchr('\n'); - if (size == -1) - return std::string(); - size++; // ich will auch das \n - char buffer[size+1]; - buffer[size]=0; - readbuffer.read(buffer, size); - return std::string(buffer); -} - -bool eSocket::canReadLine() -{ - return readbuffer.searchchr('\n') != -1; -} - -int eSocket::bytesAvailable() -{ - return readbuffer.size(); -} - -int eSocket::readBlock(char *data, unsigned int maxlen) -{ - return readbuffer.read(data, maxlen); -} - -int eSocket::bytesToWrite() -{ - return writebuffer.size(); -} - -int eSocket::state() -{ - return mystate; -} - -int eSocket::setSocket(int s, int iss, eMainloop *ml) -{ - socketdesc=s; - issocket=iss; - fcntl(socketdesc, F_SETFL, O_NONBLOCK); - last_break = 0xFFFFFFFF; - - rsn = 0; - rsn=eSocketNotifier::create(ml, getDescriptor(), - eSocketNotifier::Read|eSocketNotifier::Hungup); - CONNECT(rsn->activated, eSocket::notifier); - return 0; -} - -void eSocket::notifier(int what) -{ - if ((what & eSocketNotifier::Read) && (mystate == Connection)) - { - int bytesavail=256; - if (issocket) - if (ioctl(getDescriptor(), FIONREAD, &bytesavail)<0) - eDebug("FIONREAD failed.\n"); - - { - if (issocket) - { - if (!bytesavail) // does the REMOTE END has closed the connection? (no Hungup here!) - { - writebuffer.clear(); - close(); - return; - } - } else // when operating on terminals, check for break - { - // where is this struct defined? - struct async_icount { - unsigned long cts, dsr, rng, dcd, tx, rx; - unsigned long frame, parity, overrun, brk; - unsigned long buf_overrun; - } icount; - - if (!ioctl(getDescriptor(), TIOCGICOUNT, &icount)) - { - if (last_break == 0xFFFFFFFF) - last_break = icount.brk; - else if (last_break != icount.brk) - { - last_break = icount.brk; - readbuffer.fromfile(getDescriptor(), bytesavail); - readbuffer.clear(); - writebuffer.clear(); - rsn->setRequested(rsn->getRequested()&~eSocketNotifier::Write); - write(getDescriptor(), "BREAK!", 6); - hangup(); - return; - } - } - } - int r; - if ((r=readbuffer.fromfile(getDescriptor(), bytesavail)) != bytesavail) - if (issocket) - eDebug("fromfile failed!"); - readyRead_(); - } - } else if (what & eSocketNotifier::Write) - { - if ((mystate == Connection) || (mystate == Closing)) - { - if (!writebuffer.empty()) - { - bytesWritten_(writebuffer.tofile(getDescriptor(), 65536)); - if (writebuffer.empty()) - { - rsn->setRequested(rsn->getRequested()&~eSocketNotifier::Write); - if (mystate == Closing) - { - close(); // warning, we might get destroyed after close. - return; - } - } - } else - eDebug("got ready to write, but nothin in buffer. strange."); - if (mystate == Closing) - close(); - } else if (mystate == Connecting) - { - mystate=Connection; - rsn->setRequested(rsn->getRequested()&~eSocketNotifier::Write); - - int res; - socklen_t size=sizeof(res); - ::getsockopt(getDescriptor(), SOL_SOCKET, SO_ERROR, &res, &size); - if (!res) - connected_(); - else - { - close(); - error_(res); - } - } - } else if (what & eSocketNotifier::Hungup) - { - if (mystate == Connection) - { - writebuffer.clear(); - close(); - } else if (mystate == Connecting) - { - int res; - socklen_t size=sizeof(res); - ::getsockopt(getDescriptor(), SOL_SOCKET, SO_ERROR, &res, &size); - close(); - error_(res); - } - } -} - -int eSocket::writeBlock(const char *data, unsigned int len) -{ - int w=len; - if (issocket && writebuffer.empty()) - { - int tw=::send(getDescriptor(), data, len, MSG_NOSIGNAL); - if ((tw < 0) && (errno != EWOULDBLOCK)) - eDebug("write: %m"); - - if (tw < 0) - tw = 0; - data+=tw; - len-=tw; - } - if (len) - writebuffer.write(data, len); - - if (!writebuffer.empty()) - rsn->setRequested(rsn->getRequested()|eSocketNotifier::Write); - return w; -} - -int eSocket::getDescriptor() -{ - return socketdesc; -} - -int eSocket::connectToHost(std::string hostname, int port) -{ - struct hostent *server; - int res; - - if(!socketdesc){ - error_(errno); - return(-1); - } - server=gethostbyname(hostname.c_str()); - if(server==NULL) - { - eDebug("can't resolve %s", hostname.c_str()); - error_(errno); - return(-2); - } - bzero( (char*)&serv_addr, sizeof(serv_addr)); - serv_addr.sin_family=AF_INET; - bcopy( (char*)server->h_addr, - (char*)&serv_addr.sin_addr.s_addr, - server->h_length); - serv_addr.sin_port=htons(port); - res=::connect(socketdesc, (const sockaddr*)&serv_addr, sizeof(serv_addr)); - if ((res < 0) && (errno != EINPROGRESS)) - { - eDebug("can't connect to host: %s", hostname.c_str()); - close(); - error_(errno); - return(-3); - } - if (res < 0) // EINPROGRESS - { - rsn->setRequested(rsn->getRequested()|eSocketNotifier::Write); - mystate=Connecting; - } else - { - mystate=Connection; - connected_(); - } - return(0); -} - -eSocket::eSocket(eMainloop *ml): readbuffer(32768), writebuffer(32768), rsn(0) -{ - ASSERT(ml); - int s=socket(AF_INET, SOCK_STREAM, 0); -#if 0 - eDebug("[SOCKET]: initalized socket %d", socketdesc); -#endif - mystate=Idle; - setSocket(s, 1, ml); -} - -eSocket::eSocket(int socket, int issocket, eMainloop *ml): readbuffer(32768), writebuffer(32768) -{ - setSocket(socket, issocket, ml); - mystate=Connection; -} - -eSocket::~eSocket() -{ - if(socketdesc>=0) - { - ::close(socketdesc); - } -} diff --git a/lib/network/socket.h b/lib/network/socket.h deleted file mode 100644 index 9ffc7a7..0000000 --- a/lib/network/socket.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef __socket_h -#define __socket_h - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -class eSocket: public Object -{ - int mystate; - int issocket; - unsigned int last_break; -private: - int socketdesc; - eIOBuffer readbuffer; - eIOBuffer writebuffer; - int writebusy; - sockaddr_in serv_addr; -protected: - ePtr rsn; - virtual void notifier(int); -public: - eSocket(eMainloop *ml); - eSocket(int socket, int issocket, eMainloop *ml); - ~eSocket(); - int connectToHost(std::string hostname, int port); - int getDescriptor(); - int writeBlock(const char *data, unsigned int len); - int setSocket(int socketfd, int issocket, eMainloop *ml); - int bytesToWrite(); - int readBlock(char *data, unsigned int maxlen); - int bytesAvailable(); - bool canReadLine(); - std::string readLine(); - void close(); - // flow control: start/stop data delivery into read buffer. - void enableRead(); - void disableRead(); - - void inject(const char *data, int len); - - enum State { Idle, HostLookup, Connecting, - Listening, Connection, Closing }; - int state(); - - Signal0 connectionClosed_; - Signal0 connected_; - Signal0 readyRead_; - Signal0 hangup; - Signal1 bytesWritten_; - Signal1 error_; -}; - -#endif /* __socket_h */ diff --git a/lib/network/socket.lo b/lib/network/socket.lo deleted file mode 100644 index 4fbb387a051a6a20f631627e117fb0d429d90b1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224317 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%0DS?M&`M(1KA0m*Xb0s$qJxvUgmz#w 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%0ACwL&vMU>LFH>Sb13R5bwFDW{YqSiL;o1R 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 WmjsV6J^>zMd=EUqnCF^eT<`y>68$y+ -- 2.7.4