Forward FT data from backend to spectrum2 process
This commit is contained in:
parent
b3725b47c4
commit
715efadbdf
5 changed files with 55 additions and 4 deletions
|
@ -820,11 +820,24 @@ class SpectrumNetworkPlugin : public NetworkPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
void readyForData() {
|
||||
if (m_waitingXfers.empty())
|
||||
return;
|
||||
std::vector<PurpleXfer *> tmp;
|
||||
tmp.swap(m_waitingXfers);
|
||||
|
||||
LOG4CXX_INFO(logger, "readyForData " << tmp.size());
|
||||
BOOST_FOREACH(PurpleXfer *xfer, tmp) {
|
||||
purple_xfer_ui_ready(xfer);
|
||||
}
|
||||
}
|
||||
|
||||
std::map<std::string, PurpleAccount *> m_sessions;
|
||||
std::map<PurpleAccount *, std::string> m_accounts;
|
||||
std::map<std::string, unsigned int> m_vcards;
|
||||
std::map<std::string, authRequest *> m_authRequests;
|
||||
std::map<std::string, PurpleXfer *> m_xfers;
|
||||
std::vector<PurpleXfer *> m_waitingXfers;
|
||||
Config *config;
|
||||
|
||||
};
|
||||
|
@ -1345,10 +1358,11 @@ static void XferSendComplete(PurpleXfer *xfer) {
|
|||
}
|
||||
|
||||
static gssize XferWrite(PurpleXfer *xfer, const guchar *buffer, gssize size) {
|
||||
// FiletransferRepeater *repeater = (FiletransferRepeater *) xfer->ui_data;
|
||||
// return repeater->handleLibpurpleData(buffer, size);
|
||||
std::cout << "DATA " << std::string((const char *) buffer, (size_t) size) << "\n";
|
||||
purple_xfer_ui_ready(xfer);
|
||||
LOG4CXX_INFO(logger, "before_xfer_write " << size);
|
||||
std::string data((const char *) buffer, (size_t) size);
|
||||
np->m_waitingXfers.push_back(xfer);
|
||||
np->handleFTData((unsigned long) xfer->ui_data, data);
|
||||
LOG4CXX_INFO(logger, "xfer_write " << size);
|
||||
return size;
|
||||
}
|
||||
|
||||
|
@ -1559,6 +1573,7 @@ static void spectrum_sigchld_handler(int sig)
|
|||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
Swift::logging = true;
|
||||
GError *error = NULL;
|
||||
GOptionContext *context;
|
||||
context = g_option_context_new("config_file_name or profile name");
|
||||
|
|
|
@ -50,6 +50,8 @@ class NetworkPlugin {
|
|||
|
||||
/// Destructor.
|
||||
virtual ~NetworkPlugin();
|
||||
|
||||
virtual void readyForData() {}
|
||||
|
||||
/// Call this function when legacy network buddy changed.
|
||||
/// \param user XMPP JID of user for which this event occurs. You can get it from NetworkPlugin::handleLoginRequest(). (eg. "user%gmail.com@xmpp.domain.tld")
|
||||
|
@ -144,6 +146,8 @@ class NetworkPlugin {
|
|||
|
||||
void handleFTStart(const std::string &user, const std::string &buddyName, const std::string fileName, unsigned long size);
|
||||
|
||||
void handleFTData(unsigned long ftID, const std::string &data);
|
||||
|
||||
/// Called when XMPP user wants to connect legacy network.
|
||||
/// You should connect him to legacy network and call handleConnected or handleDisconnected function later.
|
||||
/// \param user XMPP JID of user for which this event occurs.
|
||||
|
|
|
@ -90,6 +90,7 @@ class NetworkPluginServer {
|
|||
void handleAttentionPayload(const std::string &payload);
|
||||
void handleStatsPayload(Backend *c, const std::string &payload);
|
||||
void handleFTStartPayload(const std::string &payload);
|
||||
void handleFTDataPayload(const std::string &payload);
|
||||
|
||||
void handleUserCreated(User *user);
|
||||
void handleRoomJoined(User *user, const std::string &room, const std::string &nickname, const std::string &password);
|
||||
|
|
|
@ -52,6 +52,7 @@ NetworkPlugin::NetworkPlugin(Swift::EventLoop *loop, const std::string &host, in
|
|||
m_loop = loop;
|
||||
m_conn = m_factories->getConnectionFactory()->createConnection();
|
||||
m_conn->onDataRead.connect(boost::bind(&NetworkPlugin::handleDataRead, this, _1));
|
||||
m_conn->onDataWritten.connect(boost::bind(&NetworkPlugin::readyForData, this));
|
||||
m_conn->onConnectFinished.connect(boost::bind(&NetworkPlugin::_handleConnected, this, _1));
|
||||
m_conn->onDisconnected.connect(boost::bind(&NetworkPlugin::handleDisconnected, this));
|
||||
|
||||
|
@ -278,6 +279,19 @@ void NetworkPlugin::handleFTStart(const std::string &user, const std::string &bu
|
|||
send(message);
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleFTData(unsigned long ftID, const std::string &data) {
|
||||
pbnetwork::FileTransferData d;
|
||||
d.set_ftid(ftID);
|
||||
d.set_data(data);
|
||||
|
||||
std::string message;
|
||||
d.SerializeToString(&message);
|
||||
|
||||
WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_FT_DATA);
|
||||
|
||||
send(message);
|
||||
}
|
||||
|
||||
void NetworkPlugin::_handleConnected(bool error) {
|
||||
if (error) {
|
||||
// LOG4CXX_ERROR(logger, "Connecting error. Exiting");
|
||||
|
|
|
@ -587,6 +587,20 @@ void NetworkPluginServer::handleFTStartPayload(const std::string &data) {
|
|||
handleFTAccepted(user, payload.buddyname(), payload.filename(), payload.size(), 255);
|
||||
}
|
||||
|
||||
void NetworkPluginServer::handleFTDataPayload(const std::string &data) {
|
||||
pbnetwork::FileTransferData payload;
|
||||
if (payload.ParseFromString(data) == false) {
|
||||
// TODO: ERROR
|
||||
return;
|
||||
}
|
||||
|
||||
// User *user = m_userManager->getUser(payload.username());
|
||||
// if (!user)
|
||||
// return;
|
||||
|
||||
LOG4CXX_INFO(logger, "handleFTDataPayload size=" << payload.data().size());
|
||||
}
|
||||
|
||||
void NetworkPluginServer::handleDataRead(Backend *c, const Swift::SafeByteArray &data) {
|
||||
// Append data to buffer
|
||||
c->data.insert(c->data.end(), data.begin(), data.end());
|
||||
|
@ -669,6 +683,9 @@ void NetworkPluginServer::handleDataRead(Backend *c, const Swift::SafeByteArray
|
|||
case pbnetwork::WrapperMessage_Type_TYPE_FT_START:
|
||||
handleFTStartPayload(wrapper.payload());
|
||||
break;
|
||||
case pbnetwork::WrapperMessage_Type_TYPE_FT_DATA:
|
||||
handleFTDataPayload(wrapper.payload());
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue