libt2n: (gerd) add hello messages
[libt2n] / src / connection.cpp
index a1b22a7..9cffb89 100644 (file)
@@ -19,6 +19,9 @@
 
 #include <string>
 #include <sstream>
+#include <iostream>
+
+#include <netinet/in.h>
 
 #include "connection.hxx"
 
@@ -30,13 +33,13 @@ connection::packet_size_indicator connection::bytes_available()
     // max packet size is unsigned int
 
     // no size information -> no packet
-    if (buffer.size() < sizeof(unsigned int))
+    if (buffer.size() < sizeof(packet_size_indicator))
         return 0;
 
-    packet_size_indicator psize=*((packet_size_indicator*)(buffer.data()));
+    packet_size_indicator psize=ntohl(*((packet_size_indicator*)(buffer.data())));
 
     // enough data for one packet in buffer?
-    if (buffer.size() < sizeof(unsigned int)+psize)
+    if (buffer.size() < sizeof(packet_size_indicator)+psize)
         return 0;
 
     // ok, full packet there
@@ -54,8 +57,8 @@ bool connection::get_packet(std::string& data)
 
     if ((psize=bytes_available()))
     {
-        data.assign(buffer,sizeof(unsigned int),psize);
-        buffer.erase(0,sizeof(unsigned int)+psize);
+        data.assign(buffer,sizeof(packet_size_indicator),psize);
+        buffer.erase(0,sizeof(packet_size_indicator)+psize);
         return true;
     }
     else
@@ -66,7 +69,7 @@ bool connection::get_packet(std::string& data)
 void connection::write(const std::string& data)
 {
     // prepend packet size to data
-    packet_size_indicator psize=data.size();
+    packet_size_indicator psize=htonl(data.size());
     std::string send_data(data);
     send_data.insert(0,(char*)&psize,sizeof(packet_size_indicator));