Convert nativesyntax charset to ZOOM charset properly.
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 22 Jul 2008 10:16:26 +0000 (12:16 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 22 Jul 2008 10:16:26 +0000 (12:16 +0200)
m4
src/client.c
test/test_http_7.res
test/test_http_urls
test/test_icu_2.res

diff --git a/m4 b/m4
index a3d7a33..b076b76 160000 (submodule)
--- a/m4
+++ b/m4
@@ -1 +1 @@
-Subproject commit a3d7a3375702caae9794ae3a724e51ae9ee46ac3
+Subproject commit b076b768162950579fb9831b1f8dd8be5fdc3154
index 603ee21..26d1f51 100644 (file)
@@ -303,24 +303,41 @@ static void client_send_raw_present(struct client *cl)
     connection_continue(co);
 }
 
+static int nativesyntax_to_type(struct session_database *sdb, char *type)
+{
+    const char *s = session_setting_oneval(sdb, PZ_NATIVESYNTAX);
+
+    if (s && *s)
+    {
+        if (!strncmp(s, "iso2709", 7))
+        {
+            const char *cp = strchr(s, ';');
+            yaz_snprintf(type, 80, "xml; charset=%s", cp ? cp+1 : "marc-8s");
+        }
+        else if (!strncmp(s, "xml", 3))
+        {
+            strcpy(type, "xml");
+        }
+        else
+            return -1;
+        yaz_log(YLOG_LOG, "Returned type %s", type);
+        return 0;
+    }
+    return -1;
+}
+
 static void ingest_raw_record(struct client *cl, ZOOM_record rec)
 {
     const char *buf;
     int len;
-    char type[50];
+    char type[80];
 
     if (cl->show_raw->binary)
         strcpy(type, "raw");
     else
     {
         struct session_database *sdb = client_get_database(cl);
-        const char *cset;
-
-        const char *nativesyntax = session_setting_oneval(sdb, PZ_NATIVESYNTAX);
-        if (*nativesyntax && (cset = strchr(nativesyntax, ';')))
-            yaz_snprintf(type, sizeof(type)-1, "xml; charset=%s", cset);
-        else
-            strcpy(type, "xml");
+        nativesyntax_to_type(sdb, type);
     }
 
     buf = ZOOM_record_get(rec, type, &len);
@@ -414,6 +431,7 @@ void client_search_response(struct client *cl)
     }
 }
 
+
 void client_record_response(struct client *cl)
 {
     struct connection *co = cl->connection;
@@ -459,14 +477,8 @@ void client_record_response(struct client *cl)
                 {
                     struct session_database *sdb = client_get_database(cl);
                     const char *xmlrec;
-                    char type[128] = "xml";
-                    const char *nativesyntax =
-                        session_setting_oneval(sdb, PZ_NATIVESYNTAX);
-                    char *cset;
-                    
-                    if (*nativesyntax && (cset = strchr(nativesyntax, ';')))
-                        sprintf(type, "xml; charset=%s", cset + 1);
-                    
+                    char type[80];
+                    nativesyntax_to_type(sdb, type);
                     if ((xmlrec = ZOOM_record_get(rec, type, NULL)))
                     {
                         if (ingest_record(cl, xmlrec, cl->records))
index 781b985..838cea5 100644 (file)
@@ -1,2 +1,32 @@
-<?xml version="1.0"?>
-<record xmlns="http://www.loc.gov/MARC21/slim"><leader>00362nam  22001698a 4504</leader><controlfield tag="001">   11224467 </controlfield><controlfield tag="003">DLC</controlfield><controlfield tag="005">00000000000000.0</controlfield><controlfield tag="008">910710c19910701nju           00010 eng  </controlfield><datafield tag="010" ind1=" " ind2=" "><subfield code="a">11224467</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DLC</subfield><subfield code="c">DLC</subfield></datafield><datafield tag="050" ind1="0" ind2="0"><subfield code="a">123-xyz</subfield></datafield><datafield tag="100" ind1="1" ind2="0"><subfield code="a">Jack Collins</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">How to program a computer</subfield></datafield><datafield tag="260" ind1="1" ind2=" "><subfield code="a">Penguin</subfield></datafield><datafield tag="263" ind1=" " ind2=" "><subfield code="a">8710</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">p. cm.</subfield></datafield></record>
+<record xmlns="http://www.loc.gov/MARC21/slim">
+  <leader>00362nam a22001698a 4504</leader>
+  <controlfield tag="001">   11224467 </controlfield>
+  <controlfield tag="003">DLC</controlfield>
+  <controlfield tag="005">00000000000000.0</controlfield>
+  <controlfield tag="008">910710c19910701nju           00010 eng  </controlfield>
+  <datafield tag="010" ind1=" " ind2=" ">
+    <subfield code="a">11224467</subfield>
+  </datafield>
+  <datafield tag="040" ind1=" " ind2=" ">
+    <subfield code="a">DLC</subfield>
+    <subfield code="c">DLC</subfield>
+  </datafield>
+  <datafield tag="050" ind1="0" ind2="0">
+    <subfield code="a">123-xyz</subfield>
+  </datafield>
+  <datafield tag="100" ind1="1" ind2="0">
+    <subfield code="a">Jack Collins</subfield>
+  </datafield>
+  <datafield tag="245" ind1="1" ind2="0">
+    <subfield code="a">How to program a computer</subfield>
+  </datafield>
+  <datafield tag="260" ind1="1" ind2=" ">
+    <subfield code="a">Penguin</subfield>
+  </datafield>
+  <datafield tag="263" ind1=" " ind2=" ">
+    <subfield code="a">8710</subfield>
+  </datafield>
+  <datafield tag="300" ind1=" " ind2=" ">
+    <subfield code="a">p. cm.</subfield>
+  </datafield>
+</record>
index bc84f81..335c5e9 100644 (file)
@@ -23,5 +23,6 @@ http://localhost:9763/search.pz2?session=2&command=search&query=kubiak%20sts%C5%
 2
 http://localhost:9763/search.pz2?session=2&command=bytarget
 http://localhost:9763/search.pz2?session=1&command=search&query=computer
+1
 http://localhost:9763/search.pz2?session=1&command=record&id=title+how+to+program+a+computer+author+jack+collins+medium+book
 http://localhost:9763/search.pz2?session=1&command=record&id=title+how+to+program+a+computer+author+jack+collins+medium+book&offset=0&binary=1
index 48f18ee..27822f6 100644 (file)
@@ -4,9 +4,7 @@
 <clients>0</clients>
 <unconnected>0</unconnected>
 <connecting>0</connecting>
-<initializing>0</initializing>
-<searching>0</searching>
-<presenting>0</presenting>
+<working>0</working>
 <idle>0</idle>
 <failed>0</failed>
 <error>0</error>