aboutsummaryrefslogtreecommitdiffstats
path: root/ncpd/linkchan.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ncpd/linkchan.cc')
-rw-r--r--ncpd/linkchan.cc165
1 files changed, 88 insertions, 77 deletions
diff --git a/ncpd/linkchan.cc b/ncpd/linkchan.cc
index 21ec39f..b95ec64 100644
--- a/ncpd/linkchan.cc
+++ b/ncpd/linkchan.cc
@@ -1,29 +1,29 @@
-// $Id$
-//
-// PLP - An implementation of the PSION link protocol
-//
-// Copyright (C) 1999 Philip Proudman
-// Modifications for plptools:
-// Copyright (C) 1999 Fritz Elfert <felfert@to.com>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// 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.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// e-mail philip.proudman@btinternet.com
-
+/*-*-c++-*-
+ * $Id$
+ *
+ * This file is part of plptools.
+ *
+ * Copyright (C) 1999 Philip Proudman <philip.proudman@btinternet.com>
+ * Copyright (C) 1999-2001 Fritz Elfert <felfert@to.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
#include <stream.h>
#include <iomanip>
+#include <string>
#include "linkchan.h"
#include "bufferstore.h"
@@ -31,90 +31,101 @@
linkChan::linkChan(ncp * _ncpController):channel(_ncpController)
{
- registerSer = 0x1234;
- ncpConnect();
+ registerSer = 0x1234;
+ ncpConnect();
}
void linkChan::
ncpDataCallback(bufferStore & a)
{
- int len = a.getLen();
- if (verbose & LINKCHAN_DEBUG_LOG) {
- cout << "linkchan: << msg ";
- if (verbose & LINKCHAN_DEBUG_DUMP)
- cout << a << endl;
- else
- cout << len << endl;
- }
- if ((len > 7) && (a.getByte(0) == 1)) {
- unsigned int ser = a.getWord(1);
- int res = a.getWord(3);
- // int dontknow = a.getWord(5);
- const char *srvName = a.getString(7);
- bufferArray newStack;
- bufferStore se;
+ int len = a.getLen();
+ if (verbose & LINKCHAN_DEBUG_LOG) {
+ cout << "linkchan: << msg ";
+ if (verbose & LINKCHAN_DEBUG_DUMP)
+ cout << a << endl;
+ else
+ cout << len << endl;
+ }
- if (verbose & LINKCHAN_DEBUG_LOG)
- cout << "linkchan: received registerAck: ser=0x" << hex << setw(4)
- << setfill(0) << ser << " res=" << res << " srvName=\""
- << srvName << "\"" << endl;
+ if ((len >= 5) && (a.getByte(0) == 1)) {
+ char srvName[20];
+ unsigned int ser = a.getWord(1);
+ int res = a.getWord(3);
+ // int dontknow = a.getWord(5);
+ bufferArray newStack;
+ bufferStore se;
+
+
+ strncpy(srvName, a.getString(7), 17);
+ if (verbose & LINKCHAN_DEBUG_LOG)
+ cout << "linkchan: received registerAck: ser=0x" << hex << setw(4)
+ << setfill(0) << ser << " res=" << res << " srvName=\""
+ << srvName << "\"" << endl;
- while (!registerStack.empty()) {
- se = registerStack.pop();
- if (se.getWord(0) == ser) {
- if (verbose & LINKCHAN_DEBUG_LOG)
- cout << "linkchan: found ser=0x" << hex << setw(4) <<
- setfill(0) << se.getWord(0) <<
- " on stack -> callBack to waiting chan" << endl;
- ncpDoRegisterAck((int)se.getWord(2));
- } else
- newStack += se;
- }
- registerStack = newStack;
- return;
+ while (!registerStack.empty()) {
+ se = registerStack.pop();
+ if (se.getWord(0) == ser) {
+ if (verbose & LINKCHAN_DEBUG_LOG)
+ cout << "linkchan: found ser=0x" << hex << setw(4) <<
+ setfill(0) << se.getWord(0) <<
+ " on stack -> callBack to waiting chan" << endl;
+ if (strlen(srvName) < 4)
+ strcat(srvName, ".*");
+ ncpDoRegisterAck((int)se.getWord(2), srvName);
+ } else
+ newStack += se;
}
- cerr << "linkchan: unknown message " << a.getByte(0) << endl;
+ registerStack = newStack;
+ return;
+ }
+ cerr << "linkchan: unknown message " << a.getByte(0) << endl;
}
char *linkChan::
-getNcpConnectName()
+getNcpRegisterName()
{
- return "LINK";
+ return "LINK";
}
void linkChan::
ncpConnectAck()
{
- if (verbose & LINKCHAN_DEBUG_LOG)
- cout << "linkchan: << cack" << endl;
+ if (verbose & LINKCHAN_DEBUG_LOG)
+ cout << "linkchan: << cack" << endl;
}
void linkChan::
ncpConnectTerminate()
{
- if (verbose & LINKCHAN_DEBUG_LOG)
- cout << "linkchan: << ctrm" << endl;
- terminateWhenAsked();
+ if (verbose & LINKCHAN_DEBUG_LOG)
+ cout << "linkchan: << ctrm" << endl;
+ terminateWhenAsked();
}
void linkChan::
ncpConnectNak()
{
- ncpConnectTerminate();
+ ncpConnectTerminate();
}
void linkChan::
Register(channel *ch)
{
- bufferStore a;
- bufferStore stack;
+ bufferStore a;
+ bufferStore stack;
- stack.addWord(registerSer);
- stack.addWord(ch->getNcpChannel());
- registerStack += stack;
- a.addByte(0);
- a.addWord(registerSer++);
- a.addString(ch->getNcpConnectName());
- a.addByte(0);
- ncpSend(a);
+ stack.addWord(registerSer);
+ stack.addWord(ch->getNcpChannel());
+ registerStack += stack;
+ a.addByte(0);
+ a.addWord(registerSer++);
+ a.addString(ch->getNcpRegisterName());
+ a.addByte(0);
+ ncpSend(a);
}
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * End:
+ */