diff options
Diffstat (limited to 'kopete/protocols')
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 &); |