summaryrefslogtreecommitdiff
path: root/protocols/WhatsApp/src/WhatsAPI++
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2014-09-19 19:09:07 +0000
committerGeorge Hazan <george.hazan@gmail.com>2014-09-19 19:09:07 +0000
commit41de1ce748d969a65bbefc6987c98d4e0a5010a3 (patch)
tree7568765f0ebf66fa54fa470f4eee22251301bc58 /protocols/WhatsApp/src/WhatsAPI++
parent5148c6e14bc21f758810aafff715bc4121c80d57 (diff)
merge #2
git-svn-id: http://svn.miranda-ng.org/main/trunk@10527 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/WhatsApp/src/WhatsAPI++')
-rw-r--r--protocols/WhatsApp/src/WhatsAPI++/WAConnection.cpp625
1 files changed, 225 insertions, 400 deletions
diff --git a/protocols/WhatsApp/src/WhatsAPI++/WAConnection.cpp b/protocols/WhatsApp/src/WhatsAPI++/WAConnection.cpp
index 9caf489f97..f819ff8737 100644
--- a/protocols/WhatsApp/src/WhatsAPI++/WAConnection.cpp
+++ b/protocols/WhatsApp/src/WhatsAPI++/WAConnection.cpp
@@ -251,264 +251,25 @@ const char* WAConnection::dictionary[] = {
"WAUTH-1"
};
-
-//const char* WAConnection::dictionary[] = {
-// "",
-// "",
-// "",
-// "",
-// "",
-// "1",
-// "1.0",
-// "ack",
-// "action",
-// "active",
-// "add",
-// "all",
-// "allow",
-// "apple",
-// "audio",
-// "auth",
-// "author",
-// "available",
-// "bad-request",
-// "base64",
-// "Bell.caf",
-// "bind",
-// "body",
-// "Boing.caf",
-// "cancel",
-// "category",
-// "challenge",
-// "chat",
-// "clean",
-// "code",
-// "composing",
-// "config",
-// "conflict",
-// "contacts",
-// "create",
-// "creation",
-// "default",
-// "delay",
-// "delete",
-// "delivered",
-// "deny",
-// "DIGEST-MD5",
-// "DIGEST-MD5-1",
-// "dirty",
-// "en",
-// "enable",
-// "encoding",
-// "error",
-// "expiration",
-// "expired",
-// "failure",
-// "false",
-// "favorites",
-// "feature",
-// "field",
-// "free",
-// "from",
-// "g.us",
-// "get",
-// "Glass.caf",
-// "google",
-// "group",
-// "groups",
-// "g_sound",
-// "Harp.caf",
-// "http://etherx.jabber.org/streams",
-// "http://jabber.org/protocol/chatstates",
-// "id",
-// "image",
-// "img",
-// "inactive",
-// "internal-server-error",
-// "iq",
-// "item",
-// "item-not-found",
-// "jabber:client",
-// "jabber:iq:last",
-// "jabber:iq:privacy",
-// "jabber:x:delay",
-// "jabber:x:event",
-// "jid",
-// "jid-malformed",
-// "kind",
-// "leave",
-// "leave-all",
-// "list",
-// "location",
-// "max_groups",
-// "max_participants",
-// "max_subject",
-// "mechanism",
-// "mechanisms",
-// "media",
-// "message",
-// "message_acks",
-// "missing",
-// "modify",
-// "name",
-// "not-acceptable",
-// "not-allowed",
-// "not-authorized",
-// "notify",
-// "Offline Storage",
-// "order",
-// "owner",
-// "owning",
-// "paid",
-// "participant",
-// "participants",
-// "participating",
-// "particpants",
-// "paused",
-// "picture",
-// "ping",
-// "PLAIN",
-// "platform",
-// "presence",
-// "preview",
-// "probe",
-// "prop",
-// "props",
-// "p_o",
-// "p_t",
-// "query",
-// "raw",
-// "receipt",
-// "receipt_acks",
-// "received",
-// "relay",
-// "remove",
-// "Replaced by new connection",
-// "request",
-// "resource",
-// "resource-constraint",
-// "response",
-// "result",
-// "retry",
-// "rim",
-// "s.whatsapp.net",
-// "seconds",
-// "server",
-// "session",
-// "set",
-// "show",
-// "sid",
-// "sound",
-// "stamp",
-// "starttls",
-// "status",
-// "stream:error",
-// "stream:features",
-// "subject",
-// "subscribe",
-// "success",
-// "system-shutdown",
-// "s_o",
-// "s_t",
-// "t",
-// "TimePassing.caf",
-// "timestamp",
-// "to",
-// "Tri-tone.caf",
-// "type",
-// "unavailable",
-// "uri",
-// "url",
-// "urn:ietf:params:xml:ns:xmpp-bind",
-// "urn:ietf:params:xml:ns:xmpp-sasl",
-// "urn:ietf:params:xml:ns:xmpp-session",
-// "urn:ietf:params:xml:ns:xmpp-stanzas",
-// "urn:ietf:params:xml:ns:xmpp-streams",
-// "urn:xmpp:delay",
-// "urn:xmpp:ping",
-// "urn:xmpp:receipts",
-// "urn:xmpp:whatsapp",
-// "urn:xmpp:whatsapp:dirty",
-// "urn:xmpp:whatsapp:mms",
-// "urn:xmpp:whatsapp:push",
-// "value",
-// "vcard",
-// "version",
-// "video",
-// "w",
-// "w:g",
-// "w:p:r",
-// "wait",
-// "x",
-// "xml-not-well-formed",
-// "xml:lang",
-// "xmlns",
-// "xmlns:stream",
-// "Xylophone.caf",
-// "account",
-// "digest",
-// "g_notify",
-// "method",
-// "password",
-// "registration",
-// "stat",
-// "text",
-// "user",
-// "username",
-// "event",
-// "latitude",
-// "longitude",
-// "true",
-// "after",
-// "before",
-// "broadcast",
-// "count",
-// "features",
-// "first",
-// "index",
-// "invalid-mechanism",
-// "l$dict",
-// "max",
-// "offline",
-// "proceed",
-// "required",
-// "sync",
-// "elapsed",
-// "ip",
-// "microsoft",
-// "mute",
-// "nokia",
-// "off",
-// "pin",
-// "pop_mean_time",
-// "pop_plus_minus",
-// "port",
-// "reason",
-// "server-error",
-// "silent",
-// "timeout",
-// "lc",
-// "lg",
-// "bad-protocol",
-// "none",
-// "remote-server-timeout",
-// "service-unavailable",
-// "w:p",
-// "w:profile:picture",
-// "notification",
-// "",
-// "",
-// "",
-// "",
-// "",
-// "XXX"
-//};
-
-WAConnection::WAConnection(IMutex* mutex, WAListener* event_handler, WAGroupListener* group_event_handler) {
+WAConnection::WAConnection(IMutex* mutex, WAListener* event_handler, WAGroupListener* group_event_handler)
+{
this->init(event_handler, group_event_handler, mutex);
}
-void WAConnection::init(WAListener* event_handler, WAGroupListener* group_event_handler, IMutex* mutex) {
+WAConnection::~WAConnection()
+{
+ delete this->inputKey;
+ delete this->outputKey;
+ delete this->in;
+ delete this->out;
+ std::map<string, IqResultHandler*>::iterator it;
+ for (it = this->pending_server_requests.begin(); it != this->pending_server_requests.end(); it++) {
+ delete it->second;
+ }
+}
+
+void WAConnection::init(WAListener* event_handler, WAGroupListener* group_event_handler, IMutex* mutex)
+{
this->login = NULL;
this->event_handler = event_handler;
this->group_event_handler = group_event_handler;
@@ -529,7 +290,8 @@ void WAConnection::init(WAListener* event_handler, WAGroupListener* group_event_
this->mutex = mutex;
}
-void WAConnection::setLogin(WALogin* login) {
+void WAConnection::setLogin(WALogin* login)
+{
this->login = login;
if (login->expire_date != 0L) {
@@ -546,11 +308,13 @@ void WAConnection::setLogin(WALogin* login) {
this->out = login->getTreeNodeWriter();
}
-WALogin* WAConnection::getLogin() {
+WALogin* WAConnection::getLogin()
+{
return this->login;
}
-void WAConnection::sendMessageWithMedia(FMessage* message) throw (WAException) {
+void WAConnection::sendMessageWithMedia(FMessage* message) throw (WAException)
+{
_LOGDATA("Send message with media %s %d", message->media_name.c_str(), message->media_size);
_LOGDATA("media-url:%s", message->media_url.c_str());
if (message->media_wa_type == FMessage::WA_TYPE_SYSTEM)
@@ -562,12 +326,14 @@ void WAConnection::sendMessageWithMedia(FMessage* message) throw (WAException)
if (message->media_wa_type == FMessage::WA_TYPE_LOCATION) {
(*attribs)["latitude"] = Utilities::doubleToStr(message->latitude);
(*attribs)["longitude"] = Utilities::doubleToStr(message->longitude);
- } else {
+ }
+ else {
if (message->media_wa_type != FMessage::WA_TYPE_CONTACT && !message->media_name.empty() && !message->media_url.empty() && message->media_size > 0L) {
(*attribs)["file"] = message->media_name;
(*attribs)["size"] = Utilities::intToStr((int)message->media_size);
(*attribs)["url"] = message->media_url;
- } else {
+ }
+ else {
(*attribs)["file"] = message->media_name;
(*attribs)["size"] = Utilities::intToStr((int)message->media_size);
(*attribs)["url"] = message->media_url;
@@ -581,7 +347,8 @@ void WAConnection::sendMessageWithMedia(FMessage* message) throw (WAException)
(*attribs2)["name"] = message->media_name;
ProtocolTreeNode* vcardNode = new ProtocolTreeNode("vcard", attribs2, new std::vector<unsigned char>(message->data.begin(), message->data.end()));
mediaNode = new ProtocolTreeNode("media", attribs, vcardNode);
- } else {
+ }
+ else {
(*attribs)["encoding"] = "text";
mediaNode = new ProtocolTreeNode("media", attribs, new std::vector<unsigned char>(message->data.begin(), message->data.end()), NULL);
}
@@ -591,14 +358,16 @@ void WAConnection::sendMessageWithMedia(FMessage* message) throw (WAException)
delete root;
}
-void WAConnection::sendMessageWithBody(FMessage* message) throw (WAException) {
+void WAConnection::sendMessageWithBody(FMessage* message) throw (WAException)
+{
ProtocolTreeNode* bodyNode = new ProtocolTreeNode("body", NULL, new std::vector<unsigned char>(message->data.begin(), message->data.end()));
ProtocolTreeNode* root = WAConnection::getMessageNode(message, bodyNode);
this->out->write(root);
delete root;
}
-ProtocolTreeNode* WAConnection::getMessageNode(FMessage* message, ProtocolTreeNode* child) {
+ProtocolTreeNode* WAConnection::getMessageNode(FMessage* message, ProtocolTreeNode* child)
+{
ProtocolTreeNode* requestNode = NULL;
ProtocolTreeNode* serverNode = new ProtocolTreeNode("server", NULL);
std::map<string, string>* attrib = new std::map<string, string>();
@@ -606,7 +375,7 @@ ProtocolTreeNode* WAConnection::getMessageNode(FMessage* message, ProtocolTreeNo
std::vector<ProtocolTreeNode*>* children = new std::vector<ProtocolTreeNode*>(1);
(*children)[0] = serverNode;
ProtocolTreeNode* xNode = new ProtocolTreeNode("x", attrib, NULL, children);
- int childCount = (requestNode == NULL? 0 : 1) + 2;
+ int childCount = (requestNode == NULL ? 0 : 1) + 2;
std::vector<ProtocolTreeNode*>* messageChildren = new std::vector<ProtocolTreeNode*>(childCount);
int i = 0;
if (requestNode != NULL) {
@@ -626,31 +395,21 @@ ProtocolTreeNode* WAConnection::getMessageNode(FMessage* message, ProtocolTreeNo
return new ProtocolTreeNode("message", attrib2, NULL, messageChildren);
}
-void WAConnection::sendMessage(FMessage* message) throw(WAException) {
+void WAConnection::sendMessage(FMessage* message) throw(WAException)
+{
if (message->media_wa_type != 0)
sendMessageWithMedia(message);
else
sendMessageWithBody(message);
}
-
-WAConnection::~WAConnection() {
- delete this->inputKey;
- delete this->outputKey;
- delete this->in;
- delete this->out;
- std::map<string, IqResultHandler*>::iterator it;
- for (it = this->pending_server_requests.begin(); it != this->pending_server_requests.end(); it++) {
- delete it->second;
- }
-}
-
-
-void WAConnection::setVerboseId(bool b) {
+void WAConnection::setVerboseId(bool b)
+{
this->verbose = b;
}
-void WAConnection::sendAvailableForChat() throw(WAException) {
+void WAConnection::sendAvailableForChat() throw(WAException)
+{
std::map<string, string>* attribs = new std::map<string, string>();
(*attribs)["name"] = this->login->push_name;
ProtocolTreeNode *presenceNode = new ProtocolTreeNode("presence", attribs);
@@ -658,12 +417,14 @@ void WAConnection::sendAvailableForChat() throw(WAException) {
delete presenceNode;
}
-bool WAConnection::read() throw(WAException) {
+bool WAConnection::read() throw(WAException)
+{
ProtocolTreeNode* node;
try {
node = this->in->nextTree();
this->lastTreeRead = time(NULL);
- } catch (exception& ex) {
+ }
+ catch (exception& ex) {
throw WAException(ex.what(), WAException::CORRUPT_STREAM_EX, 0);
}
@@ -673,7 +434,7 @@ bool WAConnection::read() throw(WAException) {
if (ProtocolTreeNode::tagEquals(node, "iq")) {
std::string* type = node->getAttributeValue("type");
- std::string* id = node->getAttributeValue("id");
+ std::string* id = node->getAttributeValue("id");
std::string* from = node->getAttributeValue("from");
std::string f;
if (from == NULL)
@@ -689,19 +450,22 @@ bool WAConnection::read() throw(WAException) {
throw WAException("missing 'id' attribute in iq stanza", WAException::CORRUPT_STREAM_EX, 0);
std::map<string, IqResultHandler*>::iterator it = this->pending_server_requests.find(*id);
- if (it!= this->pending_server_requests.end()) {
+ if (it != this->pending_server_requests.end()) {
it->second->parse(node, f);
delete it->second;
this->pending_server_requests.erase(*id);
- } else if (id->compare(0, this->login->user.size(), this->login->user) == 0) {
+ }
+ else if (id->compare(0, this->login->user.size(), this->login->user) == 0) {
ProtocolTreeNode* accountNode = node->getChild(0);
ProtocolTreeNode::require(accountNode, "account");
std::string* kind = accountNode->getAttributeValue("kind");
if ((kind != NULL) && (kind->compare("paid") == 0)) {
this->account_kind = 1;
- } else if ((kind != NULL) && (kind->compare("free") == 0)) {
+ }
+ else if ((kind != NULL) && (kind->compare("free") == 0)) {
this->account_kind = 0;
- } else
+ }
+ else
this->account_kind = -1;
std::string* expiration = accountNode->getAttributeValue("expiration");
if (expiration == NULL) {
@@ -713,29 +477,33 @@ bool WAConnection::read() throw(WAException) {
if (this->event_handler != NULL)
this->event_handler->onAccountChange(this->account_kind, this->expire_date);
}
- } else if (type->compare("error") == 0) {
+ }
+ else if (type->compare("error") == 0) {
std::map<string, IqResultHandler*>::iterator it = this->pending_server_requests.find(*id);
- if (it!= this->pending_server_requests.end()) {
+ if (it != this->pending_server_requests.end()) {
it->second->error(node);
delete it->second;
this->pending_server_requests.erase(*id);
}
- } else if (type->compare("get") == 0) {
+ }
+ else if (type->compare("get") == 0) {
ProtocolTreeNode* childNode = node->getChild(0);
if (ProtocolTreeNode::tagEquals(childNode, "ping")) {
if (this->event_handler != NULL)
this->event_handler->onPing(*id);
- } else if (ProtocolTreeNode::tagEquals(childNode, "query") && (from != NULL)? false : // (childNode->getAttributeValue("xmlns") != NULL) && ((*childNode->getAttributeValue("xmlns")).compare("http://jabber.org/protocol/disco#info") == 0) :
- (ProtocolTreeNode::tagEquals(childNode, "relay")) && (from != NULL)) {
+ }
+ else if (ProtocolTreeNode::tagEquals(childNode, "query") && (from != NULL) ? false : // (childNode->getAttributeValue("xmlns") != NULL) && ((*childNode->getAttributeValue("xmlns")).compare("http://jabber.org/protocol/disco#info") == 0) :
+ (ProtocolTreeNode::tagEquals(childNode, "relay")) && (from != NULL)) {
std::string* pin = childNode->getAttributeValue("pin");
std::string* timeoutString = childNode->getAttributeValue("timeout");
int timeoutSeconds;
- timeoutSeconds = timeoutString == NULL? 0 : atoi(timeoutString->c_str());
+ timeoutSeconds = timeoutString == NULL ? 0 : atoi(timeoutString->c_str());
if (pin != NULL)
if (this->event_handler != NULL)
this->event_handler->onRelayRequest(*pin, timeoutSeconds, *id);
}
- } else if (type->compare("set") == 0) {
+ }
+ else if (type->compare("set") == 0) {
ProtocolTreeNode* childNode = node->getChild(0);
if (ProtocolTreeNode::tagEquals(childNode, "query")) {
std::string* xmlns = childNode->getAttributeValue("xmlns");
@@ -751,9 +519,11 @@ bool WAConnection::read() throw(WAException) {
delete itemNodes;
}
}
- } else
+ }
+ else
throw WAException("unknown iq type attribute: " + *type, WAException::CORRUPT_STREAM_EX, 0);
- } else if (ProtocolTreeNode::tagEquals(node, "presence")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(node, "presence")) {
std::string* xmlns = node->getAttributeValue("xmlns");
std::string* from = node->getAttributeValue("from");
if (((xmlns == NULL) || (xmlns->compare("urn:xmpp") == 0)) && (from != NULL)) {
@@ -761,28 +531,33 @@ bool WAConnection::read() throw(WAException) {
if ((type != NULL) && (type->compare("unavailable") == 0)) {
if (this->event_handler != NULL)
this->event_handler->onAvailable(*from, false);
- } else if ((type == NULL) || (type->compare("available") == 0)) {
+ }
+ else if ((type == NULL) || (type->compare("available") == 0)) {
if (this->event_handler != NULL)
this->event_handler->onAvailable(*from, true);
}
- } else if ((xmlns->compare("w") == 0) && (from != NULL)) {
+ }
+ else if ((xmlns->compare("w") == 0) && (from != NULL)) {
std::string* add = node->getAttributeValue("add");
std::string* remove = node->getAttributeValue("remove");
std::string* status = node->getAttributeValue("status");
if (add != NULL) {
if (this->group_event_handler != NULL)
this->group_event_handler->onGroupAddUser(*from, *add);
- } else if (remove != NULL) {
+ }
+ else if (remove != NULL) {
if (this->group_event_handler != NULL)
this->group_event_handler->onGroupRemoveUser(*from, *remove);
- } else if ((status != NULL) && (status->compare("dirty") == 0)) {
+ }
+ else if ((status != NULL) && (status->compare("dirty") == 0)) {
std::map<string, string>* categories = parseCategories(node);
if (this->event_handler != NULL)
this->event_handler->onDirty(*categories);
delete categories;
}
}
- } else if (ProtocolTreeNode::tagEquals(node, "message")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(node, "message")) {
parseMessageInitialTagAlreadyChecked(node);
}
@@ -790,11 +565,13 @@ bool WAConnection::read() throw(WAException) {
return true;
}
-void WAConnection::sendNop() throw(WAException) {
+void WAConnection::sendNop() throw(WAException)
+{
this->out->write(NULL);
}
-void WAConnection::sendPing() throw(WAException) {
+void WAConnection::sendPing() throw(WAException)
+{
std::string id = makeId("ping_");
this->pending_server_requests[id] = new IqResultPingHandler(this);
@@ -811,7 +588,8 @@ void WAConnection::sendPing() throw(WAException) {
delete iqNode;
}
-void WAConnection::sendPong(const std::string& id) throw(WAException) {
+void WAConnection::sendPong(const std::string& id) throw(WAException)
+{
std::map<string, string>* attribs = new std::map<string, string>();
(*attribs)["type"] = "result";
(*attribs)["to"] = this->login->domain;
@@ -821,7 +599,8 @@ void WAConnection::sendPong(const std::string& id) throw(WAException) {
delete iqNode;
}
-void WAConnection::sendComposing(const std::string& to) throw(WAException) {
+void WAConnection::sendComposing(const std::string& to) throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["xmlns"] = "http://jabber.org/protocol/chatstates";
ProtocolTreeNode* composingNode = new ProtocolTreeNode("composing", attribs1);
@@ -837,7 +616,8 @@ void WAConnection::sendComposing(const std::string& to) throw(WAException) {
}
-void WAConnection::sendActive() throw(WAException) {
+void WAConnection::sendActive() throw(WAException)
+{
std::map<string, string>* attribs = new std::map<string, string>();
(*attribs)["type"] = "active";
ProtocolTreeNode* presenceNode = new ProtocolTreeNode("presence", attribs);
@@ -847,7 +627,8 @@ void WAConnection::sendActive() throw(WAException) {
delete presenceNode;
}
-void WAConnection::sendInactive() throw(WAException) {
+void WAConnection::sendInactive() throw(WAException)
+{
std::map<string, string>* attribs = new std::map<string, string>();
(*attribs)["type"] = "inactive";
ProtocolTreeNode* presenceNode = new ProtocolTreeNode("presence", attribs);
@@ -857,7 +638,8 @@ void WAConnection::sendInactive() throw(WAException) {
delete presenceNode;
}
-void WAConnection::sendPaused(const std::string& to) throw(WAException) {
+void WAConnection::sendPaused(const std::string& to) throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["xmlns"] = "http://jabber.org/protocol/chatstates";
ProtocolTreeNode* pausedNode = new ProtocolTreeNode("paused", attribs1);
@@ -872,7 +654,8 @@ void WAConnection::sendPaused(const std::string& to) throw(WAException) {
delete messageNode;
}
-void WAConnection::sendSubjectReceived(const std::string& to, const std::string& id)throw(WAException) {
+void WAConnection::sendSubjectReceived(const std::string& to, const std::string& id)throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["xmlns"] = "urn:xmpp:receipts";
ProtocolTreeNode* receivedNode = new ProtocolTreeNode("received", attribs1);
@@ -884,7 +667,8 @@ void WAConnection::sendSubjectReceived(const std::string& to, const std::string&
delete messageNode;
}
-ProtocolTreeNode* WAConnection::getSubjectMessage(const std::string& to, const std::string& id, ProtocolTreeNode* child) throw (WAException) {
+ProtocolTreeNode* WAConnection::getSubjectMessage(const std::string& to, const std::string& id, ProtocolTreeNode* child) throw (WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["to"] = to;
(*attribs1)["type"] = "subject";
@@ -894,7 +678,8 @@ ProtocolTreeNode* WAConnection::getSubjectMessage(const std::string& to, const s
return messageNode;
}
-void WAConnection::sendMessageReceived(FMessage* message) throw(WAException) {
+void WAConnection::sendMessageReceived(FMessage* message) throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["xmlns"] = "urn:xmpp:receipts";
ProtocolTreeNode* receivedNode = new ProtocolTreeNode("received", attribs1);
@@ -911,19 +696,22 @@ void WAConnection::sendMessageReceived(FMessage* message) throw(WAException) {
}
void WAConnection::sendDeliveredReceiptAck(const std::string& to,
- const std::string& id) throw(WAException) {
+ const std::string& id) throw(WAException)
+{
ProtocolTreeNode *root = getReceiptAck(to, id, "delivered");
this->out->write(root);
delete root;
}
-void WAConnection::sendVisibleReceiptAck(const std::string& to, const std::string& id) throw (WAException) {
+void WAConnection::sendVisibleReceiptAck(const std::string& to, const std::string& id) throw (WAException)
+{
ProtocolTreeNode *root = getReceiptAck(to, id, "visible");
this->out->write(root);
delete root;
}
-void WAConnection::sendPresenceSubscriptionRequest(const std::string& to) throw(WAException) {
+void WAConnection::sendPresenceSubscriptionRequest(const std::string& to) throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["type"] = "subscribe";
(*attribs1)["to"] = to;
@@ -932,10 +720,11 @@ void WAConnection::sendPresenceSubscriptionRequest(const std::string& to) throw(
delete presenceNode;
}
-void WAConnection::sendClientConfig(const std::string& sound, const std::string& pushID, bool preview, const std::string& platform) throw(WAException) {
+void WAConnection::sendClientConfig(const std::string& sound, const std::string& pushID, bool preview, const std::string& platform) throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
- (*attribs1)["xmlns"] ="urn:xmpp:whatsapp:push";
- (*attribs1)["sound"] =sound;
+ (*attribs1)["xmlns"] = "urn:xmpp:whatsapp:push";
+ (*attribs1)["sound"] = sound;
(*attribs1)["id"] = pushID;
(*attribs1)["preview"] = preview ? "1" : "0";
(*attribs1)["platform"] = platform;
@@ -957,17 +746,18 @@ void WAConnection::sendClientConfig(const std::string& sound, const std::string
}
-void WAConnection::sendClientConfig(const std::string& pushID, bool preview, const std::string& platform, bool defaultSettings, bool groupSettings, const std::vector<GroupSetting>& groups) throw(WAException) {
+void WAConnection::sendClientConfig(const std::string& pushID, bool preview, const std::string& platform, bool defaultSettings, bool groupSettings, const std::vector<GroupSetting>& groups) throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
- (*attribs1)["xmlns"] ="urn:xmpp:whatsapp:push";
+ (*attribs1)["xmlns"] = "urn:xmpp:whatsapp:push";
(*attribs1)["id"] = pushID;
(*attribs1)["lg"] = "en";
(*attribs1)["lc"] = "US";
(*attribs1)["clear"] = "0";
(*attribs1)["preview"] = preview ? "1" : "0";
(*attribs1)["platform"] = platform;
- (*attribs1)["default"] = defaultSettings? "1": "0";
- (*attribs1)["groups"] = groupSettings? "1" : "0";
+ (*attribs1)["default"] = defaultSettings ? "1" : "0";
+ (*attribs1)["groups"] = groupSettings ? "1" : "0";
ProtocolTreeNode* configNode = new ProtocolTreeNode("config", attribs1, NULL, this->processGroupSettings(groups));
std::string id = makeId("config_");
@@ -981,15 +771,16 @@ void WAConnection::sendClientConfig(const std::string& pushID, bool preview, con
delete iqNode;
}
-std::vector<ProtocolTreeNode*>* WAConnection::processGroupSettings(const std::vector<GroupSetting>& groups) {
+std::vector<ProtocolTreeNode*>* WAConnection::processGroupSettings(const std::vector<GroupSetting>& groups)
+{
std::vector<ProtocolTreeNode*>* result = new std::vector<ProtocolTreeNode*>(groups.size());
if (!groups.empty()) {
time_t now = time(NULL);
for (size_t i = 0; i < groups.size(); i++) {
std::map<string, string>* attribs = new std::map<string, string>();
(*attribs)["jid"] = groups[i].jid;
- (*attribs)["notify"] = (groups[i].enabled? "1": "0");
- (*attribs)["mute"] = Utilities::intToStr( int(groups[i].muteExpiry > now ? (groups[i].muteExpiry - now) : 0));
+ (*attribs)["notify"] = (groups[i].enabled ? "1" : "0");
+ (*attribs)["mute"] = Utilities::intToStr(int(groups[i].muteExpiry > now ? (groups[i].muteExpiry - now) : 0));
_LOGDATA("mute group %s, %s", (*attribs)["jid"].c_str(), (*attribs)["mute"].c_str());
(*result)[i] = new ProtocolTreeNode("item", attribs);
@@ -999,7 +790,8 @@ std::vector<ProtocolTreeNode*>* WAConnection::processGroupSettings(const std::ve
return result;
}
-std::string WAConnection::makeId(const std::string& prefix) {
+std::string WAConnection::makeId(const std::string& prefix)
+{
this->iqid++;
std::string id;
if (this->verbose)
@@ -1010,8 +802,8 @@ std::string WAConnection::makeId(const std::string& prefix) {
return id;
}
-
-ProtocolTreeNode* WAConnection::getReceiptAck(const std::string& to, const std::string& id, const std::string& receiptType) throw(WAException) {
+ProtocolTreeNode* WAConnection::getReceiptAck(const std::string& to, const std::string& id, const std::string& receiptType) throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["xmlns"] = "urn:xmpp:receipts";
(*attribs1)["type"] = receiptType;
@@ -1026,8 +818,9 @@ ProtocolTreeNode* WAConnection::getReceiptAck(const std::string& to, const std::
return messageNode;
}
-std::map<string, string>* WAConnection::parseCategories(ProtocolTreeNode* dirtyNode) throw (WAException) {
- std::map<string, string>* categories = new std::map<string,string>();
+std::map<string, string>* WAConnection::parseCategories(ProtocolTreeNode* dirtyNode) throw (WAException)
+{
+ std::map<string, string>* categories = new std::map<string, string>();
if (dirtyNode->children != NULL) {
for (size_t i = 0; i < dirtyNode->children->size(); i++) {
ProtocolTreeNode* childNode = (*dirtyNode->children)[i];
@@ -1042,7 +835,8 @@ std::map<string, string>* WAConnection::parseCategories(ProtocolTreeNode* dirtyN
return categories;
}
-void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messageNode) throw (WAException){
+void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messageNode) throw (WAException)
+{
std::string* id = messageNode->getAttributeValue("id");
std::string* attribute_t = messageNode->getAttributeValue("t");
std::string* from = messageNode->getAttributeValue("from");
@@ -1071,7 +865,8 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
this->event_handler->onMessageError(message, errorCode);
delete errorNodes;
delete message;
- } else if (typeAttribute->compare("subject") == 0) {
+ }
+ else if (typeAttribute->compare("subject") == 0) {
bool receiptRequested = false;
std::vector<ProtocolTreeNode*>* requestNodes = messageNode->getAllChildren("request");
for (size_t i = 0; i < requestNodes->size(); i++) {
@@ -1082,28 +877,31 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
delete requestNodes;
ProtocolTreeNode* bodyNode = messageNode->getChild("body");
- std::string* newSubject = bodyNode == NULL? NULL : bodyNode->getDataAsString();
+ std::string* newSubject = bodyNode == NULL ? NULL : bodyNode->getDataAsString();
if ((newSubject != NULL) && (this->group_event_handler != NULL))
this->group_event_handler->onGroupNewSubject(*from, author, *newSubject, atoi(attribute_t->c_str()));
if (newSubject != NULL)
delete newSubject;
if (receiptRequested)
sendSubjectReceived(*from, *id);
- } else if (typeAttribute->compare("chat") == 0) {
+ }
+ else if (typeAttribute->compare("chat") == 0) {
FMessage* fmessage = new FMessage();
fmessage->wants_receipt = false;
bool duplicate = false;
std::vector<ProtocolTreeNode*> myVector(0);
- std::vector<ProtocolTreeNode*>* messageChildren = messageNode->children == NULL? &myVector: messageNode->getAllChildren();
+ std::vector<ProtocolTreeNode*>* messageChildren = messageNode->children == NULL ? &myVector : messageNode->getAllChildren();
for (size_t i = 0; i < messageChildren->size(); i++) {
ProtocolTreeNode* childNode = (*messageChildren)[i];
if (ProtocolTreeNode::tagEquals(childNode, "composing")) {
if (this->event_handler != NULL)
this->event_handler->onIsTyping(*from, true);
- } else if (ProtocolTreeNode::tagEquals(childNode, "paused")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(childNode, "paused")) {
if (this->event_handler != NULL)
this->event_handler->onIsTyping(*from, false);
- } else if (ProtocolTreeNode::tagEquals(childNode, "body")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(childNode, "body")) {
std::string* message = childNode->getDataAsString();
Key* key = new Key(*from, false, *id);
fmessage->key = key;
@@ -1112,10 +910,11 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
fmessage->status = FMessage::STATUS_UNSENT;
if (message != NULL)
delete message;
- } else if (ProtocolTreeNode::tagEquals(childNode, "media") && (id != NULL)) {
+ }
+ else if (ProtocolTreeNode::tagEquals(childNode, "media") && (id != NULL)) {
fmessage->media_wa_type = FMessage::getMessage_WA_Type(childNode->getAttributeValue("type"));
- fmessage->media_url = (childNode->getAttributeValue("url") == NULL? "": *childNode->getAttributeValue("url"));
- fmessage->media_name = (childNode->getAttributeValue("file") == NULL? "": *childNode->getAttributeValue("file"));
+ fmessage->media_url = (childNode->getAttributeValue("url") == NULL ? "" : *childNode->getAttributeValue("url"));
+ fmessage->media_name = (childNode->getAttributeValue("file") == NULL ? "" : *childNode->getAttributeValue("file"));
if (childNode->getAttributeValue("size") != NULL)
fmessage->media_size = Utilities::parseLongLong(*childNode->getAttributeValue("size"));
@@ -1142,22 +941,24 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
if (fmessage->media_wa_type == FMessage::WA_TYPE_CONTACT) {
ProtocolTreeNode* contactChildNode = childNode->getChild(0);
if (contactChildNode != NULL) {
- fmessage->media_name = (contactChildNode->getAttributeValue("name") == NULL? "": *contactChildNode->getAttributeValue("name"));
+ fmessage->media_name = (contactChildNode->getAttributeValue("name") == NULL ? "" : *contactChildNode->getAttributeValue("name"));
std::string* data = contactChildNode->getDataAsString();
- fmessage->data = (data == NULL? "": *data);
+ fmessage->data = (data == NULL ? "" : *data);
if (data != NULL)
delete data;
}
- } else {
+ }
+ else {
std::string* encoding = childNode->getAttributeValue("encoding");
std::string* data;
if ((encoding == NULL) || ((encoding != NULL) && (encoding->compare("text") == 0))) {
data = childNode->getDataAsString();
- } else {
- _LOGDATA("Media data encoding type '%s'", (encoding == NULL? "text":encoding->c_str()));
- data = (childNode->data == NULL? NULL : new std::string(base64_encode(childNode->data->data(), childNode->data->size())));
}
- fmessage->data = (data == NULL? "": *data);
+ else {
+ _LOGDATA("Media data encoding type '%s'", (encoding == NULL ? "text" : encoding->c_str()));
+ data = (childNode->data == NULL ? NULL : new std::string(base64_encode(childNode->data->data(), childNode->data->size())));
+ }
+ fmessage->data = (data == NULL ? "" : *data);
if (data != NULL)
delete data;
}
@@ -1165,12 +966,15 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
Key* key = new Key(*from, false, *id);
fmessage->key = key;
fmessage->remote_resource = author;
- } else if (!ProtocolTreeNode::tagEquals(childNode, "active")) {
+ }
+ else if (!ProtocolTreeNode::tagEquals(childNode, "active")) {
if (ProtocolTreeNode::tagEquals(childNode, "request")) {
fmessage->wants_receipt = true;
- } else if (ProtocolTreeNode::tagEquals(childNode, "notify")) {
- fmessage->notifyname = (childNode->getAttributeValue("name") == NULL)? "": *childNode->getAttributeValue("name");
- } else if (ProtocolTreeNode::tagEquals(childNode, "x")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(childNode, "notify")) {
+ fmessage->notifyname = (childNode->getAttributeValue("name") == NULL) ? "" : *childNode->getAttributeValue("name");
+ }
+ else if (ProtocolTreeNode::tagEquals(childNode, "x")) {
std::string* xmlns = childNode->getAttributeValue("xmlns");
if ((xmlns != NULL) && (xmlns->compare("jabber:x:event") == 0) && (id != NULL)) {
Key* key = new Key(*from, true, *id);
@@ -1180,17 +984,8 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
this->event_handler->onMessageStatusUpdate(message);
delete message;
}
-// else if ((xmlns != NULL) && xmlns->compare("jabber:x:delay") == 0) {
-// std::string* stamp_str = childNode->getAttributeValue("stamp");
-// if (stamp_str != NULL) {
-// time_t stamp = Utilities::parseBBDate(*stamp_str);
-// if (stamp != 0) {
-// fmessage->timestamp = (long long) stamp;
-// fmessage->offline = true;
-// }
-// }
-// }
- } else if (ProtocolTreeNode::tagEquals(childNode, "received")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(childNode, "received")) {
Key* key = new Key(*from, true, *id);
FMessage* message = new FMessage(key);
message->status = FMessage::STATUS_RECEIVED_BY_TARGET;
@@ -1204,7 +999,8 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
else if (receipt_type->compare("visible") == 0)
sendVisibleReceiptAck(*from, *id);
}
- } else if (ProtocolTreeNode::tagEquals(childNode, "offline")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(childNode, "offline")) {
if (attribute_t != NULL) {
fmessage->timestamp = atoi(attribute_t->c_str());
}
@@ -1222,33 +1018,36 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
this->event_handler->onMessageForMe(fmessage, duplicate);
delete fmessage;
- } else if (typeAttribute->compare("notification") == 0) {
+ }
+ else if (typeAttribute->compare("notification") == 0) {
_LOGDATA("Notification node %s", messageNode->toString().c_str());
bool flag = false;
std::vector<ProtocolTreeNode*> myVector(0);
- std::vector<ProtocolTreeNode*>* children = messageNode->children == NULL? &myVector: messageNode->getAllChildren();
+ std::vector<ProtocolTreeNode*>* children = messageNode->children == NULL ? &myVector : messageNode->getAllChildren();
for (size_t i = 0; i < children->size(); i++) {
ProtocolTreeNode* child = (*children)[i];
if (ProtocolTreeNode::tagEquals(child, "notification")) {
std::string* type = child->getAttributeValue("type");
if ((type != NULL) && (type->compare("picture") == 0) && (this->event_handler != NULL)) {
std::vector<ProtocolTreeNode*> myVector2(0);
- std::vector<ProtocolTreeNode*>* children2 = child->children == NULL? &myVector2: child->getAllChildren();
+ std::vector<ProtocolTreeNode*>* children2 = child->children == NULL ? &myVector2 : child->getAllChildren();
for (unsigned j = 0; j < children2->size(); j++) {
ProtocolTreeNode* child2 = (*children2)[j];
if (ProtocolTreeNode::tagEquals(child2, "set")) {
std::string* id = child2->getAttributeValue("id");
std::string* author = child2->getAttributeValue("author");
if (id != NULL) {
- this->event_handler->onPictureChanged(*from, ((author == NULL)?"":*author), true);
+ this->event_handler->onPictureChanged(*from, ((author == NULL) ? "" : *author), true);
}
- } else if (ProtocolTreeNode::tagEquals(child2, "delete")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(child2, "delete")) {
std::string* author = child2->getAttributeValue("author");
- this->event_handler->onPictureChanged(*from, ((author == NULL)?"":*author), false);
+ this->event_handler->onPictureChanged(*from, ((author == NULL) ? "" : *author), false);
}
}
}
- } else if (ProtocolTreeNode::tagEquals(child, "request")) {
+ }
+ else if (ProtocolTreeNode::tagEquals(child, "request")) {
flag = true;
}
}
@@ -1259,11 +1058,13 @@ void WAConnection::parseMessageInitialTagAlreadyChecked(ProtocolTreeNode* messag
}
}
-bool WAConnection::supportsReceiptAcks() {
+bool WAConnection::supportsReceiptAcks()
+{
return (this->login != NULL) && (this->login->supports_receipt_acks);
}
-void WAConnection::sendNotificationReceived(const std::string& jid, const std::string& id) throw(WAException) {
+void WAConnection::sendNotificationReceived(const std::string& jid, const std::string& id) throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["xmlns"] = "urn:xmpp:receipts";
ProtocolTreeNode* child = new ProtocolTreeNode("received", attribs1);
@@ -1278,7 +1079,8 @@ void WAConnection::sendNotificationReceived(const std::string& jid, const std::s
delete node;
}
-void WAConnection::sendClose() throw(WAException) {
+void WAConnection::sendClose() throw(WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["type"] = "unavailable";
ProtocolTreeNode* presenceNode = new ProtocolTreeNode("presence", attribs1);
@@ -1287,7 +1089,8 @@ void WAConnection::sendClose() throw(WAException) {
this->out->streamEnd();
}
-void WAConnection::sendGetPrivacyList() throw (WAException) {
+void WAConnection::sendGetPrivacyList() throw (WAException)
+{
std::string id = makeId("privacylist_");
this->pending_server_requests[id] = new IqResultPrivayListHandler(this);
@@ -1308,7 +1111,8 @@ void WAConnection::sendGetPrivacyList() throw (WAException) {
delete iqNode;
}
-void WAConnection::sendGetServerProperties() throw (WAException) {
+void WAConnection::sendGetServerProperties() throw (WAException)
+{
std::string id = makeId("get_server_properties_");
this->pending_server_requests[id] = new IqResultServerPropertiesHandler(this);
@@ -1327,7 +1131,8 @@ void WAConnection::sendGetServerProperties() throw (WAException) {
delete iqNode;
}
-void WAConnection::sendGetGroups() throw (WAException) {
+void WAConnection::sendGetGroups() throw (WAException)
+{
this->mutex->lock();
std::string id = makeId("get_groups_");
this->pending_server_requests[id] = new IqResultGetGroupsHandler(this, "participating");
@@ -1336,7 +1141,8 @@ void WAConnection::sendGetGroups() throw (WAException) {
this->mutex->unlock();
}
-void WAConnection::sendGetOwningGroups() throw (WAException) {
+void WAConnection::sendGetOwningGroups() throw (WAException)
+{
this->mutex->lock();
std::string id = makeId("get_owning_groups_");
this->pending_server_requests[id] = new IqResultGetGroupsHandler(this, "owning");
@@ -1345,7 +1151,8 @@ void WAConnection::sendGetOwningGroups() throw (WAException) {
this->mutex->unlock();
}
-void WAConnection::sendGetGroups(const std::string& id, const std::string& type) throw (WAException) {
+void WAConnection::sendGetGroups(const std::string& id, const std::string& type) throw (WAException)
+{
std::map<string, string>* attribs1 = new std::map<string, string>();
(*attribs1)["xmlns"] = "w:g";
(*attribs1)["type"] = type;
@@ -1361,7 +1168,8 @@ void WAConnection::sendGetGroups(const std::string& id, const std::string& type)
delete iqNode;
}
-void WAConnection::readGroupList(ProtocolTreeNode* node, std::vector<std::string>& groups) throw (WAException) {
+void WAConnection::readGroupList(ProtocolTreeNode* node, std::vector<std::string>& groups) throw (WAException)
+{
std::vector<ProtocolTreeNode*>* nodes = node->getAllChildren("group");
for (size_t i = 0; i < nodes->size(); i++) {
ProtocolTreeNode* groupNode = (*nodes)[i];
@@ -1379,12 +1187,14 @@ void WAConnection::readGroupList(ProtocolTreeNode* node, std::vector<std::string
delete nodes;
}
-std::string WAConnection::gidToGjid(const std::string& gid) {
+std::string WAConnection::gidToGjid(const std::string& gid)
+{
return gid + "@g.us";
}
-void WAConnection::sendQueryLastOnline(const std::string& jid) throw (WAException) {
+void WAConnection::sendQueryLastOnline(const std::string& jid) throw (WAException)
+{
std::string id = makeId("last_");
this->pending_server_requests[id] = new IqResultQueryLastOnlineHandler(this);
@@ -1402,7 +1212,8 @@ void WAConnection::sendQueryLastOnline(const std::string& jid) throw (WAExceptio
delete iqNode;
}
-void WAConnection::sendGetGroupInfo(const std::string& gjid) throw (WAException) {
+void WAConnection::sendGetGroupInfo(const std::string& gjid) throw (WAException)
+{
std::string id = makeId("get_g_info_");
this->pending_server_requests[id] = new IqResultGetGroupInfoHandler(this);
@@ -1420,7 +1231,8 @@ void WAConnection::sendGetGroupInfo(const std::string& gjid) throw (WAException)
delete iqNode;
}
-void WAConnection::sendGetParticipants(const std::string& gjid) throw (WAException) {
+void WAConnection::sendGetParticipants(const std::string& gjid) throw (WAException)
+{
std::string id = makeId("get_participants_");
this->pending_server_requests[id] = new IqResultGetGroupParticipantsHandler(this);
@@ -1438,7 +1250,8 @@ void WAConnection::sendGetParticipants(const std::string& gjid) throw (WAExcepti
delete iqNode;
}
-void WAConnection::readAttributeList(ProtocolTreeNode* node, std::vector<std::string>& vector, const std::string& tag, const std::string& attribute) throw (WAException) {
+void WAConnection::readAttributeList(ProtocolTreeNode* node, std::vector<std::string>& vector, const std::string& tag, const std::string& attribute) throw (WAException)
+{
std::vector<ProtocolTreeNode*>* nodes = node->getAllChildren(tag);
for (size_t i = 0; i < nodes->size(); i++) {
ProtocolTreeNode* tagNode = (*nodes)[i];
@@ -1448,7 +1261,8 @@ void WAConnection::readAttributeList(ProtocolTreeNode* node, std::vector<std::st
delete nodes;
}
-void WAConnection::sendCreateGroupChat(const std::string& subject) throw (WAException){
+void WAConnection::sendCreateGroupChat(const std::string& subject) throw (WAException)
+{
_LOGDATA("sending create group: %s", subject.c_str());
std::string id = makeId("create_group_");
this->pending_server_requests[id] = new IqResultCreateGroupChatHandler(this);
@@ -1469,7 +1283,8 @@ void WAConnection::sendCreateGroupChat(const std::string& subject) throw (WAExce
delete iqNode;
}
-void WAConnection::sendEndGroupChat(const std::string& gjid) throw (WAException){
+void WAConnection::sendEndGroupChat(const std::string& gjid) throw (WAException)
+{
std::string id = makeId("remove_group_");
std::map<string, string>* attribs1 = new std::map<string, string>();
@@ -1480,14 +1295,15 @@ void WAConnection::sendEndGroupChat(const std::string& gjid) throw (WAException)
std::map<string, string>* attribs2 = new std::map<string, string>();
(*attribs2)["id"] = id;
(*attribs2)["type"] = "set";
- (*attribs2)["to"] = gjid ;
+ (*attribs2)["to"] = gjid;
ProtocolTreeNode* iqNode = new ProtocolTreeNode("iq", attribs2, groupNode);
this->out->write(iqNode);
delete iqNode;
}
-void WAConnection::sendClearDirty(const std::string& category) throw (WAException) {
+void WAConnection::sendClearDirty(const std::string& category) throw (WAException)
+{
std::string id = makeId("clean_dirty_");
this->pending_server_requests[id] = new IqResultClearDirtyHandler(this);
@@ -1509,7 +1325,8 @@ void WAConnection::sendClearDirty(const std::string& category) throw (WAExceptio
delete iqNode;
}
-void WAConnection::sendLeaveGroup(const std::string& gjid) throw (WAException) {
+void WAConnection::sendLeaveGroup(const std::string& gjid) throw (WAException)
+{
std::string id = makeId("leave_group_");
std::map<string, string>* attribs1 = new std::map<string, string>();
@@ -1530,17 +1347,20 @@ void WAConnection::sendLeaveGroup(const std::string& gjid) throw (WAException) {
delete iqNode;
}
-void WAConnection::sendAddParticipants(const std::string& gjid, const std::vector<std::string>& participants) throw (WAException) {
+void WAConnection::sendAddParticipants(const std::string& gjid, const std::vector<std::string>& participants) throw (WAException)
+{
std::string id = makeId("add_group_participants_");
this->sendVerbParticipants(gjid, participants, id, "add");
}
-void WAConnection::sendRemoveParticipants(const std::string& gjid, const std::vector<std::string>& participants) throw (WAException) {
+void WAConnection::sendRemoveParticipants(const std::string& gjid, const std::vector<std::string>& participants) throw (WAException)
+{
std::string id = makeId("remove_group_participants_");
this->sendVerbParticipants(gjid, participants, id, "remove");
}
-void WAConnection::sendVerbParticipants(const std::string& gjid, const std::vector<std::string>& participants, const std::string& id, const std::string& inner_tag) throw (WAException) {
+void WAConnection::sendVerbParticipants(const std::string& gjid, const std::vector<std::string>& participants, const std::string& id, const std::string& inner_tag) throw (WAException)
+{
size_t size = participants.size();
std::vector<ProtocolTreeNode*>* children = new std::vector<ProtocolTreeNode*>(size);
for (size_t i = 0; i < size; i++) {
@@ -1563,7 +1383,8 @@ void WAConnection::sendVerbParticipants(const std::string& gjid, const std::vect
delete iqNode;
}
-void WAConnection::sendSetNewSubject(const std::string& gjid, const std::string& subject) throw (WAException) {
+void WAConnection::sendSetNewSubject(const std::string& gjid, const std::string& subject) throw (WAException)
+{
std::string id = this->makeId("set_group_subject_");
std::map<string, string>* attribs1 = new std::map<string, string>();
@@ -1581,7 +1402,8 @@ void WAConnection::sendSetNewSubject(const std::string& gjid, const std::string&
delete iqNode;
}
-std::string WAConnection::removeResourceFromJid(const std::string& jid) {
+std::string WAConnection::removeResourceFromJid(const std::string& jid)
+{
size_t slashidx = jid.find('/');
if (slashidx == std::string::npos)
return jid;
@@ -1589,7 +1411,8 @@ std::string WAConnection::removeResourceFromJid(const std::string& jid) {
return jid.substr(0, slashidx + 1);
}
-void WAConnection::sendStatusUpdate(std::string& status) throw (WAException) {
+void WAConnection::sendStatusUpdate(std::string& status) throw (WAException)
+{
std::string id = this->makeId(Utilities::intToStr((int)time(NULL)));
FMessage* message = new FMessage(new Key("s.us", true, id));
ProtocolTreeNode* body = new ProtocolTreeNode("body", NULL, new std::vector<unsigned char>(status.begin(), status.end()), NULL);
@@ -1599,9 +1422,8 @@ void WAConnection::sendStatusUpdate(std::string& status) throw (WAException) {
delete message;
}
-
-
-void WAConnection::sendSetPicture(const std::string& jid, std::vector<unsigned char>* data) throw (WAException) {
+void WAConnection::sendSetPicture(const std::string& jid, std::vector<unsigned char>* data) throw (WAException)
+{
std::string id = this->makeId("set_photo_");
this->pending_server_requests[id] = new IqResultSetPhotoHandler(this, jid);
@@ -1620,7 +1442,8 @@ void WAConnection::sendSetPicture(const std::string& jid, std::vector<unsigned c
delete iqNode;
}
-void WAConnection::sendGetPicture(const std::string& jid, const std::string& type, const std::string& oldId, const std::string& newId) throw (WAException) {
+void WAConnection::sendGetPicture(const std::string& jid, const std::string& type, const std::string& oldId, const std::string& newId) throw (WAException)
+{
std::string id = makeId("get_picture_");
this->pending_server_requests[id] = new IqResultGetPhotoHandler(this, jid, oldId, newId);
@@ -1639,7 +1462,8 @@ void WAConnection::sendGetPicture(const std::string& jid, const std::string& typ
delete iqNode;
}
-void WAConnection::sendGetPictureIds(const std::vector<std::string>& jids) throw (WAException) {
+void WAConnection::sendGetPictureIds(const std::vector<std::string>& jids) throw (WAException)
+{
std::string id = makeId("get_picture_ids_");
this->pending_server_requests[id] = new IqResultGetPictureIdsHandler(this);
@@ -1664,7 +1488,8 @@ void WAConnection::sendGetPictureIds(const std::vector<std::string>& jids) throw
delete iqNode;
}
-void WAConnection::sendDeleteAccount() throw (WAException) {
+void WAConnection::sendDeleteAccount() throw (WAException)
+{
std::string id = makeId("del_acct_");
this->pending_server_requests[id] = new IqResultSendDeleteAccount(this);