/*
 * Copyright (c) 2004-2005, Index Data.
 * See the file LICENSE for details.
 * 
 * $Id: zlint.h,v 1.7 2006/03/29 13:14:20 adam Exp $
 */

#include <yazpp/z-assoc.h>

using namespace yazpp_1;

enum Zlint_code {
    TEST_FINISHED,
    TEST_CONTINUE,
    TEST_REOPEN,
};

class Zlint_test;
class Zlint_t;

class Zlint : public Z_Assoc {
public:
    Zlint(IPDU_Observable *the_PDU_Observable);
    ~Zlint();
    void add_test(Zlint_test *i);
    void set_host(const char *cp);
    int initResponseGetVersion(Z_InitResponse *init);
    Z_ReferenceId *mk_refid(const char *buf, int len);
    void msg_check_for(const char *fmt, ...);
    void msg_check_ok();
    void msg_check_fail(const char *fmt, ...);
    void msg_check_info(const char *fmt, ...);
    void msg_check_notapp();
    void getDatabase(char ***db, int *num);
private:
    void connectNotify();
    void timeoutNotify();
    void failNotify();
    void recv_GDU(Z_GDU *apdu, int len);
    IPDU_Observable *m_PDU_Observable;
    IPDU_Observer *sessionNotify(IPDU_Observable *the_PDU_Observable, int fd);
    Zlint_t *m_tests;
    Zlint_t *m_cur_test;
    char *m_host;
    char *m_database;
    void close_goto_next();
};

class Zlint_test {
public:
    virtual Zlint_code init(Zlint *z) = 0;
    virtual Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu) = 0;
    virtual Zlint_code recv_fail(Zlint *z, int reason) = 0;
    virtual ~Zlint_test();
};

class Zlint_test_simple : public Zlint_test {
public:
    virtual Zlint_code init(Zlint *z) = 0;
    virtual Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu) = 0;
    virtual Zlint_code recv_fail(Zlint *z, int reason);
};

class Zlint_test_init_01 : public Zlint_test_simple {
public:
    Zlint_test_init_01();
    virtual ~Zlint_test_init_01();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
};

class Zlint_test_init_02 : public Zlint_test_simple {
public:
    Zlint_test_init_02();
    virtual ~Zlint_test_init_02();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
};

class Zlint_test_init_03 : public Zlint_test_simple {
public:
    Zlint_test_init_03();
    virtual ~Zlint_test_init_03();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
};

class Zlint_test_init_04 : public Zlint_test_simple {
public:
    Zlint_test_init_04();
    virtual ~Zlint_test_init_04();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
};

class Zlint_test_init_05 : public Zlint_test_simple {
    int m_init_response_no;
public:
    Zlint_test_init_05();
    virtual ~Zlint_test_init_05();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
};

class Zlint_test_init_06 : public Zlint_test_simple {
public:
    Zlint_test_init_06();
    virtual ~Zlint_test_init_06();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
};

class Zlint_test_init_07 : public Zlint_test_simple {
public:
    Zlint_test_init_07();
    virtual ~Zlint_test_init_07();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
};

class Zlint_test_init_08 : public Zlint_test {
    int m_no;
public:
    Zlint_test_init_08();
    virtual ~Zlint_test_init_08();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
    Zlint_code recv_fail(Zlint *z, int reason);
};

class Zlint_test_search_01 : public Zlint_test {
    int m_query_no;
    int m_got_result_set;
    int m_record_syntax_no;
    int m_sort_no;
    Zlint_code sendTest(Zlint *z);
public:
    Zlint_test_search_01();
    virtual ~Zlint_test_search_01();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
    Zlint_code recv_fail(Zlint *z, int reason);
};

class Zlint_test_scan_01 : public Zlint_test {
    int m_scan_no;
    Zlint_code sendTest(Zlint *z);
public:
    Zlint_test_scan_01();
    virtual ~Zlint_test_scan_01();
    Zlint_code init(Zlint *z);
    Zlint_code recv_gdu(Zlint *z, Z_GDU *gdu);
    Zlint_code recv_fail(Zlint *z, int reason);
};
/*
 * Local variables:
 * c-basic-offset: 4
 * indent-tabs-mode: nil
 * End:
 * vim: shiftwidth=4 tabstop=8 expandtab
 */



syntax highlighted by Code2HTML, v. 0.9.1