//*************************************************************************** // $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