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

📄 evauserinfo.cpp

📁 linux下的eva源代码
💻 CPP
字号:
/*************************************************************************** *   Copyright (C) 2005 by yunfan                                          * *   yunfan_zg@163.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 "evauserinfo.h"#include "evadefines.h"// important: all string stored are encoded by "GB18030"ContactInfo::ContactInfo() { 	infos.reserve(QQ_CONTACT_FIELDS); 	infos.push_back("-");   // qq number 	infos.push_back("EVA");   // nick};ContactInfo::ContactInfo(const unsigned char *buf, const int len)  {	parseData(buf, len);}ContactInfo::ContactInfo( const ContactInfo &rhs){	infos = rhs.details();	}void ContactInfo::parseData(const unsigned char *buf, const int len)  {	int start = 0;	infos.clear();	for(int i = 0; i< len; i++){		if(buf[i]!= DIVIDER) continue;		char *tmp = (char *)malloc( (i-start+1) *sizeof(char));		memcpy(tmp, buf+start, i-start);		tmp[i-start] = 0x00;		infos.push_back(std::string(tmp));		start = i+1;		free(tmp);	}	if(infos.size()< (uint)QQ_CONTACT_FIELDS){		char *tmp = (char *)malloc( (len-start+1) *sizeof(char));		memcpy(tmp, buf+start, len-start);		tmp[len-start]=0x00;		infos.push_back(std::string(tmp));		free(tmp);	}}bool ContactInfo::operator== ( const ContactInfo &rhs ) const{    if( infos.size() != rhs.details().size() ) return false;        return (infos==rhs.details());}ContactInfo &ContactInfo::operator= ( const ContactInfo &rhs ){	if( this == &rhs)   return *this;    	infos = rhs.details();    	return *this;}/*  ======================================================= */GetUserInfoPacket::GetUserInfoPacket()	: OutPacket(QQ_CMD_GET_USER_INFO, true),	  qqNum(-1){}GetUserInfoPacket::GetUserInfoPacket(const int id)	: OutPacket(QQ_CMD_GET_USER_INFO, true),	  qqNum(id){}GetUserInfoPacket::GetUserInfoPacket(const GetUserInfoPacket &rhs)	: OutPacket(rhs){	qqNum = rhs.getUserQQ();}GetUserInfoPacket &GetUserInfoPacket::operator=(const GetUserInfoPacket &rhs){	*((OutPacket *)this) = (OutPacket)rhs;	qqNum = rhs.getUserQQ();        return *this;}int GetUserInfoPacket::putBody(unsigned char *buf){    sprintf((char *)buf, "%d", qqNum);    return strlen((char *)buf);}/*  ======================================================= */GetUserInfoReplyPacket::GetUserInfoReplyPacket(unsigned char *buf, int len)	: InPacket( buf, len){}GetUserInfoReplyPacket::GetUserInfoReplyPacket( const GetUserInfoReplyPacket &rhs)	: InPacket(rhs){	mContactInfo = rhs.contactInfo();}GetUserInfoReplyPacket &GetUserInfoReplyPacket::operator=(const GetUserInfoReplyPacket &rhs){	*((InPacket *)this) = (InPacket)rhs;	mContactInfo = rhs.contactInfo();        return *this;}void GetUserInfoReplyPacket::parseBody() {	mContactInfo.parseData(decryptedBuf, bodyLength);	int j = mContactInfo.details().size();	if(j < QQ_CONTACT_FIELDS)		fprintf(stderr, "GetUserInfoReply->parseBody: number of fields wrong\n");	else if(j > QQ_CONTACT_FIELDS)		fprintf(stderr, "GetUserInfoReply->parseBody: number of fields might be wrong!\n");}/*  ======================================================= */ModifyInfoPacket::ModifyInfoPacket( ) 	: OutPacket(QQ_CMD_MODIFY_INFO, true){}ModifyInfoPacket::ModifyInfoPacket( const ContactInfo & info )	: OutPacket(QQ_CMD_MODIFY_INFO, true),	newInfo(info), currentPwd(""), newPwd(""){}ModifyInfoPacket::ModifyInfoPacket( const ModifyInfoPacket & rhs )	: OutPacket(rhs){	currentPwd = rhs.getPassword();	newPwd = rhs.getNewPassword();	newInfo = rhs.getContactInfo();}ModifyInfoPacket & ModifyInfoPacket::operator =( const ModifyInfoPacket & rhs ){	*((OutPacket*)this) = (OutPacket)rhs;	currentPwd = rhs.getPassword();	newPwd = rhs.getNewPassword();	newInfo = rhs.getContactInfo();		return *this;}int ModifyInfoPacket::putBody( unsigned char * buf ){	int pos=0;		if( currentPwd != "" && newPwd != ""){		memcpy(buf, currentPwd.c_str(), currentPwd.length());		pos+=currentPwd.length();		buf[pos++] = DELIMIT;		memcpy(buf+pos, newPwd.c_str(), newPwd.length());		pos+=newPwd.length();	}else		buf[pos++] = DELIMIT;		buf[pos++] = DELIMIT;		for(int i=1; i<QQ_CONTACT_FIELDS; i++){		memcpy(buf+pos, newInfo.at(i).c_str(),newInfo.at(i).length());		pos+=newInfo.at(i).length();		buf[pos++] = DELIMIT;	}	return pos;}/*  ======================================================= */ModifyInfoReplyPacket::ModifyInfoReplyPacket( unsigned char * buf, int len )	: InPacket(buf, len),	accepted(false){}ModifyInfoReplyPacket::ModifyInfoReplyPacket( const ModifyInfoReplyPacket & rhs )	: InPacket(rhs){	accepted = rhs.isAccepted();}ModifyInfoReplyPacket & ModifyInfoReplyPacket::operator =( const ModifyInfoReplyPacket & rhs ){	*((InPacket*)this) = (InPacket)rhs;	accepted = rhs.isAccepted();	return *this;}void ModifyInfoReplyPacket::parseBody( ){	char *str = (char *)malloc((bodyLength+1) * sizeof(char));	memcpy(str, decryptedBuf, bodyLength);	str[bodyLength]=0x00;		char myQQ[20];	sprintf(myQQ, "%d", getQQ());	char *pos = strstr(str, myQQ);	if( pos != str )		accepted = false;	else		accepted = true;}

⌨️ 快捷键说明

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