added logging support for init, search , present, scan and close
[metaproxy-moved-to-github.git] / src / gduutil.cpp
1 /* $Id: gduutil.cpp,v 1.2 2006-08-30 08:35:47 marc Exp $
2    Copyright (c) 2005-2006, Index Data.
3
4    See the LICENSE file for details
5 */
6
7 #include "gduutil.hpp"
8
9 #include <yaz/wrbuf.h>
10 #include <yaz/querytowrbuf.h>
11
12 #include <iostream>
13
14 namespace mp = metaproxy_1;
15
16 // Doxygen doesn't like mp::gdu, so we use this instead
17 namespace mp_gdu = metaproxy_1::gdu;
18
19 std::ostream& std::operator<<(std::ostream& os,  Z_GDU& zgdu)
20 {
21     if (zgdu.which == Z_GDU_Z3950)
22         os << "Z3950" << " " << *(zgdu.u.z3950) ;
23     else if (zgdu.which == Z_GDU_HTTP_Request)
24         os << "HTTP_Request" << " ";
25     else if (zgdu.which == Z_GDU_HTTP_Response)
26         os << "HTTP_Response" << " ";
27     else
28         os << "Z_GDU" << " ";
29     return os;
30 }
31
32 std::ostream& std::operator<<(std::ostream& os,  Z_APDU& zapdu)
33 {
34     switch(zapdu.which) {
35
36     case Z_APDU_initRequest:
37         os << "initRequest" << " ";
38                         
39         {
40             Z_InitRequest *ir 
41                 = zapdu.u.initRequest;
42
43             Z_IdAuthentication *a = ir->idAuthentication;
44             if (a && a->which == Z_IdAuthentication_idPass )
45                 os << a->u.idPass->userId 
46                    << ":" << a->u.idPass->groupId << " ";
47             else
48                 os << "-:-" << " ";
49
50
51             os << (ir->implementationId) << " "
52                 //<< ir->referenceId << " "
53                << (ir->implementationName) << " "
54                << (ir->implementationVersion) << " ";
55         }
56         break;
57     case Z_APDU_initResponse:
58         os << "initResponse" << " ";
59         {
60             Z_InitResponse *ir 
61                 = zapdu.u.initResponse;
62             if (*(ir->result))
63                 os << "OK" << " "
64                    << (ir->implementationId) << " "
65                     //<< ir->referenceId << " "
66                    << (ir->implementationName) << " "
67                    << (ir->implementationVersion) << " ";
68             else
69                 os << "DIAG" << " ";
70         }
71         break;
72     case Z_APDU_searchRequest:
73         os << "searchRequest" << " "
74            << "--" << " ";
75         { 
76             Z_SearchRequest *sr 
77                 = zapdu.u.searchRequest;
78                             
79             for (int i = 0; i < sr->num_databaseNames; i++)
80             {
81                 os << sr->databaseNames[i];
82                 if (i+1 ==  sr->num_databaseNames)
83                     os << " ";
84                 else
85                     os << "+";
86             }
87                          
88             WRBUF wr = wrbuf_alloc();
89             yaz_query_to_wrbuf(wr, sr->query);
90             os << wrbuf_buf(wr) << " ";
91             wrbuf_free(wr, 1);
92         }
93         break;
94     case Z_APDU_searchResponse:
95         os << "searchResponse" << " ";
96         {
97             Z_SearchResponse *sr 
98                 = zapdu.u.searchResponse;
99             if (*(sr->searchStatus))
100                 os << "OK" << " "
101                    << *(sr->resultCount) << " "
102                     //<< sr->referenceId << " "
103                    << *(sr->numberOfRecordsReturned) << " "
104                    << *(sr->nextResultSetPosition) << " ";
105             else
106                 os << "DIAG" << " ";
107         }
108         break;
109     case Z_APDU_presentRequest:
110         os << "presentRequest" << " "
111            << "--" << " "; 
112         {
113             Z_PresentRequest *pr = zapdu.u.presentRequest;
114             os << pr->resultSetId << " "
115                 //<< pr->referenceId << " "
116                << *(pr->resultSetStartPoint) << " "
117                << *(pr->numberOfRecordsRequested) << " ";
118         }
119         break;
120     case Z_APDU_presentResponse:
121         os << "presentResponse" << " ";
122         {
123             Z_PresentResponse *pr 
124                 = zapdu.u.presentResponse;
125             if (!*(pr->presentStatus))
126                 os << "OK" << " "
127                    << "-" << " "
128                     //<< pr->referenceId << " "
129                    << *(pr->numberOfRecordsReturned) << " "
130                    << *(pr->nextResultSetPosition) << " ";
131             else
132                 os << "DIAG" << " "
133                    << "-" << " "
134                     //<< pr->referenceId << " "
135                    << *(pr->numberOfRecordsReturned) << " "
136                    << *(pr->nextResultSetPosition) << " ";
137         }
138         break;
139     case Z_APDU_deleteResultSetRequest:
140         os << "deleteResultSetRequest" << " ";
141         break;
142     case Z_APDU_deleteResultSetResponse:
143         os << "deleteResultSetResponse" << " ";
144         break;
145     case Z_APDU_accessControlRequest:
146         os << "accessControlRequest" << " ";
147         break;
148     case Z_APDU_accessControlResponse:
149         os << "accessControlResponse" << " ";
150         break;
151     case Z_APDU_resourceControlRequest:
152         os << "resourceControlRequest" << " ";
153         break;
154     case Z_APDU_resourceControlResponse:
155         os << "resourceControlResponse" << " ";
156         break;
157     case Z_APDU_triggerResourceControlRequest:
158         os << "triggerResourceControlRequest" << " ";
159         break;
160     case Z_APDU_resourceReportRequest:
161         os << "resourceReportRequest" << " ";
162         break;
163     case Z_APDU_resourceReportResponse:
164         os << "resourceReportResponse" << " ";
165         break;
166     case Z_APDU_scanRequest:
167         os << "scanRequest" << " "
168            << "--" << " ";
169         { 
170             Z_ScanRequest *sr 
171                 = zapdu.u.scanRequest;
172                             
173             for (int i = 0; i < sr->num_databaseNames; i++)
174             {
175                 os << sr->databaseNames[i];
176                 if (i+1 ==  sr->num_databaseNames)
177                     os << " ";
178                 else
179                     os << "+";
180             }
181
182             os << *(sr->numberOfTermsRequested) << " "
183                << *(sr->preferredPositionInResponse) << " "
184                << *(sr->stepSize) << " ";
185                          
186             WRBUF wr = wrbuf_alloc();
187             yaz_scan_to_wrbuf(wr, sr->termListAndStartPoint, VAL_NONE);
188             os << wrbuf_buf(wr) << " ";
189             wrbuf_free(wr, 1);
190         }
191         break;
192     case Z_APDU_scanResponse:
193         os << "scanResponse" << " ";
194         {
195             Z_ScanResponse *sr 
196                 = zapdu.u.scanResponse;
197             if (*(sr->scanStatus))
198                 os << "OK" << " "
199                    << *(sr->scanStatus) << " "
200                    << *(sr->numberOfEntriesReturned) << " "
201                     //<< sr->referenceId << " "
202                    << *(sr->positionOfTerm) << " "
203                    << *(sr->stepSize) << " ";
204             else
205                 os << "DIAG" << " "
206                    << *(sr->scanStatus) << " "
207                    << *(sr->numberOfEntriesReturned) << " "
208                     //<< sr->referenceId << " "
209                    << *(sr->positionOfTerm) << " "
210                    << *(sr->stepSize) << " ";
211         }
212         break;
213     case Z_APDU_sortRequest:
214         os << "sortRequest" << " ";
215         break;
216     case Z_APDU_sortResponse:
217         os << "sortResponse" << " ";
218         break;
219     case Z_APDU_segmentRequest:
220         os << "segmentRequest" << " ";
221         break;
222     case Z_APDU_extendedServicesRequest:
223         os << "extendedServicesRequest" << " ";
224 //         { 
225 //             Z_ExtendedServicesRequest *er 
226 //                 = zapdu.u.extendedServicesRequest;
227
228 //             os << er->packageName << " "
229 //                << er->userId << " "
230 //                << er->description << " ";
231 //         }
232         break;
233     case Z_APDU_extendedServicesResponse:
234         os << "extendedServicesResponse" << " ";
235 //         { 
236 //             Z_ExtendedServicesResponse *er 
237 //                 = zapdu.u.extendedServicesResponse;
238
239 //             os << *(er->operationStatus) << " "
240 //                << er->num_diagnostics << " ";
241 //         }
242         break;
243     case Z_APDU_close:
244         os  << "close" << " ";
245         { 
246             Z_Close  *c 
247                 = zapdu.u.close;
248
249             os << *(c->closeReason) << " ";
250             switch (*(c->closeReason)) {
251             case Z_Close_finished:
252                 os << "finished" << " ";
253                 break;
254             case Z_Close_shutdown:
255                 os << "shutdown" << " ";
256                 break;
257             case Z_Close_systemProblem:
258                 os << "systemProblem" << " ";
259                 break;
260             case Z_Close_costLimit:
261                 os << "costLimit" << " ";
262                 break;
263             case Z_Close_resources:
264                 os << "resources" << " ";
265                 break;
266             case Z_Close_securityViolation:
267                 os << "securityViolation" << " ";
268                 break;
269             case Z_Close_protocolError:
270                 os << "protocolError" << " ";
271                 break;
272             case Z_Close_lackOfActivity:
273                 os << "" << " ";
274                 break;
275             case Z_Close_peerAbort:
276                 os << "peerAbort" << " ";
277                 break;
278             case Z_Close_unspecified:
279                 os << "unspecified" << " ";
280                 break;
281             default:
282                 os << "unknown" << " ";
283                 break;
284             }
285         }
286         break;
287     case Z_APDU_duplicateDetectionRequest:
288         os << "duplicateDetectionRequest" << " ";
289         break;
290     case Z_APDU_duplicateDetectionResponse:
291         os << "duplicateDetectionResponse" << " ";
292         break;
293     default: 
294         os << "Z_APDU "
295            << "UNKNOWN" << " ";
296     }
297
298     return os;
299 }
300
301
302 /*
303  * Local variables:
304  * c-basic-offset: 4
305  * indent-tabs-mode: nil
306  * c-file-style: "stroustrup"
307  * End:
308  * vim: shiftwidth=4 tabstop=8 expandtab
309  */