From 10eea7ab77a594b99482ac350a6b7f5d687e75f8 2017-12-26 21:38:25 From: dexterlb Date: 2017-12-26 21:38:25 Subject: [PATCH] wrap incoming images in x:oob tag --- diff --git a/include/transport/NetworkPluginServer.h b/include/transport/NetworkPluginServer.h index 50b526eb07667cc37621aee7fa09fbdd2792e744..f387c4d9955525541de251dbb0b6d40179c8feb1 100644 --- a/include/transport/NetworkPluginServer.h +++ b/include/transport/NetworkPluginServer.h @@ -42,6 +42,7 @@ #include "Swiften/SwiftenCompat.h" #include #include +#include "transport/protocol.pb.h" #define HAVE_SWIFTEN_3 (SWIFTEN_VERSION >= 0x030000) #define NETWORK_PLUGIN_API_VERSION (1) @@ -178,6 +179,8 @@ class NetworkPluginServer : Swift::XMPPParserClient { #endif void handleStreamEnd() {} + void wrapIncomingImage(Swift::Message* msg, const pbnetwork::ConversationMessage& payload); + UserManager *m_userManager; VCardResponder *m_vcardResponder; RosterResponder *m_rosterResponder; diff --git a/libtransport/NetworkPluginServer.cpp b/libtransport/NetworkPluginServer.cpp index a4487af04173b3baad0bcb3147dc91c174dd10ac..10c2d1879b4c5643d4c1b0a65820aba343c24184 100644 --- a/libtransport/NetworkPluginServer.cpp +++ b/libtransport/NetworkPluginServer.cpp @@ -46,8 +46,10 @@ #include "Swiften/Elements/DeliveryReceiptRequest.h" #include "Swiften/Elements/InvisiblePayload.h" #include "Swiften/Elements/SpectrumErrorPayload.h" +#include "Swiften/Elements/RawXMLPayload.h" #include "boost/date_time/posix_time/posix_time.hpp" +#include #include "transport/utf8.h" @@ -686,6 +688,8 @@ void NetworkPluginServer::handleConvMessagePayload(const std::string &data, bool msg->setBody(payload.message()); } + wrapIncomingImage(msg.get(), payload); + if (payload.headline()) { msg->setType(Swift::Message::Headline); } @@ -1789,6 +1793,32 @@ void NetworkPluginServer::handleBuddyRemoved(Buddy *b) { send(c->connection, message); } +void NetworkPluginServer::wrapIncomingImage(Swift::Message* msg, const pbnetwork::ConversationMessage& payload) { + static boost::regex image_expr{""}; + + if (payload.xhtml().find(" + oob_payload(new Swift::RawXMLPayload( + "" + + image_url + + "" + + "" + )); + // todo: add the payload itself as a caption + + msg->addPayload(oob_payload); + msg->setBody(image_url); + } else { + LOG4CXX_WARN(logger, "xhtml seems to contain an image, but doesn't match: " + payload.xhtml()) + } + } +} + void NetworkPluginServer::handleBuddyUpdated(Buddy *b, const Swift::RosterItemPayload &item) { User *user = b->getRosterManager()->getUser();