00001
00002
#ifndef __ENGINE_H
00003
#define __ENGINE_H
00004
00005
#include "gm/protocol.h"
00006
#include "gm/basenetwork.h"
00007
00008
#include <stdarg.h>
00009
#include <stdio.h>
00010
00011
#include <string>
00012
#include <list>
00013
00014
namespace GNUMessenger {
00015
00016
#define ICQ_SETSTATUS_ONLINE 0x00030000
00017
#define ICQ_SETSTATUS_AWAY 0x00030001
00018
#define ICQ_SETSTATUS_NA 0x00030005
00019
#define ICQ_SETSTATUS_OCCUPIED 0x00030011
00020
#define ICQ_SETSTATUS_DND 0x00030013
00021
#define ICQ_SETSTATUS_INVISIBLE 0x00030100
00022
#define ICQ_PROTO_ID 0x0001
00023
00025
class Packet;
00027
class FSPacket;
00028
00029
00036 class IcqProtocol :
public Protocol
00037 {
00038
public:
00039
IcqProtocol(
const XMLNode &,
ProtocolManager *manager);
00040
virtual ~
IcqProtocol();
00041
00042
const int protocolId() {
return ICQ_PROTO_ID;}
00043
const string screenName() {
return "";}
00044
00045
virtual void login();
00046
virtual void logout();
00047
00048
00049
virtual bool sendMessage(
const Contact &recipient,
const string &message);
00050
virtual void addContact(
const Contact &contact);
00051
virtual void delContact(
const Contact &contact);
00052
virtual void newUser(
const string& userName,
const VBuffer& password) {}
00053
00054
virtual void handleData(
Network *net) {}
00055
virtual void handleData(
Network *net,
const string& data);
00056
virtual void connectedToServer(
Network *net);
00057
virtual void connectionError(
Network *net,
int error);
00058 virtual void reset() {}
00059
00060
private:
00061
00062
00063
00064
enum IState { AUTHORIZER, BOS };
00065
enum IcqErrors { E_Authorizer = ICQ_PROTO_ID * 65536 };
00066
00067
int parsePacket(
const Packet &p);
00068
int parseFnac(
const Packet &p);
00069
int parseFnacGen(
const FSPacket &p);
00070
int parseFnacLoc(
const FSPacket &p);
00071
int parseFnacBud(
const FSPacket &p);
00072
int parseFnacMsg(
const FSPacket &p);
00073
int parseFnacBos(
const FSPacket &p);
00074
int parseFnacIcq(
const FSPacket &p);
00075
00076
void packetError(
const Packet *p,
const char *fmt, ...);
00077
00078
00079 IState _istate;
00080
00081
00082 VBuffer _cookie;
00083
int _seq;
00084 VBuffer _recvbuf;
00085
00086
00087 Network *m_net;
00088 };
00089
00090 }
00091
00092
#endif