コード例 #1
0
 public void onError(PackResult ret)
 {
     Log.e("Network", string.Concat(new object[] { "pack.onError, cmd = ", (CmdConst)this.mCmdID, " seq = ", this.mSeqID, ", ret = ", ret }));
     if (this.mCompleted != null)
     {
         PackEventArgs args = new PackEventArgs
         {
             result = ret
         };
         if (this.isAutoAuthPack())
         {
             SessionPackMgr.setAuthStatus(0);
         }
         else
         {
             if (((this.mCmdID == 1) || (this.mCmdID == 0x20)) || (this.mCmdID == 0x1f) || (this.mCmdID == 0xb2))
             {
                 SessionPackMgr.setSessionKey(null);
                 SessionPackMgr.getAccount().reset();
                 SessionPackMgr.setAuthStatus(0);
             }
             //Deployment.get_Current().get_Dispatcher().BeginInvoke(new SessionPackCompletedDelegate(this.mCompleted.Invoke), new object[] { this, args });
             SessionPackCompletedDelegate spd = new SessionPackCompletedDelegate(this.mCompleted.Invoke);
             spd.BeginInvoke(this, args, null, null);
         }
     }
 }
コード例 #2
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
        public static object onParserNewRegPack(SessionPack sessionPack)
        {
            NewRegResponse response = NewRegResponse.ParseFrom(sessionPack.mResponseBuffer);

            if (response == null)
            {
                Log.e("Network", "new reg parse failed. ");
                return(null);
            }
            int      uin = (int)response.Uin;
            RetConst ret = (RetConst)response.BaseResponse.Ret;

            Log.d("Network", string.Concat(new object[] { "new reg parsed success. uin= ", uin, "ret =", ret }));
            NewRegRequest mRequestObject = sessionPack.mRequestObject as NewRegRequest;
            uint          regMode        = mRequestObject.RegMode;

            if ((uin != 0) && (ret == RetConst.MM_OK))
            {
                Log.i("Network", "new reg PASS");
                SessionPackMgr.setSessionKey(Util.StringToByteArray(response.SessionKey));
                SessionPackMgr.getAccount().setUin(uin);
                SessionPackMgr.setAuthStatus(2);
                return(response);
            }
            Log.e("Network", "new reg failed, ret = " + ret);
            SessionPackMgr.setSessionKey(null);
            SessionPackMgr.getAccount().reset();
            return(response);
        }
コード例 #3
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
        public static object onParserRegPack(SessionPack sessionPack)
        {
            RegResponse response = RegResponse.ParseFrom(sessionPack.mResponseBuffer);

            if (response == null)
            {
                Log.e("Network", "register parse failed. ");
                return(null);
            }
            Log.d("Network", "register parsed success. ");
            int      uin = (int)response.Uin;
            RetConst ret = (RetConst)response.BaseResponse.Ret;

            if ((uin != 0) && (ret == RetConst.MM_OK))
            {
                Log.i("Network", "register PASS");
                SessionPackMgr.setSessionKey(response.SessionKey.ToByteArray());
                SessionPackMgr.getAccount().setUin(uin);
                SessionPackMgr.setAuthStatus(2);
                return(response);
            }
            Log.e("Network", "register Failed, ret = " + ret);
            SessionPackMgr.setSessionKey(null);
            SessionPackMgr.getAccount().reset();
            return(response);
        }
コード例 #4
0
ファイル: Sender.cs プロジェクト: kxlcn/android-weixin
 public bool checkTryAutoAuth()
 {
     if (!SessionPackMgr.getAccount().isValid())
     {
         Log.e("Network", "cannot auto-auth without valid account.");
         this.closeSender();
         return(false);
     }
     if (mRetryAuthLeft <= 0)
     {
         if (mRetryAuthLeft == 0)
         {
             Log.e("Network", " autoAuth no retry left");
             mRetryAuthLeft = -1;
         }
         return(false);
     }
     SessionPackMgr.getPackEx(delegate(SessionPack pack)
     {
         if (pack.mCacheBodyBuffer != null)
         {
             Log.i("Network", "clearn cache body before autoauth, cmdUri = " + pack.mCmdUri);
             pack.mCacheBodyBuffer = null;
         }
         return(true);
     });
     Log.i("Network", "CMD need autoauth, autoAuthLeft:" + mRetryAuthLeft);
     mRetryAuthLeft--;
     SessionPackMgr.putToHead(AuthPack.makeAutoAuthPack(2));
     return(true);
 }
