public bool PublishGeoInfo(geoloc item)
        {
            string strGeoInfo = Utility.GetXMLStringFromObject(item);

            PubSubIQ iq = new PubSubIQ();

            iq.Type           = IQType.set.ToString();
            iq.To             = null; /// null for personal eventing pub sub
            iq.From           = XMPPClient.JID;
            iq.PubSub.Publish = new Publish()
            {
                Node = "http://jabber.org/protocol/geoloc", Item = new PubSubItem()
            };
            iq.PubSub.Publish.Item.SetNodeFromObject(item);
            iq.PubSub.Publish.Item.Id = "lastlocation";

            ListSentIQs.Add(iq.ID);
            try
            {
                XMPPClient.SendObject(iq);
            }
            catch (Exception ex)
            {
                return(false);
            }
            return(true);
        }
        public bool PublishAvatarData(byte [] bImageData, int nWidth, int nHeight)
        {
            // publish avatar data node
            avatardata data = new avatardata();

            data.ImageData = bImageData;
            //string strAvatarInfo = Utility.GetXMLStringFromObject(data);

            string strHash = XMPPClient.AvatarStorage.WriteAvatar(bImageData);

            PubSubIQ iq = new PubSubIQ();

            iq.Type           = IQType.set.ToString();
            iq.To             = null; /// null for personal eventing pub sub
            iq.From           = XMPPClient.JID;
            iq.PubSub.Publish = new Publish()
            {
                Node = "urn:xmpp:avatar:data", Item = new PubSubItem()
            };
            iq.PubSub.Publish.Item.SetNodeFromObject(data);
            iq.PubSub.Publish.Item.Id = "xmmpavatar";

            ListSentIQs.Add(iq.ID);
            XMPPClient.SendObject(iq);


            // publish avatar meta data node
            avatarmetadata metadata = new avatarmetadata();

            metadata.ImageInfo.ByteLength = bImageData.Length;
            metadata.ImageInfo.Width      = nWidth;
            metadata.ImageInfo.Height     = nHeight;
            //string strAvatarMetaData = Utility.GetXMLStringFromObject(metadata);

            PubSubIQ iqmeta = new PubSubIQ();

            iqmeta.Type           = IQType.set.ToString();
            iqmeta.To             = null; /// null for personal eventing pub sub
            iqmeta.From           = XMPPClient.JID;
            iqmeta.PubSub.Publish = new Publish()
            {
                Node = "urn:xmpp:avatar:metadata", Item = new PubSubItem()
                {
                    Id = strHash
                }
            };
            iqmeta.PubSub.Publish.Item.SetNodeFromObject(metadata);
            iq.PubSub.Publish.Item.Id = "metaavatar";

            ListSentIQs.Add(iqmeta.ID);
            XMPPClient.SendObject(iqmeta);

            return(true);
        }
