summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBob Jamison <ishmalius@gmail.com>2006-05-04 04:42:03 +0000
committerishmal <ishmal@users.sourceforge.net>2006-05-04 04:42:03 +0000
commitda7b5e5962bc4547e4c902650b8ff6e9591aa83a (patch)
treedf443bd7954e364a950fe71c572aa0ae2a7a33ba /src
parentRemove warnings (diff)
downloadinkscape-da7b5e5962bc4547e4c902650b8ff6e9591aa83a.tar.gz
inkscape-da7b5e5962bc4547e4c902650b8ff6e9591aa83a.zip
Newer files
(bzr r720)
Diffstat (limited to 'src')
-rw-r--r--src/jabber_whiteboard/pedrodom.cpp2
-rw-r--r--src/jabber_whiteboard/pedrodom.h77
-rw-r--r--src/jabber_whiteboard/pedroxmpp.cpp150
-rw-r--r--src/jabber_whiteboard/pedroxmpp.h37
4 files changed, 186 insertions, 80 deletions
diff --git a/src/jabber_whiteboard/pedrodom.cpp b/src/jabber_whiteboard/pedrodom.cpp
index 2ed770a1a..5ac4a61d0 100644
--- a/src/jabber_whiteboard/pedrodom.cpp
+++ b/src/jabber_whiteboard/pedrodom.cpp
@@ -26,9 +26,7 @@
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
-#ifdef HAVE_MALLOC_H
#include <malloc.h>
-#endif
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/src/jabber_whiteboard/pedrodom.h b/src/jabber_whiteboard/pedrodom.h
index cd10f80c0..9c6651259 100644
--- a/src/jabber_whiteboard/pedrodom.h
+++ b/src/jabber_whiteboard/pedrodom.h
@@ -6,7 +6,7 @@
* Authors:
* Bob Jamison
*
- * Copyright (C) 2005 Bob Jamison
+ * Copyright (C) 2005-2006 Bob Jamison
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,6 +29,7 @@
namespace Pedro
{
+
typedef std::string DOMString;
typedef unsigned int XMLCh;
@@ -47,8 +48,13 @@ public:
Namespace(const Namespace &other)
{
- prefix = other.prefix;
- namespaceURI = other.namespaceURI;
+ assign(other);
+ }
+
+ Namespace &operator=(const Namespace &other)
+ {
+ assign(other);
+ return *this;
}
virtual ~Namespace()
@@ -62,6 +68,12 @@ public:
protected:
+ void assign(const Namespace &other)
+ {
+ prefix = other.prefix;
+ namespaceURI = other.namespaceURI;
+ }
+
DOMString prefix;
DOMString namespaceURI;
@@ -81,8 +93,13 @@ public:
Attribute(const Attribute &other)
{
- name = other.name;
- value = other.value;
+ assign(other);
+ }
+
+ Attribute &operator=(const Attribute &other)
+ {
+ assign(other);
+ return *this;
}
virtual ~Attribute()
@@ -96,6 +113,12 @@ public:
protected:
+ void assign(const Attribute &other)
+ {
+ name = other.name;
+ value = other.value;
+ }
+
DOMString name;
DOMString value;
@@ -121,18 +144,19 @@ public:
Element(const DOMString &nameArg, const DOMString &valueArg)
{
parent = NULL;
- name = nameArg;
- value = valueArg;
+ name = nameArg;
+ value = valueArg;
}
Element(const Element &other)
{
- parent = other.parent;
- children = other.children;
- attributes = other.attributes;
- namespaces = other.namespaces;
- name = other.name;
- value = other.value;
+ assign(other);
+ }
+
+ Element &operator=(const Element &other)
+ {
+ assign(other);
+ return *this;
}
virtual Element *clone();
@@ -187,6 +211,15 @@ public:
protected:
+ void assign(const Element &other)
+ {
+ parent = other.parent;
+ children = other.children;
+ attributes = other.attributes;
+ namespaces = other.namespaces;
+ name = other.name;
+ value = other.value;
+ }
void findElementsRecursive(std::vector<Element *>&res, const DOMString &name);
@@ -211,6 +244,9 @@ protected:
class Parser
{
public:
+ /**
+ * Constructor
+ */
Parser()
{ init(); }
@@ -284,14 +320,13 @@ private:
Element *parse(XMLCh *buf,int pos,int len);
- bool keepGoing;
- Element *currentNode;
- long parselen;
- XMLCh *parsebuf;
- DOMString cdatabuf;
- long currentPosition;
- int colNr;
-
+ bool keepGoing;
+ Element *currentNode;
+ long parselen;
+ XMLCh *parsebuf;
+ DOMString cdatabuf;
+ long currentPosition;
+ int colNr;
};
diff --git a/src/jabber_whiteboard/pedroxmpp.cpp b/src/jabber_whiteboard/pedroxmpp.cpp
index 0429a172f..f5ce69e0b 100644
--- a/src/jabber_whiteboard/pedroxmpp.cpp
+++ b/src/jabber_whiteboard/pedroxmpp.cpp
@@ -47,7 +47,7 @@
#endif
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
#include <openssl/ssl.h>
#include <openssl/err.h>
#endif
@@ -614,7 +614,7 @@ public:
static void hash(unsigned char *dataIn,
unsigned long len, unsigned char *digest);
- static DOMString hashHex(unsigned char *dataIn, unsigned long len);
+ static DOMString Md5::hashHex(unsigned char *dataIn, unsigned long len);
/**
* Initialize the context (also zeroizes contents)
@@ -681,7 +681,7 @@ static void byteReverse(unsigned char *buf, unsigned long longs)
{
do
{
- unsigned long t = (unsigned long)
+ unsigned long t = (unsigned long)
((unsigned) buf[3] << 8 | buf[2]) << 16 |
((unsigned) buf[1] << 8 | buf[0]);
*(unsigned long *) buf = t;
@@ -969,7 +969,7 @@ public:
{}
virtual ~Runnable()
{}
-
+
/**
* The method of a delegate class which can
* be run by a Thread. Thread is completed when this
@@ -1059,6 +1059,7 @@ static DWORD WINAPI WinThreadFunction(LPVOID context)
{
Thread *thread = (Thread *)context;
thread->execute();
+ return 0;
}
@@ -1179,7 +1180,7 @@ private:
unsigned long receiveTimeout;
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
SSL_CTX *sslContext;
SSL *sslStream;
#endif
@@ -1240,7 +1241,7 @@ TcpSocket::TcpSocket(const std::string &hostnameArg, int port)
}
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
static void cryptoLockCallback(int mode, int type, const char *file, int line)
{
@@ -1336,9 +1337,9 @@ void TcpSocket::init()
#ifdef __WIN32__
WORD wVersionRequested = MAKEWORD( 2, 2 );
WSADATA wsaData;
- int err = WSAStartup( wVersionRequested, &wsaData );
+ WSAStartup( wVersionRequested, &wsaData );
#endif
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
sslStream = NULL;
sslContext = NULL;
CRYPTO_set_locking_callback(cryptoLockCallback);
@@ -1390,7 +1391,7 @@ bool TcpSocket::connect(const std::string &hostnameArg, int portnoArg)
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
/*
static int password_cb(char *buf, int bufLen, int rwflag, void *userdata)
{
@@ -1425,7 +1426,7 @@ static void infoCallback(const SSL *ssl, int where, int ret)
bool TcpSocket::startTls()
{
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
sslStream = NULL;
sslContext = NULL;
@@ -1476,7 +1477,7 @@ bool TcpSocket::startTls()
}
sslEnabled = true;
-#endif /*WITH_SSL*/
+#endif /*HAVE_SSL*/
return true;
}
@@ -1537,7 +1538,7 @@ bool TcpSocket::disconnect()
{
bool ret = true;
connected = false;
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
if (sslEnabled)
{
if (sslStream)
@@ -1560,7 +1561,7 @@ bool TcpSocket::disconnect()
}
sslStream = NULL;
sslContext = NULL;
-#endif /*WITH_SSL*/
+#endif /*HAVE_SSL*/
#ifdef __WIN32__
closesocket(sock);
@@ -1600,7 +1601,7 @@ long TcpSocket::available()
#endif
if (count<=0 && sslEnabled)
{
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
return SSL_pending(sslStream);
#endif
}
@@ -1620,7 +1621,7 @@ bool TcpSocket::write(int ch)
if (sslEnabled)
{
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
int r = SSL_write(sslStream, &c, 1);
if (r<=0)
{
@@ -1652,13 +1653,12 @@ bool TcpSocket::write(char *str)
printf("write(str): socket closed\n");
return false;
}
- unsigned char *s = (unsigned char *)str;
int len = strlen(str);
if (sslEnabled)
{
-#ifdef WITH_SSL
- int r = SSL_write(sslStream, s, len);
+#ifdef HAVE_SSL
+ int r = SSL_write(sslStream, (unsigned char *)str, len);
if (r<=0)
{
switch(SSL_get_error(sslStream, r))
@@ -1672,7 +1672,7 @@ bool TcpSocket::write(char *str)
}
else
{
- if (send(sock, s, len, 0) < 0)
+ if (send(sock, str, len, 0) < 0)
//if (send(sock, &c, 1, 0) < 0)
{
printf("write: could not send data\n");
@@ -1716,7 +1716,7 @@ int TcpSocket::read()
unsigned char ch;
if (sslEnabled)
{
-#ifdef WITH_SSL
+#ifdef HAVE_SSL
if (!sslStream)
return -1;
int r = SSL_read(sslStream, &ch, 1);
@@ -2459,7 +2459,7 @@ static int strIndex(const DOMString &str, char *key)
}
-static DOMString toXml(const DOMString &str)
+DOMString XmppClient::toXml(const DOMString &str)
{
return Parser::encode(str);
}
@@ -2640,18 +2640,18 @@ static bool isGroupChat(Element *root)
-static bool getGroupIds(const DOMString &jid,
- DOMString &groupJid, DOMString &userNick)
+static bool parseJid(const DOMString &fullJid,
+ DOMString &jid, DOMString &resource)
{
- int p = strIndex(jid, "/");
+ int p = strIndex(fullJid, "/");
if (p < 0)
{
- groupJid = jid;
- userNick = "";
+ jid = fullJid;
+ resource = "";
return true;
}
- groupJid = jid.substr(0, p);
- userNick = jid.substr(p+1, jid.size()-p-1);
+ jid = fullJid.substr(0, p);
+ resource = fullJid.substr(p+1, fullJid.size()-p-1);
return true;
}
@@ -2710,12 +2710,12 @@ bool XmppClient::processMessage(Element *root)
{
DOMString fromGid;
DOMString fromNick;
- getGroupIds(from, fromGid, fromNick);
+ parseJid(from, fromGid, fromNick);
//printf("fromGid:%s fromNick:%s\n",
// fromGid.c_str(), fromNick.c_str());
DOMString toGid;
DOMString toNick;
- getGroupIds(to, toGid, toNick);
+ parseJid(to, toGid, toNick);
//printf("toGid:%s toNick:%s\n",
// toGid.c_str(), toNick.c_str());
@@ -2762,7 +2762,7 @@ bool XmppClient::processMessage(Element *root)
bool XmppClient::processPresence(Element *root)
{
- DOMString from = root->getTagAttribute("presence", "from");
+ DOMString fullJid = root->getTagAttribute("presence", "from");
DOMString to = root->getTagAttribute("presence", "to");
DOMString presenceStr = root->getTagAttribute("presence", "type");
bool presence = true;
@@ -2775,7 +2775,7 @@ bool XmppClient::processPresence(Element *root)
{
DOMString fromGid;
DOMString fromNick;
- getGroupIds(from, fromGid, fromNick);
+ parseJid(fullJid, fromGid, fromNick);
//printf("fromGid:%s fromNick:%s\n",
// fromGid.c_str(), fromNick.c_str());
DOMString item_jid = root->getTagAttribute("item", "jid");
@@ -2784,7 +2784,8 @@ bool XmppClient::processPresence(Element *root)
if (presence)
{
groupChatCreate(fromGid);
- groupChatUserAdd(fromGid, fromNick);
+ groupChatUserAdd(fromGid, fromNick, "");
+ groupChatUserShow(fromGid, fromNick, "available");
XmppEvent event(XmppEvent::EVENT_MUC_JOIN);
event.setGroup(fromGid);
@@ -2808,12 +2809,15 @@ bool XmppClient::processPresence(Element *root)
dispatchXmppEvent(event);
}
}
- else
+ else // someone else
{
if (presence)
- groupChatUserAdd(fromGid, fromNick);
+ {
+ groupChatUserAdd(fromGid, fromNick, "");
+ }
else
- groupChatUserDelete(fromGid, fromNick);
+ groupChatUserDelete(fromGid, fromNick);
+ groupChatUserShow(fromGid, fromNick, show);
XmppEvent event(XmppEvent::EVENT_MUC_PRESENCE);
event.setGroup(fromGid);
event.setFrom(fromNick);
@@ -2825,8 +2829,13 @@ bool XmppClient::processPresence(Element *root)
}
else
{
+ DOMString shortJid;
+ DOMString dummy;
+ parseJid(fullJid, shortJid, dummy);
+ rosterShow(shortJid, show); //users in roster do not have resource
+
XmppEvent event(XmppEvent::EVENT_PRESENCE);
- event.setFrom(from);
+ event.setFrom(fullJid);
event.setPresence(presence);
event.setShow(show);
event.setStatus(status);
@@ -3620,11 +3629,6 @@ bool XmppClient::createSession()
//async mode
fmt =
- "<presence/>\n";
- if (!write(fmt))
- return false;
-
- fmt =
"<iq type='get' id='roster%d'><query xmlns='jabber:iq:roster'/></iq>\n";
if (!write(fmt, msgId++))
return false;
@@ -3641,6 +3645,11 @@ bool XmppClient::createSession()
if (!write(fmt, msgId++, realm.c_str()))
return false;
+ fmt =
+ "<presence/>\n";
+ if (!write(fmt))
+ return false;
+
/*
recbuf = readStanza();
status("stream received: '%s'", recbuf.c_str());
@@ -3780,6 +3789,20 @@ std::vector<XmppUser> XmppClient::getRoster()
return ros;
}
+void XmppClient::rosterShow(const DOMString &jid, const DOMString &show)
+{
+ DOMString theShow = show;
+ if (theShow == "")
+ theShow = "available";
+
+ std::vector<XmppUser>::iterator iter;
+ for (iter=roster.begin() ; iter != roster.end() ; iter++)
+ {
+ if (iter->jid == jid)
+ iter->show = theShow;
+ }
+}
+
//#######################
//# CHAT (individual)
//#######################
@@ -3903,14 +3926,32 @@ void XmppClient::groupChatsClear()
*
*/
void XmppClient::groupChatUserAdd(const DOMString &groupJid,
- const DOMString &nick)
+ const DOMString &nick,
+ const DOMString &jid)
+{
+ std::vector<XmppGroupChat *>::iterator iter;
+ for (iter=groupChats.begin() ; iter!=groupChats.end() ; iter++)
+ {
+ if ((*iter)->getGroupJid() == groupJid)
+ {
+ (*iter)->userAdd(nick, jid);
+ }
+ }
+}
+
+/**
+ *
+ */
+void XmppClient::groupChatUserShow(const DOMString &groupJid,
+ const DOMString &nick,
+ const DOMString &show)
{
std::vector<XmppGroupChat *>::iterator iter;
for (iter=groupChats.begin() ; iter!=groupChats.end() ; iter++)
{
if ((*iter)->getGroupJid() == groupJid)
{
- (*iter)->userAdd("", nick);
+ (*iter)->userShow(nick, show);
}
}
}
@@ -3926,7 +3967,7 @@ void XmppClient::groupChatUserDelete(const DOMString &groupJid,
{
if ((*iter)->getGroupJid() == groupJid)
{
- (*iter)->userDelete("", nick);
+ (*iter)->userDelete(nick);
}
}
}
@@ -4731,7 +4772,8 @@ DOMString XmppGroupChat::getGroupJid()
}
-void XmppGroupChat::userAdd(const DOMString &jid, const DOMString &nick)
+void XmppGroupChat::userAdd(const DOMString &nick,
+ const DOMString &jid)
{
std::vector<XmppUser>::iterator iter;
for (iter= userList.begin() ; iter!=userList.end() ; iter++)
@@ -4743,7 +4785,21 @@ void XmppGroupChat::userAdd(const DOMString &jid, const DOMString &nick)
userList.push_back(user);
}
-void XmppGroupChat::userDelete(const DOMString &jid, const DOMString &nick)
+void XmppGroupChat::userShow(const DOMString &nick,
+ const DOMString &show)
+{
+ DOMString theShow = show;
+ if (theShow == "")
+ theShow = "available"; // a join message will now have a show
+ std::vector<XmppUser>::iterator iter;
+ for (iter= userList.begin() ; iter!=userList.end() ; iter++)
+ {
+ if (iter->nick == nick)
+ iter->show = theShow;
+ }
+}
+
+void XmppGroupChat::userDelete(const DOMString &nick)
{
std::vector<XmppUser>::iterator iter;
for (iter= userList.begin() ; iter!=userList.end() ; )
diff --git a/src/jabber_whiteboard/pedroxmpp.h b/src/jabber_whiteboard/pedroxmpp.h
index 574371bf7..d938a25fd 100644
--- a/src/jabber_whiteboard/pedroxmpp.h
+++ b/src/jabber_whiteboard/pedroxmpp.h
@@ -357,11 +357,6 @@ public:
XmppEventListener(const XmppEventListener &other)
{}
- /**
- *
- */
- virtual void operator=(const XmppEventListener &other)
- {}
/**
*
@@ -524,6 +519,11 @@ public:
*/
virtual bool pause(unsigned long millis);
+ /**
+ *
+ */
+ DOMString toXml(const DOMString &str);
+
//###########################
//# CONNECTION
//###########################
@@ -685,7 +685,11 @@ public:
*/
std::vector<XmppUser> getRoster();
-
+ /**
+ *
+ */
+ virtual void rosterShow(const DOMString &jid, const DOMString &show);
+
//#######################
//# CHAT (individual)
//#######################
@@ -734,7 +738,14 @@ public:
*
*/
virtual void groupChatUserAdd(const DOMString &groupJid,
- const DOMString &nick);
+ const DOMString &nick,
+ const DOMString &jid);
+ /**
+ *
+ */
+ virtual void groupChatUserShow(const DOMString &groupJid,
+ const DOMString &nick,
+ const DOMString &show);
/**
*
@@ -746,7 +757,7 @@ public:
*
*/
virtual std::vector<XmppUser>
- groupChatGetUserList(const DOMString &groupJid);
+ XmppClient::groupChatGetUserList(const DOMString &groupJid);
/**
*
@@ -983,12 +994,18 @@ public:
/**
*
*/
- virtual void userAdd(const DOMString &jid, const DOMString &nick);
+ virtual void userAdd(const DOMString &nick,
+ const DOMString &jid);
+ /**
+ *
+ */
+ virtual void userShow(const DOMString &nick,
+ const DOMString &show);
/**
*
*/
- virtual void userDelete(const DOMString &jid, const DOMString &nick);
+ virtual void userDelete(const DOMString &nick);
/**
*