package com.mogujie.tt.config; import com.mogujie.tt.log.Logger; import com.mogujie.tt.packet.base.Header; public class ProtocolConstant { public static class ProtocolDumper { private static Logger logger = Logger.getLogger(ProtocolDumper.class); private static String[] sid = new String[SID_MAX]; private static String[] loginCid = new String[CID_LOGIN_MAX]; private static String[] buddyListCid = new String[CID_BUDDY_LIST_MAX]; private static String[] msgCid = new String[CID_MSG_MAX]; private static String[] groupCid = new String[CID_GROUP_MAX]; public static String[] getCidList(int serviceId) { switch (serviceId) { case SID_LOGIN: return loginCid; case SID_MSG: return msgCid; case SID_BUDDY_LIST: return buddyListCid; case SID_GROUP: return groupCid; default: return null; } } // use shell command to generate below result // grep "CID_MSG" // /Users/ericxu1983/Documents/workspace/TT/mgandroid-teamtalk/src/com/mogujie/tt/config/ProtocolConstant.java // | awk '{printf "msgCid[%s]=\"%s\";\n",$5,$5}' static { sid[SID_LOGIN] = "SID_LOGIN"; sid[SID_BUDDY_LIST] = "SID_BUDDY_LIST"; sid[SID_MSG] = "SID_MSG"; // todo eric can we switch server? sid[SID_SWITCH_SERVER] = "SID_SWITCH_SERVER"; sid[SID_GROUP] = "SID_GROUP"; sid[SID_FILE] = "SID_FILE"; sid[SID_OTHER] = "SID_OTHER"; loginCid[CID_LOGIN_REQ_MSGSERVER] = "CID_LOGIN_REQ_MSGSERVER"; loginCid[CID_LOGIN_RES_MSGSERVER] = "CID_LOGIN_RES_MSGSERVER"; loginCid[CID_LOGIN_REQ_USERLOGIN] = "CID_LOGIN_REQ_USERLOGIN"; loginCid[CID_LOGIN_RES_USERLOGIN] = "CID_LOGIN_RES_USERLOGIN"; loginCid[CID_LOGIN_REQ_LOGINOUT] = "CID_LOGIN_REQ_LOGINOUT"; loginCid[CID_LOGIN_RES_LOGINOUT] = "CID_LOGIN_RES_LOGINOUT"; loginCid[CID_LOGIN_KICK_USER] = "CID_LOGIN_KICK_USER"; buddyListCid[CID_BUDDY_LIST_REQUEST] = "CID_BUDDY_LIST_REQUEST"; buddyListCid[CID_BUDDY_LIST_FRIEND_LIST] = "CID_BUDDY_LIST_FRIEND_LIST"; buddyListCid[CID_BUDDY_LIST_ONLINE_FRIEND_LIST] = "CID_BUDDY_LIST_ONLINE_FRIEND_LIST"; buddyListCid[CID_BUDDY_LIST_STATUS_NOTIFY] = "CID_BUDDY_LIST_STATUS_NOTIFY"; buddyListCid[CID_BUDDY_LIST_USER_STATUS_REQUEST] = "CID_BUDDY_LIST_USER_STATUS_REQUEST"; buddyListCid[CID_BUDDY_LIST_USER_STATUS_RESPONSE] = "CID_BUDDY_LIST_USER_STATUS_RESPONSE"; buddyListCid[CID_BUDDY_LIST_USER_INFO_RESPONSE] = "CID_BUDDY_LIST_USER_INFO_RESPONSE"; buddyListCid[CID_BUDDY_LIST_USER_INFO_REQUEST] = "CID_BUDDY_LIST_USER_INFO_REQUEST"; buddyListCid[CID_BUDDY_LIST_REMOVE_SESSION_REQ] = "CID_BUDDY_LIST_REMOVE_SESSION_REQ"; buddyListCid[CID_BUDDY_LIST_REMOVE_SESSION_RES] = "CID_BUDDY_LIST_REMOVE_SESSION_RES"; buddyListCid[CID_BUDDY_LIST_ALL_USER_REQUEST] = "CID_BUDDY_LIST_ALL_USER_REQUEST"; buddyListCid[CID_BUDDY_LIST_ALL_USER_RESPONSE] = "CID_BUDDY_LIST_ALL_USER_RESPONSE"; buddyListCid[CID_BUDDY_LIST_USERS_STATUS_REQUEST] = "CID_BUDDY_LIST_USERS_STATUS_REQUEST"; buddyListCid[CID_BUDDY_LIST_USERS_STATUS_RESPONSE] = "CID_BUDDY_LIST_USERS_STATUS_RESPONSE"; buddyListCid[CID_BUDDY_LIST_DEPARTMENT_REQUEST] = "CID_BUDDY_LIST_DEPARTMENT_REQUEST"; buddyListCid[CID_BUDDY_LIST_DEPARTMENT_RESPONSE] = "CID_BUDDY_LIST_DEPARTMENT_RESPONSE"; msgCid[CID_MSG_DATA] = "CID_MSG_DATA"; msgCid[CID_MSG_DATA_ACK] = "CID_MSG_DATA_ACK"; msgCid[CID_MSG_READ_ACK] = "CID_MSG_READ_ACK"; msgCid[CID_MSG_TIME_REQUEST] = "CID_MSG_TIME_REQUEST"; msgCid[CID_MSG_TIME_RESPONSE] = "CID_MSG_TIME_RESPONSE"; msgCid[CID_MSG_UNREAD_CNT_REQUEST] = "CID_MSG_UNREAD_CNT_REQUEST"; msgCid[CID_MSG_UNREAD_CNT_RESPONSE] = "CID_MSG_UNREAD_CNT_RESPONSE"; msgCid[CID_MSG_UNREAD_MSG_REUQEST] = "CID_MSG_UNREAD_MSG_REUQEST"; msgCid[CID_MSG_HISTORY_MSG_REQUEST] = "CID_MSG_HISTORY_MSG_REQUEST"; msgCid[CID_MSG_HISTORY_SERVICE_MSG_REQUEST] = "CID_MSG_HISTORY_SERVICE_MSG_REQUEST"; msgCid[CID_MSG_HISTORY_SERVICE_MSG_RESPONSE] = "CID_MSG_HISTORY_SERVICE_MSG_RESPONSE"; msgCid[CID_MSG_UNREAD_MSG_RESPONSE] = "CID_MSG_UNREAD_MSG_RESPONSE"; msgCid[CID_MSG_HISTORY_MSG_RESPONSE] = "CID_MSG_HISTORY_MSG_RESPONSE"; groupCid[CID_GROUP_LIST_REQUEST] = "CID_GROUP_LIST_REQUEST"; groupCid[CID_GROUP_LIST_RESPONSE] = "CID_GROUP_LIST_RESPONSE"; groupCid[CID_GROUP_USER_LIST_REQUEST] = "CID_GROUP_USER_LIST_REQUEST"; groupCid[CID_GROUP_USER_LIST_RESPONSE] = "CID_GROUP_USER_LIST_RESPONSE"; groupCid[CID_GROUP_UNREAD_CNT_REQUEST] = "CID_GROUP_UNREAD_CNT_REQUEST"; groupCid[CID_GROUP_UNREAD_CNT_RESPONSE] = "CID_GROUP_UNREAD_CNT_RESPONSE"; groupCid[CID_GROUP_UNREAD_MSG_REQUEST] = "CID_GROUP_UNREAD_MSG_REQUEST"; groupCid[CID_GROUP_UNREAD_MSG_RESPONSE] = "CID_GROUP_UNREAD_MSG_RESPONSE"; groupCid[CID_GROUP_HISTORY_MSG_REQUEST] = "CID_GROUP_HISTORY_MSG_REQUEST"; groupCid[CID_GROUP_HISTORY_MSG_RESPONSE] = "CID_GROUP_HISTORY_MSG_RESPONSE"; groupCid[CID_GROUP_MSG_READ_ACK] = "CID_GROUP_MSG_READ_ACK"; groupCid[CID_GROUP_CREATE_TMP_GROUP_REQUEST] = "CID_GROUP_CREATE_TMP_GROUP_REQUEST"; groupCid[CID_GROUP_CREATE_TMP_GROUP_RESPONSE] = "CID_GROUP_CREATE_TMP_GROUP_RESPONSE"; groupCid[CID_GROUP_CHANGE_MEMBER_REQUEST] = "CID_GROUP_CHANGE_MEMBER_REQUEST"; groupCid[CID_GROUP_CHANGE_MEMBER_RESPONSE] = "CID_GROUP_CHANGE_MEMBER_RESPONSE"; groupCid[CID_GROUP_DIALOG_LIST_REQUEST] = "CID_GROUP_DIALOG_LIST_REQUEST"; groupCid[CID_GROUP_DIALOG_LIST_RESPONSE] = "CID_GROUP_DIALOG_LIST_RESPONSE"; groupCid[CID_GROUP_CREATE_NORMAL_GROUP_NOTIFY] = "CID_GROUP_CREATE_NORMAL_GROUP_NOTIFY"; groupCid[CID_GROUP_CHANGE_MEMEBER_NOTIFY] = "CID_GROUP_CHANGE_MEMEBER_NOTIFY"; } public static void dump(boolean toSend, Header header) { int serviceId = header.getServiceId(); int commandId = header.getCommandId(); int seqNo = header.getReserved(); String serviceString = ""; String commandString = ""; do { // todo eric, exceed array index potential error String ret = sid[serviceId]; if (ret == null) { logger.e("unkown serviceid:%d", serviceId); break; } serviceString = ret; String[] cidList = getCidList(serviceId); if (cidList == null) { logger.e("no such cidList for service:%s", serviceString); break; } ret = cidList[commandId]; if (ret == null) { logger.e("no such commandId:%d", commandId); break; } commandString = ret; } while (false); logger.d( "packet#%s packet, service:%s(%d), command:%s(%d), seqNo:%d", toSend ? "sending" : "received", serviceString, serviceId, commandString, commandId, seqNo); } } // msg type public static final byte MSG_TYPE_P2P_FLAG = 0x00; public static final byte MSG_TYPE_GROUP_FLAG = 0x10; public static final byte MSG_TYPE_P2P_TEXT = MSG_TYPE_P2P_FLAG + 0x01; public static final byte MSG_TYPE_P2P_AUDIO = MSG_TYPE_P2P_FLAG + 0x02; public static final byte MSG_TYPE_GROUP_TEXT = MSG_TYPE_GROUP_FLAG + 0x01; public static final byte MSG_TYPE_GROUP_AUDIO = MSG_TYPE_GROUP_FLAG + 0x02; // command id for group message public static final int CID_GROUP_LIST_REQUEST = 1; public static final int CID_GROUP_LIST_RESPONSE = 2; public static final int CID_GROUP_USER_LIST_REQUEST = 3; public static final int CID_GROUP_USER_LIST_RESPONSE = 4; public static final int CID_GROUP_UNREAD_CNT_REQUEST = 5; public static final int CID_GROUP_UNREAD_CNT_RESPONSE = 6; public static final int CID_GROUP_UNREAD_MSG_REQUEST = 7; public static final int CID_GROUP_UNREAD_MSG_RESPONSE = 8; public static final int CID_GROUP_HISTORY_MSG_REQUEST = 9; public static final int CID_GROUP_HISTORY_MSG_RESPONSE = 10; public static final int CID_GROUP_MSG_READ_ACK = 11; public static final int CID_GROUP_CREATE_TMP_GROUP_REQUEST = 12; public static final int CID_GROUP_CREATE_TMP_GROUP_RESPONSE = 13; public static final int CID_GROUP_CHANGE_MEMBER_REQUEST = 14; public static final int CID_GROUP_CHANGE_MEMBER_RESPONSE = 15; public static final int CID_GROUP_DIALOG_LIST_REQUEST = 16; public static final int CID_GROUP_DIALOG_LIST_RESPONSE = 17; public static final int CID_GROUP_CREATE_NORMAL_GROUP_NOTIFY = 18; public static final int CID_GROUP_CHANGE_MEMEBER_NOTIFY = 19; public static final int CID_GROUP_MAX = 21; // command id for buddy list public static final int CID_BUDDY_LIST_REQUEST = 1; // public static final int CID_BUDDY_LIST_FRIEND_LIST = 3; // public static final int CID_BUDDY_LIST_ONLINE_FRIEND_LIST = 4; // public static final int CID_BUDDY_LIST_STATUS_NOTIFY = 5; // public static final int CID_BUDDY_LIST_USER_STATUS_REQUEST = 8; // public static final int CID_BUDDY_LIST_USER_STATUS_RESPONSE = 9; // public static final int CID_BUDDY_LIST_USER_INFO_RESPONSE = 10; // public static final int CID_BUDDY_LIST_USER_INFO_REQUEST = 11; public static final int CID_BUDDY_LIST_REMOVE_SESSION_REQ = 12; public static final int CID_BUDDY_LIST_REMOVE_SESSION_RES = 13; public static final int CID_BUDDY_LIST_ALL_USER_REQUEST = 14; public static final int CID_BUDDY_LIST_ALL_USER_RESPONSE = 15; public static final int CID_BUDDY_LIST_USERS_STATUS_REQUEST = 16; public static final int CID_BUDDY_LIST_USERS_STATUS_RESPONSE = 17; public static final int CID_BUDDY_LIST_DEPARTMENT_REQUEST = 18; public static final int CID_BUDDY_LIST_DEPARTMENT_RESPONSE = 19; public static final int CID_BUDDY_LIST_MAX = 21; public static final int USER_MSG_TYPE = 1; public static final int IM_PDU_VERSION = 3; // SERVICE_ID public static final int SID_LOGIN = 0x0001; public static final int SID_BUDDY_LIST = 0x0002; public static final int SID_MSG = 0x0003; public static final int SID_SWITCH_SERVER = 0x0004; public static final int SID_GROUP = 0x0005; public static final int SID_FILE = 0x0006; public static final int SID_OTHER = 0x0007; public static final int SID_DEFAULT = 0x0007; // todo eric, make the value enum, so if adding new sid, no need to change // the value for max public static final int SID_MAX = 0x0010; // LOGIN IP,PORT public static final String LOGIN_IP1 = "122.225.68.125"; public static final String LOGIN_IP2 = "101.68.218.125"; public static final int LOGIN_PORT = 9008; //open source // public static final int LOGIN_PORT = 18008; // COMMAND_ID FOR LOGIN public static final int CID_LOGIN_REQ_MSGSERVER = 1; public static final int CID_LOGIN_RES_MSGSERVER = 2; public static final int CID_LOGIN_REQ_USERLOGIN = 3; public static final int CID_LOGIN_RES_USERLOGIN = 4; public static final int CID_LOGIN_REQ_LOGINOUT = 5; public static final int CID_LOGIN_RES_LOGINOUT = 6; public static final int CID_LOGIN_KICK_USER = 7; public static final int CID_LOGIN_MAX = 10; // CONTACT public static final int CID_REQUEST_RECNET_CONTACT = 1; public static final int CID_GET_USER_INFO_REQUEST = 11;// 请求用户信息 public static final int CID_GET_USER_INFO_RESPONSE = 10;// 获取用户信息 public static final int ON_LINE = 1; // COMMAND_ID FOR MSG public static final int CID_MSG_DATA = 1; public static final int CID_MSG_DATA_ACK = 2; public static final int CID_MSG_READ_ACK = 3; public static final int CID_MSG_TIME_REQUEST = 5; public static final int CID_MSG_TIME_RESPONSE = 6; public static final int CID_MSG_UNREAD_CNT_REQUEST = 7; public static final int CID_MSG_UNREAD_CNT_RESPONSE = 8; public static final int CID_MSG_UNREAD_MSG_REUQEST = 9; public static final int CID_MSG_HISTORY_MSG_REQUEST = 10; // public static final int CID_MSG_LIST_RESPONSE = 11; public static final int CID_MSG_HISTORY_SERVICE_MSG_REQUEST = 12; public static final int CID_MSG_HISTORY_SERVICE_MSG_RESPONSE = 13; public static final int CID_MSG_UNREAD_MSG_RESPONSE = 14; public static final int CID_MSG_HISTORY_MSG_RESPONSE = 15; public static final int CID_MSG_MAX = 17; public static final int CID_SHOP_MEMBER_RESPONSE = 2; public static final int CID_CONTACT_RECENT_RESPONSE = 3; public static final int CID_CONTACT_FRIEND_STATUS_NOTIYF = 5; public static final int CID_QUERY_USER_ONLINE_STATUS_REQUEST = 8; public static final int CID_QUERY_USER_ONLINE_STATUS_RESPONSE = 9; public static final int CID_HEART_BEAT = 1; public static final int RES_RESULT_SUCCESS = 0; public static final int CLIENT_TYPE = 0x12;// 表示android,登陆消息服务器时使用 public static final String CLIENT_VERSION = "ANDROID_TEAMTALK_V1.0.1"; }