Moved header files to include/yaz++. Switched to libtool and automake.
[yazpp-moved-to-github.git] / include / yaz++ / yaz-pdu-assoc.h
diff --git a/include/yaz++/yaz-pdu-assoc.h b/include/yaz++/yaz-pdu-assoc.h
new file mode 100644 (file)
index 0000000..10cfbe9
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 1998-2000, Index Data.
+ * See the file LICENSE for details.
+ * 
+ * $Id: yaz-pdu-assoc.h,v 1.1 2000-10-11 11:58:16 adam Exp $
+ */
+
+#ifndef YAZ_PDU_ASSOC_INCLUDED
+#define YAZ_PDU_ASSOC_INCLUDED
+
+#include <yaz/comstack.h>
+#include <yaz++/yaz-socket-observer.h>
+#include <yaz++/yaz-pdu-observer.h>
+
+/** Simple Protocol Data Unit Assocation.
+    This object sends - and receives PDU's using the COMSTACK
+    network utility. To use the association in client role, use
+    the method connect. The server role is initiated by using the
+    listen method.
+ */
+class YAZ_EXPORT Yaz_PDU_Assoc : public IYaz_PDU_Observable, IYazSocketObserver {
+ private:
+    enum { Connecting, Listen, Ready, Closed } m_state;
+    class PDU_Queue {
+    public:
+       PDU_Queue(const char *buf, int len);
+       PDU_Queue::~PDU_Queue();
+       char *m_buf;
+       int m_len;
+       PDU_Queue *m_next;
+    };
+    Yaz_PDU_Assoc *m_parent;
+    Yaz_PDU_Assoc *m_children;
+    Yaz_PDU_Assoc *m_next;
+    COMSTACK m_cs;
+    IYazSocketObservable *m_socketObservable;
+    IYaz_PDU_Observer *m_PDU_Observer;
+    char *m_input_buf;
+    int m_input_len;
+    PDU_Queue *m_queue_out;
+    int Yaz_PDU_Assoc::flush_PDU();
+    int *m_destroyed;
+    int m_idleTime;
+    int m_log;
+ public:
+    COMSTACK comstack();
+    /// Create object using specified socketObservable
+    Yaz_PDU_Assoc(IYazSocketObservable *socketObservable);
+    /// Close socket and destroy object.
+    /// virtual ~Yaz_PDU_Assoc();
+    /// Clone the object
+    IYaz_PDU_Observable *clone();
+    /// Send PDU
+    int send_PDU(const char *buf, int len);
+    /// connect to server (client role)
+    void connect(IYaz_PDU_Observer *observer, const char *addr);
+    /// listen for clients (server role)
+    void listen(IYaz_PDU_Observer *observer, const char *addr);
+    /// open with existing socket
+    void socket(IYaz_PDU_Observer *observer, int fd);
+    /// Socket notification
+    void socketNotify(int event);
+    /// Close socket
+    void close();
+    /// Close and destroy
+    void destroy();
+    /// Set Idle Time
+    void idleTime (int timeout);
+    /// Child start...
+    virtual void childNotify(int fd);
+};
+
+#endif