summaryrefslogtreecommitdiffstats
path: root/kopete
diff options
context:
space:
mode:
Diffstat (limited to 'kopete')
-rw-r--r--kopete/protocols/jabber/libiris/001_last_activity.patch113
-rw-r--r--kopete/protocols/jabber/libiris/002_offline_event.patch17
-rw-r--r--kopete/protocols/jabber/libiris/003_case_insensitive_jid.patch14
-rw-r--r--kopete/protocols/jabber/libiris/004_xhtml_im.patch266
-rw-r--r--kopete/protocols/jabber/libiris/005_join_muc_with_password.patch163
-rw-r--r--kopete/protocols/jabber/libiris/006_private_storage.patch130
-rw-r--r--kopete/protocols/jabber/libiris/007_chatstates.patch132
-rw-r--r--kopete/protocols/jabber/libiris/008_chatstatesfix.patch38
-rw-r--r--kopete/protocols/jabber/libiris/jingle_iris.patch432
9 files changed, 0 insertions, 1305 deletions
diff --git a/kopete/protocols/jabber/libiris/001_last_activity.patch b/kopete/protocols/jabber/libiris/001_last_activity.patch
deleted file mode 100644
index 24673e80..00000000
--- a/kopete/protocols/jabber/libiris/001_last_activity.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-Index: iris/xmpp-im/xmpp_tasks.h
-===================================================================
---- iris/xmpp-im/xmpp_tasks.h (revision 419672)
-+++ iris/xmpp-im/xmpp_tasks.h (working copy)
-@@ -195,6 +195,29 @@
- Private *d;
- };
-
-+ class JT_GetLastActivity : public Task
-+ {
-+ Q_OBJECT
-+ public:
-+ JT_GetLastActivity(Task *);
-+ ~JT_GetLastActivity();
-+
-+ void get(const Jid &);
-+
-+ int seconds() const;
-+ const QString &message() const;
-+
-+ void onGo();
-+ bool take(const QDomElement &x);
-+
-+ private:
-+ class Private;
-+ Private *d;
-+
-+ QDomElement iq;
-+ Jid jid;
-+ };
-+
- class JT_GetServices : public Task
- {
- Q_OBJECT
-Index: iris/xmpp-im/xmpp_tasks.cpp
-===================================================================
---- iris/xmpp-im/xmpp_tasks.cpp (revision 419672)
-+++ iris/xmpp-im/xmpp_tasks.cpp (working copy)
-@@ -773,6 +773,74 @@
-
-
- //----------------------------------------------------------------------------
-+// JT_GetLastActivity
-+//----------------------------------------------------------------------------
-+class JT_GetLastActivity::Private
-+{
-+public:
-+ Private() {}
-+
-+ int seconds;
-+ QString message;
-+};
-+
-+JT_GetLastActivity::JT_GetLastActivity(Task *parent)
-+:Task(parent)
-+{
-+ d = new Private;
-+}
-+
-+JT_GetLastActivity::~JT_GetLastActivity()
-+{
-+ delete d;
-+}
-+
-+void JT_GetLastActivity::get(const Jid &j)
-+{
-+ jid = j;
-+ iq = createIQ(doc(), "get", jid.full(), id());
-+ QDomElement query = doc()->createElement("query");
-+ query.setAttribute("xmlns", "jabber:iq:last");
-+ iq.appendChild(query);
-+}
-+
-+int JT_GetLastActivity::seconds() const
-+{
-+ return d->seconds;
-+}
-+
-+const QString &JT_GetLastActivity::message() const
-+{
-+ return d->message;
-+}
-+
-+void JT_GetLastActivity::onGo()
-+{
-+ send(iq);
-+}
-+
-+bool JT_GetLastActivity::take(const QDomElement &x)
-+{
-+ if(!iqVerify(x, jid, id()))
-+ return false;
-+
-+ if(x.attribute("type") == "result") {
-+ QDomElement q = queryTag(x);
-+
-+ d->message = q.text();
-+ bool ok;
-+ d->seconds = q.attribute("seconds").toInt(&ok);
-+
-+ setSuccess(ok);
-+ }
-+ else {
-+ setError(x);
-+ }
-+
-+ return true;
-+}
-+
-+//----------------------------------------------------------------------------
- // JT_GetServices
- //----------------------------------------------------------------------------
- JT_GetServices::JT_GetServices(Task *parent)
diff --git a/kopete/protocols/jabber/libiris/002_offline_event.patch b/kopete/protocols/jabber/libiris/002_offline_event.patch
deleted file mode 100644
index a97400e1..00000000
--- a/kopete/protocols/jabber/libiris/002_offline_event.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-? 002_offline_event.patch
-Index: iris/xmpp-im/types.cpp
-===================================================================
-RCS file: /home/kde/tdenetwork/kopete/protocols/jabber/libiris/iris/xmpp-im/types.cpp,v
-retrieving revision 1.3
-diff -u -p -r1.3 types.cpp
---- iris/xmpp-im/types.cpp 21 May 2004 14:35:44 -0000 1.3
-+++ iris/xmpp-im/types.cpp 5 Feb 2005 21:04:44 -0000
-@@ -639,6 +639,8 @@ bool Message::fromStanza(const Stanza &s
- d->eventList += ComposingEvent;
- else if (evtag == "delivered")
- d->eventList += DeliveredEvent;
-+ else if (evtag == "offline")
-+ d->eventList += OfflineEvent;
- }
- if (d->eventList.isEmpty())
- d->eventList += CancelEvent;
diff --git a/kopete/protocols/jabber/libiris/003_case_insensitive_jid.patch b/kopete/protocols/jabber/libiris/003_case_insensitive_jid.patch
deleted file mode 100644
index d4b0e285..00000000
--- a/kopete/protocols/jabber/libiris/003_case_insensitive_jid.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: iris/xmpp-core/jid.cpp
-===================================================================
---- iris/xmpp-core/jid.cpp (revision 469141)
-+++ iris/xmpp-core/jid.cpp (working copy)
-@@ -233,6 +233,9 @@
- b = d;
- else
- b = n + '@' + d;
-+
-+ b=b.lower(); // JID are not case sensitive
-+
- if(r.isEmpty())
- f = b;
- else
diff --git a/kopete/protocols/jabber/libiris/004_xhtml_im.patch b/kopete/protocols/jabber/libiris/004_xhtml_im.patch
deleted file mode 100644
index 990ab4f7..00000000
--- a/kopete/protocols/jabber/libiris/004_xhtml_im.patch
+++ /dev/null
@@ -1,266 +0,0 @@
-Index: iris/include/xmpp.h
-===================================================================
---- iris/include/xmpp.h (revision 470311)
-+++ iris/include/xmpp.h (working copy)
-@@ -318,8 +318,11 @@
-
- QDomDocument & doc() const;
- QString baseNS() const;
-+ QString xhtmlImNS() const;
-+ QString xhtmlNS() const;
- QDomElement createElement(const QString &ns, const QString &tagName);
- QDomElement createTextElement(const QString &ns, const QString &tagName, const QString &text);
-+ QDomElement createXHTMLElement(const QString &xHTML);
- void appendChild(const QDomElement &e);
-
- Kind kind() const;
-@@ -372,6 +375,8 @@
-
- virtual QDomDocument & doc() const=0;
- virtual QString baseNS() const=0;
-+ virtual QString xhtmlImNS() const=0;
-+ virtual QString xhtmlNS() const=0;
- virtual bool old() const=0;
-
- virtual void close()=0;
-@@ -479,6 +484,8 @@
- // reimplemented
- QDomDocument & doc() const;
- QString baseNS() const;
-+ QString xhtmlImNS() const;
-+ QString xhtmlNS() const;
- bool old() const;
-
- void close();
-Index: iris/include/im.h
-===================================================================
---- iris/include/im.h (revision 470311)
-+++ iris/include/im.h (working copy)
-@@ -65,6 +65,7 @@
- QString lang() const;
- QString subject(const QString &lang="") const;
- QString body(const QString &lang="") const;
-+ QString xHTMLBody(const QString &lang="") const;
- QString thread() const;
- Stanza::Error error() const;
-
-@@ -75,6 +76,7 @@
- void setLang(const QString &s);
- void setSubject(const QString &s, const QString &lang="");
- void setBody(const QString &s, const QString &lang="");
-+ void setXHTMLBody(const QString &s, const QString &lang="", const QString &attr = "");
- void setThread(const QString &s);
- void setError(const Stanza::Error &err);
-
-@@ -286,6 +288,7 @@
- bool canSearch() const;
- bool canGroupchat() const;
- bool canDisco() const;
-+ bool canXHTML() const;
- bool isGateway() const;
- bool haveVCard() const;
-
-@@ -298,6 +301,7 @@
- FID_Disco,
- FID_Gateway,
- FID_VCard,
-+ FID_Xhtml,
-
- // private Psi actions
- FID_Add
-Index: iris/xmpp-im/types.cpp
-===================================================================
---- iris/xmpp-im/types.cpp (revision 470311)
-+++ iris/xmpp-im/types.cpp (working copy)
-@@ -19,7 +19,7 @@
- */
-
- #include"im.h"
--
-+#include "protocol.h"
- #include<qmap.h>
- #include<qapplication.h>
-
-@@ -180,7 +180,8 @@
- Jid to, from;
- QString id, type, lang;
-
-- StringMap subject, body;
-+ StringMap subject, body, xHTMLBody;
-+
- QString thread;
- Stanza::Error error;
-
-@@ -279,6 +280,11 @@
- return d->body[lang];
- }
-
-+QString Message::xHTMLBody(const QString &lang) const
-+{
-+ return d->xHTMLBody[lang];
-+}
-+
- QString Message::thread() const
- {
- return d->thread;
-@@ -340,9 +346,16 @@
- void Message::setBody(const QString &s, const QString &lang)
- {
- d->body[lang] = s;
-- //d->flag = false;
- }
-
-+void Message::setXHTMLBody(const QString &s, const QString &lang, const QString &attr)
-+{
-+ //ugly but needed if s is not a node but a list of leaf
-+
-+ QString content = "<body xmlns='" + QString(NS_XHTML) + "' "+attr+" >\n" + s +"\n</body>";
-+ d->xHTMLBody[lang] = content;
-+}
-+
- void Message::setThread(const QString &s)
- {
- d->thread = s;
-@@ -489,7 +502,19 @@
- s.appendChild(e);
- }
- }
--
-+ if ( !d->xHTMLBody.isEmpty()) {
-+ QDomElement parent = s.createElement(s.xhtmlImNS(), "html");
-+ for(it = d->xHTMLBody.begin(); it != d->xHTMLBody.end(); ++it) {
-+ const QString &str = it.data();
-+ if(!str.isEmpty()) {
-+ QDomElement child = s.createXHTMLElement(str);
-+ if(!it.key().isEmpty())
-+ child.setAttributeNS(NS_XML, "xml:lang", it.key());
-+ parent.appendChild(child);
-+ }
-+ }
-+ s.appendChild(parent);
-+ }
- if(d->type == "error")
- s.setError(d->error);
-
-@@ -591,6 +616,21 @@
- else if(e.tagName() == "thread")
- d->thread = e.text();
- }
-+ else if (e.namespaceURI() == s.xhtmlImNS()) {
-+ if (e.tagName() == "html") {
-+ QDomNodeList htmlNL= e.childNodes();
-+ for (unsigned int x = 0; x < htmlNL.count(); x++) {
-+ QDomElement i = htmlNL.item(x).toElement();
-+
-+ if (i.tagName() == "body") {
-+ QDomDocument RichText;
-+ QString lang = i.attributeNS(NS_XML, "lang", "");
-+ RichText.appendChild(i);
-+ d-> xHTMLBody[lang] = RichText.toString();
-+ }
-+ }
-+ }
-+ }
- else {
- //printf("extension element: [%s]\n", e.tagName().latin1());
- }
-@@ -1418,6 +1458,16 @@
- return test(ns);
- }
-
-+#define FID_XHTML "http://jabber.org/protocol/xhtml-im"
-+bool Features::canXHTML() const
-+{
-+ QStringList ns;
-+
-+ ns << FID_XHTML;
-+
-+ return test(ns);
-+}
-+
- #define FID_GROUPCHAT "jabber:iq:conference"
- bool Features::canGroupchat() const
- {
-Index: iris/xmpp-im/xmpp_tasks.cpp
-===================================================================
---- iris/xmpp-im/xmpp_tasks.cpp (revision 470311)
-+++ iris/xmpp-im/xmpp_tasks.cpp (working copy)
-@@ -1348,6 +1348,10 @@
- query.appendChild(feature);
-
- feature = doc()->createElement("feature");
-+ feature.setAttribute("var", "http://jabber.org/protocol/xhtml-im");
-+ query.appendChild(feature);
-+
-+ feature = doc()->createElement("feature");
- feature.setAttribute("var", "http://jabber.org/protocol/si/profile/file-transfer");
- query.appendChild(feature);
-
-Index: iris/xmpp-core/protocol.h
-===================================================================
---- iris/xmpp-core/protocol.h (revision 470311)
-+++ iris/xmpp-core/protocol.h (working copy)
-@@ -35,6 +35,8 @@
- #define NS_SESSION "urn:ietf:params:xml:ns:xmpp-session"
- #define NS_STANZAS "urn:ietf:params:xml:ns:xmpp-stanzas"
- #define NS_BIND "urn:ietf:params:xml:ns:xmpp-bind"
-+#define NS_XHTML_IM "http://jabber.org/protocol/xhtml-im"
-+#define NS_XHTML "http://www.w3.org/1999/xhtml"
-
- namespace XMPP
- {
-Index: iris/xmpp-core/stream.cpp
-===================================================================
---- iris/xmpp-core/stream.cpp (revision 470311)
-+++ iris/xmpp-core/stream.cpp (working copy)
-@@ -293,6 +293,16 @@
- return d->s->baseNS();
- }
-
-+QString Stanza::xhtmlImNS() const
-+{
-+ return d->s->xhtmlImNS();
-+}
-+
-+QString Stanza::xhtmlNS() const
-+{
-+ return d->s->xhtmlNS();
-+}
-+
- QDomElement Stanza::createElement(const QString &ns, const QString &tagName)
- {
- return d->s->doc().createElementNS(ns, tagName);
-@@ -305,6 +315,16 @@
- return e;
- }
-
-+QDomElement Stanza::createXHTMLElement(const QString &xHTML)
-+{
-+ QDomDocument doc;
-+
-+ doc.setContent(xHTML, true);
-+ QDomElement root = doc.documentElement();
-+ //QDomElement e;
-+ return (root);
-+}
-+
- void Stanza::appendChild(const QDomElement &e)
- {
- d->e.appendChild(e);
-@@ -861,6 +881,16 @@
- return NS_CLIENT;
- }
-
-+QString ClientStream::xhtmlImNS() const
-+{
-+ return NS_XHTML_IM;
-+}
-+
-+QString ClientStream::xhtmlNS() const
-+{
-+ return NS_XHTML;
-+}
-+
- void ClientStream::setAllowPlain(bool b)
- {
- d->allowPlain = b;
diff --git a/kopete/protocols/jabber/libiris/005_join_muc_with_password.patch b/kopete/protocols/jabber/libiris/005_join_muc_with_password.patch
deleted file mode 100644
index 058825db..00000000
--- a/kopete/protocols/jabber/libiris/005_join_muc_with_password.patch
+++ /dev/null
@@ -1,163 +0,0 @@
-Index: iris/include/im.h
-===================================================================
---- iris/include/im.h (révision 498969)
-+++ iris/include/im.h (copie de travail)
-@@ -607,6 +607,7 @@
- FileTransferManager *fileTransferManager() const;
-
- bool groupChatJoin(const QString &host, const QString &room, const QString &nick);
-+ bool groupChatJoin(const QString &host, const QString &room, const QString &nick, const QString &password);
- void groupChatSetStatus(const QString &host, const QString &room, const Status &);
- void groupChatChangeNick(const QString &host, const QString &room, const QString &nick, const Status &);
- void groupChatLeave(const QString &host, const QString &room);
-Index: iris/xmpp-im/client.cpp
-===================================================================
---- iris/xmpp-im/client.cpp (révision 498969)
-+++ iris/xmpp-im/client.cpp (copie de travail)
-@@ -315,6 +315,35 @@
- return true;
- }
-
-+bool Client::groupChatJoin(const QString &host, const QString &room, const QString &nick, const QString &password)
-+{
-+ Jid jid(room + "@" + host + "/" + nick);
-+ for(QValueList<GroupChat>::Iterator it = d->groupChatList.begin(); it != d->groupChatList.end();) {
-+ GroupChat &i = *it;
-+ if(i.j.compare(jid, false)) {
-+ // if this room is shutting down, then free it up
-+ if(i.status == GroupChat::Closing)
-+ it = d->groupChatList.remove(it);
-+ else
-+ return false;
-+ }
-+ else
-+ ++it;
-+ }
-+
-+ debug(QString("Client: Joined: [%1]\n").arg(jid.full()));
-+ GroupChat i;
-+ i.j = jid;
-+ i.status = GroupChat::Connecting;
-+ d->groupChatList += i;
-+
-+ JT_MucPresence *j = new JT_MucPresence(rootTask());
-+ j->pres(jid, Status(), password);
-+ j->go(true);
-+
-+ return true;
-+}
-+
- void Client::groupChatSetStatus(const QString &host, const QString &room, const Status &_s)
- {
- Jid jid(room + "@" + host);
-Index: iris/xmpp-im/xmpp_tasks.h
-===================================================================
---- iris/xmpp-im/xmpp_tasks.h (révision 498969)
-+++ iris/xmpp-im/xmpp_tasks.h (copie de travail)
-@@ -439,6 +439,26 @@
- class Private;
- Private *d;
- };
-+
-+ class JT_MucPresence : public Task
-+ {
-+ Q_OBJECT
-+ public:
-+ JT_MucPresence(Task *parent);
-+ ~JT_MucPresence();
-+
-+ void pres(const Status &);
-+ void pres(const Jid &, const Status &, const QString &password);
-+
-+ void onGo();
-+
-+ private:
-+ QDomElement tag;
-+ int type;
-+
-+ class Private;
-+ Private *d;
-+ };
- }
-
- #endif
-Index: iris/xmpp-im/xmpp_tasks.cpp
-===================================================================
---- iris/xmpp-im/xmpp_tasks.cpp (révision 498969)
-+++ iris/xmpp-im/xmpp_tasks.cpp (copie de travail)
-@@ -1956,3 +1956,75 @@
- return true;
- }
-
-+//----------------------------------------------------------------------------
-+// JT_MucPresence
-+//----------------------------------------------------------------------------
-+JT_MucPresence::JT_MucPresence(Task *parent)
-+:Task(parent)
-+{
-+ type = -1;
-+}
-+
-+JT_MucPresence::~JT_MucPresence()
-+{
-+}
-+
-+void JT_MucPresence::pres(const Status &s)
-+{
-+ type = 0;
-+
-+ tag = doc()->createElement("presence");
-+ if(!s.isAvailable()) {
-+ tag.setAttribute("type", "unavailable");
-+ if(!s.status().isEmpty())
-+ tag.appendChild(textTag(doc(), "status", s.status()));
-+ }
-+ else {
-+ if(s.isInvisible())
-+ tag.setAttribute("type", "invisible");
-+
-+ if(!s.show().isEmpty())
-+ tag.appendChild(textTag(doc(), "show", s.show()));
-+ if(!s.status().isEmpty())
-+ tag.appendChild(textTag(doc(), "status", s.status()));
-+
-+ tag.appendChild( textTag(doc(), "priority", QString("%1").arg(s.priority()) ) );
-+
-+ if(!s.keyID().isEmpty()) {
-+ QDomElement x = textTag(doc(), "x", s.keyID());
-+ x.setAttribute("xmlns", "http://jabber.org/protocol/e2e");
-+ tag.appendChild(x);
-+ }
-+ if(!s.xsigned().isEmpty()) {
-+ QDomElement x = textTag(doc(), "x", s.xsigned());
-+ x.setAttribute("xmlns", "jabber:x:signed");
-+ tag.appendChild(x);
-+ }
-+
-+ if(!s.capsNode().isEmpty() && !s.capsVersion().isEmpty()) {
-+ QDomElement c = doc()->createElement("c");
-+ c.setAttribute("xmlns","http://jabber.org/protocol/caps");
-+ c.setAttribute("node",s.capsNode());
-+ c.setAttribute("ver",s.capsVersion());
-+ if (!s.capsExt().isEmpty())
-+ c.setAttribute("ext",s.capsExt());
-+ tag.appendChild(c);
-+ }
-+ }
-+}
-+
-+void JT_MucPresence::pres(const Jid &to, const Status &s, const QString &password)
-+{
-+ pres(s);
-+ tag.setAttribute("to", to.full());
-+ QDomElement x = textTag(doc(), "x", s.xsigned());
-+ x.setAttribute("xmlns", "http://jabber.org/protocol/muc");
-+ x.appendChild( textTag(doc(), "password", password.latin1()) );
-+ tag.appendChild(x);
-+}
-+
-+void JT_MucPresence::onGo()
-+{
-+ send(tag);
-+ setSuccess();
-+}
diff --git a/kopete/protocols/jabber/libiris/006_private_storage.patch b/kopete/protocols/jabber/libiris/006_private_storage.patch
deleted file mode 100644
index 288d24c5..00000000
--- a/kopete/protocols/jabber/libiris/006_private_storage.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-Index: iris/xmpp-im/xmpp_tasks.h
-===================================================================
---- iris/xmpp-im/xmpp_tasks.h (revision 499691)
-+++ iris/xmpp-im/xmpp_tasks.h (working copy)
-@@ -459,6 +459,27 @@
- class Private;
- Private *d;
- };
-+
-+ class JT_PrivateStorage : public Task
-+ {
-+ Q_OBJECT
-+ public:
-+ JT_PrivateStorage(Task *parent);
-+ ~JT_PrivateStorage();
-+
-+ void set(const QDomElement &);
-+ void get(const QString &tag, const QString& xmlns);
-+
-+ QDomElement element();
-+
-+ void onGo();
-+ bool take(const QDomElement &);
-+
-+ private:
-+ class Private;
-+ Private *d;
-+ };
-+
- }
-
- #endif
-Index: iris/xmpp-im/xmpp_tasks.cpp
-===================================================================
---- iris/xmpp-im/xmpp_tasks.cpp (revision 499691)
-+++ iris/xmpp-im/xmpp_tasks.cpp (working copy)
-@@ -2028,3 +2028,93 @@
- send(tag);
- setSuccess();
- }
-+
-+
-+//----------------------------------------------------------------------------
-+// JT_PrivateStorage
-+//----------------------------------------------------------------------------
-+class JT_PrivateStorage::Private
-+{
-+ public:
-+ Private() : type(-1) {}
-+
-+ QDomElement iq;
-+ QDomElement elem;
-+ int type;
-+};
-+
-+JT_PrivateStorage::JT_PrivateStorage(Task *parent)
-+ :Task(parent)
-+{
-+ d = new Private;
-+}
-+
-+JT_PrivateStorage::~JT_PrivateStorage()
-+{
-+ delete d;
-+}
-+
-+void JT_PrivateStorage::get(const QString& tag, const QString& xmlns)
-+{
-+ d->type = 0;
-+ d->iq = createIQ(doc(), "get" , QString() , id() );
-+ QDomElement query = doc()->createElement("query");
-+ query.setAttribute("xmlns", "jabber:iq:private");
-+ d->iq.appendChild(query);
-+ QDomElement s = doc()->createElement(tag);
-+ if(!xmlns.isEmpty())
-+ s.setAttribute("xmlns", xmlns);
-+ query.appendChild(s);
-+}
-+
-+void JT_PrivateStorage::set(const QDomElement& element)
-+{
-+ d->type = 1;
-+ d->elem=element;
-+ QDomNode n=doc()->importNode(element,true);
-+
-+ d->iq = createIQ(doc(), "set" , QString() , id() );
-+ QDomElement query = doc()->createElement("query");
-+ query.setAttribute("xmlns", "jabber:iq:private");
-+ d->iq.appendChild(query);
-+ query.appendChild(n);
-+}
-+
-+void JT_PrivateStorage::onGo()
-+{
-+ send(d->iq);
-+}
-+
-+bool JT_PrivateStorage::take(const QDomElement &x)
-+{
-+ QString to = client()->host();
-+ if(!iqVerify(x, to, id()))
-+ return false;
-+
-+ if(x.attribute("type") == "result") {
-+ if(d->type == 0) {
-+ QDomElement q = queryTag(x);
-+ for(QDomNode n = q.firstChild(); !n.isNull(); n = n.nextSibling()) {
-+ QDomElement i = n.toElement();
-+ if(i.isNull())
-+ continue;
-+ d->elem=i;
-+ break;
-+ }
-+ }
-+ setSuccess();
-+ return true;
-+ }
-+ else {
-+ setError(x);
-+ }
-+
-+ return true;
-+}
-+
-+
-+QDomElement JT_PrivateStorage::element( )
-+{
-+ return d->elem;
-+}
-+
diff --git a/kopete/protocols/jabber/libiris/007_chatstates.patch b/kopete/protocols/jabber/libiris/007_chatstates.patch
deleted file mode 100644
index af32728c..00000000
--- a/kopete/protocols/jabber/libiris/007_chatstates.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Index: iris/include/im.h
-===================================================================
---- iris/include/im.h (revision 525193)
-+++ iris/include/im.h (working copy)
-@@ -49,7 +49,7 @@
- typedef QValueList<Url> UrlList;
- typedef QMap<QString, QString> StringMap;
- typedef enum { OfflineEvent, DeliveredEvent, DisplayedEvent,
-- ComposingEvent, CancelEvent } MsgEvent;
-+ ComposingEvent, CancelEvent, InactiveEvent, GoneEvent } MsgEvent;
-
- class Message
- {
-Index: iris/xmpp-im/types.cpp
-===================================================================
---- iris/xmpp-im/types.cpp (revision 525193)
-+++ iris/xmpp-im/types.cpp (working copy)
-@@ -544,28 +544,49 @@
- else
- x.appendChild(s.createTextElement("jabber:x:event","id",d->eventId));
- }
-+ else
-+ s.appendChild( s.createElement(NS_CHATSTATES , "active" ) );
-
-+ bool need_x_event=false;
- for(QValueList<MsgEvent>::ConstIterator ev = d->eventList.begin(); ev != d->eventList.end(); ++ev) {
- switch (*ev) {
- case OfflineEvent:
- x.appendChild(s.createElement("jabber:x:event", "offline"));
-+ need_x_event=true;
- break;
- case DeliveredEvent:
- x.appendChild(s.createElement("jabber:x:event", "delivered"));
-+ need_x_event=true;
- break;
- case DisplayedEvent:
- x.appendChild(s.createElement("jabber:x:event", "displayed"));
-+ need_x_event=true;
- break;
- case ComposingEvent:
- x.appendChild(s.createElement("jabber:x:event", "composing"));
-+ need_x_event=true;
-+ if (d->body.isEmpty())
-+ s.appendChild( s.createElement(NS_CHATSTATES , "composing" ) );
- break;
- case CancelEvent:
-- // Add nothing
-+ need_x_event=true;
-+ if (d->body.isEmpty())
-+ s.appendChild( s.createElement(NS_CHATSTATES , "paused" ) );
- break;
-+ case InactiveEvent:
-+ if (d->body.isEmpty())
-+ s.appendChild( s.createElement(NS_CHATSTATES , "inactive" ) );
-+ break;
-+ case GoneEvent:
-+ if (d->body.isEmpty())
-+ s.appendChild( s.createElement(NS_CHATSTATES , "gone" ) );
-+ break;
- }
- }
-- s.appendChild(x);
-- }
-+ if(need_x_event) //we don't need to have the (empty) x:event element if this is only <gone> or <inactive>
-+ s.appendChild(x);
-+ }
-+
-
- // xencrypted
- if(!d->xencrypted.isEmpty())
-@@ -595,6 +616,7 @@
- d->subject.clear();
- d->body.clear();
- d->thread = QString();
-+ d->eventList.clear();
-
- QDomElement root = s.element();
-
-@@ -631,6 +653,33 @@
- }
- }
- }
-+ else if (e.namespaceURI() == NS_CHATSTATES)
-+ {
-+ if(e.tagName() == "active")
-+ {
-+ //like in JEP-0022 we let the client know that we can receive ComposingEvent
-+ // (we can do that according to §4.6 of the JEP-0085)
-+ d->eventList += ComposingEvent;
-+ d->eventList += InactiveEvent;
-+ d->eventList += GoneEvent;
-+ }
-+ else if (e.tagName() == "composing")
-+ {
-+ d->eventList += ComposingEvent;
-+ }
-+ else if (e.tagName() == "paused")
-+ {
-+ d->eventList += CancelEvent;
-+ }
-+ else if (e.tagName() == "inactive")
-+ {
-+ d->eventList += InactiveEvent;
-+ }
-+ else if (e.tagName() == "gone")
-+ {
-+ d->eventList += GoneEvent;
-+ }
-+ }
- else {
- //printf("extension element: [%s]\n", e.tagName().latin1());
- }
-@@ -664,7 +713,6 @@
- }
-
- // events
-- d->eventList.clear();
- nl = root.elementsByTagNameNS("jabber:x:event", "x");
- if (nl.count()) {
- nl = nl.item(0).childNodes();
-Index: iris/xmpp-core/protocol.h
-===================================================================
---- iris/xmpp-core/protocol.h (revision 525193)
-+++ iris/xmpp-core/protocol.h (working copy)
-@@ -37,6 +37,7 @@
- #define NS_BIND "urn:ietf:params:xml:ns:xmpp-bind"
- #define NS_XHTML_IM "http://jabber.org/protocol/xhtml-im"
- #define NS_XHTML "http://www.w3.org/1999/xhtml"
-+#define NS_CHATSTATES "http://jabber.org/protocol/chatstates"
-
- namespace XMPP
- {
diff --git a/kopete/protocols/jabber/libiris/008_chatstatesfix.patch b/kopete/protocols/jabber/libiris/008_chatstatesfix.patch
deleted file mode 100644
index 63a4f680..00000000
--- a/kopete/protocols/jabber/libiris/008_chatstatesfix.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Index: iris/xmpp-im/types.cpp
-===================================================================
---- iris/xmpp-im/types.cpp (revision 526236)
-+++ iris/xmpp-im/types.cpp (working copy)
-@@ -544,7 +544,7 @@
- else
- x.appendChild(s.createTextElement("jabber:x:event","id",d->eventId));
- }
-- else
-+ else if (d->type=="chat" || d->type=="groupchat")
- s.appendChild( s.createElement(NS_CHATSTATES , "active" ) );
-
- bool need_x_event=false;
-@@ -565,20 +565,20 @@
- case ComposingEvent:
- x.appendChild(s.createElement("jabber:x:event", "composing"));
- need_x_event=true;
-- if (d->body.isEmpty())
-+ if (d->body.isEmpty() && (d->type=="chat" || d->type=="groupchat") )
- s.appendChild( s.createElement(NS_CHATSTATES , "composing" ) );
- break;
- case CancelEvent:
- need_x_event=true;
-- if (d->body.isEmpty())
-+ if (d->body.isEmpty() && (d->type=="chat" || d->type=="groupchat") )
- s.appendChild( s.createElement(NS_CHATSTATES , "paused" ) );
- break;
- case InactiveEvent:
-- if (d->body.isEmpty())
-+ if (d->body.isEmpty() && (d->type=="chat" || d->type=="groupchat") )
- s.appendChild( s.createElement(NS_CHATSTATES , "inactive" ) );
- break;
- case GoneEvent:
-- if (d->body.isEmpty())
-+ if (d->body.isEmpty() && (d->type=="chat" || d->type=="groupchat") )
- s.appendChild( s.createElement(NS_CHATSTATES , "gone" ) );
- break;
- }
diff --git a/kopete/protocols/jabber/libiris/jingle_iris.patch b/kopete/protocols/jabber/libiris/jingle_iris.patch
deleted file mode 100644
index 41acad0e..00000000
--- a/kopete/protocols/jabber/libiris/jingle_iris.patch
+++ /dev/null
@@ -1,432 +0,0 @@
-diff -ur psi/iris/include/im.h psi-jingle/iris/include/im.h
---- psi/iris/include/im.h 2005-12-27 15:12:42.000000000 +0100
-+++ psi-jingle/iris/include/im.h 2005-12-27 11:05:53.000000000 +0100
-@@ -22,6 +22,7 @@
- #define XMPP_IM_H
-
- #include<qdatetime.h>
-+#include<qvaluelist.h>
- #include"xmpp.h"
-
- namespace XMPP
-@@ -153,6 +154,9 @@
-
- const QString & xsigned() const;
- const QString & songTitle() const;
-+ const QString & capsNode() const;
-+ const QString & capsVersion() const;
-+ const QString & capsExt() const;
-
- void setPriority(int);
- void setShow(const QString &);
-@@ -162,6 +166,9 @@
- void setIsAvailable(bool);
- void setIsInvisible(bool);
- void setError(int, const QString &);
-+ void setCapsNode(const QString&);
-+ void setCapsVersion(const QString&);
-+ void setCapsExt(const QString&);
-
- void setXSigned(const QString &);
- void setSongTitle(const QString &);
-@@ -176,6 +183,7 @@
- QString v_xsigned;
- // gabber song extension
- QString v_songTitle;
-+ QString v_capsNode, v_capsVersion, v_capsExt;
-
- int ecode;
- QString estr;
-@@ -285,6 +293,7 @@
- bool canRegister() const;
- bool canSearch() const;
- bool canGroupchat() const;
-+ bool canVoice() const;
- bool canDisco() const;
- bool isGateway() const;
- bool haveVCard() const;
-@@ -567,12 +576,25 @@
- int timeZoneOffset() const;
- QString clientName() const;
- QString clientVersion() const;
-+ QString capsNode() const;
-+ QString capsVersion() const;
-+ QString capsExt() const;
-
- void setOSName(const QString &);
- void setTimeZone(const QString &, int);
- void setClientName(const QString &);
- void setClientVersion(const QString &);
-+ void setCapsNode(const QString &);
-+ void setCapsVersion(const QString &);
-
-+ void setIdentity(DiscoItem::Identity);
-+ DiscoItem::Identity identity();
-+
-+ void addExtension(const QString& ext, const Features& f);
-+ void removeExtension(const QString& ext);
-+ const Features& extension(const QString& ext) const;
-+ QStringList extensions() const;
-+
- S5BManager *s5bManager() const;
- IBBManager *ibbManager() const;
- JidLinkManager *jidLinkManager() const;
-diff -ur psi/iris/xmpp-im/client.cpp psi-jingle/iris/xmpp-im/client.cpp
---- psi/iris/xmpp-im/client.cpp 2005-12-27 15:12:44.000000000 +0100
-+++ psi-jingle/iris/xmpp-im/client.cpp 2005-12-27 11:05:53.000000000 +0100
-@@ -70,6 +70,7 @@
- //! \endcode
-
- #include<stdarg.h>
-+#include<qmap.h>
- #include<qobjectlist.h>
- #include<qtimer.h>
- #include<qguardedptr.h>
-@@ -125,7 +126,9 @@
- int id_seed;
- Task *root;
- QString host, user, pass, resource;
-- QString osname, tzname, clientName, clientVersion;
-+ QString osname, tzname, clientName, clientVersion, capsNode, capsVersion, capsExt;
-+ DiscoItem::Identity identity;
-+ QMap<QString,Features> extension_features;
- int tzoffset;
- bool active;
-
-@@ -149,6 +152,9 @@
- d->osname = "N/A";
- d->clientName = "N/A";
- d->clientVersion = "0.0";
-+ d->capsNode = "";
-+ d->capsVersion = "";
-+ d->capsExt = "";
-
- d->id_seed = 0xaaaa;
- d->root = new Task(this, true);
-@@ -996,6 +1002,21 @@
- return d->clientVersion;
- }
-
-+QString Client::capsNode() const
-+{
-+ return d->capsNode;
-+}
-+
-+QString Client::capsVersion() const
-+{
-+ return d->capsVersion;
-+}
-+
-+QString Client::capsExt() const
-+{
-+ return d->capsExt;
-+}
-+
- void Client::setOSName(const QString &name)
- {
- d->osname = name;
-@@ -1017,6 +1038,52 @@
- d->clientVersion = s;
- }
-
-+void Client::setCapsNode(const QString &s)
-+{
-+ d->capsNode = s;
-+}
-+
-+void Client::setCapsVersion(const QString &s)
-+{
-+ d->capsVersion = s;
-+}
-+
-+DiscoItem::Identity Client::identity()
-+{
-+ return d->identity;
-+}
-+
-+void Client::setIdentity(DiscoItem::Identity identity)
-+{
-+ d->identity = identity;
-+}
-+
-+void Client::addExtension(const QString& ext, const Features& features)
-+{
-+ if (!ext.isEmpty()) {
-+ d->extension_features[ext] = features;
-+ d->capsExt = extensions().join(" ");
-+ }
-+}
-+
-+void Client::removeExtension(const QString& ext)
-+{
-+ if (d->extension_features.contains(ext)) {
-+ d->extension_features.remove(ext);
-+ d->capsExt = extensions().join(" ");
-+ }
-+}
-+
-+QStringList Client::extensions() const
-+{
-+ return d->extension_features.keys();
-+}
-+
-+const Features& Client::extension(const QString& ext) const
-+{
-+ return d->extension_features[ext];
-+}
-+
- void Client::s5b_incomingReady()
- {
- S5BConnection *c = d->s5bman->takeIncoming();
-diff -ur psi/iris/xmpp-im/types.cpp psi-jingle/iris/xmpp-im/types.cpp
---- psi/iris/xmpp-im/types.cpp 2005-12-27 15:12:55.000000000 +0100
-+++ psi-jingle/iris/xmpp-im/types.cpp 2005-12-27 11:05:53.000000000 +0100
-@@ -784,6 +784,21 @@
- v_songTitle = _songtitle;
- }
-
-+void Status::setCapsNode(const QString & _capsNode)
-+{
-+ v_capsNode = _capsNode;
-+}
-+
-+void Status::setCapsVersion(const QString & _capsVersion)
-+{
-+ v_capsVersion = _capsVersion;
-+}
-+
-+void Status::setCapsExt(const QString & _capsExt)
-+{
-+ v_capsExt = _capsExt;
-+}
-+
- bool Status::isAvailable() const
- {
- return v_isAvailable;
-@@ -836,6 +851,21 @@
- return v_songTitle;
- }
-
-+const QString & Status::capsNode() const
-+{
-+ return v_capsNode;
-+}
-+
-+const QString & Status::capsVersion() const
-+{
-+ return v_capsVersion;
-+}
-+
-+const QString & Status::capsExt() const
-+{
-+ return v_capsExt;
-+}
-+
- int Status::errorCode() const
- {
- return ecode;
-@@ -1427,6 +1457,15 @@
- return test(ns);
- }
-
-+#define FID_VOICE "http://www.google.com/xmpp/protocol/voice/v1"
-+bool Features::canVoice() const
-+{
-+ QStringList ns;
-+ ns << FID_VOICE;
-+
-+ return test(ns);
-+}
-+
- #define FID_GATEWAY "jabber:iq:gateway"
- bool Features::isGateway() const
- {
-diff -ur psi/iris/xmpp-im/xmpp_tasks.cpp psi-jingle/iris/xmpp-im/xmpp_tasks.cpp
---- psi/iris/xmpp-im/xmpp_tasks.cpp 2005-12-27 15:12:45.000000000 +0100
-+++ psi-jingle/iris/xmpp-im/xmpp_tasks.cpp 2005-12-27 11:05:53.000000000 +0100
-@@ -516,6 +516,16 @@
- x.setAttribute("xmlns", "jabber:x:signed");
- tag.appendChild(x);
- }
-+
-+ if(!s.capsNode().isEmpty() && !s.capsVersion().isEmpty()) {
-+ QDomElement c = doc()->createElement("c");
-+ c.setAttribute("xmlns","http://jabber.org/protocol/caps");
-+ c.setAttribute("node",s.capsNode());
-+ c.setAttribute("ver",s.capsVersion());
-+ if (!s.capsExt().isEmpty())
-+ c.setAttribute("ext",s.capsExt());
-+ tag.appendChild(c);
-+ }
- }
- }
-
-@@ -625,6 +635,11 @@
- else if(i.tagName() == "x" && i.attribute("xmlns") == "http://jabber.org/protocol/e2e") {
- p.setKeyID(tagContent(i));
- }
-+ else if(i.tagName() == "c" && i.attribute("xmlns") == "http://jabber.org/protocol/caps") {
-+ p.setCapsNode(i.attribute("node"));
-+ p.setCapsVersion(i.attribute("ver"));
-+ p.setCapsExt(i.attribute("ext"));
-+ }
- }
-
- presence(j, p);
-@@ -1265,23 +1280,86 @@
- // return TRUE;
- //}
- else if(ns == "http://jabber.org/protocol/disco#info") {
-+ // Find out the node
-+ QString node;
-+ bool found;
-+ QDomElement q = findSubTag(e, "query", &found);
-+ if(found) // NOTE: Should always be true, since a NS was found above
-+ node = q.attribute("node");
-+
- QDomElement iq = createIQ(doc(), "result", e.attribute("from"), e.attribute("id"));
- QDomElement query = doc()->createElement("query");
- query.setAttribute("xmlns", "http://jabber.org/protocol/disco#info");
-+ if (!node.isEmpty())
-+ query.setAttribute("node", node);
- iq.appendChild(query);
-- QDomElement feature;
-
-- feature = doc()->createElement("feature");
-- feature.setAttribute("var", "http://jabber.org/protocol/bytestreams");
-- query.appendChild(feature);
--
-- feature = doc()->createElement("feature");
-- feature.setAttribute("var", "http://jabber.org/protocol/si");
-- query.appendChild(feature);
--
-- feature = doc()->createElement("feature");
-- feature.setAttribute("var", "http://jabber.org/protocol/si/profile/file-transfer");
-- query.appendChild(feature);
-+ // Identity
-+ DiscoItem::Identity identity = client()->identity();
-+ QDomElement id = doc()->createElement("identity");
-+ if (!identity.category.isEmpty() && !identity.type.isEmpty()) {
-+ id.setAttribute("category",identity.category);
-+ id.setAttribute("type",identity.type);
-+ if (!identity.name.isEmpty()) {
-+ id.setAttribute("name",identity.name);
-+ }
-+ }
-+ else {
-+ // Default values
-+ id.setAttribute("category","client");
-+ id.setAttribute("type","pc");
-+ }
-+ query.appendChild(id);
-+
-+ QDomElement feature;
-+ if (node.isEmpty() || node == client()->capsNode() + "#" + client()->capsVersion()) {
-+ // Standard features
-+ feature = doc()->createElement("feature");
-+ feature.setAttribute("var", "http://jabber.org/protocol/bytestreams");
-+ query.appendChild(feature);
-+
-+ feature = doc()->createElement("feature");
-+ feature.setAttribute("var", "http://jabber.org/protocol/si");
-+ query.appendChild(feature);
-+
-+ feature = doc()->createElement("feature");
-+ feature.setAttribute("var", "http://jabber.org/protocol/si/profile/file-transfer");
-+ query.appendChild(feature);
-+
-+ feature = doc()->createElement("feature");
-+ feature.setAttribute("var", "http://jabber.org/protocol/disco#info");
-+ query.appendChild(feature);
-+
-+ if (node.isEmpty()) {
-+ // Extended features
-+ QStringList exts = client()->extensions();
-+ for (QStringList::ConstIterator i = exts.begin(); i != exts.end(); ++i) {
-+ const QStringList& l = client()->extension(*i).list();
-+ for ( QStringList::ConstIterator j = l.begin(); j != l.end(); ++j ) {
-+ feature = doc()->createElement("feature");
-+ feature.setAttribute("var", *j);
-+ query.appendChild(feature);
-+ }
-+ }
-+ }
-+ }
-+ else if (node.startsWith(client()->capsNode() + "#")) {
-+ QString ext = node.right(node.length()-client()->capsNode().length()-1);
-+ if (client()->extensions().contains(ext)) {
-+ const QStringList& l = client()->extension(ext).list();
-+ for ( QStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) {
-+ feature = doc()->createElement("feature");
-+ feature.setAttribute("var", *it);
-+ query.appendChild(feature);
-+ }
-+ }
-+ else {
-+ // TODO: ERROR
-+ }
-+ }
-+ else {
-+ // TODO: ERROR
-+ }
-
- send(iq);
- return true;
-@@ -1599,6 +1677,7 @@
-
- QDomElement iq;
- Jid jid;
-+ QString node;
- DiscoItem item;
- };
-
-@@ -1626,6 +1705,7 @@
- d->item = DiscoItem(); // clear item
-
- d->jid = j;
-+ d->node = node;
- d->iq = createIQ(doc(), "get", d->jid.full(), id());
- QDomElement query = doc()->createElement("query");
- query.setAttribute("xmlns", "http://jabber.org/protocol/disco#info");
-@@ -1648,6 +1728,29 @@
- d->iq.appendChild(query);
- }
-
-+
-+/**
-+ * Original requested jid.
-+ * Is here because sometimes the responder does not include this information
-+ * in the reply.
-+ */
-+const Jid& JT_DiscoInfo::jid() const
-+{
-+ return d->jid;
-+}
-+
-+/**
-+ * Original requested node.
-+ * Is here because sometimes the responder does not include this information
-+ * in the reply.
-+ */
-+const QString& JT_DiscoInfo::node() const
-+{
-+ return d->node;
-+}
-+
-+
-+
- const DiscoItem &JT_DiscoInfo::item() const
- {
- return d->item;
-diff -ur psi/iris/xmpp-im/xmpp_tasks.h psi-jingle/iris/xmpp-im/xmpp_tasks.h
---- psi/iris/xmpp-im/xmpp_tasks.h 2005-12-27 15:12:45.000000000 +0100
-+++ psi-jingle/iris/xmpp-im/xmpp_tasks.h 2005-12-27 11:05:53.000000000 +0100
-@@ -389,6 +389,8 @@
- void get(const DiscoItem &);
-
- const DiscoItem &item() const;
-+ const Jid& jid() const;
-+ const QString& node() const;
-
- void onGo();
- bool take(const QDomElement &);