Added a PID member to the argument hashed.
[simpleserver-moved-to-github.git] / SimpleServer.c
index e22809a..34b7e1b 100644 (file)
 #include <yaz/log.h>
 #include <yaz/wrbuf.h>
 #include <stdio.h>
+#include <unistd.h>
 #include <stdlib.h>
 #include <ctype.h>
 #ifdef ASN_COMPILED
 #include <yaz/ill.h>
 #endif
-
+#ifndef sv_undef               /* To fix the problem with Perl 5.6.0 */
+#define sv_undef PL_sv_undef
+#endif
 
 typedef struct {
        SV *handle;
@@ -276,6 +279,7 @@ int bend_search(void *handle, bend_search_rr *rr)
        hv_store(href, "HITS", 4, newSViv(0), 0);
        hv_store(href, "DATABASES", 9, newRV( (SV*) aref), 0);
        hv_store(href, "HANDLE", 6, zhandle->handle, 0);
+       hv_store(href, "PID", 3, newSViv(getpid()), 0);
        query = zquery2pquery(rr->query);
        if (query)
        {
@@ -442,6 +446,7 @@ int bend_fetch(void *handle, bend_fetch_rr *rr)
        hv_store(href, "ERR_STR", 7, newSVpv("", 0), 0);
        hv_store(href, "SUR_FLAG", 8, newSViv(0), 0);
        hv_store(href, "HANDLE", 6, zhandle->handle, 0);
+       hv_store(href, "PID", 3, newSViv(getpid()), 0);
        if (rr->comp)
        {
                composition = rr->comp;
@@ -582,6 +587,7 @@ int bend_present(void *handle, bend_present_rr *rr)
        /*oid_dotted = oid2dotted(rr->request_format_raw);
         hv_store(href, "REQ_FORM", 8, newSVpv((char *)oid_dotted->buf, oid_dotted->pos), 0);*/
        hv_store(href, "HITS", 4, newSViv(0), 0);
+       hv_store(href, "PID", 3, newSViv(getpid()), 0);
        if (rr->comp)
        {
                composition = rr->comp;
@@ -715,6 +721,7 @@ bend_initresult *bend_init(bend_initrequest *q)
        hv_store(href, "ERR_CODE", 8, newSViv(0), 0);
        hv_store(href, "PEER_NAME", 9, newSVpv(q->peer_name, 0), 0);
        hv_store(href, "HANDLE", 6, newSVsv(&sv_undef), 0);
+       hv_store(href, "PID", 3, newSViv(getpid()), 0);
 
        PUSHMARK(sp);   
 
@@ -798,17 +805,17 @@ void bend_close(void *handle)
 }
 
 
-#line 802 "SimpleServer.c"
+#line 809 "SimpleServer.c"
 XS(XS_Net__Z3950__SimpleServer_set_init_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_init_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_init_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 798 "SimpleServer.xs"
+#line 805 "SimpleServer.xs"
                init_ref = newSVsv(arg);
-#line 812 "SimpleServer.c"
+#line 819 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -817,12 +824,12 @@ XS(XS_Net__Z3950__SimpleServer_set_close_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_close_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_close_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 805 "SimpleServer.xs"
+#line 812 "SimpleServer.xs"
                close_ref = newSVsv(arg);
-#line 826 "SimpleServer.c"
+#line 833 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -831,12 +838,12 @@ XS(XS_Net__Z3950__SimpleServer_set_sort_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_sort_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_sort_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 812 "SimpleServer.xs"
+#line 819 "SimpleServer.xs"
                sort_ref = newSVsv(arg);
-#line 840 "SimpleServer.c"
+#line 847 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -845,12 +852,12 @@ XS(XS_Net__Z3950__SimpleServer_set_search_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_search_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_search_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 818 "SimpleServer.xs"
+#line 825 "SimpleServer.xs"
                search_ref = newSVsv(arg);
-#line 854 "SimpleServer.c"
+#line 861 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -859,12 +866,12 @@ XS(XS_Net__Z3950__SimpleServer_set_fetch_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_fetch_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_fetch_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 825 "SimpleServer.xs"
+#line 832 "SimpleServer.xs"
                fetch_ref = newSVsv(arg);
-#line 868 "SimpleServer.c"
+#line 875 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -873,12 +880,12 @@ XS(XS_Net__Z3950__SimpleServer_set_present_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_present_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_present_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 832 "SimpleServer.xs"
+#line 839 "SimpleServer.xs"
                present_ref = newSVsv(arg);
-#line 882 "SimpleServer.c"
+#line 889 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -887,12 +894,12 @@ XS(XS_Net__Z3950__SimpleServer_set_esrequest_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_esrequest_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_esrequest_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 839 "SimpleServer.xs"
+#line 846 "SimpleServer.xs"
                esrequest_ref = newSVsv(arg);
-#line 896 "SimpleServer.c"
+#line 903 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -901,12 +908,12 @@ XS(XS_Net__Z3950__SimpleServer_set_delete_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_delete_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_delete_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 846 "SimpleServer.xs"
+#line 853 "SimpleServer.xs"
                delete_ref = newSVsv(arg);
-#line 910 "SimpleServer.c"
+#line 917 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -915,12 +922,12 @@ XS(XS_Net__Z3950__SimpleServer_set_scan_handler)
 {
     dXSARGS;
     if (items != 1)
-       croak("Usage: Net::Z3950::SimpleServer::set_scan_handler(arg)");
+       Perl_croak(aTHX_ "Usage: Net::Z3950::SimpleServer::set_scan_handler(arg)");
     {
        SV *    arg = ST(0);
-#line 853 "SimpleServer.xs"
+#line 860 "SimpleServer.xs"
                scan_ref = newSVsv(arg);
-#line 924 "SimpleServer.c"
+#line 931 "SimpleServer.c"
     }
     XSRETURN_EMPTY;
 }
@@ -929,15 +936,16 @@ XS(XS_Net__Z3950__SimpleServer_start_server)
 {
     dXSARGS;
     {
-#line 859 "SimpleServer.xs"
+#line 866 "SimpleServer.xs"
                char **argv;
                char **argv_buf;
                char *ptr;
                int i;
                STRLEN len;
-#line 939 "SimpleServer.c"
+#line 946 "SimpleServer.c"
        int     RETVAL;
-#line 865 "SimpleServer.xs"
+       dXSTARG;
+#line 872 "SimpleServer.xs"
                argv_buf = (char **)xmalloc((items + 1) * sizeof(char *));
                argv = argv_buf;
                for (i = 0; i < items; i++)
@@ -949,9 +957,8 @@ XS(XS_Net__Z3950__SimpleServer_start_server)
                *argv_buf = NULL;
 
                RETVAL = statserv_main(items, argv, bend_init, bend_close);
-#line 953 "SimpleServer.c"
-       ST(0) = sv_newmortal();
-       sv_setiv(ST(0), (IV)RETVAL);
+#line 961 "SimpleServer.c"
+       XSprePUSH; PUSHi((IV)RETVAL);
     }
     XSRETURN(1);
 }