コード例 #5
0
ファイル: LongConnector.cs プロジェクト: kxlcn/android-weixin
 public static bool checkKeepAlive()
 {
     if (mNextHelloTimestamp == 0.0)
     {
         return(false);
     }
     if (SessionPack.getNow() < mNextHelloTimestamp)
     {
         return(false);
     }
     if (!SessionPackMgr.getAccount().isValid() || !SessionPackMgr.isValidSessionKey())
     {
         stopKeepAlivePoint();
         return(false);
     }
     if (mFirstKeepAlivePointAfterConnected == mNextHelloTimestamp)
     {
         EventCenter.postEvent(EventConst.ON_NET_MM_NET_NOOP, null, null);
     }
     else
     {
         EventCenter.postEvent(EventConst.ON_NET_MM_NET_NOOP, null, null);
     }
     restartKeepAlivePoint(0xea60);
     return(true);
 }
コード例 #6
0
ファイル: Sender.cs プロジェクト: kxlcn/android-weixin
 public void closeSender()
 {
     Log.i("Network", "close sender , clearn all.");
     LongConnector.setEnable(false);
     Connector.close();
     SessionPackMgr.cancelAllPacket();
     SessionPackMgr.getAccount().reset();
     SessionPackMgr.setAuthStatus(0);
 }
コード例 #7
0
        public byte[] getSessionKey(bool encode)
        {
            switch (this.mCmdID)
            {
            case 0:
                return(this.getSessionKeyForInvalidCmd(encode));

            case 1:
                if (!encode)
                {
                    return(Util.StringToByteArray(SessionPackMgr.getAccount().getPassword()));
                }
                return(null);

            case 0x1f:
            case 0x20:
                if (!encode)
                {
                    return(Util.StringToByteArray(SessionPackMgr.getAccount().getPassword()));
                }
                return(null);

            case 0x21:
                //if (!encode)
                //{
                //    return Util.StringToByteArray(((GetUserNameRequest) this.mRequestObject).Pwd);
                //}
                return(null);

            case 0x30:
                if (encode)
                {
                    return(null);
                }
                return(null);

            //return Util.StringToByteArray(((GetVerifyImgRequest) this.mRequestObject).Pwd.String);
            case 232:
            case 233:
            case 0xb2:
                if (encode)
                {
                    return(null);
                }
                return(RandomKey);
            }
            return(SessionPackMgr.getSessionKey());
        }
コード例 #8
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
        public static void updateAccountInfoFromAuth(object request)
        {
            switch (request.GetType().Name)
            {
            case "AuthRequest":
                AuthRequest request2 = request as AuthRequest;
                SessionPackMgr.getAccount().setAuthInfo(request2.UserName.String, request2.Pwd.String, request2.Pwd2);
                break;

            case "NewAuthRequest":
                NewAuthRequest request3 = request as NewAuthRequest;
                SessionPackMgr.getAccount().setAuthInfo(request3.UserName.String, request3.Pwd.String, request3.Pwd2);

                break;
            }
        }
コード例 #9
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
        //¶þ´ÎµÇ½
        private static NewAuthRequest makeAuthRequest(int scene)
        {
            if (!SessionPackMgr.getAccount().isValid())
            {
                return(null);
            }
            BaseRequest defaultInstance = BaseRequest.DefaultInstance;

            BaseRequest.Builder builder = BaseRequest.CreateBuilder();
            //builder.SessionKey = ByteString.CopyFrom(SessionPackMgr.getSessionKeyEx());
            builder.SessionKey    = ByteString.CopyFrom(SessionPackMgr.getAccount().SessionKey);
            builder.Uin           = (uint)SessionPackMgr.getAccount().getUin();
            builder.DeviceID      = ByteString.CopyFromUtf8(Util.getDeviceUniqueId());
            builder.ClientVersion = (int)ConstantsProtocol.CLIENT_MIN_VERSION;
            builder.DeviceType    = ByteString.CopyFromUtf8(ConstantsProtocol.DEVICE_TYPE);
            builder.Scene         = (uint)scene;
            defaultInstance       = builder.Build();

            NewAuthRequest.Builder builder2 = NewAuthRequest.CreateBuilder();
            builder2.BaseRequest = defaultInstance;
            builder2.UserName    = Util.toSKString(SessionPackMgr.getAccount().getUsername());
            builder2.Pwd         = Util.toSKString(SessionPackMgr.getAccount().getPassword());
            // builder2.Pwd2 = Util.NullAsNil("");
            builder2.ImgSid       = Util.toSKString("");
            builder2.ImgCode      = Util.toSKString("");
            builder2.Channel      = 0;// AppInfoHelper.ChannelId;
            builder2.InputType    = 0;
            builder2.TimeStamp    = Convert.ToUInt32(Util.getNowSeconds().ToString().Substring(0, 10));
            builder2.BuiltinIPSeq = 0;
            //builder2.WTLoginReqBuff = Util.toSKBuffer("");
            //builder2.BundleID = "com.tencent.xin";
            builder2.DeviceName = "Apple Watch";

            builder2.DeviceType     = ConstantsProtocol.DEVICE_TYPE;
            builder2.AutoAuthTicket = SessionPackMgr.getAccount().AutoAuthKey;
            builder2.Language       = "zh_CN"; //AccountMgr.GetCurrentLanguage();
            builder2.DeviceBrand    = "Apple"; //DeviceStatus.get_DeviceManufacturer() ?? "";
            builder2.RealCountry    = "CN";    //DeviceStatus.get_DeviceManufacturer() ?? "";
            builder2.DeviceModel    = "";      //DeviceStatus.get_DeviceName() ?? "";
            builder2.RandomEncryKey = Util.toSKBuffer(new byte[] { 104, 84, 125, 199, 142, 226, 48, 218, 83, 195, 3, 84, 3, 123, 208, 162 });
            builder2.OSType         = "8.10.12393.0";
            builder2.TimeZone       = "8.00";

            Log.i("Network", "Old AutoAuthTicket = " + SessionPackMgr.getAccount().AutoAuthKey);
            Util.WriteLog("Old AutoAuthTicket = " + SessionPackMgr.getAccount().AutoAuthKey);
            return(builder2.Build());
        }
