diff options
Diffstat (limited to 'ncpd')
| -rw-r--r-- | ncpd/main.cc | 13 | ||||
| -rw-r--r-- | ncpd/socketchan.cc | 8 | ||||
| -rw-r--r-- | ncpd/socketchan.h | 4 | 
3 files changed, 12 insertions, 13 deletions
| 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; | 
