summaryrefslogtreecommitdiff
path: root/src/syncTcpConnection.cpp
diff options
context:
space:
mode:
authorOthmar Gsenger <otti@anytun.org>2008-10-19 20:23:49 +0000
committerOthmar Gsenger <otti@anytun.org>2008-10-19 20:23:49 +0000
commit3c66fe726ae8044b2d3ce90115217a6240473598 (patch)
treed0d2f3575d23c8262c07f35343177fd4706d95c8 /src/syncTcpConnection.cpp
parentmove to asio socket libary for sync (diff)
now with files
Diffstat (limited to 'src/syncTcpConnection.cpp')
-rw-r--r--src/syncTcpConnection.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/syncTcpConnection.cpp b/src/syncTcpConnection.cpp
new file mode 100644
index 0000000..185781f
--- /dev/null
+++ b/src/syncTcpConnection.cpp
@@ -0,0 +1,80 @@
+#include "syncTcpConnection.h"
+#include <boost/bind.hpp>
+#include <asio.hpp>
+
+#include <sstream>
+#include <iostream>
+#include <string>
+#include "routingTable.h"
+#include "rtpSessionTable.h"
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+
+#include "syncCommand.h"
+#include "buffer.h"
+
+ asio::ip::tcp::socket& SyncTcpConnection::socket()
+ {
+ return socket_;
+ }
+
+void SyncTcpConnection::start()
+{
+ ConnectionList & cl_(gConnectionList);
+ ConnectionMap::iterator cit = cl_.getBeginUnlocked();
+ for (;cit!=cl_.getEndUnlocked();++cit)
+ {
+ std::ostringstream sout;
+ boost::archive::text_oarchive oa(sout);
+ const SyncCommand scom(cl_,cit->first);
+ oa << scom;
+ std::stringstream lengthout;
+ lengthout << std::setw(5) << std::setfill('0') << sout.str().size()<< ' ';
+ Send(lengthout.str());
+ Send(sout.str());
+ }
+ //TODO Locking here
+ RoutingMap::iterator it = gRoutingTable.getBeginUnlocked();
+ for (;it!=gRoutingTable.getEndUnlocked();++it)
+ {
+ NetworkPrefix tmp(it->first);
+ std::ostringstream sout;
+ boost::archive::text_oarchive oa(sout);
+ const SyncCommand scom(tmp);
+ oa << scom;
+ std::stringstream lengthout;
+ lengthout << std::setw(5) << std::setfill('0') << sout.str().size()<< ' ';
+ Send(lengthout.str());
+ Send(sout.str());
+ }
+ //TODO Locking here
+ RtpSessionMap::iterator rit = gRtpSessionTable.getBeginUnlocked();
+ for (;rit!=gRtpSessionTable.getEndUnlocked();++rit)
+ {
+ std::ostringstream sout;
+ boost::archive::text_oarchive oa(sout);
+ const SyncCommand scom(rit->first);
+ oa << scom;
+ std::stringstream lengthout;
+ lengthout << std::setw(5) << std::setfill('0') << sout.str().size()<< ' ';
+ Send(lengthout.str());
+ Send(sout.str());
+ }
+}
+void SyncTcpConnection::Send(std::string message)
+{
+ asio::async_write(socket_, asio::buffer(message),
+ boost::bind(&SyncTcpConnection::handle_write, shared_from_this(),
+ asio::placeholders::error,
+ asio::placeholders::bytes_transferred));
+}
+SyncTcpConnection::SyncTcpConnection(asio::io_service& io_service)
+ : socket_(io_service)
+{
+}
+
+void SyncTcpConnection::handle_write(const asio::error_code& /*error*/,
+ size_t /*bytes_transferred*/)
+{
+}