コード例 #10
0
ファイル: Receiver.cs プロジェクト: kxlcn/android-weixin
        private void decodeNotifyData(byte[] encryptData)
        {
            uint encryptAlgo  = Util.ReadProtoInt(encryptData, 1);
            uint compressAlgo = Util.ReadProtoInt(encryptData, 4);

            byte[] cipherText = Util.ReadProtoRawData(encryptData, 8);
            if (encryptAlgo == 5)
            {
                int    Salt         = (int)Util.ReadProtoInt(encryptData, 3);
                byte[] sencryptSalt = TLVUtil.int2byte(Salt, 4, false);
                byte[] sessionKey   = SessionPackMgr.getAccount().SessionKey;
                byte[] decodeKey    = new byte[20];

                Buffer.BlockCopy(sessionKey, 0, decodeKey, 0, 16);
                Buffer.BlockCopy(sencryptSalt, 0, decodeKey, 16, sencryptSalt.Length);

                byte[] decodeAesKey = MD5Core.GetHash(decodeKey);
                // Log.w("Network", string.Concat(new object[] { "encode notify salt ", Util.byteToHexStr(sencryptSalt), "SessionKey ", Util.byteToHexStr(sessionKey), "decode Key ", Util.byteToHexStr(decodeAesKey) }));
                byte[] decryptedData = Util.AESDecrypt(cipherText, decodeAesKey);

                if (compressAlgo == 1)
                {
                    Zlib.Decompress(decryptedData, decryptedData.Length, ref decryptedData);
                }

                Log.w("Network", string.Concat(new object[] { "decode notify result ", Util.byteToHexStr(decryptedData) }));

                cipherText = Util.ReadProtoRawData(decryptedData, 1);
                cipherText = Util.ReadProtoRawData(cipherText, 1);
                string ChatRoomId = Encoding.UTF8.GetString(cipherText);
                //  uint newMsgid = Util.ReadProtoInt(decryptedData, 2);

                uint newMsgSeq = Util.ReadProtoInt(decryptedData, 3);
                cipherText = Util.ReadProtoRawData(decryptedData, 6);
                cipherText = Util.ReadProtoRawData(cipherText, 1);
                string Contact = Encoding.UTF8.GetString(cipherText);

                uint msgType = Util.ReadProtoInt(decryptedData, 8);


                Log.w("Network", string.Concat(new object[] { "decode notify data ", " ChatRoomId ", ChatRoomId, " newMsgSeq ", newMsgSeq, "MsgType ", msgType, " Contact ", Contact }));


                new NetSceneGetChatRoomMsg().doScene(ChatRoomId, newMsgSeq);
            }
        }
