//***************************************************************************
// $Id: proto.h,v 1.141 2005/10/24 15:32:33 shingrus Exp $
//***************************************************************************
#ifndef MRIM_PROTO_H #define MRIM_PROTO_H #include #define
PROTO_VERSION_MAJOR 1 #define PROTO_VERSION_MINOR 10 #define PROTO_VERSION
((((u_long)(PROTO_VERSION_MAJOR))<<16)|(u_long)(PROTO_VERSION_MINOR))
#define PROTO_MAJOR(p) (((p)&0xFFFF0000)>>16) #define PROTO_MINOR(p)
((p)&0x0000FFFF) typedef struct mrim_packet_header_t { u_long magic; //
Magic u_long proto; // Версия протокола u_long seq; // Sequence u_long msg; //
Тип пакета u_long dlen; // Длина данных u_long from; // Адрес отправителя u_long
fromport; // Порт отправителя u_char reserved[16]; // Зарезервировано }
mrim_packet_header_t; #define CS_MAGIC 0xDEADBEEF // Клиентский Magic ( C
<-> S )
/***************************************************************************
ПРОТОКОЛ СВЯЗИ КЛИЕНТ-СЕРВЕР
***************************************************************************/
#define MRIM_CS_HELLO 0x1001 // C -> S // empty #define MRIM_CS_HELLO_ACK
0x1002 // S -> C // mrim_connection_params_t #define MRIM_CS_LOGIN_ACK 0x1004
// S -> C // empty #define MRIM_CS_LOGIN_REJ 0x1005 // S -> C // LPS
reason #define MRIM_CS_PING 0x1006 // C -> S // empty #define MRIM_CS_MESSAGE
0x1008 // C -> S // UL flags // LPS to // LPS message // LPS rtf-formatted
message (>=1.1) #define MESSAGE_FLAG_OFFLINE 0x00000001 #define
MESSAGE_FLAG_NORECV 0x00000004 #define MESSAGE_FLAG_AUTHORIZE 0x00000008 //
X-MRIM-Flags: 00000008 #define MESSAGE_FLAG_SYSTEM 0x00000040 #define
MESSAGE_FLAG_RTF 0x00000080 #define MESSAGE_FLAG_CONTACT 0x00000200 #define
MESSAGE_FLAG_NOTIFY 0x00000400 #define MESSAGE_FLAG_MULTICAST 0x00001000 #define
MAX_MULTICAST_RECIPIENTS 50 #define MESSAGE_USERFLAGS_MASK 0x000036A8 // Flags
that user is allowed to set himself #define MRIM_CS_MESSAGE_ACK 0x1009 // S
-> C // UL msg_id // UL flags // LPS from // LPS message // LPS rtf-formatted
message (>=1.1) #define MRIM_CS_MESSAGE_RECV 0x1011 // C -> S // LPS from
// UL msg_id #define MRIM_CS_MESSAGE_STATUS 0x1012 // S -> C // UL status
#define MESSAGE_DELIVERED 0x0000 // Message delivered directly to user #define
MESSAGE_REJECTED_NOUSER 0x8001 // Message rejected - no such user #define
MESSAGE_REJECTED_INTERR 0x8003 // Internal server error #define
MESSAGE_REJECTED_LIMIT_EXCEEDED 0x8004 // Offline messages limit exceeded
#define MESSAGE_REJECTED_TOO_LARGE 0x8005 // Message is too large #define
MESSAGE_REJECTED_DENY_OFFMSG 0x8006 // User does not accept offline messages
#define MRIM_CS_USER_STATUS 0x100F // S -> C // UL status #define
STATUS_OFFLINE 0x00000000 #define STATUS_ONLINE 0x00000001 #define STATUS_AWAY
0x00000002 #define STATUS_UNDETERMINATED 0x00000003 #define
STATUS_FLAG_INVISIBLE 0x80000000 // LPS user #define MRIM_CS_LOGOUT 0x1013 // S
-> C // UL reason #define LOGOUT_NO_RELOGIN_FLAG 0x0010 // Logout due to
double login #define MRIM_CS_CONNECTION_PARAMS 0x1014 // S -> C //
mrim_connection_params_t #define MRIM_CS_USER_INFO 0x1015 // S -> C // (LPS
key, LPS value)* X #define MRIM_CS_ADD_CONTACT 0x1019 // C -> S // UL flags
(group(2) or usual(0) // UL group id (unused if contact is group) // LPS contact
// LPS name #define CONTACT_FLAG_REMOVED 0x00000001 #define CONTACT_FLAG_GROUP
0x00000002 #define CONTACT_FLAG_INVISIBLE 0x00000004 #define
CONTACT_FLAG_VISIBLE 0x00000008 #define CONTACT_FLAG_IGNORE 0x00000010 #define
CONTACT_FLAG_SHADOW 0x00000020 #define MRIM_CS_ADD_CONTACT_ACK 0x101A // S ->
C // UL status // UL contact_id or (u_long)-1 if status is not OK #define
CONTACT_OPER_SUCCESS 0x0000 #define CONTACT_OPER_ERROR 0x0001 #define
CONTACT_OPER_INTERR 0x0002 #define CONTACT_OPER_NO_SUCH_USER 0x0003 #define
CONTACT_OPER_INVALID_INFO 0x0004 #define CONTACT_OPER_USER_EXISTS 0x0005 #define
CONTACT_OPER_GROUP_LIMIT 0x6 #define MRIM_CS_MODIFY_CONTACT 0x101B // C -> S
// UL id // UL flags - same as for MRIM_CS_ADD_CONTACT // UL group id (unused if
contact is group) // LPS contact // LPS name #define MRIM_CS_MODIFY_CONTACT_ACK
0x101C // S -> C // UL status, same as for MRIM_CS_ADD_CONTACT_ACK #define
MRIM_CS_OFFLINE_MESSAGE_ACK 0x101D // S -> C // UIDL // LPS offline message
#define MRIM_CS_DELETE_OFFLINE_MESSAGE 0x101E // C -> S // UIDL #define
MRIM_CS_AUTHORIZE 0x1020 // C -> S // LPS user #define MRIM_CS_AUTHORIZE_ACK
0x1021 // S -> C // LPS user #define MRIM_CS_CHANGE_STATUS 0x1022 // C ->
S // UL new status #define MRIM_CS_GET_MPOP_SESSION 0x1024 // C -> S #define
MRIM_CS_MPOP_SESSION 0x1025 // S -> C #define MRIM_GET_SESSION_FAIL 0 #define
MRIM_GET_SESSION_SUCCESS 1 //UL status // LPS mpop session //white pages!
#define MRIM_CS_WP_REQUEST 0x1029 //C->S //DWORD field, LPS value #define
PARAMS_NUMBER_LIMIT 50 #define PARAM_VALUE_LENGTH_LIMIT 64 //if last symbol in
value eq '*' it will be replaced by LIKE '%' // params define // must be in
consecutive order (0..N) to quick check in check_anketa_info_request enum {
MRIM_CS_WP_REQUEST_PARAM_USER = 0, MRIM_CS_WP_REQUEST_PARAM_DOMAIN,
MRIM_CS_WP_REQUEST_PARAM_NICKNAME, MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME,
MRIM_CS_WP_REQUEST_PARAM_LASTNAME, MRIM_CS_WP_REQUEST_PARAM_SEX ,
MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY, MRIM_CS_WP_REQUEST_PARAM_DATE1 ,
MRIM_CS_WP_REQUEST_PARAM_DATE2 , //!!!!!!!!!!!!!!!!!!!online request param must
be at end of request!!!!!!!!!!!!!!! MRIM_CS_WP_REQUEST_PARAM_ONLINE ,
MRIM_CS_WP_REQUEST_PARAM_STATUS , // we do not used it, yet
MRIM_CS_WP_REQUEST_PARAM_CITY_ID, MRIM_CS_WP_REQUEST_PARAM_ZODIAC,
MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY,
MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID, MRIM_CS_WP_REQUEST_PARAM_MAX }; #define
MRIM_CS_ANKETA_INFO 0x1028 //S->C //DWORD status #define
MRIM_ANKETA_INFO_STATUS_OK 1 #define MRIM_ANKETA_INFO_STATUS_NOUSER 0 #define
MRIM_ANKETA_INFO_STATUS_DBERR 2 #define MRIM_ANKETA_INFO_STATUS_RATELIMERR 3
//DWORD fields_num //DWORD max_rows //DWORD server_time sec since 1970
(unixtime) // fields set //%fields_num == 0 //values set //%fields_num == 0
//LPS value (numbers too) #define MRIM_CS_MAILBOX_STATUS 0x1033 //DWORD new
messages in mailbox #define MRIM_CS_CONTACT_LIST2 0x1037 //S->C // UL status
#define GET_CONTACTS_OK 0x0000 #define GET_CONTACTS_ERROR 0x0001 #define
GET_CONTACTS_INTERR 0x0002 //DWORD status - if ...OK than this staff: //DWORD
groups number //mask symbols table: //'s' - lps //'u' - unsigned long //'z' -
zero terminated string //LPS groups fields mask //LPS contacts fields mask
//group fields //contacts fields //groups mask 'us' == flags, name //contact
mask 'uussuu' flags, flags, internal flags, status #define
CONTACT_INTFLAG_NOT_AUTHORIZED 0x0001 //old packet cs_login with cs_statistic
#define MRIM_CS_LOGIN2 0x1038 // C -> S #define MAX_CLIENT_DESCRIPTION 256 //
LPS login // LPS password // DWORD status //+ statistic packet data: // LPS
client description //max 256 typedef struct mrim_connection_params_t { unsigned
long ping_period; } mrim_connection_params_t; #endif // MRIM_PROTO_H