From a9fe8f28a4a9aaf1d9b84dbc6907849ace87f66e Mon Sep 17 00:00:00 2001 From: Fritz Elfert Date: Tue, 6 Feb 2001 01:01:46 +0000 Subject: - Added KDE2 PropsDialog Plugin (incomplete) - Fixed some KDE related autoconf stuff - Added PlpDrive class for returning results from rfsv:devinfo - Added auto-watch in ppsocket and finally got rid of the nasty SIGPIPE bug. Now it's no more necessary to ignore SIGPIPE in applications. - Made constructors of rfsv16, rfsv32, rpcs16 and rpcs32 private to enforce use of the factories. - Removed error output in the factories and replaced that by error codes which can be retrieved and evaluated by an application. --- ncpd/main.cc | 13 +++++++++---- ncpd/socketchan.cc | 8 ++------ ncpd/socketchan.h | 4 +--- 3 files changed, 12 insertions(+), 13 deletions(-) (limited to 'ncpd') diff --git a/ncpd/main.cc b/ncpd/main.cc index 76d0bb2..d8a28ed 100644 --- a/ncpd/main.cc +++ b/ncpd/main.cc @@ -63,7 +63,7 @@ int_handler(int) }; void -checkForNewSocketConnection(ppsocket & skt, int &numScp, socketChan ** scp, ncp * a, IOWatch & iow) +checkForNewSocketConnection(ppsocket & skt, int &numScp, socketChan ** scp, ncp * a, IOWatch &iow) { string peer; ppsocket *next = skt.accept(&peer); @@ -73,11 +73,17 @@ checkForNewSocketConnection(ppsocket & skt, int &numScp, socketChan ** scp, ncp cout << "New socket connection from " << peer << endl; if ((numScp == 7) || (!a->gotLinkChannel())) { bufferStore a; + + // Give the client time to send it's version request. + next->dataToGet(1,0); + next->getBufferStore(a, false); + + a.init(); a.addStringT("No Psion Connected\n"); next->sendBufferStore(a); next->closeSocket(); } else - scp[numScp++] = new socketChan(next, a, iow); + scp[numScp++] = new socketChan(next, a); } } @@ -126,7 +132,6 @@ main(int argc, char **argv) sockNum = ntohs(se->s_port); // Command line parameter processing - signal(SIGPIPE, SIG_IGN); for (int i = 1; i < argc; i++) { if (!strcmp(argv[i], "-p") && i + 1 < argc) { sockNum = atoi(argv[++i]); @@ -187,6 +192,7 @@ main(int argc, char **argv) case 0: signal(SIGTERM, term_handler); signal(SIGINT, int_handler); + skt.setWatch(&iow); if (!skt.listen("127.0.0.1", sockNum)) cerr << "listen on port " << sockNum << ": " << strerror(errno) << endl; else { @@ -209,7 +215,6 @@ main(int argc, char **argv) a->setVerbose(nverbose); a->setLinkVerbose(lverbose); a->setPktVerbose(pverbose); - iow.addIO(skt.socket()); while (active) { // sockets pollSocketConnections(numScp, scp); diff --git a/ncpd/socketchan.cc b/ncpd/socketchan.cc index 1e3fd08..06b3da2 100644 --- a/ncpd/socketchan.cc +++ b/ncpd/socketchan.cc @@ -33,22 +33,18 @@ #include "socketchan.h" #include "ncp.h" #include "ppsocket.h" -#include "iowatch.h" -socketChan:: socketChan(ppsocket * _skt, ncp * _ncpController, IOWatch & _iow): -channel(_ncpController), -iow(_iow) +socketChan:: socketChan(ppsocket * _skt, ncp * _ncpController): + channel(_ncpController) { skt = _skt; connectName = 0; connectTry = 0; - iow.addIO(skt->socket()); connected = false; } socketChan::~socketChan() { - iow.remIO(skt->socket()); skt->closeSocket(); delete skt; if (connectName) diff --git a/ncpd/socketchan.h b/ncpd/socketchan.h index 15645dd..7dde472 100644 --- a/ncpd/socketchan.h +++ b/ncpd/socketchan.h @@ -30,11 +30,10 @@ #endif #include "channel.h" class ppsocket; -class IOWatch; class socketChan : public channel { public: - socketChan(ppsocket* comms, ncp* ncpController, IOWatch &iow); + socketChan(ppsocket* comms, ncp* ncpController); virtual ~socketChan(); void ncpDataCallback(bufferStore& a); @@ -51,7 +50,6 @@ private: enum protocolVersionType { PV_SERIES_5 = 6, PV_SERIES_3 = 3 }; bool ncpCommand(bufferStore &a); ppsocket* skt; - IOWatch &iow; char* connectName; bool connected; int connectTry; -- cgit v1.2.3