コード例 #11
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
        public static object onParserGetUserNamePack(SessionPack sessionPack)
        {
            GetUserNameResponse response = GetUserNameResponse.ParseFrom(sessionPack.mResponseBuffer);

            if (response == null)
            {
                Log.e("Network", "getusername parse failed. ");
                return(null);
            }
            Connector.close();
            Log.d("Network", "getUserName parsed success. ");
            RetConst ret = (RetConst)response.BaseResponse.Ret;

            if (ret != RetConst.MM_OK)
            {
                Log.e("Network", "NetSceneGetUserName: failed. ret = " + ret);
                return(response);
            }
            Log.i("Network", "NetSceneGetUserName: success.name = " + response.UserName);
            SessionPackMgr.getAccount().setUsername(response.UserName);
            SessionPackMgr.mAuthTicket2 = response.Ticket;
            return(response);
        }
コード例 #12
0
ファイル: Sender.cs プロジェクト: kxlcn/android-weixin
        private bool doSendPack(SessionPack sessionPack)
        {
            sessionPack.mSendStatus = 2;
            if (sessionPack.mCmdID == 1)
            {
                Log.i("Network", "auth now...user = "******"Network", "auth now...user = " + SessionPackMgr.getAccount().getUsername());
                SessionPackMgr.setAuthStatus(1);
            }
            if (sessionPack.mCmdID == 8)
            {
                sessionPack.mSendStatus = 4;
            }
            else
            {
                sessionPack.setTimeoutPoint();
            }
            if (!Connector.sendPack(sessionPack))
            {
                this.onSendPackFailed(true, sessionPack);
                return(false);
            }
            if ((sessionPack.mCmdID == 6) || (sessionPack.mCmdID == 8))
            {
                sessionPack.mSendStatus = 5;
            }
            else
            {
                sessionPack.mSendStatus = 3;
            }
            return(true);
        }
コード例 #13
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
 private static void onAutoAuthCompleted(object sender, PackEventArgs e)
 {
     if (!e.isSuccess())
     {
         Log.e("Network", "auto auth failed .");
     }
     else
     {
         SessionPack     pack            = sender as SessionPack;
         NewAuthResponse mResponseObject = (NewAuthResponse)pack.mResponseObject;
         NewAuthRequest  mRequestObject  = (NewAuthRequest)pack.mRequestObject;
         RetConst        ret             = (RetConst)mResponseObject.BaseResponse.Ret;
         if (ret == RetConst.MM_ERR_IDC_REDIRECT)
         {
             if (mIDCAutoAuthCount < 3)
             {
                 mIDCAutoAuthCount++;
                 SessionPackMgr.putToHead(makeAutoAuthPack(2));
                 return;
             }
             Log.e("Network", "Redirect IDC too much, auto auth failed!");
         }
         mIDCAutoAuthCount = 0;
         switch (ret)
         {
         case RetConst.MM_OK:
         case RetConst.MM_ERR_CRITICALUPDATE:
         case RetConst.MM_ERR_RECOMMENDEDUPDATE:
         {
             Log.i("Network", "auto auth success. ");
             Log.i("Network", "New AutoAuthTicket = " + SessionPackMgr.getAccount().AutoAuthKey);
             Util.WriteLog("New AutoAuthTicket = " + SessionPackMgr.getAccount().AutoAuthKey);
             // Account account = AccountMgr.getCurAccount();
             // account.bytesSessionkey = mResponseObject.SessionKey.ToByteArray();
             // account.nUin = mResponseObject.Uin;
             //  account.dbLastSessionKeyTimeStamp = Util.getNowSeconds();
             //  account.bytesA2Key = mResponseObject.A2Key.Buffer.ToByteArray();
             SessionPackMgr.getAccount().SessionKey = mResponseObject.SessionKey.ToByteArray();
             AccountMgr.updateAccount();
             EventCenter.postEvent(EventConst.ON_NETSCENE_AUTOAUTH_SUCCESS, mResponseObject, null);
             return;
         }
         }
         if (ret == RetConst.MM_ERR_NEED_VERIFY)
         {
             if ((mResponseObject.ImgBuf == null) || (mResponseObject.ImgSid == null))
             {
                 Log.e("Network", "NEED_VERIFY_USER, but ImgSid or ImgBuf is null");
                 EventCenter.postEvent(EventConst.ON_NETSCENE_AUTOAUTH_ERR, ret, null);
             }
             else
             {
                 //VerifyCodeArgs args = new VerifyCodeArgs {
                 //    mImageSid = mResponseObject.ImgSid.String,
                 //    mImageBuf = mResponseObject.ImgBuf.Buffer.ToByteArray()
                 //};
                 Log.e("Network", "auto auth failed, need verify,  sid = " + "args.mImageSid");
                 //EventCenter.postEvent(EventConst.ON_NETSCENE_AUTH_NEEDVERIFY, args, null);
             }
         }
         else if (ret == RetConst.MM_ERR_QQ_OK_NEED_MOBILE)
         {
             Log.i("Network", "autoAuth Need Mobile veryfy ret = " + ret.ToString());
             EventCenter.postEvent(EventConst.ON_NETSCENE_AUTOAUTH_ERR, ret, mResponseObject.BindMobile.String);
         }
         else
         {
             Log.e("Network", "auto auth failed, result = " + mResponseObject.BaseResponse.ErrMsg.String);
             EventCenter.postEvent(EventConst.ON_NETSCENE_AUTOAUTH_ERR, ret, null);
         }
     }
 }
