2. Implementations
Prev | Chapter 4. YAZ C++ API | Next

## 2. Implementations

### 2.1. Yaz_SocketManager

This class implements the ISocketObservable interface. It is a portable socket wrapper around the select call. This implementation is useful for daemons, command-line clients, etc.

         #include <yazpp/socket-manager.h>

         class SocketManager : public ISocketObservable {
           public:
             // Add an observer
             virtual void addObserver(int fd, ISocketObserver *observer);
             // Delete an observer
             virtual void deleteObserver(ISocketObserver *observer);
             // Delete all observers
             virtual void deleteObservers();
             // Set event mask for observer
             virtual void maskObserver(ISocketObserver *observer, int mask);
             // Set timeout
             virtual void timeoutObserver(ISocketObserver *observer,
                                      unsigned timeout);
             // Process one event. return > 0 if event could be processed;
             int processEvent();
             SocketManager();
             virtual ~SocketManager();
         };

### 2.2. PDU_Assoc

This class implements the interfaces IPDU_Observable and ISocketObserver. This object implements a non-blocking client/server channel that transmits BER encoded PDUs (or those offered by YAZ COMSTACK).

         #include <yazpp/pdu-assoc.h>

         class PDU_Assoc : public IPDU_Observable,
                                     ISocketObserver {
           public:
             COMSTACK comstack(const char *type_and_host, void **vp);
             // Create object using specified socketObservable
             PDU_Assoc(ISocketObservable *socketObservable);
             // Create Object using existing comstack
             PDU_Assoc(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)
             void connect(IPDU_Observer *observer, const char *addr);
             // listen for clients (server role)
             void 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);
         };

### 2.3. Z_Assoc

This class implements the interface IPDU_Obserer. This object implements a Z39.50 client/server channel, aka Z-Association.

         #include <yazpp/z-assoc.h>

         class Z_Assoc : public IPDU_Observer {
           public:
             // Create object using the PDU Observer specified
             Z_Assoc(IPDU_Observable *the_PDU_Observable);
             // Destroy association and close PDU Observer
             virtual ~Z_Assoc();
             // Receive PDU
             void recv_PDU(const char *buf, int len);
             // Connect notification
             virtual void connectNotify() = 0;
             // Failure notification
             virtual void failNotify() = 0;
             // Timeout notification
             virtual void timeoutNotify() = 0;
             // Timeout specify
             void timeout(int timeout);
             // Begin Z39.50 client role
             void client(const char *addr);
             // Begin Z39.50 server role
             void server(const char *addr);
             // Close connection
             void close();

             // Decode Z39.50 PDU.
             Z_APDU *decode_Z_PDU(const char *buf, int len);
             // Encode Z39.50 PDU.
             int encode_Z_PDU(Z_APDU *apdu, char **buf, int *len);
             // Send Z39.50 PDU
             int send_Z_PDU(Z_APDU *apdu);
             // Receive Z39.50 PDU
             virtual void recv_Z_PDU(Z_APDU *apdu) = 0;
             // Create Z39.50 PDU with reasonable defaults
             Z_APDU *create_Z_PDU(int type);
             // Request Alloc
             ODR odr_encode ();
             ODR odr_decode ();
             ODR odr_print ();
             void set_APDU_log(const char *fname);
             const char *get_APDU_log();

             // OtherInformation
             void get_otherInfoAPDU(Z_APDU *apdu, Z_OtherInformation ***oip);
             Z_OtherInformationUnit *update_otherInformation (
                   Z_OtherInformation **otherInformationP, int createFlag,
                   int *oid, int categoryValue, int deleteFlag);
             void set_otherInformationString (
                   Z_OtherInformation **otherInformationP,
                   int *oid, int categoryValue,
                   const char *str);
             void set_otherInformationString (
                   Z_OtherInformation **otherInformation,
                   int oidval, int categoryValue,
                   const char *str);
             void set_otherInformationString (
                   Z_APDU *apdu,
                   int oidval, int categoryValue,
                   const char *str);

             Z_ReferenceId *getRefID(char* str);
             Z_ReferenceId **get_referenceIdP(Z_APDU *apdu);
             void transfer_referenceId(Z_APDU *from, Z_APDU *to);

             const char *get_hostname();
         };

### 2.4. IR_Assoc

This object is just a specialization of Z_Assoc. It provides more facilities for the Z39.50 client role.

         #include <yazpp/ir-assoc.h>

         class IR_Assoc : public Z_Assoc {
           ...
         };

The example client, `yaz-my-client.cpp`, uses this class.

### 2.5. Z_Server

This object is just a specialization of Z_Assoc. It provides more facilities for the Z39.50 server role.

         #include <yazpp/z-server.h>

         class My_Server : public Z_Server {
           ...
         };

The example server, `yaz-my-server.cpp`, uses this class.

Prev | Up | Next
Chapter 4. YAZ C++ API | Home | Appendix A. License