⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caoltoclient30.cpp

📁 PPP协议的实现演示
💻 CPP
字号:
#include "globals.h"

/***************************************************************************
                          caoltoclient30.cpp  -  description
                             -------------------
    begin                : Sun Jun 10 2001
    copyright            : (C) 2001 by stephane (birdy57)
    email                : birdy57@multimania.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.                                   *
 *                                                                         *
 ***************************************************************************/ 
#include "caoltoclient30.h"    CAolToClient30::CAolToClient30(){    AolHeader = new CAolHeader30;    Vjcompress = new CVjcompress;    Aim = new CAim;}CAolToClient30::~CAolToClient30(){}/** declare la classe appelante */void CAolToClient30::SetHost(class Kernel30 * Kernel){    m_CKernel = Kernel;}/** No descriptions */void CAolToClient30::Main(){    char ssTrame[MRUIn + 200];    char *sTrame = &ssTrame[0];    char ssBuffer[MRUIn + 200];    char *sBuffer = &ssBuffer[0];    char ssTmpBuffer[MRUIn + 100];    char *sTmpBuffer = &ssTmpBuffer[0];    char *pPayload;    unsigned short nPayloadLen = 0;    unsigned short nLon;    unsigned short nLastAck = 0;    unsigned short nLastSeq = 0;	// Derniere trame valid    bool bNeedRestart;    unsigned short nPosTmpBuffer = 0;    unsigned short nTrameLen;    while (!m_CKernel->bStopTunneling) {	while ((nTrameLen =		m_CKernel->ReadAolTrame(sTrame, (MRUIn + 150))) < 6);	AolHeader->SetHeader(sTrame);	AolHeader->SetNormal();	if (AolHeader->GetTotalSize() > nTrameLen)	//securiter	    continue;// Teste le checksum	if (!AolHeader->IsValid()) {	    // Si erreur il y a alors envoie un message d'erreur	    nLon =		m_CKernel->HexToSeq(sBuffer,				    (char *) m_CKernel->CData->dat19,				    AolHeader->GetSeq(),				    AolHeader->GetAck());	    m_CKernel->WriteRawIn(sBuffer, nLon);	    // Desactive les trames decouper	    nPosTmpBuffer = 0;	    m_CKernel->m_cMsgIn->		Printf		("%LErreur de Checksum : demande de la trame %d : %d \n",		 nLastAck, nLastSeq);	    // Et on cherche une trame valide	    while (!AolHeader->IsValid()) {		while (m_CKernel->		       ReadAolTrameSeqAck(sTrame, MRUIn, nLastSeq,					  nLastAck) < 7);		AolHeader->SetHeader(sTrame);		AolHeader->SetNormal();	    }	}// A parir d'ici on est sur d'avoir a faire a une trame AOL	nLastSeq = AolHeader->GetSeq();	nLastAck = AolHeader->GetAck();// Cherche les type de Trame speciale	switch (AolHeader->GetTyp()) {	case 0x26:		// Ping - Pong	    nLon =		m_CKernel->HexToSeq(sBuffer,				    (char *) m_CKernel->CData->dat16,				    nLastAck, nLastSeq);	    m_CKernel->WriteRawIn(sBuffer, nLon);	    bNeedRestart = true;	    break;	case 0x24:		// Acquitement trame	    m_CKernel->m_bAckTrame = true;	    bNeedRestart = true;	    break;	case 0x25:		//Demande de resynchro	    m_CKernel->m_nLastAolSeq = nLastAck;	    m_CKernel->m_nLastAolAck = nLastSeq;	    m_CKernel->m_bAckTrame = true;	    bNeedRestart = true;	    break;	case 0x20:		// Trame inet   	    bNeedRestart = false;	    break;	default:	    bNeedRestart = true;	    break;	}// Verifie si on peut continuer	if (bNeedRestart)	    continue;	m_CKernel->m_nFirstAolSeq = nLastAck;	m_CKernel->m_nLastAolAck = nLastSeq;// Voila maintenant on a une trame INET de type AOL valide	m_CKernel->m_bAckTrame = true;	switch (AolHeader->GetCode()) {	case 0x6174:		//trame aim	    Aim->Buddy((unsigned char *) &ssTrame[0],		       AolHeader->GetTotalSize() + 2, LastCode);	    bNeedRestart = true;	    break;	case 0x7964:		// Trame Aol Decoupe	    if (!nPosTmpBuffer)		bNeedRestart = true;	    else {		// Rajoute le bout qui manque		memcpy((sTmpBuffer + nPosTmpBuffer),		       AolHeader->GetNextPayload(),		       AolHeader->GetTotalSize() - 5);		pPayload = sTmpBuffer;		nPayloadLen =		    (nPosTmpBuffer + AolHeader->GetTotalSize() - 5);		nPosTmpBuffer = 0;		bNeedRestart = false;	    }	    break;	case 0x7963:		// Trame normal	    // Memorise le numero de trame Inet	    m_CKernel->m_nLastAolInet = AolHeader->GetInNum();	    // Teste si la trame est complete	    if (AolHeader->GetPayloadSize() < AolHeader->GetIpLen()) {		nPosTmpBuffer = AolHeader->GetPayloadSize();		memcpy(sTmpBuffer, AolHeader->GetPayload(), nPosTmpBuffer);		bNeedRestart = true;	    }	    else {		pPayload = AolHeader->GetPayload();		nPayloadLen = AolHeader->GetIpLen();		bNeedRestart = false;	    }	    break;	default:		// Inconnue encore alors po bon on va dire ;-)	    bNeedRestart = true;	    break;	}	LastCode = AolHeader->GetCode();// Verifie si on peut continuer	if (bNeedRestart)	    continue;// La trame est complete// Alors compresse	nPayloadLen = Vjcompress->Deflate(pPayload, nPayloadLen);	m_CKernel->OutputWrite(pPayload, nPayloadLen);    }				// end while pricipal bStopTunneling}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -