diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 939c67e022a6fb1bf467f6d1485eee1c487a6072..d1b8406e28ccd957ff95b68c24c64e10d0f50d6e 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -572,6 +572,21 @@ void NetworkPluginServer::handleStatsPayload(Backend *c, const std::string &data c->shared = payload.shared(); } +void NetworkPluginServer::handleFTStartPayload(const std::string &data) { + pbnetwork::File payload; + if (payload.ParseFromString(data) == false) { + // TODO: ERROR + return; + } + + User *user = m_userManager->getUser(payload.username()); + if (!user) + return; + + LOG4CXX_INFO(logger, "handleFTStartPayload " << payload.filename()); + handleFTAccepted(user, payload.buddyname(), payload.filename(), payload.size(), 255); +} + void NetworkPluginServer::handleDataRead(Backend *c, const Swift::SafeByteArray &data) { // Append data to buffer c->data.insert(c->data.end(), data.begin(), data.end()); @@ -651,6 +666,9 @@ void NetworkPluginServer::handleDataRead(Backend *c, const Swift::SafeByteArray case pbnetwork::WrapperMessage_Type_TYPE_STATS: handleStatsPayload(c, wrapper.payload()); break; + case pbnetwork::WrapperMessage_Type_TYPE_FT_START: + handleFTStartPayload(wrapper.payload()); + break; default: return; } @@ -1135,6 +1153,46 @@ void NetworkPluginServer::handleVCardRequired(User *user, const std::string &nam send(c->connection, message); } +void NetworkPluginServer::handleFTAccepted(User *user, const std::string &buddyName, const std::string &fileName, unsigned long size, unsigned long ftID) { + pbnetwork::File f; + f.set_username(user->getJID().toBare()); + f.set_buddyname(buddyName); + f.set_filename(fileName); + f.set_size(size); + f.set_ftid(ftID); + + std::string message; + f.SerializeToString(&message); + + WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_FT_START); + + Backend *c = (Backend *) user->getData(); + if (!c) { + return; + } + send(c->connection, message); +} + +void NetworkPluginServer::handleFTRejected(User *user, const std::string &buddyName, const std::string &fileName, unsigned long size, unsigned long ftID) { + pbnetwork::File f; + f.set_username(user->getJID().toBare()); + f.set_buddyname(buddyName); + f.set_filename(fileName); + f.set_size(size); + f.set_ftid(ftID); + + std::string message; + f.SerializeToString(&message); + + WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_FT_FINISH); + + Backend *c = (Backend *) user->getData(); + if (!c) { + return; + } + send(c->connection, message); +} + void NetworkPluginServer::sendPing(Backend *c) { std::string message;