Implement ZOOM_scanset_display_term
[yaz-moved-to-github.git] / doc / frontend.xml
index dbd2104..01d1933 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $Id: frontend.xml,v 1.16 2003-02-23 20:40:01 adam Exp $ -->
+<!-- $Id: frontend.xml,v 1.19 2003-11-19 19:07:26 adam Exp $ -->
  <chapter id="server"><title>Generic server</title>
   <sect1><title>Introduction</title>
    
@@ -13,7 +13,7 @@
 
    <para>
     If you have a database system that you would like to make available by
-    means of Z39.50 or SRW, &yaz; basically offers your two options. You
+    means of Z39.50, SRW o SRU, &yaz; basically offers your two options. You
     can use the APIs provided by the &asn;, &odr;, and &comstack;
     modules to
     create and decode PDUs, and exchange them with a client.
@@ -44,8 +44,7 @@
 
    <note>
     <para>
-     The &yaz; server does not provide full SRW functionality.
-     However, it provides an adapter for SRW (to Z39.50).
+     The &yaz; server does not support XCQL.
      </para>
    </note>
   </sect1>
@@ -333,8 +332,8 @@ bend_initresult (*bend_init)(bend_initrequest *r);
     </para>
 
     <para>
-     This handler is also called when operating in SRW mode - when
-     a connection has been made (even though SRW does not offer
+     This handler is also called when operating in SRW/SRU mode - when
+     a connection has been made (even though SRW/SRU does not offer
      this service).
     </para>
 
@@ -497,8 +496,8 @@ typedef struct {
 
     <para>
      The <function>bend_search</function> handler is also called when
-     the frontend server receives a SRW SearchRetrieveRequest.
-     For SRW, a CQL query is usually provided by the client.
+     the frontend server receives a SRW/SRU SearchRetrieveRequest.
+     For SRW/SRU, a CQL query is usually provided by the client.
      The CQL query is available as part of <literal>Z_Query</literal>
      structure (note that CQL is now part of Z39.50 via an external).
      To support CQL in existing implementations that only do Type-1,
@@ -509,8 +508,8 @@ typedef struct {
     <para>
      To maintain backwards compatibility, the frontend server
      of yaz always assume that error codes are BIB-1 diagnostics.
-     For SRW operation, a Bib-1 diagnostic code is mapped to
-     SRW diagnostic.
+     For SRW/SRU operation, a Bib-1 diagnostic code is mapped to
+     SRW/SRU diagnostic.
     </para>
     
     <synopsis>
@@ -535,13 +534,14 @@ typedef struct bend_fetch_rr {
     int errcode;               /* 0==success */
     char *errstring;           /* system error string or NULL */
     int surrogate_flag;        /* surrogate diagnostic */
+    char *schema;              /* string record schema input/output */
 } bend_fetch_rr;
     </synopsis>
 
     <para>
      The frontend server calls the <function>bend_fetch</function> handler
      when it needs database records to fulfill a Z39.50 Search Request, a
-     Z39.50 Present  Request or a SRW SearchRetrieveRequest.
+     Z39.50 Present Request or a SRW SearchRetrieveRequest.
      The <literal>setname</literal> is simply the name of the result set
      that holds the reference to the desired record.
      The <literal>number</literal> is the offset into the set (with 1
@@ -559,13 +559,13 @@ typedef struct bend_fetch_rr {
     </para>
 
     <para>
-     If a SRW SearchRetrieveRequest is received by the frontend server,
-     the <literal>referenceId</literal> is NULL, the <literal>request_format
-     </literal> (transfer syntax) is XML (OID name 
+     If a SRW/SRU SearchRetrieveRequest is received by the frontend server,
+     the <literal>referenceId</literal> is NULL and the
+     <literal>request_format</literal> (transfer syntax) is XML (OID name 
      <literal>VAL_TEXT_XML</literal>).
-     The schema for SRW is stored in the
+     The schema for SRW/SRU is stored in both the
      <literal>Z_RecordComposition</literal>
-     structure.
+     structure and <literal>schema</literal> (simple string).
     </para>
 
     <para>
@@ -573,7 +573,7 @@ typedef struct bend_fetch_rr {
      database that holds the
      record. <literal>len</literal> is the length of the record returned, in
      bytes, and <literal>record</literal> is a pointer to the record.
-     <literal>Last_in_set</literal> should be nonzero only if the record
+     <literal>last_in_set</literal> should be nonzero only if the record
      returned is the last one in the given result set.
      <literal>errcode</literal> and <literal>errstring</literal>, if
      given, will be interpreted as a global error pertaining to the
@@ -774,22 +774,59 @@ typedef struct bend_scan_rr {
    </para>
 
    <para>
-    For TCP/IP and SSL, the special hostname &quot;@&quot; is mapped to
-    the address <literal>INADDR_ANY</literal>, which causes the
-    server to listen on any local interface. 
-   </para>
-   
-   <para>
-    Examples:
-   <screen>
-    tcp:@:210
-
-    ssl:@:3000
-
-    unix:/tmp/yaz
-   </screen>
+    For TCP/IP and SSL, the special hostname <literal>@</literal> 
+    (at sign) is mapped to the address <literal>INADDR_ANY</literal>,
+    which causes the server to listen on any local interface. 
    </para>
 
+   <example><title>Running the GFS on Unix</title>
+    <para>
+     Assuming the server application <replaceable>appname</replaceable> is
+     started as root, the following will make it listen on port 210.
+     The server will change identity to <literal>nobody</literal>
+     and write its log to <filename>/var/log/app.log</filename>.
+     <screen>
+      <replaceable>appname</replaceable> -l /var/log/app.log -u nobody tcp:@:210
+     </screen>
+    </para>
+    <para>
+     The server will accept Z39.50 requests and offer SRW/SRU service
+     on port 210.
+    </para>
+   </example>
+   <example><title>Setting up Apache as SRW/SRU Frontend</title>
+    <para>
+     If you use <ulink url="http://httpd.apache.org/">Apache</ulink>
+     as your public web server and want to offer HTTP port 80
+     access to the YAZ server on 210, you can use the
+     <ulink url="http://httpd.apache.org/docs/mod/mod_proxy.html#proxypass">
+      <literal>ProxyPass</literal></ulink> 
+     directive.
+     If you have virtual host
+     <literal>srw.mydomain</literal> you can use the following directives
+     in Apache's httpd.conf:
+     <screen>
+      &lt;VirtualHost *>
+       ErrorLog /home/srw/logs/error_log
+       TransferLog /home/srw/logs/access_log
+       ProxyPass / http://srw.mydomain:210/
+      &lt;/VirualHost>
+     </screen>
+    </para>
+    <para>
+     The above for the Apache 1.3 series.
+    </para>
+   </example>
+   <example><title>Running a server with local access only</title>
+    <para>
+     Servers that is only being accessed from the local host should listen
+     on UNIX file socket rather than a Internet socket. To listen on
+     <filename>/tmp/mysocket</filename> start the server as follows:
+     <screen>
+      <replaceable>appname</replaceable> tcp:/tmp/mysocket
+     </screen>
+    </para>
+   </example>
   </sect1>
  </chapter>