示例#3
0
        public static string[] GetNodeItemStrings(XMPPClient connection, string strNode, out string strNodeJID)
        {
            strNodeJID = "";
            List <string> returnnodes = new List <string>();
            PubSubIQ      IQRequest   = new PubSubIQ();

            IQRequest.Type              = IQType.get.ToString();
            IQRequest.From              = connection.JID;
            IQRequest.To                = string.Format("pubsub.{0}", connection.Domain);
            IQRequest.PubSub            = new PubSub();
            IQRequest.PubSub.Items      = new PubSubItems();
            IQRequest.PubSub.Items.Node = strNode;


            //IQRequest.InnerXML = GetNodeItemsXML.Replace("#NODE#", strNode);;

            IQ IQResponse = connection.SendRecieveIQ(IQRequest, 30000, SerializationMethod.XMLSerializeObject);

            if (IQResponse.Type == IQType.error.ToString())
            {
                return(returnnodes.ToArray());
            }

            if (IQResponse is PubSubIQ)
            {
                PubSubIQ psiq = IQResponse as PubSubIQ;
                if ((psiq.PubSub != null) && (psiq.PubSub.Items != null))
                {
                    strNodeJID = psiq.PubSub.Items.Node;

                    if (psiq.PubSub.Items.Items != null)
                    {
                        foreach (PubSubItem item in psiq.PubSub.Items.Items)
                        {
                            returnnodes.Add(item.InnerItemXML.Value);
                        }
                    }
                }
            }

            //var nodes = IQResponse.InitalXMLElement.Descendants("{http://jabber.org/protocol/pubsub}items");
            //foreach (XElement elem in nodes)
            //{
            //    strNodeJID = elem.Attribute("node").Value;
            //}

            //nodes = IQResponse.InitalXMLElement.Descendants("{http://jabber.org/protocol/pubsub}item");
            //foreach (XElement elem in nodes)
            //{
            //    returnnodes.Add(elem.Value);
            //}
            return(returnnodes.ToArray());
        }
        public void GetAllItems(string strSubId)
        {
            IQGetAll              = new PubSubIQ();
            IQGetAll.Type         = IQType.get.ToString();
            IQGetAll.To           = new JID(string.Format("pubsub.{0}", XMPPClient.Domain));
            IQGetAll.From         = XMPPClient.JID;
            IQGetAll.PubSub.Items = new PubSubItems()
            {
                Node = Node, subid = strSubId
            };


            XMPPClient.SendObject(IQGetAll);
        }
        public void DownloadDataNode(JID jidto, string strNodeName, string strItem)
        {
            PubSubIQ iq = new PubSubIQ();

            iq.Type           = IQType.set.ToString();
            iq.To             = null; /// null for personal eventing pub sub
            iq.From           = XMPPClient.JID;
            iq.PubSub.Publish = new Publish()
            {
                Node = strNodeName, Item = new PubSubItem()
                {
                    Id = strNodeName
                }
            };

            ListSentIQs.Add(iq.ID);
            XMPPClient.SendObject(iq);
        }
        public void DeleteItem(string strItemId, T item)
        {
            PubSubIQ iq = new PubSubIQ();

            iq.Type                 = IQType.set.ToString();
            iq.To                   = new JID(string.Format("pubsub.{0}", XMPPClient.Domain));
            iq.From                 = XMPPClient.JID;
            iq.PubSub.Retract       = new Retract();
            iq.PubSub.Retract.Node  = Node;
            iq.PubSub.Retract.Items = new PubSubItem[] { new PubSubItem()
                                                         {
                                                             Id = strItemId
                                                         } };

            ListSentIQs.Add(iq);

            XMPPClient.SendObject(iq);
        }
        public void UpdateItem(string strItemId, T item)
        {
            PubSubIQ iq = new PubSubIQ();

            iq.Type                = IQType.set.ToString();
            iq.To                  = new JID(string.Format("pubsub.{0}", XMPPClient.Domain));
            iq.From                = XMPPClient.JID;
            iq.PubSub.Publish      = new Publish();
            iq.PubSub.Publish.Node = Node;
            iq.PubSub.Publish.Item = new PubSubItem()
            {
                Id = strItemId
            };
            iq.PubSub.Publish.Item.SetNodeFromObject(item);

            ListSentIQs.Add(iq);

            XMPPClient.SendObject(iq);
        }
