--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2006 by Gerd v. Egidy *
+ * gve@intra2net.com *
+ * *
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include <string>
+#include <sstream>
+
+#include "connection.hxx"
+
+namespace libt2n
+{
+
+connection::packet_size_indicator connection::bytes_available()
+{
+ // max packet size is unsigned int
+
+ // no size information -> no packet
+ if (buffer.size() < sizeof(unsigned int))
+ return false;
+
+ packet_size_indicator psize=*((packet_size_indicator*)(buffer.data()));
+
+ // enough data for one packet in buffer?
+ if (buffer.size() < sizeof(unsigned int)+psize)
+ return false;
+
+ // ok, full packet there
+ return true;
+}
+
+bool connection::get_packet(std::string& data)
+{
+ packet_size_indicator psize;
+
+ if ((psize=bytes_available()))
+ {
+ data.assign(buffer,sizeof(unsigned int),psize);
+ buffer.erase(0,sizeof(unsigned int)+psize);
+ return true;
+ }
+ else
+ return false;
+}
+
+void connection::write(const std::string& data)
+{
+ // prepend packet size to data
+ packet_size_indicator psize=data.size();
+ std::string send_data(data);
+ send_data.insert(0,(char*)psize,sizeof(packet_size_indicator));
+
+ real_write(send_data);
+}
+
+
+
+}