7个回答
展开全部
main.cpp
#include <QCoreApplication>
#include <QTime>
#include "icqserver.h"
#include "global.h"
int main(int argc, char *argv[])
{
QTime midnight(0,0,0);
qsrand(midnight.secsTo(QTime::currentTime()));
User user;
user.login = "DrSmyrke";
user.nikName = user.login;
user.pass = "123456";
user.type = icq_user_ICQ;
app::users.push_back(user);
QCoreApplication a(argc, argv);
ICQServer 锋渗郑server;
server.init();
return a.exec();
}
globla.cpp
#include "global.h"
#include <QIODevice>
#include <QDataStream>
#include <QCryptographicHash>
//TODO: remove qDEbug
#include <QDebug>
namespace app {
std::vector<User> users;
ServerSettings settings;
bool isUser(const QByteArray &login)
{
for(auto elem:app::users){
if(elem.login == login){
return true;
break;
}
}
return false;
}
void setPassKey(const QByteArray &login, const QByteArray &passKey)
{
for(auto &elem:app::users){
if(elem.login == login){
elem.passKey = passKey;
break;
}
}
}
bool chkPass(const QByteArray &login, const QByteArray &pass)
{
for(auto elem:app::users){
if(elem.login == login){
auto myPass = mf::md5(elem.passKey+elem.pass+"AOL Instant Messenger (SM)");
auto myPass2 = mf::md5(elem.passKey+mf::md5(elem.pass)+"AOL Instant Messenger (SM)");
if( myPass == pass or myPass2 == pass ) return true;
break;
}
}
return false;
}
void setCookie(const QByteArray &login, const QByteArray &cookie)
{
for(auto &elem:app::users){
if(elem.login == login){
elem.cookie = cookie;
break;
}
}
}
bool chkCookie(const QByteArray &cookie)
{
for(auto &elem:app::users){
if(elem.cookie == cookie){
return true;
break;
}
}
return false;
}
QByteArray getLogin(const QByteArray &cookie)
{
QByteArray ba;
for(auto elem:app::users){
if(elem.cookie == cookie){
ba.append(elem.login);
break;
}
}
return ba;
}
unsigned int 喊基getUserType(const QByteArray &login)
{
unsigned int type;
for(auto elem:app::users){
if(elem.login == login){
type = elem.type; 银颂
break;
}
}
return type;
}
void setIP(const QByteArray &cookie, const QHostAddress &addr)
{
for(auto &elem:app::users){
if(elem.cookie == cookie){
elem.ip = addr;
break;
}
}
}
QByteArray getIPhex(const QByteArray &login)
{
QByteArray ba;
for(auto elem:app::users){
if(elem.login == login){
QByteArray tmp;
for(auto byte:elem.ip.toString().split(".")){
tmp[0] = byte.toUInt();
ba.append(tmp);
}
break;
}
}
return ba;
}
QByteArray getNikname(const QByteArray &login)
{
QByteArray ba;
for(auto elem:app::users){
if(elem.login == login){
ba.append(elem.nikName);
break;
}
}
return ba;
}
}
namespace mf {
QByteArray toBigEndianInt(const int val)
{
QByteArray bytes(4, 0x00);
QDataStream stream(&bytes, QIODevice::WriteOnly);
stream.setByteOrder(QDataStream::BigEndian);
stream << val;
bytes.resize(4);
return bytes;
}
QByteArray toBigEndianShort(const short val)
{
QByteArray bytes(2, 0x00);
QDataStream stream(&bytes, QIODevice::WriteOnly);
stream.setByteOrder(QDataStream::BigEndian);
stream << val;
bytes.resize(2);
return bytes;
}
unsigned int getRand(const int max)
{
return qrand() % max;
}
QByteArray md5(const QByteArray &string)
{
return QCryptographicHash::hash(string,QCryptographicHash::Md5);
}
}
global.h
#ifndef GLOBAL_H
#define GLOBAL_H
#include <QByteArray>
#include <QString>
#include <QHostAddress>
typedef enum{
icq_user_notReg = 0x01,
icq_user_admin = 0x02,
icq_user_AOL = 0x04,
icq_user_premium = 0x08,
icq_user_AIM = 0x10,
icq_user_sleep = 0x20,
icq_user_ICQ = 0x40,
icq_user_mobile = 0x80,
}icq_user_types;
struct User{
QByteArray login;
QByteArray nikName;
QByteArray pass;
QByteArray passKey;
QByteArray cookie;
unsigned int type;
QHostAddress ip;
};
struct ServerSettings{
unsigned short maxContactListSize = 100;
unsigned short maxOnlineContactListSize = 50;
unsigned short maxFantomListSize = 10;
};
namespace app {
extern std::vector<User> users;
extern ServerSettings settings;
/**
* @brief isUser
* Проверяет наличие пользователя в базе
* @return
* true, если пользователь присутствует; иначе false
*/
bool isUser(const QByteArray &login);
/**
* @brief setPassKey
* @param login
* @param passKey
*/
void setPassKey(const QByteArray &login, const QByteArray &passKey);
/**
* @brief setCookie
* Устанавливает куки для пользователя
* @param login
* @param cookie
*/
void setIP(const QByteArray &cookie, const QHostAddress &addr);
void setCookie(const QByteArray &login, const QByteArray &cookie);
/**
* @brief chkPass
* Проверяет соответствие пароля пользователя в базе с тем, что пришел
* @return
* true, если пароль верен; иначе false
*/
bool chkPass(const QByteArray &login, const QByteArray &pass);
bool chkCookie(const QByteArray &cookie);
QByteArray getLogin(const QByteArray &cookie);
QByteArray getIPhex(const QByteArray &login);
QByteArray getNikname(const QByteArray &login);
unsigned int getUserType(const QByteArray &login);
}
namespace mf {
QByteArray toBigEndianInt(const int val);
QByteArray toBigEndianShort(const short val);
unsigned int getRand(const int max);
QByteArray md5(const QByteArray &string);
}
#endif // GLOBAL_H
icqclient.cpp
超过可回答的最大字当我,想要更多更详细代码可以私信我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询