X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Fconnection.cpp;fp=src%2Fconnection.cpp;h=0b445ef1a42d24d9dd85a31b5d090b4a69484071;hp=0000000000000000000000000000000000000000;hb=a11e19b7adab2d5b937573701959562f06087ac5;hpb=5816531135da09aceb7a026eeade735cbd20ef03 diff --git a/src/connection.cpp b/src/connection.cpp new file mode 100644 index 0000000..0b445ef --- /dev/null +++ b/src/connection.cpp @@ -0,0 +1,72 @@ +/*************************************************************************** + * 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 +#include + +#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); +} + + + +}