Changeset - 715efadbdf98
[Not reviewed]
0 5 0
HanzZ - 14 years ago 2011-09-28 19:59:58
hanzz.k@gmail.com
Forward FT data from backend to spectrum2 process
5 files changed with 55 insertions and 4 deletions:
0 comments (0 inline, 0 general)
backends/libpurple/main.cpp
Show inline comments
 
@@ -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");
include/transport/networkplugin.h
Show inline comments
 
@@ -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.
include/transport/networkpluginserver.h
Show inline comments
 
@@ -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);
src/networkplugin.cpp
Show inline comments
 
@@ -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");
src/networkpluginserver.cpp
Show inline comments
 
@@ -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;
 
		}
0 comments (0 inline, 0 general)