private XmlElement CreateSessionRequest() { return(IqStanza.Set() .NewId() .Children(new XmlElement("session") .Xmlns(XmppNamespaces.Session))); }
private static XmlElement CreateRemoveItemRequest(Jid entityJid, RosterItem item) { var itemElement = ToXmlElement(item); itemElement.SetAttributeValue("subscription", "remove"); return(AttachQuery(IqStanza.Set().From(entityJid), itemElement)); }
private static XmlElement CreateRosterStanza(string type, params RosterItem[] rosterItems) { var result = IqStanza.New().Type(type); var items = rosterItems.Select(i => new XmlElement("item").Attribute("jid", i.Jid).Attribute("name", i.Name)); result.Children.Add(new XmlElement("query", items.ToArray()).Xmlns(XmppNamespaces.Roster)); return(result); }
public static bool Authentication2Response(string Response) { cleanErrors(); bool result = true; XmlDocument xml = new XmlDocument(); IqStanza iq = null; try { iq = new IqStanza(Response); } catch (JabberException je) { iq = null; MsgError = je.Message + "\nError loading XML received from server."; result = false; } if (result) { if (iq != null) { if (iq.Id == "auth2") { if (iq.Type != "result") { result = false; // type of error /*XmlNode xmlError = xml.FirstChild.LastChild; * Console.WriteLine(xmlError.Name); * if (xmlError != null && xmlError.Name == "error") { * errorType (xmlError); * } else { * MsgError = "Unknown error in authentication process."; * }*/ } } else { MsgError = "Wrong \"id\" attribute received from server."; result = false; } } else { MsgError = "Incorrect XML response received from server."; result = false; } } return(result); }
private static XmlElement CreateAddOrUpdateItemRequest(Jid entityJid, RosterItem rosterItem) { var item = ToXmlElement(rosterItem); if (!string.IsNullOrEmpty(rosterItem.Name)) { item.SetAttributeValue("name", rosterItem.Name); } //for (int i = 0; i < groups.Length; i++) //{ // item.Children.Add(new XmlElement("group").Value(groups[i])); //} return(AttachQuery(IqStanza.Set().From(entityJid), item)); }
private XmlElement CreateBindRequest(string resource) { var bindIq = IqStanza.Set().NewId(); var bind = new XmlElement("bind").Xmlns(XmppNamespaces.Bind); bindIq.Children(bind); if (!string.IsNullOrEmpty(resource)) { bind.Children(new XmlElement("resource") { Value = resource }); } return(bindIq); }
private void OnIqStanzaTag(IqStanza iqStanza) { }
public static bool Authentication1Response(string Response, out ArrayList LoginParamaters) { cleanErrors(); bool result = true; ArrayList loginParamaters = null; IqStanza iq = null; try { iq = new IqStanza(Response); } catch (JabberException je) { iq = null; MsgError = je.Message + "\nError loading XML received from server."; result = false; } if (result) { if (iq != null) { if (iq.Type == "result") { if (iq.Id == "auth1") { if (!query(iq.ChildNode, out loginParamaters)) { result = false; } } else { MsgError = "Wrong \"id\" attribute received from server."; result = false; } } else { // type of error /*XmlNode xmlError = xml.FirstChild.LastChild; * if (xmlError != null && xmlError.Name == "error") { * errorType (xmlError); * } else { * MsgError = "Unknown error in authentication process."; * }*/ result = false; } } else { MsgError = "Incorrect XML response received from server."; result = false; } } if (result) { LoginParamaters = loginParamaters; } else { LoginParamaters = null; } return(result); }
private static XmlElement CreateRosterRequest(Jid entityJid) => AttachQuery(IqStanza.Get().From(entityJid)).NewId();
public bool connectMcs(string androidId, string securityToken) { util.debugWriteLine("connectMcs " + androidId + " " + securityToken); try { var lr = new LoginRequest(); lr.AdaptiveHeartbeat = false; lr.auth_service = LoginRequest.AuthService.AndroidId; lr.AuthToken = securityToken; lr.Id = "android-11"; lr.Domain = "mcs.android.com"; lr.DeviceId = "android-" + long.Parse(androidId).ToString("x"); lr.NetworkType = 1; lr.Resource = androidId; lr.User = androidId; lr.UseRmq2 = true; lr.AccountId = long.Parse(androidId); lr.ReceivedPersistentIds.Add(""); //# possible source of error var setting = new Setting(); setting.Name = "new_vc"; setting.Value = "1"; lr.Settings.Add(setting); //var x = lr.ToByteArray(); byte[] x; using (var ms = new MemoryStream()) { Serializer.Serialize(ms, lr); x = ms.ToArray(); } using (var client = new TcpClient("mtalk.google.com", 5228)) using (sslStream = new SslStream(client.GetStream(), false, delegate { return(true); })) { sslStream.AuthenticateAsClient("mtalk.google.com"); //var _buf = VarintBitConverter.GetVarintBytes((int)x.Length); var _buf = VarintBitConverter.GetVarintBytes((uint)x.Length); /* * var num = x.Length; * var _buf = new List<byte>(); * while (true) { * var towrite = num & 0x7f; * num >>= 7; * if (num == 1) * _buf.Add((byte)(towrite | 0x80)); * else { * _buf.Add((byte)towrite); * break; * } * } */ //util.debugWriteLine(_buf.ToArray() + " x len " + x.Length); util.debugWriteLine(_buf + " x len " + x.Length); sslStream.Write(new byte[] { 41, 2 }); sslStream.Write(_buf); sslStream.Write(x); sslStream.Flush(); var version = sslStream.ReadByte(); util.debugWriteLine(version); Task.Factory.StartNew(() => { while (isRetry) { //Thread.Sleep(15000); Thread.Sleep(60 * 60 * 1000); util.debugWriteLine(DateTime.Now.ToString() + " ping " + sslStream.GetHashCode()); try { sslStream.Write(new byte[] { 0x07, 0x0e, 0x10, 0x01, 0x1a, 0x00, 0x3a, 0x04, 0x08, 0x0d, 0x12, 0x00, 0x50, 0x03, 0x60, 0x00 }); //s.send(b'\x00\x04\x10\x08\x18\x00') } catch (Exception e) { util.debugWriteLine("ping error " + e.Message + e.Source + e.StackTrace + e.TargetSite); break; } } util.debugWriteLine("ping end " + sslStream.GetHashCode()); }); while (isRetry) { var responseTag = sslStream.ReadByte(); util.debugWriteLine(DateTime.Now + " resp tag " + responseTag + " " + (char)responseTag); var msg = new List <byte>(); if (responseTag == 0x03 || responseTag == 0x07 || responseTag == 0x08) { //var length = varIntDecodeStream(sslStream); var length = 0; var _lenBuf = new List <byte>(); for (var i = 0; i < 10; i++) { var _slb = sslStream.ReadByte(); _lenBuf.Add((byte)_slb); if (_lenBuf[_lenBuf.Count - 1] > 128) { _lenBuf.Add((byte)sslStream.ReadByte()); } try { length = VarintBitConverter.ToInt32(_lenBuf.ToArray()) * 1; var length2 = VarintBitConverter.ToInt16(_lenBuf.ToArray()) * 1; var length3 = VarintBitConverter.ToInt64(_lenBuf.ToArray()) * 1; var length4 = VarintBitConverter.ToUInt16(_lenBuf.ToArray()) * 1; var length5 = VarintBitConverter.ToUInt32(_lenBuf.ToArray()) * 1; length = (int)length5; break; } catch (Exception e) { util.debugWriteLine(e.Message + e.Source + e.StackTrace + e.TargetSite); } } if (length == 0) { return(false); } util.debugWriteLine("calc len " + length); while (msg.Count < length) { if (msg.Count != 0) { util.debugWriteLine("recv msg 2shuume"); } byte[] readbuf = new byte[1000]; var i = sslStream.Read(readbuf, 0, length - msg.Count); for (var j = 0; j < i; j++) { msg.Add(readbuf[j]); } util.debugWriteLine("recv allLen " + length + " msg len " + msg.Count + " " + msg); } util.debugWriteLine("calc len " + length + " msg len " + msg.Count + " msg " + msg); //foreach (var bb in msg) Debug.Write((char)bb); //util.debugWriteLine(""); //foreach (var bb in msg) Debug.Write(bb.ToString("x") + " "); util.debugWriteLine(""); } if (responseTag == 0x03) { var lresp = new LoginResponse(); using (var ms = new MemoryStream(msg.ToArray())) { lresp = Serializer.Deserialize <LoginResponse>(ms); } /* * using (var ms = new MemoryStream(msg.ToArray())) * using (var cs = new CodedInputStream(ms)) { * lresp.MergeFrom(cs); * * } */ util.debugWriteLine("RECV LOGIN RESP " + lresp); } else if (responseTag == 0x07) { //var lresp = LoginResponse.Parser.ParseFrom(msg.ToArray()); var lresp = new IqStanza(); using (var ms = new MemoryStream(msg.ToArray())) { lresp = Serializer.Deserialize <IqStanza>(ms); } /* * using (var ms = new MemoryStream(msg.ToArray())) * using (var cs = new CodedInputStream(ms)) { * //lresp.MergeFrom(cs); * try { * var iqstanza = IqStanza.Parser.ParseFrom(msg.ToArray()); * } catch (Exception e) { * util.debugWriteLine(e.Message + e.Source + e.StackTrace + e.TargetSite); * } * * //util.debugWriteLine(iqstanza); * //LoginResponse.Descriptor. * } */ //iqs = mcs_pb2.IqStanza(); //iqs.ParseFromString(msg); util.debugWriteLine("RECV IQ id " + lresp); // + lresp.Id + " time " + lresp.ServerTimestamp + " streamid " + lresp.StreamId + " "); } else if (responseTag == 0x08) { try { DataMessageStanza lresp; using (var ms = new MemoryStream(msg.ToArray())) { lresp = Serializer.Deserialize <DataMessageStanza>(ms); } //var lresp = DataMessageStanza.Parser.ParseFrom(msg.ToArray()); //dms = mcs_pb2.DataMessageStanza(); //dms.ParseFromString(msg); util.debugWriteLine("RECV DATA MESSAGE " + lresp); //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 lresp.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) { util.debugWriteLine("appData lvid " + lvid); var items = getNicoCasItem(lvid, lresp); if (items != null) { check.foundLive(items); } else { var gir = new GetItemRetryApr(lvid, lresp, 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); } } else if (responseTag == 0x04) { break; } else { if (responseTag == 0x00) { break; } util.debugWriteLine("unknown response: " + responseTag.ToString()); } } } util.debugWriteLine("closed"); return(true); } catch (Exception e) { util.debugWriteLine("mcs connect error " + e.Message + e.Source + e.StackTrace + e.TargetSite); return(false); } }
//[Fact] //public async Task StartNegotiationAsync_Throws_Exception_If_Invalid_Feature_Provided() //{ // var feature = new XmlElement("invalid-feature"); // await Assert.ThrowsAsync<XmppException>(() => negotiator.NegotiateAsync(messagingContext, feature, tokenSource.Token)); //} //[Fact] //public async Task NegotiateAsync_Sends_Empty_Bind_If_No_Resource_Provided() //{ // var bindRequest = default(XmlElement); // messagingContext.Observable.OnTransmit<XmlElement>(e => bindRequest = e); // await negotiator.NegotiateAsync(messagingContext, bindFeature, tokenSource.Token); // VerifyBindRequest(bindRequest, string.Empty); //} //[Fact] //public async Task NegotiateAsync_Sends_Non_Empty_Bind_If_Resource_Provided() //{ // var resource = Guid.NewGuid().ToString(); // negotiator.Resource = resource; // var actualStanza = default(XmlElement); // messagingContext.Observable.OnTransmit<XmlElement>(e => actualStanza = e); // await negotiator.NegotiateAsync(messagingContext, bindFeature, tokenSource.Token); // VerifyBindRequest(actualStanza, resource); //} //private void VerifyBindRequest(XmlElement bindRequest, string resource) //{ // Assert.Equal("iq", bindRequest.Name); // Assert.Equal("set", bindRequest["type"]); // var bind = bindRequest.Children.Single(); // Assert.Equal("bind", bind.Name); // Assert.Equal(XmppNamespaces.Bind, bind.Xmlns()); // if (!string.IsNullOrEmpty(resource)) // { // var resourceElement = bind.Children.Single(); // Assert.Equal("resource", resourceElement.Name); // } //} //[Fact] //public async Task Throws_Exception_If_Receives_Invalid_Bind_Response() //{ // await negotiator.NegotiateAsync(messagingContext, bindFeature, tokenSource.Token); // var response = new XmlElement("invalid-response"); // await Assert.ThrowsAsync<XmppException>(() => messagingContext.Sender.ReceivedAsync(response, tokenSource.Token)); //} //[Fact] //public async Task Throws_Exception_If_Bind_Error_Received() //{ // await negotiator.NegotiateAsync(messagingContext, bindFeature, tokenSource.Token); // var response = IqStanza.Error().Children(new XmlElement("error")); // await Assert.ThrowsAsync<XmppException>(() => messagingContext.Sender.ReceivedAsync(response, tokenSource.Token)); //} //[Fact] //public async Task Completes_Messaging_Task_If_Corrent_Bind_Response_Received() //{ // var resource = Guid.NewGuid().ToString(); // var task = await negotiator.NegotiateAsync(messagingContext, bindFeature, tokenSource.Token); // var response = CreateBindResponse(resource); // await messagingContext.Sender.ReceivedAsync(response, tokenSource.Token); // Assert.True(task.IsCompleted); //} //[Fact] //public async Task HandleAsync_Rises_JidBound_If_Correct_Response_Received() //{ // var expectedJid = (Jid)$"*****@*****.**"; // var actualJid = default(Jid); // component.JidBound += jid => actualJid = jid; // await component.StartNegotiationAsync(bindFeature, tokenSource.Token); // var response = CreateBindResponse(string.Empty, expectedJid); // await component.HandleAsync(response, tokenSource.Token); // Assert.Equal(expectedJid, actualJid); //} private XmlElement CreateBindResponse(string resource, string jid = "user@domain") { return(IqStanza.Result().Children( new XmlElement("bind").Xmlns(XmppNamespaces.Bind).Children( new XmlElement("jid").Value($"{jid}/{resource}")))); }
private IExtensible BuildProtobufFromTag(MCSProtoTag _tag, SslStream sslStream) { var msg = new List <byte>(); var length = 0; var _lenBuf = new List <byte>(); for (var i = 0; i < 10; i++) { var _slb = sslStream.ReadByte(); _lenBuf.Add((byte)_slb); if (_lenBuf[_lenBuf.Count - 1] > 128) { _lenBuf.Add((byte)sslStream.ReadByte()); } try { length = VarintBitConverter.ToInt32(_lenBuf.ToArray()) * 1; var length2 = VarintBitConverter.ToInt16(_lenBuf.ToArray()) * 1; var length3 = VarintBitConverter.ToInt64(_lenBuf.ToArray()) * 1; var length4 = VarintBitConverter.ToUInt16(_lenBuf.ToArray()) * 1; var length5 = VarintBitConverter.ToUInt32(_lenBuf.ToArray()) * 1; length = (int)length5; break; } catch (Exception e) { util.debugWriteLine("app push varint len " + e.Message + e.Source + e.StackTrace + e.TargetSite); } } if (length == 0) { return(null); } util.debugWriteLine("calc len " + length); while (msg.Count < length) { if (msg.Count != 0) { util.debugWriteLine("recv msg 2shuume"); } byte[] readbuf = new byte[1000]; var i = sslStream.Read(readbuf, 0, length - msg.Count); for (var j = 0; j < i; j++) { msg.Add(readbuf[j]); } util.debugWriteLine("recv allLen " + length + " msg len " + msg.Count + " " + msg); } util.debugWriteLine("calc len " + length + " msg len " + msg.Count + " msg " + msg); //foreach (var bb in msg) Debug.Write((char)bb); //util.debugWriteLine(""); //foreach (var bb in msg) Debug.Write(bb.ToString("x") + " "); util.debugWriteLine(""); switch (_tag) { case MCSProtoTag.kLoginResponseTag: var loginResp = new LoginResponse(); using (var ms = new MemoryStream(msg.ToArray())) { loginResp = Serializer.Deserialize <LoginResponse>(ms); } /* * using (var ms = new MemoryStream(msg.ToArray())) * using (var cs = new CodedInputStream(ms)) { * lresp.MergeFrom(cs); * * } */ util.debugWriteLine("RECV LOGIN RESP " + loginResp); return(loginResp); case MCSProtoTag.kIqStanzaTag: //var lresp = LoginResponse.Parser.ParseFrom(msg.ToArray()); var iqStanza = new IqStanza(); using (var ms = new MemoryStream(msg.ToArray())) { iqStanza = Serializer.Deserialize <IqStanza>(ms); } /* * using (var ms = new MemoryStream(msg.ToArray())) * using (var cs = new CodedInputStream(ms)) { * //lresp.MergeFrom(cs); * try { * var iqstanza = IqStanza.Parser.ParseFrom(msg.ToArray()); * } catch (Exception e) { * util.debugWriteLine(e.Message + e.Source + e.StackTrace + e.TargetSite); * } * * //util.debugWriteLine(iqstanza); * //LoginResponse.Descriptor. * } */ //iqs = mcs_pb2.IqStanza(); //iqs.ParseFromString(msg); util.debugWriteLine("RECV IQ id " + iqStanza); // + lresp.Id + " time " + lresp.ServerTimestamp + " streamid " + lresp.StreamId + " "); return(iqStanza); case MCSProtoTag.kDataMessageStanzaTag: DataMessageStanza lresp; using (var ms = new MemoryStream(msg.ToArray())) { lresp = Serializer.Deserialize <DataMessageStanza>(ms); } return(lresp); case MCSProtoTag.kHeartbeatPingTag: HeartbeatPing p; using (var ms = new MemoryStream(msg.ToArray())) { p = Serializer.Deserialize <HeartbeatPing>(ms); } return(p); case MCSProtoTag.kHeartbeatAckTag: HeartbeatAck ack; using (var ms = new MemoryStream(msg.ToArray())) { ack = Serializer.Deserialize <HeartbeatAck>(ms); } return(ack); default: return(null); } }
public bool Load(string XmlRoster) { bool loaded = true; IqStanza iq = null; try { iq = new IqStanza(XmlRoster); } catch { // Imprimir mensaje de error Console.WriteLine("Wrong XML Roster format."); iq = null; loaded = false; } if (iq != null) { xmlRoster = XmlRoster; if (iq.Name == "iq" && iq.Type == "result" && iq.Id == "roster") { XmlNode query = iq.ChildNode; if (query != null && query.Name == "query" && query.Attributes["xmlns"].InnerText == "jabber:iq:roster") { if (query.HasChildNodes) { foreach (XmlNode item in query.ChildNodes) { //if (item.Name == "item" && item.Attributes ["jid"] != null && item.Attributes ["name"] != null && item.Attributes ["subscription"] != null) { if (item.Name == "item" && item.Attributes["jid"] != null && item.Attributes["subscription"] != null) { JabberContact contact = NewContact(item.Attributes["jid"].InnerText); if (item.Attributes["name"] != null) { contact.Name = item.Attributes["name"].InnerText; } string subscription = item.Attributes["subscription"].InnerText; if (subscription == "none" || subscription == "to" || subscription == "from" || subscription == "both") { contact.Subscription = (JabberContactSubscription)Enum.Parse(typeof(JabberContactSubscription), item.Attributes["subscription"].InnerText, true); } else { throw new IncorrectValue("Contact \"subscription\" = {none, to, from, both}"); } if (item.Attributes["ask"] != null) { contact.Ask = item.Attributes["ask"].InnerText; } if (item.HasChildNodes) { XmlNode group = item.FirstChild; while (group != null) { if (group.Name == "group") { if (!Groups.ContainsGroup(group.InnerText)) { Groups.Create(group.InnerText); } Groups[group.InnerText].Add(contact.JID); } group = group.NextSibling; } } //Console.WriteLine ("Roster: Loaded contact " + contact.JID); } } } } } } return(loaded); }