Пример #1
0
        internal static string GenerateSig(ClientHeader header, XMMsgBind bind, string challenge, string securityKey)
        {
            Hashtable paramsMap = new Hashtable();

            paramsMap.Add("challenge", challenge);
            paramsMap.Add("token", bind.token);
            paramsMap.Add("chid", header.chid);
            paramsMap.Add("from", String.Format("{0}@xiaomi.com/{1}", header.uuid, header.resource));
            paramsMap.Add("id", header.id);
            paramsMap.Add("to", Constant.SERVER);
            paramsMap.Add("kick", bind.kick);
            paramsMap.Add("client_attrs", bind.client_attrs == null ? "" : bind.client_attrs);
            paramsMap.Add("cloud_attrs", bind.cloud_attrs == null ? "" : bind.cloud_attrs);

            ArrayList exps = new ArrayList();

            exps.Add(bind.method.ToUpper());
            ArrayList lst = new ArrayList(paramsMap.Keys);

            lst.Sort();
            foreach (string key in lst)
            {
                exps.Add(String.Format("{0}={1}", key, paramsMap[key]));
            }

            exps.Add(securityKey);
            //logger.DebugFormat("GenerateSig =======securityKey:{0}", securityKey);

            bool          first = true;
            StringBuilder sb    = new StringBuilder();

            foreach (String s in exps)
            {
                if (!first)
                {
                    sb.Append('&');
                }
                sb.Append(s);
                first = false;
            }
            //logger.DebugFormat(sb.ToString());
            return(Hash4SHA1(sb.ToString()));
        }
Пример #2
0
        public static V6Packet BuildBindPacket(MIMCUser user)
        {
            if (string.IsNullOrEmpty(user.Token))
            {
                logger.DebugFormat("{0} User BuildBindPacket fail Token is null,wait ...", user.AppAccount);
                return(null);
            }
            logger.DebugFormat("{0} User BuildBindPacket", user.AppAccount);

            ClientHeader clientHeader = MIMCUtil.CreateClientHeader(user, Constant.CMD_BIND, Constant.CIPHER_NONE, MIMCUtil.CreateMsgId(user));

            XMMsgBind xMMsgBind = new XMMsgBind();

            xMMsgBind.token        = user.Token;
            xMMsgBind.method       = Constant.METHOD;
            xMMsgBind.client_attrs = user.ClientAttrs;
            xMMsgBind.cloud_attrs  = user.CloudAttrs;
            xMMsgBind.kick         = Constant.NO_KICK;

            string sign = MIMCUtil.GenerateSig(clientHeader, xMMsgBind, user.Connection.Challenge, user.SecurityKey);

            if (String.IsNullOrEmpty(sign))
            {
                logger.WarnFormat("GenerateSig fail sign is null");
                return(null);
            }
            xMMsgBind.sig = sign;

            V6Packet v6Packet = new V6Packet();
            V6Body   v6Body   = new V6Body();

            v6Body.PayloadType  = Constant.PAYLOAD_TYPE;
            v6Body.ClientHeader = clientHeader;

            using (MemoryStream ms = new MemoryStream())
            {
                Serializer.Serialize(ms, xMMsgBind);
                byte[] payload = ms.ToArray();
                v6Body.Payload = payload;
                v6Packet.Body  = v6Body;
            }
            return(v6Packet);
        }