コード例 #14
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
        public static void updateAccountInfoFromReg(object request)
        {
            RegRequest request2 = request as RegRequest;

            SessionPackMgr.getAccount().setAuthInfo(request2.UserName.String, request2.Pwd.String, request2.Pwd2);
        }
コード例 #15
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
        public static void updateAccountInfoFromNewReg(object request)
        {
            NewRegRequest request2 = request as NewRegRequest;

            SessionPackMgr.getAccount().setAuthInfo(request2.UserName, request2.Pwd, "");
        }
コード例 #16
0
ファイル: AuthPack.cs プロジェクト: kxlcn/android-weixin
        public static object onParserNewAuthPack(SessionPack sessionPack)
        {
            NewAuthResponse response = NewAuthResponse.ParseFrom(sessionPack.mResponseBuffer);

            if (response == null)
            {
                Log.e("Network", "auth parse failed. ");
                return(null);
            }
            int      uin = (int)response.Uin;
            RetConst ret = (RetConst)response.BaseResponse.Ret;

            Log.d("Network", "auth parsed success. ");
            if ((uin != 0) && (((ret == RetConst.MM_OK) || (ret == RetConst.MM_ERR_CRITICALUPDATE)) || (ret == RetConst.MM_ERR_RECOMMENDEDUPDATE)))
            {
                Log.i("Network", "auth PASS, uin= " + uin);

                HostService.updateAuthBuiltinIP(response.BuiltinIPList);
                SessionPackMgr.setSessionKey(response.SessionKey.ToByteArray());
                SessionPackMgr.getAccount().AutoAuthKey = response.AutoAuthTicket;
                SessionPackMgr.getAccount().setUin(uin);
                SessionPackMgr.getAccount().Nickname = response.NickName.String;
                //SessionPackMgr.getAccount().Headimg=response.WTLoginRspBuff
                SessionPackMgr.setAuthStatus(2);
                return(response);
            }
            Log.e("Network", "auth Failed,ret = " + ret);
            switch (ret)
            {
            case RetConst.MM_ERR_NEEDREG:
                Log.i("Network", "auth result: need register");
                SessionPackMgr.mAuthTicket1 = response.Ticket;
                Connector.close();
                return(response);

            case RetConst.MM_ERR_IDC_REDIRECT:
                Log.i("Network", "Need to redirect IDC for auth ...");
                HostService.updateAuthIDCHost(response.NewHostList);
                HostService.updateAuthBuiltinIP(response.BuiltinIPList);
                Connector.close();
                return(response);

            case RetConst.MM_ERR_QQ_OK_NEED_MOBILE:
                SessionPackMgr.setSessionKey(null);
                return(response);

            default:
                SessionPackMgr.setSessionKey(null);
                SessionPackMgr.getAccount().reset();
                switch (ret)
                {
                case RetConst.MM_ERR_RECOMMENDEDUPDATE:
                    Log.e("Network", "Auth Failed: MM_ERR_RECOMMENDEDUPDATE ");
                    goto Label_022B;

                case RetConst.MM_ERR_CRITICALUPDATE:
                    Log.e("Network", "Auth Failed: MM_ERR_CRITICALUPDATE ");
                    goto Label_022B;

                case RetConst.MM_ERR_AUTH_ANOTHERPLACE:
                    Log.e("Network", "Auth Failed: MM_ERR_AUTH_ANOTHERPLACE ");
                    mKickMessage = response.KickResponse;
                    Sender.getInstance().closeSender();
                    goto Label_022B;

                case RetConst.MM_ERR_NEED_VERIFY:
                    Log.e("Network", "Auth Failed: MM_ERR_NEED_VERIFY ");
                    goto Label_022B;

                case RetConst.MM_ERR_NOUSER:
                    Log.e("Network", "Auth Failed: MM_ERR_NOUSER ");
                    goto Label_022B;

                case RetConst.MM_ERR_PASSWORD:
                    Log.e("Network", "Auth Failed: MM_ERR_PASSWORD ");
                    goto Label_022B;
                }
                break;
            }
Label_022B:
            Connector.close();
            return(response);
        }