2 * Copyright (C) 1995-2007, Index Data ApS
3 * See the file LICENSE for details.
5 * $Id: zgdu.c,v 1.19 2007-01-11 10:55:57 adam Exp $
10 * \brief Implements HTTP and Z39.50 encoding and decoding.
17 int z_GDU (ODR o, Z_GDU **p, int opt, const char *name)
19 if (o->direction == ODR_DECODE) {
20 *p = (Z_GDU *) odr_malloc(o, sizeof(**p));
21 if (o->size > 10 && !memcmp(o->buf, "HTTP/", 5))
23 (*p)->which = Z_GDU_HTTP_Response;
24 return yaz_decode_http_response(o, &(*p)->u.HTTP_Response);
27 else if (o->size > 5 &&
28 o->buf[0] >= 0x20 && o->buf[0] < 0x7f
29 && o->buf[1] >= 0x20 && o->buf[1] < 0x7f
30 && o->buf[2] >= 0x20 && o->buf[2] < 0x7f
31 && o->buf[3] >= 0x20 && o->buf[3] < 0x7f)
33 (*p)->which = Z_GDU_HTTP_Request;
34 return yaz_decode_http_request(o, &(*p)->u.HTTP_Request);
38 (*p)->which = Z_GDU_Z3950;
39 return z_APDU(o, &(*p)->u.z3950, opt, 0);
42 else /* ENCODE or PRINT */
46 case Z_GDU_HTTP_Response:
47 return yaz_encode_http_response(o, (*p)->u.HTTP_Response);
48 case Z_GDU_HTTP_Request:
49 return yaz_encode_http_request(o, (*p)->u.HTTP_Request);
51 return z_APDU(o, &(*p)->u.z3950, opt, 0);
60 * indent-tabs-mode: nil
62 * vim: shiftwidth=4 tabstop=8 expandtab