The upgrade to automake 1.8/1.9 causes the product dist to be called
[yazpp-moved-to-github.git] / include / yazpp / pdu-assoc.h
diff --git a/include/yazpp/pdu-assoc.h b/include/yazpp/pdu-assoc.h
new file mode 100644 (file)
index 0000000..d0fdeb7
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 1998-2005, Index Data.
+ * See the file LICENSE for details.
+ * 
+ * $Id: pdu-assoc.h,v 1.1 2006-03-29 13:14:15 adam Exp $
+ */
+
+#ifndef YAZ_PDU_ASSOC_INCLUDED
+#define YAZ_PDU_ASSOC_INCLUDED
+
+#include <yaz/comstack.h>
+#include <yazpp/socket-observer.h>
+#include <yazpp/pdu-observer.h>
+
+namespace yazpp_1 {
+/** 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 PDU_Assoc : public IPDU_Observable, yazpp_1::ISocketObserver {
+    friend class PDU_AssocThread;
+ private:
+    enum { 
+        Connecting,
+        Listen,
+        Ready,
+        Closed,
+        Writing,
+        Accepting
+    } m_state;
+    class PDU_Queue {
+    public:
+        PDU_Queue(const char *buf, int len);
+        ~PDU_Queue();
+        char *m_buf;
+        int m_len;
+        PDU_Queue *m_next;
+    };
+    PDU_Assoc *m_parent;
+    PDU_Assoc *m_children;
+    PDU_Assoc *m_next;
+    COMSTACK m_cs;
+    yazpp_1::ISocketObservable *m_socketObservable;
+    IPDU_Observer *m_PDU_Observer;
+    char *m_input_buf;
+    int m_input_len;
+    PDU_Queue *m_queue_out;
+    PDU_Queue *m_queue_in;
+    int flush_PDU();
+    int *m_destroyed;
+    int m_idleTime;
+    int m_log;
+    void init(yazpp_1::ISocketObservable *socketObservable);
+ public:
+    COMSTACK comstack(const char *type_and_host, void **vp);
+    /// Create object using specified socketObservable
+    PDU_Assoc(yazpp_1::ISocketObservable *socketObservable);
+    /// Create Object using existing comstack
+    PDU_Assoc(yazpp_1::ISocketObservable *socketObservable,
+                  COMSTACK cs);
+    /// Close socket and destroy object.
+    /// virtual ~PDU_Assoc();
+    /// Clone the object
+    IPDU_Observable *clone();
+    /// Send PDU
+    int send_PDU(const char *buf, int len);
+    /// connect to server (client role)
+    int connect(IPDU_Observer *observer, const char *addr);
+    /// listen for clients (server role)
+    int listen(IPDU_Observer *observer, const char *addr);
+    /// 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(COMSTACK cs);
+    const char *getpeername();
+};
+
+class YAZ_EXPORT PDU_AssocThread : public PDU_Assoc {
+ public:
+    PDU_AssocThread(yazpp_1::ISocketObservable *socketObservable);
+ private:
+    void childNotify(COMSTACK cs);
+
+};
+};
+
+#endif
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+