Merge branch 'master' into sru_2_0
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 19 Sep 2013 11:11:47 +0000 (13:11 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 19 Sep 2013 11:11:47 +0000 (13:11 +0200)
Conflicts:
IDMETA

1  2 
client/client.c

diff --combined client/client.c
@@@ -83,7 -83,6 +83,7 @@@ static file_history_t file_history = 0
  
  static char sru_method[10] = "soap";
  static char sru_version[10] = "1.2";
 +static char sru_recordPacking[10] = "";
  static char *codeset = 0;               /* character set for output */
  static int hex_dump = 0;
  static char *dump_file_prefix = 0;
@@@ -318,9 -317,14 +318,9 @@@ static void print_refid(Z_ReferenceId *
  
  static Z_ReferenceId *set_refid(ODR out)
  {
 -    Z_ReferenceId *id;
      if (!refid)
          return 0;
 -    id = (Z_ReferenceId *) odr_malloc(out, sizeof(*id));
 -    id->size = id->len = strlen(refid);
 -    id->buf = (unsigned char *) odr_malloc(out, id->len);
 -    memcpy(id->buf, refid, id->len);
 -    return id;
 +    return odr_create_Odr_oct(out, refid, strlen(refid));
  }
  
  /* INIT SERVICE ------------------------------- */
@@@ -923,7 -927,10 +923,10 @@@ static void display_record(Z_External *
              || !oid_oidcmp(oid, yaz_oid_recsyn_html))
          {
              print_xml_record(octet_buf, octet_len);
+         }
+         else if (!oid_oidcmp(oid, yaz_oid_recsyn_mab))
+         {
+             print_record(octet_buf, octet_len);
          }
          else
          {
@@@ -1413,12 -1420,12 +1416,12 @@@ static int send_SRW_scanRequest(const c
      switch (queryType)
      {
      case QueryType_CQL:
 -        sr->u.scan_request->query_type = Z_SRW_query_type_cql;
 -        sr->u.scan_request->scanClause.cql = encode_SRW_term(out, arg);
 +        sr->u.scan_request->queryType = "cql";
 +        sr->u.scan_request->scanClause = encode_SRW_term(out, arg);
          break;
      case QueryType_Prefix:
 -        sr->u.scan_request->query_type = Z_SRW_query_type_pqf;
 -        sr->u.scan_request->scanClause.pqf = encode_SRW_term(out, arg);
 +        sr->u.scan_request->queryType = "pqf";
 +        sr->u.scan_request->scanClause = encode_SRW_term(out, arg);
          break;
      default:
          printf("Only CQL and PQF supported in SRW\n");
@@@ -1452,25 -1459,23 +1455,25 @@@ static int send_SRW_searchRequest(cons
      switch (queryType)
      {
      case QueryType_CQL:
 -        srw_sr->u.request->query_type = Z_SRW_query_type_cql;
 -        srw_sr->u.request->query.cql = encode_SRW_term(srw_sr_odr_out, arg);
 +        srw_sr->u.request->queryType = "cql";
 +        srw_sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg);
  
 -        sr->u.request->query_type = Z_SRW_query_type_cql;
 -        sr->u.request->query.cql = encode_SRW_term(srw_sr_odr_out, arg);
 +        sr->u.request->queryType = "cql";
 +        sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg);
          break;
      case QueryType_Prefix:
 -        srw_sr->u.request->query_type = Z_SRW_query_type_pqf;
 -        srw_sr->u.request->query.pqf = encode_SRW_term(srw_sr_odr_out, arg);
 +        srw_sr->u.request->queryType = "pqf";
 +        srw_sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg);
  
 -        sr->u.request->query_type = Z_SRW_query_type_pqf;
 -        sr->u.request->query.pqf = encode_SRW_term(srw_sr_odr_out, arg);
 +        sr->u.request->queryType = "pqf";
 +        sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg);
          break;
      default:
          printf("Only CQL and PQF supported in SRW\n");
          return 0;
      }
 +    if (*sru_recordPacking)
 +        sr->u.request->recordPacking = sru_recordPacking;
      sru_maximumRecords = 0;
      sr->u.request->maximumRecords = odr_intdup(out, 0);
      sr->u.request->facetList = facet_list;
@@@ -1555,12 -1560,12 +1558,12 @@@ static int send_Z3950_searchRequest(con
      req->referenceId = set_refid(out);
      if (!strcmp(arg, "@big")) /* strictly for troublemaking */
      {
 -        static unsigned char big[2100];
 +        static char big[2100];
          static Odr_oct bigo;
  
          /* send a very big referenceid to test transport stack etc. */
          memset(big, 'A', 2100);
 -        bigo.len = bigo.size = 2100;
 +        bigo.len = 2100;
          bigo.buf = big;
          req->referenceId = &bigo;
      }
      case QueryType_CCL:
          query.which = Z_Query_type_2;
          query.u.type_2 = &ccl_query;
 -        ccl_query.buf = (unsigned char*) arg;
 +        ccl_query.buf = (char *) arg;
          ccl_query.len = strlen(arg);
          break;
      case QueryType_CCL2RPN:
@@@ -1862,7 -1867,7 +1865,7 @@@ static void print_referenceId(int iLeve
          int i;
  
          print_level(iLevel);
 -        printf("Ref Id (%d, %d): ", referenceId->len, referenceId->size);
 +        printf("Ref Id (%d): ", referenceId->len);
          for (i = 0; i < referenceId->len; i++)
              printf("%c", referenceId->buf[i]);
          printf("\n");
@@@ -2124,8 -2129,16 +2127,8 @@@ static Z_External *create_external_item
          r->indirect_reference = 0;
          r->descriptor = 0;
          r->which = Z_External_single;
 -
 -        r->u.single_ASN1_type = (Odr_oct *)
 -            odr_malloc(out, sizeof(*r->u.single_ASN1_type));
 -        r->u.single_ASN1_type->buf = (unsigned char *)
 -        odr_malloc(out, item_request_size);
 -        r->u.single_ASN1_type->len = item_request_size;
 -        r->u.single_ASN1_type->size = item_request_size;
 -        memcpy(r->u.single_ASN1_type->buf, item_request_buf,
 -                item_request_size);
 -
 +        r->u.single_ASN1_type =
 +            odr_create_Odr_oct(out, item_request_buf, item_request_size);
          do_hex_dump(item_request_buf,item_request_size);
      }
      return r;
@@@ -2169,8 -2182,18 +2172,8 @@@ static Z_External *create_external_ILL_
          r->indirect_reference = 0;
          r->descriptor = 0;
          r->which = Z_External_single;
 -
 -        r->u.single_ASN1_type = (Odr_oct *)
 -            odr_malloc(out, sizeof(*r->u.single_ASN1_type));
 -        r->u.single_ASN1_type->buf = (unsigned char *)
 -        odr_malloc(out, ill_request_size);
 -        r->u.single_ASN1_type->len = ill_request_size;
 -        r->u.single_ASN1_type->size = ill_request_size;
 -        memcpy(r->u.single_ASN1_type->buf, ill_request_buf, ill_request_size);
 -/*         printf("len = %d\n", ill_request_size); */
 -/*              do_hex_dump(ill_request_buf,ill_request_size); */
 -/*              printf("--- end of extenal\n"); */
 -
 +        r->u.single_ASN1_type = odr_create_Odr_oct(out, ill_request_buf,
 +                                                   ill_request_size);
      }
      return r;
  }
@@@ -2459,8 -2482,16 +2462,8 @@@ static int send_Z3950_update(int versio
          notToKeep->elements[0] = (Z_IU0SuppliedRecords_elem *)
              odr_malloc(out, sizeof(**notToKeep->elements));
          notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque;
 -        if (recid)
 -        {
 -            notToKeep->elements[0]->u.opaque = (Odr_oct *)
 -                odr_malloc(out, sizeof(Odr_oct));
 -            notToKeep->elements[0]->u.opaque->buf = (unsigned char *) recid;
 -            notToKeep->elements[0]->u.opaque->size = strlen(recid);
 -            notToKeep->elements[0]->u.opaque->len = strlen(recid);
 -        }
 -        else
 -            notToKeep->elements[0]->u.opaque = 0;
 +        notToKeep->elements[0]->u.opaque = recid ?
 +            odr_create_Odr_oct(out, recid, strlen(recid)) : 0;
          notToKeep->elements[0]->supplementalId = 0;
          notToKeep->elements[0]->correlationInfo = 0;
          notToKeep->elements[0]->record = record_this;
          notToKeep->elements[0] = (Z_IUSuppliedRecords_elem *)
              odr_malloc(out, sizeof(**notToKeep->elements));
          notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque;
 -        if (recid)
 -        {
 -            notToKeep->elements[0]->u.opaque = (Odr_oct *)
 -                odr_malloc(out, sizeof(Odr_oct));
 -            notToKeep->elements[0]->u.opaque->buf = (unsigned char *) recid;
 -            notToKeep->elements[0]->u.opaque->size = strlen(recid);
 -            notToKeep->elements[0]->u.opaque->len = strlen(recid);
 -        }
 -        else
 -            notToKeep->elements[0]->u.opaque = 0;
 +        notToKeep->elements[0]->u.opaque = recid ?
 +            odr_create_Odr_oct(out, recid, strlen(recid)) : 0;
          notToKeep->elements[0]->supplementalId = 0;
          notToKeep->elements[0]->correlationInfo = 0;
          notToKeep->elements[0]->record = record_this;
@@@ -2543,7 -2582,7 +2546,7 @@@ static int cmd_xmles(const char *arg
                            &ext->u.single_ASN1_type->len) == 0)
              return 0;
  
 -        ext->u.single_ASN1_type->buf = (unsigned char *) asn_buf;
 +        ext->u.single_ASN1_type->buf = asn_buf;
  
          oid = yaz_string_to_oid_odr(yaz_oid_std(),
                                      CLASS_EXTSERV, oid_str, out);
@@@ -2786,8 -2825,7 +2789,8 @@@ static int cmd_sru(const char *arg
      }
      else
      {
 -        int r = sscanf(arg, "%9s %9s", sru_method, sru_version);
 +        int r = sscanf(arg, "%9s %9s %9s", sru_method, sru_version,
 +            sru_recordPacking);
          if (r >= 1)
          {
              if (!yaz_matchstr(sru_method, "post"))
@@@ -3130,8 -3168,6 +3133,8 @@@ static int send_SRW_presentRequest(cons
          return 0;
      if (!parse_show_args(arg, setstring, &setno, &nos))
          return 0;
 +    if (*sru_recordPacking)
 +        sr->u.request->recordPacking = sru_recordPacking;
      sr->u.request->startRecord = odr_intdup(out, setno);
      sru_maximumRecords = nos;
      sr->u.request->maximumRecords = odr_intdup(out, nos);
@@@ -3348,8 -3384,10 +3351,8 @@@ static int send_Z3950_scanrequest(cons
              req->termListAndStartPoint->term->u.general)
          {
              req->termListAndStartPoint->term->u.general->buf =
 -                (unsigned char *) odr_strdup(out, term);
 -            req->termListAndStartPoint->term->u.general->len =
 -                req->termListAndStartPoint->term->u.general->size =
 -                strlen(term);
 +                odr_strdup(out, term);
 +            req->termListAndStartPoint->term->u.general->len = strlen(term);
          }
      }
      req->referenceId = set_refid(out);
@@@ -4417,7 -4455,7 +4420,7 @@@ static void http_response(Z_HTTP_Respon
              Z_SOAP *soap_package = 0;
              ODR o = odr_createmem(ODR_DECODE);
              Z_SOAP_Handler soap_handlers[] = {
 -                {YAZ_XMLNS_SRU_v2_response, 0, (Z_SOAP_fun) yaz_srw_codec},
 +                {YAZ_XMLNS_SRU_v2_mask, 0, (Z_SOAP_fun) yaz_srw_codec},
                  {YAZ_XMLNS_UPDATE_v0_9, 0, (Z_SOAP_fun) yaz_ucp_codec},
                  {YAZ_XMLNS_SRU_v1_response, 0, (Z_SOAP_fun) yaz_srw_codec},
                  {0, 0, 0}