示例#8
0
        /// <summary>
        /// Purges the items in a node
        /// </summary>
        /// <param name="strNode"></param>
        /// <returns></returns>
        public static string SubscribeNode(XMPPClient connection, string strNode, string strJID, bool bWaitForResponse)
        {
            IQ pubsub = new IQ();

            pubsub.Type = IQType.set.ToString();
            pubsub.From = connection.JID;
            pubsub.To   = new JID(string.Format("pubsub.{0}", connection.Domain));

            pubsub.InnerXML = SubscribeNodeXML.Replace("#NODE#", strNode).Replace("#JID#", strJID);

            if (bWaitForResponse == false)
            {
                connection.SendXMPP(pubsub);
                return(null);
            }

            IQ IQResponse = connection.SendRecieveIQ(pubsub, 20000);

            if ((IQResponse == null) || (IQResponse.Type == IQType.error.ToString()))
            {
                return(null);
            }

            ///<iq type="result" id="9933bb36-7685-460f-8d7f-e9e5ad80f780" from="pubsub.ninethumbs.com" to="[email protected]/9047e898-aed2-4f58-b3e2-a5f671758544">
            ///     <pubsub xmlns="http://jabber.org/protocol/pubsub">
            ///         <subscription node="GroceryList" jid="[email protected]/9047e898-aed2-4f58-b3e2-a5f671758544" subid="tU98QlKDYuEhTiKO443Vs2AWi2Y07i4Pf2l1wc8W" subscription="subscribed">
            ///         <subscribe-options/></subscription>
            ///     </pubsub>
            /// </iq>
            ///

            if (IQResponse is PubSubIQ)
            {
                PubSubIQ psiq = IQResponse as PubSubIQ;
                if ((psiq.PubSub != null) && (psiq.PubSub.Subscription != null))
                {
                    return(psiq.PubSub.Subscription.subid);
                }
            }

            return(null);
        }
        public bool PublishTuneInfo(TuneItem item)
        {
            //string strTuneXML = Utility.GetXMLStringFromObject(item);


            PubSubIQ iq = new PubSubIQ();

            iq.Type           = IQType.set.ToString();
            iq.To             = null; /// null for personal eventing pub sub
            iq.From           = XMPPClient.JID;
            iq.PubSub.Publish = new Publish()
            {
                Node = "http://jabber.org/protocol/tune", Item = new PubSubItem()
            };
            iq.PubSub.Publish.Item.SetNodeFromObject(item);
            iq.PubSub.Publish.Item.Id = "lasttune";

            ListSentIQs.Add(iq.ID);

            XMPPClient.SendObject(iq);
            return(true);
        }
示例#10
0
        public static PubSubItem[] GetNodeItems(XMPPClient connection, string strNode, out string strNodeJID)
        {
            strNodeJID = "";
            List <PubSubItem> returnnodes = new List <PubSubItem>();
            PubSubIQ          IQRequest   = new PubSubIQ();

            IQRequest.Type              = IQType.get.ToString();
            IQRequest.From              = connection.JID;
            IQRequest.To                = string.Format("pubsub.{0}", connection.Domain);
            IQRequest.PubSub            = new PubSub();
            IQRequest.PubSub.Items      = new PubSubItems();
            IQRequest.PubSub.Items.Node = strNode;
            IQ IQResponse = connection.SendRecieveIQ(IQRequest, 30000, SerializationMethod.XMLSerializeObject);

            if (IQResponse.Type == IQType.error.ToString())
            {
                return(returnnodes.ToArray());
            }

            if (IQResponse is PubSubIQ)
            {
                PubSubIQ psiq = IQResponse as PubSubIQ;
                if ((psiq.PubSub != null) && (psiq.PubSub.Items != null))
                {
                    strNodeJID = psiq.PubSub.Items.Node;

                    if (psiq.PubSub.Items.Items != null)
                    {
                        foreach (PubSubItem item in psiq.PubSub.Items.Items)
                        {
                            returnnodes.Add(item);
                        }
                    }
                }
            }

            return(returnnodes.ToArray());
        }
