diff options
Diffstat (limited to 'lanbrowsing/lisa/client.cpp')
-rw-r--r-- | lanbrowsing/lisa/client.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/lanbrowsing/lisa/client.cpp b/lanbrowsing/lisa/client.cpp new file mode 100644 index 00000000..21069a17 --- /dev/null +++ b/lanbrowsing/lisa/client.cpp @@ -0,0 +1,122 @@ +/* client.cpp + * + * Copyright (c) 2000, Alexander Neundorf + * + * You may distribute under the terms of the GNU General Public + * License as specified in the COPYING file. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "netmanager.h" +#include "client.h" +#include "lisadefines.h" + +#include <iostream> +#include <unistd.h> + +#include <strings.h> + +#ifdef LISA_DEBUG +#undef LISA_DEBUG +#endif + +#ifdef dcerr +#undef dcerr +#endif + +#define LISA_DEBUG 0 +#define dcerr if (LISA_DEBUG==1) std::cerr<<"Client::" + + +Client::Client(NetManager* parent, int socketFD, int closeOnDelete) +:parentServer(parent) +,m_fd(socketFD) +,m_done(0) +,m_closeOnDelete(closeOnDelete) +{ + dcerr<<"ctor created new client"<<std::endl; + if (m_fd==-1) m_done=1; + m_creationTime=time(0); +} + +Client::Client() +:parentServer(0) +,m_fd(-1) +,m_done(1) +,m_closeOnDelete(1) +{ + m_creationTime=time(0); +} + +Client::Client(const Client& c) +:parentServer(c.parentServer) +,m_fd(c.m_fd) +,m_creationTime(c.m_creationTime) +,m_done(c.m_done) +,m_closeOnDelete(1) +{ + dcerr<<"Client copy ctor"<<std::endl; +} + +int Client::tryToGetInfo() +{ + dcerr<<"tryToGetInfo: m_done: "<<m_done<<std::endl; + if (done()) return 1; + if (m_fd==-1) + { + close(); + return 1; + } + dcerr<<"tryToGetInfo: calling data.getFile()"<<std::endl; + if (!parentServer->isInformed()) return 0; + //we fork now, so that writing to the client can't block the server process + /* int pid=fork(); + if (pid==-1) + { + //parent + dcerr<<"NetScanner::scan: error occurred"<<std::endl; + return 1; + } + else if (pid!=0) + { + //parent + return 1; + };*/ + //child + //this one does it all :-) + dcerr<<"tryToGetInfo: sending data to client"<<std::endl; + parentServer->writeDataToFD(fd(),0); + close(); + //exit(0); + return 1; +} + +void Client::close() +{ + if (m_fd!=-1) ::close(m_fd); + m_fd=-1; + m_done=1; +} + +void Client::read() +{ + dcerr<<"read()"<<std::endl; + if (m_fd==-1) return; + char buf[1024]; + //the clients should not send us something ! + int result=::read(m_fd,buf,1024); + if (result>=0) close(); +} + +Client::~Client() +{ + if (m_closeOnDelete) + close(); +} + |