libt2n: (gerd) refactored connection classes
[libt2n] / src / connection.hxx
diff --git a/src/connection.hxx b/src/connection.hxx
new file mode 100644 (file)
index 0000000..9142c52
--- /dev/null
@@ -0,0 +1,64 @@
+/***************************************************************************
+ *   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.             *
+ ***************************************************************************/
+#ifndef __LIBT2N_CONNECTION
+#define __LIBT2N_CONNECTION
+
+#include <string>
+
+namespace libt2n
+{
+
+class connection
+{
+    private:
+        bool closed;
+
+    protected:
+        connection()
+        { closed=false; }
+
+        std::string buffer;
+
+        typedef unsigned int packet_size_indicator;
+
+        packet_size_indicator bytes_available();
+
+        virtual void real_write(const std::string& data)=0;
+
+    public:
+        ~connection()
+            { close(); }
+
+        bool is_closed()
+            { return closed; }
+
+        virtual void close()
+            { closed=true; }
+
+        virtual void fill_buffer(long long usec_timeout=-1)=0;
+        bool get_packet(std::string& data);
+        bool packet_available()
+            { return bytes_available(); }
+
+        void write(const std::string& data);
+};
+
+}
+
+#endif