示例#11
0
        public IQ BuildIQ(XElement elem, string strXML)
        {
            /// Check out our first node
            ///

            string strType = "";

            if (elem.Attribute("type") != null)
            {
                strType = elem.Attribute("type").Value;
            }

            if ((elem.FirstNode != null) && (elem.FirstNode is XElement))
            {
                if (((XElement)elem.FirstNode).Name == "{http://jabber.org/protocol/disco#info}query")
                {
                    ServiceDiscoveryIQ query = Utility.ParseObjectFromXMLString(strXML, typeof(ServiceDiscoveryIQ)) as ServiceDiscoveryIQ;
                    return(query);
                }
                else if (((XElement)elem.FirstNode).Name == "{http://jabber.org/protocol/disco#items}query")
                {
                    ServiceDiscoveryIQ query = Utility.ParseObjectFromXMLString(strXML, typeof(ServiceDiscoveryIQ)) as ServiceDiscoveryIQ;
                    return(query);
                }
                else if (((XElement)elem.FirstNode).Name == "{jabber:iq:roster}query")
                {
                    return(new RosterIQ(strXML));
                }
                else if (((XElement)elem.FirstNode).Name == "{urn:xmpp:jingle:1}jingle")
                {
                    Jingle.JingleIQ query = Utility.ParseObjectFromXMLString(strXML, typeof(Jingle.JingleIQ)) as Jingle.JingleIQ;
                    return(query);
                }
                else if (((XElement)elem.FirstNode).Name == "{http://jabber.org/protocol/si}si")
                {
                    return(new StreamInitIQ(strXML));
                }
                else if (((XElement)elem.FirstNode).Name == "{http://jabber.org/protocol/pubsub}pubsub")
                {
                    PubSubIQ query = Utility.ParseObjectFromXMLString(strXML, typeof(PubSubIQ)) as PubSubIQ;
                    return(query);
                }
                else if (((XElement)elem.FirstNode).Name == "{http://jabber.org/protocol/bytestreams}query")
                {
                    ByteStreamQueryIQ query = Utility.ParseObjectFromXMLString(strXML, typeof(ByteStreamQueryIQ)) as ByteStreamQueryIQ;
                    return(query);
                }
                //else if (((XElement)elem.FirstNode).Name == "{urn:ietf:params:xml:ns:xmpp-bind}bind")
                //{
                //    BindIQ query = Utility.ParseObjectFromXMLString(strXML, typeof(BindIQ)) as BindIQ;
                //    return query;
                //}
            }

#if !WINDOWS_PHONE
            IQ iqret = Utility.ParseObjectFromXMLString(strXML, typeof(IQ)) as IQ;
            iqret.InitalXMLElement = elem;
            if (elem.FirstNode != null)
            {
                iqret.InnerXML = elem.FirstNode.ToString();
            }
            return(iqret);
#else
            return(new IQ(strXML));
#endif
        }
示例#12
0
        public override bool NewIQ(IQ iq)
        {
            PubSubIQ SendingIQ = FindSendingIQ(iq);

            if (SendingIQ != null)
            {
                //PubSub iqrequest = ListSentIQs[iq.ID];
                ListSentIQs.Remove(SendingIQ);

                /// See if this was a retract request.  If it was and is successful, remove the item
                if (SendingIQ.PubSub.Retract != null)
                {
                    if (iq.Type == IQType.result.ToString())
                    {
                        string strItemId = SendingIQ.PubSub.Retract.Items[0].Id;
                        if (ItemIdToObject.ContainsKey(strItemId) == true)
                        {
                            T obj = ItemIdToObject[strItemId];
                            Items.Remove(obj);
                            ItemIdToObject.Remove(strItemId);
                        }
                    }
                }
                //else if (SendingIQ.PubSub.Publish != null)
                //{
                //    if (iq.Type == IQType.result.ToString())
                //    {
                //        string strItemId = SendingIQ.PubSub.Retract.Item.Id;
                //        if (ItemIdToObject.ContainsKey(strItemId) == true)
                //        {
                //            T obj = ItemIdToObject[strItemId];
                //            Items.Remove(obj);
                //            ItemIdToObject.Remove(strItemId);
                //        }
                //    }
                //}


                return(true);
            }
            else if ((IQGetAll != null) && (IQGetAll.ID == iq.ID))
            {
                if (iq is PubSubIQ)
                {
                    PubSubIQ psem = iq as PubSubIQ;
                    if (psem != null)
                    {
                        if ((psem.PubSub.Items != null) && (psem.PubSub.Items.Items != null) && (psem.PubSub.Items.Items.Length > 0))
                        {
                            m_listItems.Clear();
                            ItemIdToObject.Clear();

                            if (psem.PubSub.Items.Node == Node)
                            {
                                foreach (PubSubItem psi in psem.PubSub.Items.Items)
                                {
                                    T item = psi.GetObjectFromXML <T>();
                                    if (item != null)
                                    {
                                        Items.Add(item);
                                        ItemIdToObject.Add(psi.Id, item);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(base.NewIQ(iq));
        }