bool TCPAccountHandler::send(const Packet* packet, BuddyPtr pBuddy) { UT_DEBUGMSG(("TCPAccountHandler::send(const UT_UTF8String& packet, const Buddy& buddy)\n")); UT_return_val_if_fail(pBuddy, false); TCPBuddyPtr pB = boost::static_pointer_cast<TCPBuddy>(pBuddy); // find the session std::map<TCPBuddyPtr, boost::shared_ptr<Session> >::iterator pos = m_clients.find(pB); if (pos != m_clients.end()) { boost::shared_ptr<Session> session_ptr = pos->second; UT_return_val_if_fail(session_ptr, false); std::string data; _createPacketStream(data, packet); session_ptr->asyncWrite(data.size(), data.c_str()); return true; } else { UT_DEBUGMSG(("TCPAccountHandler::send: buddy %s:%s doesn't exist, hope you were dragging something ;)\n", pB->getAddress().c_str(), pB->getPort().c_str())); } return false; }
bool TCPAccountHandler::send(const Packet* packet) { UT_DEBUGMSG(("TCPAccountHandler::send(const UT_UTF8String& packet)\n")); // don't bother creating a nice buffer if there's noone to send it to if (!m_clients.empty()) { // make to-be-send-stream once std::string data; _createPacketStream(data, packet); // send it to everyone we know! for (std::map<TCPBuddyPtr, boost::shared_ptr<Session> >::iterator it = m_clients.begin(); it != m_clients.end(); it++) { std::pair<TCPBuddyPtr, boost::shared_ptr<Session> > pbs = *it; if (pbs.second) { pbs.second->asyncWrite(data.size(), data.c_str()); } else UT_ASSERT(UT_NOT_REACHED); } } return true; }
bool XMPPAccountHandler::send(const Packet* pPacket) { UT_return_val_if_fail(pPacket, false); const std::string resource = getProperty("resource"); // make to-be-send-stream once std::string data; _createPacketStream(data, pPacket); // XMPP doesn't like binary strings, base64 encode them guint8* base64data = gsf_base64_encode_simple(reinterpret_cast<guint8*>(&data[0]), data.size()); UT_return_val_if_fail(base64data, false); for (std::vector<BuddyPtr>::iterator it = getBuddies().begin(); it != getBuddies().end(); it++) { XMPPBuddyPtr pBuddy = boost::static_pointer_cast<XMPPBuddy>(*it); UT_continue_if_fail(pBuddy); if (!_send(reinterpret_cast<char*>(base64data), pBuddy)) { UT_DEBUGMSG(("Error while sending message to '%s'\n", pBuddy->getAddress().c_str())); } } g_free(base64data); return true; }
bool XMPPAccountHandler::send(const Packet* pPacket, BuddyPtr pBuddy) { UT_return_val_if_fail(pPacket, false); UT_return_val_if_fail(pBuddy, false); // make to-be-send-stream once std::string data; _createPacketStream(data, pPacket); // XMPP doesn't like binary strings, base64 encode them guint8* base64data = gsf_base64_encode_simple(reinterpret_cast<guint8*>(&data[0]), data.size()); UT_return_val_if_fail(base64data, false); /*bool res = */_send(reinterpret_cast<char*>(base64data), boost::static_pointer_cast<XMPPBuddy>(pBuddy)); g_free(base64data); return true; }
bool TelepathyAccountHandler::send(const Packet* pPacket, BuddyPtr pBuddy) { UT_DEBUGMSG(("TelepathyAccountHandler::send(const Packet* pPacket, BuddyPtr pBuddy\n")); UT_return_val_if_fail(pPacket, false); UT_return_val_if_fail(pBuddy, false); DTubeBuddyPtr pDTubeBuddy = boost::static_pointer_cast<DTubeBuddy>(pBuddy); UT_DEBUGMSG(("Sending packet to d-tube buddy on dbus addess: %s\n", pDTubeBuddy->getDBusName().utf8_str())); DBusMessage* pMessage = dbus_message_new_method_call (pDTubeBuddy->getDBusName().utf8_str(), "/org/laptop/DTube/Presence/Buddies", INTERFACE, SEND_ONE_METHOD); UT_return_val_if_fail(pMessage, false); bool dst = dbus_message_set_destination(pMessage, pDTubeBuddy->getDBusName().utf8_str()); UT_return_val_if_fail(dst, false); UT_DEBUGMSG(("Destination (%s) set on message\n", pDTubeBuddy->getDBusName().utf8_str())); // we don't want replies, because they easily run into dbus timeout problems // when sending large packets; this means we should probably use signals though. dbus_message_set_no_reply(pMessage, TRUE); // make to-be-send-stream once std::string data; _createPacketStream( data, pPacket ); const char* packet_contents = &data[0]; dbus_message_append_args(pMessage, DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &packet_contents, data.size(), DBUS_TYPE_INVALID); UT_DEBUGMSG(("Appended packet contents\n")); bool sent = dbus_connection_send(pDTubeBuddy->getChatRoom()->getTube(), pMessage, NULL); UT_ASSERT_HARMLESS(sent); if (sent) dbus_connection_flush(pDTubeBuddy->getChatRoom()->getTube()); dbus_message_unref(pMessage); return sent; }