aboutsummaryrefslogtreecommitdiffstats
path: root/ncpd
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2001-02-06 01:01:46 +0000
committerFritz Elfert <felfert@to.com>2001-02-06 01:01:46 +0000
commita9fe8f28a4a9aaf1d9b84dbc6907849ace87f66e (patch)
tree0dd290cdf04cfd17a4ab4d0eb86bcb48137a02cb /ncpd
parenta8787d39b2bf1851cdea64a5e0eccc2aff7f15de (diff)
downloadplptools-a9fe8f28a4a9aaf1d9b84dbc6907849ace87f66e.tar.gz
plptools-a9fe8f28a4a9aaf1d9b84dbc6907849ace87f66e.tar.bz2
plptools-a9fe8f28a4a9aaf1d9b84dbc6907849ace87f66e.zip
- 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.
Diffstat (limited to 'ncpd')
-rw-r--r--ncpd/main.cc13
-rw-r--r--ncpd/socketchan.cc8
-rw-r--r--ncpd/socketchan.h4
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;