diff --git a/OpenSim/Framework/Communications/XMPP/XMPPParser.cs b/OpenSim/Framework/Communications/XMPP/XmppError.cs
similarity index 90%
rename from OpenSim/Framework/Communications/XMPP/XMPPParser.cs
rename to OpenSim/Framework/Communications/XMPP/XmppError.cs
index 26a78b22e9..1698b6a1f8 100644
--- a/OpenSim/Framework/Communications/XMPP/XMPPParser.cs
+++ b/OpenSim/Framework/Communications/XMPP/XmppError.cs
@@ -25,10 +25,17 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+using System;
+using System.Xml;
+using System.Xml.Serialization;
+
namespace OpenSim.Framework.Communications.XMPP
{
- public class XMPPParser
+ [XmlRoot("error")]
+ public class XmppErrorStanza
{
-
+ public XmppErrorStanza()
+ {
+ }
}
}
diff --git a/OpenSim/Framework/Communications/XMPP/XmppIqStanza.cs b/OpenSim/Framework/Communications/XMPP/XmppIqStanza.cs
new file mode 100644
index 0000000000..17895365e3
--- /dev/null
+++ b/OpenSim/Framework/Communications/XMPP/XmppIqStanza.cs
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace OpenSim.Framework.Communications.XMPP
+{
+ ///
+ /// An IQ needs to have one of the follow types set.
+ ///
+ public enum XmppIqType
+ {
+ [XmlEnum("set")] set,
+ [XmlEnum("get")] get,
+ [XmlEnum("result")] result,
+ [XmlEnum("error")] error,
+ }
+
+ ///
+ /// XmppIqStanza needs to be subclassed as the query content is
+ /// specific to the query type.
+ ///
+ [XmlRoot("iq")]
+ public abstract class XmppIqStanza: XmppStanza
+ {
+ ///
+ /// IQ type: one of set, get, result, error
+ ///
+ [XmlAttribute("type")]
+ public XmppIqType Type;
+
+ public XmppIqStanza(): base()
+ {
+ }
+ }
+}
diff --git a/OpenSim/Framework/Communications/XMPP/XmppMessageStanza.cs b/OpenSim/Framework/Communications/XMPP/XmppMessageStanza.cs
new file mode 100644
index 0000000000..e80c0aad4c
--- /dev/null
+++ b/OpenSim/Framework/Communications/XMPP/XmppMessageStanza.cs
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace OpenSim.Framework.Communications.XMPP
+{
+ ///
+ /// Message types.
+ ///
+ public enum XmppMessageType
+ {
+ [XmlEnum("chat")] chat,
+ [XmlEnum("error")] error,
+ [XmlEnum("groupchat")] groupchat,
+ [XmlEnum("headline")] headline,
+ [XmlEnum("normal")] normal,
+ }
+
+ ///
+ /// Message body.
+ ///
+ public class XmppMessageBody
+ {
+ [XmlText]
+ public string Text;
+
+ public XmppMessageBody()
+ {
+ }
+
+ public XmppMessageBody(string message)
+ {
+ Text = message;
+ }
+ }
+
+ [XmlRoot("message")]
+ public class XmppMessageStanza: XmppStanza
+ {
+ ///
+ /// IQ type: one of set, get, result, error
+ ///
+ [XmlAttribute("type")]
+ public XmppMessageType MessageType;
+
+ // [XmlAttribute("error")]
+ // public XmppError Error;
+
+ [XmlElement("body")]
+ public XmppMessageBody Body;
+
+ public XmppMessageStanza() : base()
+ {
+ }
+
+ public XmppMessageStanza(string fromJid, string toJid, XmppMessageType mType, string message) :
+ base(fromJid, toJid)
+ {
+ MessageType = mType;
+ Body = new XmppMessageBody(message);
+ }
+ }
+}
diff --git a/OpenSim/Framework/Communications/XMPP/XmppSerializer.cs b/OpenSim/Framework/Communications/XMPP/XmppSerializer.cs
new file mode 100644
index 0000000000..f0d2cd5185
--- /dev/null
+++ b/OpenSim/Framework/Communications/XMPP/XmppSerializer.cs
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace OpenSim.Framework.Communications.XMPP
+{
+ public class XMPPSerializer
+ {
+ // need to do it this way, as XmlSerializer(type, extratypes)
+ // does not work on mono (at least).
+ private Dictionary _serializers = new Dictionary();
+ private XmlSerializerNamespaces _xmlNs;
+ private string _defaultNS;
+
+ public XMPPSerializer(bool server)
+ {
+ _xmlNs = new XmlSerializerNamespaces();
+ _xmlNs.Add(String.Empty, String.Empty);
+ if (server)
+ _defaultNS = "jabber:server";
+ else
+ _defaultNS = "jabber:client";
+
+ _serializers[typeof(XmppMessageStanza)] = new XmlSerializer(typeof(XmppMessageStanza), _defaultNS);
+ }
+
+ public void Serialize(XmlWriter xw, object o)
+ {
+ if (!_serializers.ContainsKey(o.GetType()))
+ throw new ArgumentException(String.Format("no serializer available for type {0}", o.GetType()));
+
+ _serializers[o.GetType()].Serialize(xw, o, _xmlNs);
+ }
+ }
+}
diff --git a/OpenSim/Framework/Communications/XMPP/XmppStanza.cs b/OpenSim/Framework/Communications/XMPP/XmppStanza.cs
new file mode 100644
index 0000000000..00df14a978
--- /dev/null
+++ b/OpenSim/Framework/Communications/XMPP/XmppStanza.cs
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace OpenSim.Framework.Communications.XMPP
+{
+ public abstract class XmppStanza
+ {
+ ///
+ /// counter used for generating ID
+ ///
+ [XmlIgnore]
+ private static ulong _ctr = 0;
+
+ ///
+ /// recipient JID
+ ///
+ [XmlAttribute("to")]
+ public string ToJid;
+
+ ///
+ /// sender JID
+ ///
+ [XmlAttribute("from")]
+ public string FromJid;
+
+ ///
+ /// unique ID.
+ ///
+ [XmlAttribute("id")]
+ public string MessageId;
+
+ public XmppStanza()
+ {
+ }
+
+ public XmppStanza(string fromJid, string toJid)
+ {
+ ToJid = toJid;
+ FromJid = fromJid;
+ MessageId = String.Format("OpenSim_{0}{1}", DateTime.UtcNow.Ticks, _ctr++);
+ }
+ }
+}
diff --git a/OpenSim/Framework/Communications/XMPP/Stanza.cs b/OpenSim/Framework/Communications/XMPP/XmppWriter.cs
similarity index 77%
rename from OpenSim/Framework/Communications/XMPP/Stanza.cs
rename to OpenSim/Framework/Communications/XMPP/XmppWriter.cs
index 3930bacec6..c5ad9b486c 100644
--- a/OpenSim/Framework/Communications/XMPP/Stanza.cs
+++ b/OpenSim/Framework/Communications/XMPP/XmppWriter.cs
@@ -25,31 +25,34 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-using System;
+using System.IO;
+using System.Text;
using System.Xml;
+using IOStream = System.IO.Stream;
+
namespace OpenSim.Framework.Communications.XMPP
{
- public class Stanza
+ public class XMPPWriter: XmlTextWriter
{
- public string localName = String.Empty;
- public JId to;
- public JId from;
- public string id;
- public string lang;
- public string nodeName;
-
- public Stanza(XmlNode node, Object defaults, bool hasID)
+ public XMPPWriter(TextWriter textWriter) : base(textWriter)
{
-
}
- //public virtual XmlElement getNode()
- //{
- //return new XmlElement();
- //}
- public virtual string generateId()
+
+ public XMPPWriter(IOStream stream) : this(stream, Encoding.UTF8)
+ {
+ }
+
+ public XMPPWriter(IOStream stream, Encoding enc) : base(stream, enc)
+ {
+ }
+
+ public override void WriteStartDocument()
+ {
+ }
+
+ public override void WriteStartDocument(bool standalone)
{
- return "";
}
}
}