From c86968548844a7de8c4ab6d72d2a80cd43d404dd Mon Sep 17 00:00:00 2001 From: Joel Leclerc Date: Fri, 4 May 2012 12:24:56 -0600 Subject: [PATCH] Added compression of media --- src/client.cpp | 12 ++++++++++-- src/server.cpp | 24 ++++++++++++++++-------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 0c88699..8981f44 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1463,7 +1463,11 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) else if(command == TOCLIENT_ANNOUNCE_MEDIA) { std::string datastring((char*)&data[2], datasize-2); - std::istringstream is(datastring, std::ios_base::binary); + std::istringstream is2(datastring, std::ios_base::binary); + std::istringstream tmp_is(deSerializeLongString(is2), std::ios::binary); + std::ostringstream tmp_os; + decompressZlib(tmp_is, tmp_os); + std::istringstream is(tmp_os.str()); // Mesh update thread must be stopped while // updating content definitions @@ -1546,7 +1550,11 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) else if(command == TOCLIENT_MEDIA) { std::string datastring((char*)&data[2], datasize-2); - std::istringstream is(datastring, std::ios_base::binary); + std::istringstream is2(datastring, std::ios_base::binary); + std::istringstream tmp_is(deSerializeLongString(is2), std::ios::binary); + std::ostringstream tmp_os; + decompressZlib(tmp_is, tmp_os); + std::istringstream is(tmp_os.str()); // Mesh update thread must be stopped while // updating content definitions diff --git a/src/server.cpp b/src/server.cpp index 9187021..d1a7dc3 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -4205,6 +4205,7 @@ void Server::sendMediaAnnouncement(u16 peer_id) // Make packet std::ostringstream os(std::ios_base::binary); + std::ostringstream tmp_os(std::ios_base::binary); /* u16 command @@ -4218,16 +4219,19 @@ void Server::sendMediaAnnouncement(u16 peer_id) */ writeU16(os, TOCLIENT_ANNOUNCE_MEDIA); - writeU16(os, file_announcements.size()); + writeU16(tmp_os, file_announcements.size()); for(core::list::Iterator j = file_announcements.begin(); j != file_announcements.end(); j++){ - os<name); - os<sha1_digest); + tmp_os<name); + tmp_os<sha1_digest); } // Make data buffer + std::ostringstream tmp_os2(std::ios::binary); + compressZlib(tmp_os.str(), tmp_os2); + os< data((u8*)s.c_str(), s.size()); @@ -4327,6 +4331,7 @@ void Server::sendRequestedMedia(u16 peer_id, for(u32 i=0; i::Iterator j = file_bunches[i].begin(); j != file_bunches[i].end(); j++){ - os<name); - os<data); + tmp_os<name); + tmp_os<data); } // Make data buffer + std::ostringstream tmp_os2(std::ios::binary); + compressZlib(tmp_os.str(), tmp_os2); + os<