diff options
Diffstat (limited to 'ncpd/linkchan.cc')
| -rw-r--r-- | ncpd/linkchan.cc | 165 | 
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: + */ | 
