another sync fix
[anytun.git] / syncClientSocket.cpp
bloba6f03f483982bb6a19524bdf741ea4be6e919b4e
1 #include <sstream>
2 #include <iostream>
3 #include <string>
5 #include <boost/archive/text_oarchive.hpp>
6 #include <boost/archive/text_iarchive.hpp>
9 #include "log.h"
10 //#include "connectionParam.h"
11 #include "Sockets/Utility.h"
12 #include "syncClientSocket.h"
13 #include "buffer.h"
16 SyncClientSocket::SyncClientSocket(ISocketHandler& h,ConnectionList & cl)
17 :TcpSocket(h),cl_(cl),missing_chars(-1)
19 // initial connection timeout setting and number of retries
20 SetConnectTimeout(12);
21 SetConnectionRetry(-1); //infinite reties
23 // Also reconnect broken link
24 SetReconnect(true);
28 bool SyncClientSocket::OnConnectRetry()
30 return true;
34 void SyncClientSocket::OnReconnect()
36 cLog.msg(Log::PRIO_NOTICE) << "reconnected with " << GetRemoteHostname() << std::endl;
37 // ...
38 //Send("Welcome back\r\n");
42 void SyncClientSocket::OnRawData(const char *buf,size_t len)
43 //void SyncClientSocket::OnLine(const std::string& line)
45 for(size_t index=0;index<len;index++)
47 std::cout << buf[index];
48 iss_ << buf[index];
50 while (1)
52 if(missing_chars==-1 && iss_.str().length()>5)
54 char * buffer = new char [missing_chars];
55 iss_.read(buffer,missing_chars);
56 std::stringstream tmp;
57 tmp.write(buffer,missing_chars);
58 tmp>>missing_chars;
59 cLog.msg(Log::PRIO_NOTICE) << "recieved sync inforamtaion from " << GetRemoteHostname() <<" "<<tmp.str()<<"bytes of data"<< std::endl;
60 delete buffer;
61 } else
62 if(missing_chars>0 && missing_chars<=static_cast<int16_t>(iss_.str().length()))
64 char * buffer = new char [missing_chars];
65 iss_.read(buffer,missing_chars);
66 std::stringstream tmp;
67 tmp.write(buffer,missing_chars);
68 cLog.msg(Log::PRIO_NOTICE) << "recieved sync inforamtaion from " << GetRemoteHostname() <<" \""<<tmp.str()<<'"'<< std::endl;
69 boost::archive::text_iarchive ia(tmp);
70 SyncCommand scom(cl_);
71 ia >> scom;
72 missing_chars=-1;
73 delete buffer;
74 } else
75 break;
78 //u_int16_t mux = scom.getMux();
79 //const ConnectionParam & conn = cl_.getConnection(mux)->second;
80 //cLog.msg(Log::PRIO_NOTICE) << "sync connection #"<<mux<<" remote host " << conn.remote_host_ << ":" << conn.remote_port_ << std::endl;
83 //void StatusClientSocket::InitSSLServer()
84 //{
85 // InitializeContext("server.pem", "keypwd", SSLv23_method());
86 //}
89 //void StatusClientSocket::Init()
90 //{
91 // EnableSSL();
92 //}