private void OnDataMessage(DataMessageStanza dataMessageStanza) { if (persistentIds.Add(dataMessageStanza.PersistentId)) { DecriptData(dataMessageStanza); } }
private void DecriptData(DataMessageStanza dataMessageStanza) { string cryptoKey = dataMessageStanza.AppData.Where(item => item.Key == "crypto-key").Select(item => item.Value).FirstOrDefault(); string salt = dataMessageStanza.AppData.Where(item => item.Key == "encryption").Select(item => item.Value).FirstOrDefault(); if (cryptoKey != null && salt != null) { byte[] cryptoKeyBytes = UrlSafeBase64Convertor.FromBase64(cryptoKey.Substring(3)); byte[] saltBytes = UrlSafeBase64Convertor.FromBase64(salt.Substring(5)); var decryptedBytes = cryptography.Decrypt(dataMessageStanza.RawData.ToByteArray(), cryptoKeyBytes, saltBytes); Volatile.Read(ref MessageReceived)?.Invoke(this, Encoding.UTF8.GetString(decryptedBytes)); } else { if (cryptoKey != null) { Debug.WriteLine("CryptoKey is missing"); } if (salt != null) { Debug.WriteLine("salt is missing"); } } }
private void onReceiveData(DataMessageStanza proto) { try { //var lresp = DataMessageStanza.Parser.ParseFrom(msg.ToArray()); //dms = mcs_pb2.DataMessageStanza(); //dms.ParseFromString(msg); util.debugWriteLine("RECV DATA MESSAGE " + proto); //lresp.Id + " time " + lresp.ServerTimestamp + " streamid " + lresp.StreamId + " "); //var lvid = util.getRegGroup(lresp.AppData.ToString(), "\"lvid\"[\\s\\S]+(lv\\d+)"); //var lvid = util.getRegGroup(lresp.AppData.ToString(), "\"program_id\":\"(lv\\d+)"); var d = ""; foreach (var a in proto.AppDatas) { d += a.Value; } //var lvid = util.getRegGroup(d, "program_id\\\\\":\\\\\"(lv\\d+)"); google protobuf var lvid = util.getRegGroup(d, "program_id\":\"(lv\\d+)"); //google protobuf if (lvid != null) { if (check.checkedLvIdList.Find(x => x.lvId == lvid) != null) { return; } util.debugWriteLine("app push appData lvid " + lvid); var items = getNicoCasItem(lvid, proto); if (items != null) { check.foundLive(items); } else { var gir = new GetItemRetryApr(lvid, proto, this); Task.Factory.StartNew(() => { for (var i = 0; i < 10; i++) { Thread.Sleep(5000); items = gir.getItem(); if (items == null) { continue; } check.foundLive(items); break; } }); } } } catch (Exception ee) { util.debugWriteLine(ee.Message + ee.Source + ee.StackTrace + ee.TargetSite); } }