Added default parameters for refid to request functions.
[yazpp-moved-to-github.git] / src / yaz-z-query.cpp
1 /*
2  * Copyright (c) 1998-1999, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  * 
6  * $Log: yaz-z-query.cpp,v $
7  * Revision 1.7  2000-05-10 11:36:58  ian
8  * Added default parameters for refid to request functions.
9  * Added default parameter for result set name to search and present request.
10  * Commented out forced logging of PDU contents.
11  * Added send_deleteResultSetRequest
12  *
13  * Revision 1.6  1999/12/06 13:52:45  adam
14  * Modified for new location of YAZ header files. Experimental threaded
15  * operation.
16  *
17  * Revision 1.5  1999/04/27 07:52:13  adam
18  * Improved proxy; added query match for result set re-use.
19  *
20  * Revision 1.4  1999/04/21 12:09:01  adam
21  * Many improvements. Modified to proxy server to work with "sessions"
22  * based on cookies.
23  *
24  * Revision 1.3  1999/04/20 10:30:05  adam
25  * Implemented various stuff for client and proxy. Updated calls
26  * to ODR to reflect new name parameter.
27  *
28  * Revision 1.2  1999/04/09 11:46:57  adam
29  * Added object Yaz_Z_Assoc. Much more functional client.
30  *
31  * Revision 1.1  1999/03/23 14:17:57  adam
32  * More work on timeout handling. Work on yaz-client.
33  *
34  */
35
36 #include <yaz-z-query.h>
37 #include <yaz/pquery.h>
38
39 Yaz_Z_Query::Yaz_Z_Query()
40 {
41     odr_encode = odr_createmem (ODR_ENCODE);
42     odr_decode = odr_createmem (ODR_DECODE);
43     odr_print = odr_createmem (ODR_PRINT);
44 }
45
46 int Yaz_Z_Query::set_rpn (const char *rpn)
47 {
48     buf = 0;
49     odr_reset (odr_encode);
50     Z_Query *query = (Z_Query*) odr_malloc (odr_encode, sizeof(*query));
51     query->which = Z_Query_type_1;
52     query->u.type_1 = p_query_rpn (odr_encode, PROTO_Z3950, rpn);
53     if (!query->u.type_1)
54         return -1;
55     if (!z_Query (odr_encode, &query, 0, 0))
56         return -1;
57     // z_Query(odr_print, &query, 0, 0);
58     buf = odr_getbuf (odr_encode, &len, 0);
59     return len;
60 }
61
62 void Yaz_Z_Query::set_Z_Query(Z_Query *z_query)
63 {
64     buf = 0;
65     odr_reset (odr_encode);
66     if (!z_Query (odr_encode, &z_query, 0, 0))
67         return;
68     buf = odr_getbuf (odr_encode, &len, 0);
69 }
70
71 Yaz_Z_Query::~Yaz_Z_Query()
72 {
73     odr_destroy (odr_encode);
74     odr_destroy (odr_decode);
75     odr_destroy (odr_print);
76 }
77
78 Z_Query *Yaz_Z_Query::get_Z_Query ()
79 {
80     Z_Query *query;
81     if (!buf)
82         return 0;
83     odr_setbuf (odr_decode, buf, len, 0);
84     if (!z_Query(odr_decode, &query, 0, 0))
85         return 0;
86     return query;
87 }
88
89 void Yaz_Z_Query::print(char *str, int len)
90 {
91
92 }
93
94 int Yaz_Z_Query::match(Yaz_Z_Query *other)
95 {
96     if (len != other->len)
97         return 0;
98     if (!buf || !other->buf)
99         return 0;
100     if (memcmp(buf, other->buf, len))
101         return 0;
102     return 1;
103 }