- partially recovered WS functionality (jobstat only)
authorAleš Křenek <ljocha@ics.muni.cz>
Wed, 1 Jun 2005 13:48:33 +0000 (13:48 +0000)
committerAleš Křenek <ljocha@ics.muni.cz>
Wed, 1 Jun 2005 13:48:33 +0000 (13:48 +0000)
- correct list conversions in ws_typeref

org.glite.lb.server/Makefile
org.glite.lb.server/examples/ws_jobstat.c
org.glite.lb.server/src/bkserverd.c
org.glite.lb.server/src/ws_fault.c
org.glite.lb.server/src/ws_query.c
org.glite.lb.server/src/ws_typemap.h
org.glite.lb.server/src/ws_typeref.c.T
org.glite.lb.server/src/ws_typeref.h

index 5613480..6483807 100644 (file)
@@ -20,11 +20,10 @@ gsoap_prefix=/opt/gsoap
 
 -include Makefile.inc
 
-GLITE_LB_SERVER_WITH_WS=no
+GLITE_LB_SERVER_WITH_WS=yes
 
 ifeq ($(GLITE_LB_SERVER_WITH_WS),yes)
-       gsoap_version=`${gsoap_prefix}/bin/soapcpp2 -version 2>&1 | cut -d' ' -f4 | perl -F\\\\. -nae '$$F[2] =~ s/\D*$$//; print $$F[2]+100*$$F[1]+10000*$$F[0]'`
-       WS_CFLAGS=-DGLITE_LB_SERVER_WITH_WS -DGSOAP_VERSION=${gsoap_version}
+       WS_CFLAGS=-DGLITE_LB_SERVER_WITH_WS 
 else
        WS_CFLAGS=
 endif
@@ -314,3 +313,9 @@ test_query_events.o: %.o: %.cpp
 %.lo: %.c
        ${COMPILE} -o $@ -c $<
 
+soap_version.h:
+       ${gsoap_prefix}/bin/soapcpp2 /dev/null
+       perl -ne '$$. == 2 && /.*([0-9])\.([0-9])\.([0-9]).*/ && printf "#define GSOAP_VERSION %d%02d%02d\n",$$1,$$2,$$3' soapH.h >$@
+       -rm soapC.cpp soapH.h soapStub.h soapClient.cpp soapServer.cpp soapClientLib.cpp soapServerLib.cpp
+
+bkserverd.o ws_fault.o: soap_version.h
index ea1e9cf..4bb2afd 100644 (file)
@@ -5,6 +5,7 @@
 #include "glite/lb/consumer.h"
 
 #include "bk_ws_H.h"
+#include "ws_typeref.h"
 
 #include "LoggingAndBookkeeping.nsmap"
 
@@ -30,9 +31,11 @@ int main(int argc,char** argv)
     edg_wll_Context                                            ctx;
     glite_gsplugin_Context                             gsplugin_ctx;
     struct soap                                                   *mydlo = soap_new();
-    struct edgwll2__JobStatusResponse  out;
+    struct _lbe__JobStatusResponse     out;
+    struct _lbe__JobStatus             in;     
+    struct lbt__jobFlags       flags = { 0, NULL };
     int                                                                        opt, err;
-       char                                                       *server = "http://localhost:8999/",
+       char                                                       *server = "http://localhost:9003/",
                                                                           *jobid = NULL,
                                                                           *name = NULL;
 
@@ -66,14 +69,17 @@ int main(int argc,char** argv)
 
     glite_gsplugin_set_udata(mydlo, ctx);
 
+    in.jobid = jobid;
+    in.flags = &flags;
 
-    switch (err = soap_call_edgwll2__JobStatus(mydlo, server, "", jobid,0,&out))
+
+    switch (err = soap_call___lb__JobStatus(mydlo, server, "",&in,&out))
        {
        case SOAP_OK:
                {
                edg_wll_JobStat s;
 
-               edg_wll_SoapToStatus(mydlo,out.status,&s);
+               edg_wll_SoapToStatus(mydlo,out.stat,&s);
                printstat(s, 0);
                }
                break;
@@ -99,6 +105,7 @@ static void printstat(edg_wll_JobStat stat, int level)
 {
     char        *s, *j, ind[10];
     int         i;
+    time_t     t;
 
 
     for (i=0; i < level; i++)
@@ -153,12 +160,13 @@ static void printstat(edg_wll_JobStat stat, int level)
                               stat.user_tags[i].tag,stat.user_tags[i].value);
     printf("%sstateEnterTime : %ld.%06ld\n", ind, stat.stateEnterTime.tv_sec,stat.stateEnterTime.tv_usec);
     printf("%sstateEnterTimes : \n",ind);
-    if (stat.stateEnterTimes)
-                for (i=1; i<=stat.stateEnterTimes[0]; i++)
-            printf("%s%14s  %s", ind, edg_wll_StatToString(i-1), (stat.stateEnterTimes[i] == 0) ?
-            "    - not available -\n" : ctime((time_t *) &stat.stateEnterTimes[i]));
+    if (stat.stateEnterTimes) for (i=1; i<=stat.stateEnterTimes[0]; i++) {
+       time_t  t = stat.stateEnterTimes[i];
+        printf("%s%14s  %s", ind, edg_wll_StatToString(i-1), (stat.stateEnterTimes[i] == 0) ?
+            "    - not available -\n" : ctime(&t));
+    }
     printf("%slastUpdateTime : %ld.%06ld\n", ind, stat.lastUpdateTime.tv_sec,stat.lastUpdateTime.tv_usec);
-       printf("%sexpectUpdate : %d\n", ind, stat.expectUpdate);
+    printf("%sexpectUpdate : %d\n", ind, stat.expectUpdate);
     printf("%sexpectFrom : %s\n", ind, stat.expectFrom);
     printf("%sacl : %s\n", ind, stat.acl);
     printf("\n");
index 10675ce..bcd6438 100644 (file)
@@ -28,6 +28,7 @@
 #include <globus_common.h>
 
 #ifdef GLITE_LB_SERVER_WITH_WS
+#include "soap_version.h"
 #include <stdsoap2.h>
 #include "glite/security/glite_gsplugin.h"
 #endif /* GLITE_LB_SERVER_WITH_WS */
@@ -861,7 +862,7 @@ int bk_handle_connection(int conn, struct timeval *timeout, void *data)
                char *errt, *errd;
 
                edg_wll_Error(ctx, &errt, &errd);
-               dprintf(("[%d] %s (%s)\n", getpid(), errt, errd));
+               dprintf(("[%d] %s (%s)\n[%d]\tignored, continuing without VOMS\n", getpid(), errt, errd,getpid()));
                free(errt); free(errd);
                edg_wll_ResetError(ctx);
        }
index 74ef683..d2a10fc 100644 (file)
@@ -1,6 +1,7 @@
 #include <string.h>
 
 #include "glite/lb/context-int.h"
+#include "soap_version.h"
 
 #include "bk_ws_H.h"
 #include "bk_ws_Stub.h"
@@ -10,20 +11,20 @@ void edg_wll_ErrToFault(const edg_wll_Context ctx,struct soap *soap)
 {
        char    *et,*ed;
        struct SOAP_ENV__Detail *detail = soap_malloc(soap,sizeof *detail);
-       struct _GenericLBFault *f = soap_malloc(soap,sizeof *f);
+       struct _genericFault *f = soap_malloc(soap,sizeof *f);
 
 
-       f->edgwll__GenericLBFault = soap_malloc(soap,sizeof *f->edgwll__GenericLBFault);
+       f->lbe__genericFault = soap_malloc(soap,sizeof *f->lbe__genericFault);
 
-       f->edgwll__GenericLBFault->code = edg_wll_Error(ctx,&et,&ed);
-       f->edgwll__GenericLBFault->text = soap_malloc(soap,strlen(et)+1);
-       strcpy(f->edgwll__GenericLBFault->text,et); 
+       f->lbe__genericFault->code = edg_wll_Error(ctx,&et,&ed);
+       f->lbe__genericFault->text = soap_malloc(soap,strlen(et)+1);
+       strcpy(f->lbe__genericFault->text,et); 
        free(et);
-       f->edgwll__GenericLBFault->description = soap_malloc(soap,strlen(ed)+1);
-       strcpy(f->edgwll__GenericLBFault->description,ed); 
+       f->lbe__genericFault->description = soap_malloc(soap,strlen(ed)+1);
+       strcpy(f->lbe__genericFault->description,ed); 
        free(ed);
 
-       detail->__type = SOAP_TYPE__GenericLBFault;
+       detail->__type = SOAP_TYPE__genericFault;
 #if GSOAP_VERSION >= 20700
        detail->fault = f;
 #else
@@ -42,15 +43,15 @@ void edg_wll_FaultToErr(const struct soap *soap,edg_wll_Context ctx)
        struct SOAP_ENV__Detail *detail = soap->version == 2 ?
                soap->fault->SOAP_ENV__Detail : soap->fault->detail;
 
-       struct edgwll__GenericLBFaultType       *f;
+       struct lbt__genericFault        *f;
 
-       if (detail->__type == SOAP_TYPE__GenericLBFault) {
+       if (detail->__type == SOAP_TYPE__genericFault) {
 #if GSOAP_VERSION >= 20700
-               f = ((struct _GenericLBFault *) detail->fault)
-                       ->edgwll__GenericLBFault;
+               f = ((struct _genericFault *) detail->fault)
+                       ->lbe__genericFault;
 #else
-               f = ((struct _GenericLBFault *) detail->value)
-                       ->edgwll__GenericLBFault;
+               f = ((struct _genericFault *) detail->value)
+                       ->lbe__genericFault;
 #endif
                edg_wll_SetError(ctx,f->code,f->description);
        }
index 1470d6a..1c0bc46 100644 (file)
@@ -24,21 +24,22 @@ int edgwll2__GetVersion(
 }
 #endif
 
-/*
-int edgwll2__JobStatus(
-        struct soap                                               *soap,
-        char                                                      *jobid,
-        struct edgwll__JobStatFlags               *flags,
-        struct edgwll2__JobStatusResponse  *out)
-*/
+SOAP_FMAC5 int SOAP_FMAC6 __lb__GetVersion(
+       struct soap* soap,
+       struct _lbe__GetVersion *in,
+       struct _lbe__GetVersionResponse *out)
+{
+}
+
 SOAP_FMAC5 int SOAP_FMAC6 __lb__JobStatus(
        struct soap     *soap,
        struct _lbe__JobStatus *in,
-       struct _lbe__JobStatusResponse *out);
+       struct _lbe__JobStatusResponse *out)
 {
        edg_wll_Context         ctx = (edg_wll_Context) glite_gsplugin_get_udata(soap);
        edg_wlc_JobId           j;
        edg_wll_JobStat         s;
+       int     flags;
 
 
        if ( edg_wlc_JobIdParse(in->jobid, &j) )
@@ -48,17 +49,27 @@ SOAP_FMAC5 int SOAP_FMAC6 __lb__JobStatus(
                return SOAP_FAULT;
        }
 
-       if ( edg_wll_JobStatus(ctx, j, 0, &s) )
+       edg_wll_SoapToJobStatFlags(in->flags, &flags);
+
+       if ( edg_wll_JobStatus(ctx, j, flags, &s) )
        {
                edg_wll_ErrToFault(ctx, soap);
                return SOAP_FAULT;
        }
 
-       edg_wll_StatusToSoap(soap, &s, &(out->status));
+       edg_wll_StatusToSoap(soap, &s, &(out->stat));
 
        return SOAP_OK;
 }
 
+SOAP_FMAC5 int SOAP_FMAC6 __lb__QueryJobs(
+       struct soap *soap,
+       struct _lbe__QueryJobs *in,
+       struct _lbe__QueryJobsResponse *out)
+{
+}
+
+
 #if 0
 int edgwll2__QueryJobs(
        struct soap                                                *soap,
@@ -195,3 +206,20 @@ cleanup:
 }
 */
 #endif
+
+
+/* TODO */
+SOAP_FMAC5 int SOAP_FMAC6 __lb__UserJobs(
+       struct soap *soap,
+       struct _lbe__UserJobs *in,
+       struct _lbe__UserJobsResponse *out)
+{
+}
+
+SOAP_FMAC5 int SOAP_FMAC6 __lb__QueryEvents(
+       struct soap *soap,
+       struct _lbe__QueryEvents *in,
+       struct _lbe__QueryEventsResponse *out)
+{
+}
+
index 10f1442..66a1086 100644 (file)
@@ -1,52 +1,50 @@
 #if GSOAP_VERSION >= 20700
 
-#define UNDEF          edgwll__QueryAttr__UNDEF
-
-#define JOBID          edgwll__QueryAttr__JOBID
-#define OWNER          edgwll__QueryAttr__OWNER
-#define STATUS         edgwll__QueryAttr__STATUS
-#define LOCATION       edgwll__QueryAttr__LOCATION
-#define DESTINATION    edgwll__QueryAttr__DESTINATION
-#define DONECODE       edgwll__QueryAttr__DONECODE
-#define USERTAG                edgwll__QueryAttr__USERTAG
-#define TIME           edgwll__QueryAttr__TIME
-#define LEVEL          edgwll__QueryAttr__LEVEL
-#define HOST           edgwll__QueryAttr__HOST
-#define SOURCE         edgwll__QueryAttr__SOURCE
-#define INSTANCE       edgwll__QueryAttr__INSTANCE
-#define EVENT_TYPE     edgwll__QueryAttr__EVENT_TYPE
-#define CHKPT_TAG      edgwll__QueryAttr__CHKPT_TAG
-#define RESUBMITTED    edgwll__QueryAttr__RESUBMITTED
-#define PARENT         edgwll__QueryAttr__PARENT
-#define EXITCODE       edgwll__QueryAttr__EXITCODE
-
-#define EQUAL          edgwll__QueryOp__EQUAL
-#define UNEQUAL                edgwll__QueryOp__UNEQUAL
-#define LESS           edgwll__QueryOp__LESS
-#define GREATER                edgwll__QueryOp__GREATER
-#define WITHIN         edgwll__QueryOp__WITHIN
-
-#define SUBMITTED      edgwll__JobStatCode__SUBMITTED
-#define WAITING                edgwll__JobStatCode__WAITING
-#define READY          edgwll__JobStatCode__READY
-#define SCHEDULED      edgwll__JobStatCode__SCHEDULED
-#define RUNNING                edgwll__JobStatCode__RUNNING
-#define DONE           edgwll__JobStatCode__DONE
-#define CLEARED                edgwll__JobStatCode__CLEARED
-#define ABORTED                edgwll__JobStatCode__ABORTED
-#define CANCELLED      edgwll__JobStatCode__CANCELLED
-#define UNKNOWN                edgwll__JobStatCode__UNKNOWN
-#define PURGED         edgwll__JobStatCode__PURGED
-
-#define SIMPLE         edgwll__StatJobType__SIMPLE
-#define DAG            edgwll__StatJobType__DAG
-
-#define OK             edgwll__StatDoneCode__OK
-#define FAILED         edgwll__StatDoneCode__FAILED
-#define CANCELLED_     edgwll__StatDoneCode__CANCELLED
-
-#define CLASSADS       edgwll__JobStatFlag__CLASSADS
-#define CHILDREN       edgwll__JobStatFlag__CHILDREN
-#define CHILDSTAT      edgwll__JobStatFlag__CHILDSTAT
+#define JOBID          lbt__queryAttr__JOBID
+#define OWNER          lbt__queryAttr__OWNER
+#define STATUS         lbt__queryAttr__STATUS
+#define LOCATION       lbt__queryAttr__LOCATION
+#define DESTINATION    lbt__queryAttr__DESTINATION
+#define DONECODE       lbt__queryAttr__DONECODE
+#define USERTAG                lbt__queryAttr__USERTAG
+#define TIME           lbt__queryAttr__TIME
+#define LEVEL          lbt__queryAttr__LEVEL
+#define HOST           lbt__queryAttr__HOST
+#define SOURCE         lbt__queryAttr__SOURCE
+#define INSTANCE       lbt__queryAttr__INSTANCE
+#define EVENTTYPE      lbt__queryAttr__EVENTTYPE
+#define CHKPTTAG       lbt__queryAttr__CHKPTTAG
+#define RESUBMITTED    lbt__queryAttr__RESUBMITTED
+#define PARENT         lbt__queryAttr__PARENT
+#define EXITCODE       lbt__queryAttr__EXITCODE
+
+#define EQUAL          lbt__queryOp__EQUAL
+#define UNEQUAL                lbt__queryOp__UNEQUAL
+#define LESS           lbt__queryOp__LESS
+#define GREATER                lbt__queryOp__GREATER
+#define WITHIN         lbt__queryOp__WITHIN
+
+#define SUBMITTED      lbt__statName__SUBMITTED
+#define WAITING                lbt__statName__WAITING
+#define READY          lbt__statName__READY
+#define SCHEDULED      lbt__statName__SCHEDULED
+#define RUNNING                lbt__statName__RUNNING
+#define DONE           lbt__statName__DONE
+#define CLEARED                lbt__statName__CLEARED
+#define ABORTED                lbt__statName__ABORTED
+#define CANCELLED      lbt__statName__CANCELLED
+#define UNKNOWN                lbt__statName__UNKNOWN
+#define PURGED         lbt__statName__PURGED
+
+#define SIMPLE         lbt__jobtype__SIMPLE
+#define DAG            lbt__jobtype__DAG
+
+#define OK             lbt__doneCode__OK
+#define FAILED         lbt__doneCode__FAILED
+#define CANCELLED_     lbt__doneCode__CANCELLED
+
+#define CLASSADS       lbt__jobFlagsValue__CLASSADS
+#define CHILDREN       lbt__jobFlagsValue__CHILDREN
+#define CHILDSTAT      lbt__jobFlagsValue__CHILDSTAT
 
 #endif
index 2fb439d..e19553e 100644 (file)
@@ -3,17 +3,20 @@
 #include <string.h>
 #include <stdsoap2.h>
 
+#include "soap_version.h"
 #include "bk_ws_H.h"
 #include "ws_typemap.h"
 
 #include "glite/lb/consumer.h"
 /* XXX: references only, src and dest share pointers */
 
-void edg_wll_JobStatCodeToSoap(edg_wll_JobStatCode in, enum edgwll__JobStatCode *out)
+void edg_wll_JobStatCodeToSoap(edg_wll_JobStatCode in, enum lbt__statName *out)
 {
        switch ( in )
        {
-       case EDG_WLL_JOB_UNDEF: *out = UNDEF; break;
+/* XXX: these two should never occur */
+       case EDG_WLL_NUMBER_OF_STATCODES:
+       case EDG_WLL_JOB_UNDEF: *out = -1; break;
 @@@{
        for my $stat ($status->getTypesOrdered) {
                my $u = uc $stat;
@@ -26,11 +29,11 @@ void edg_wll_JobStatCodeToSoap(edg_wll_JobStatCode in, enum edgwll__JobStatCode
        }
 }
 
-void edg_wll_SoapToJobStatCode(enum edgwll__JobStatCode in, edg_wll_JobStatCode *out)
+void edg_wll_SoapToJobStatCode(enum lbt__statName in, edg_wll_JobStatCode *out)
 {
        switch ( in )
        {
-       case UNDEF: *out = EDG_WLL_JOB_UNDEF; break;
+//     case UNDEF: *out = EDG_WLL_JOB_UNDEF; break;
 @@@{
        for my $stat ($status->getTypesOrdered) {
                my $u = uc $stat;
@@ -43,10 +46,11 @@ void edg_wll_SoapToJobStatCode(enum edgwll__JobStatCode in, edg_wll_JobStatCode
        }
 }
 
-int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct edgwll__JobStat **dest)
+int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct lbt__jobStatus **dest)
 {
-       int     i;
-       struct edgwll__JobStat *js;
+       int     i,j;
+       char    *s;
+       struct lbt__jobStatus *js;
 
        if ( !(js = soap_malloc(soap, sizeof(*js))) ) return SOAP_FAULT;
        memset(js, 0, sizeof(*js));
@@ -59,25 +63,70 @@ int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct edg
                my $usuc = $_;
                $usuc = $1.uc($2).$3 while ($usuc =~ /([^_]*)_([a-z])(.*)/);
                if ($ft eq 'jobid') {
-                       gen "\tjs->$usuc = edg_wlc_JobIdUnparse(src->$_);\n";
+                       gen "\ts = edg_wlc_JobIdUnparse(src->$_);\n";
+                       gen "\tjs->$usuc = soap_strdup(soap,s); free(s);\n";
                }
                elsif ($ft eq 'strlist') {
-                       gen "\tfor (i=0; src->$_ && src->$_\[i]; i++);\n";
-                       gen "\tjs->__size$usuc = i;\n";
-                       gen "\tjs->$usuc = src->$_;\n";
+                       gen qq{
+!      for (i=0; src->$_ && src->$_\[i]; i++);
+!      js->__size$usuc = i;
+!      js->$usuc = soap_malloc(soap,sizeof(char *) * i);
+!      for (j=0; j<i; j++) js->$usuc\[j] = soap_strdup(soap,src->$_\[j]);
+};
                } elsif ($ft eq 'intlist') {
-                       gen "\tjs->__size$usuc = src->$_ ? src->$_\[0] : 0;\n";
-                       gen "\tjs->$usuc = src->$_ ? src->$_ + 1 : NULL;\n";
-               } elsif ($ft eq 'stslist' || $ft eq 'taglist') {
-# FIXME
-                       gen "\tjs->__size$usuc = 0;\n";
-                       gen "\tjs->$usuc = NULL;\n";
+                       my %fmap = ( children_hist=>'count', stateEnterTimes=>'time');
+                       gen qq{
+!      /* XXX: don't count UNDEF */
+!      if (src->$_) {
+!              struct lbt__${usuc}Item **h = soap_malloc(soap,sizeof *h * (EDG_WLL_NUMBER_OF_STATCODES-1));
+!              js->__size$usuc = EDG_WLL_NUMBER_OF_STATCODES-1;
+!              for (i=1; i<EDG_WLL_NUMBER_OF_STATCODES; i++) {
+!                      h[i-1] = soap_malloc(soap, sizeof **h);
+!                      edg_wll_JobStatCodeToSoap(i,&h[i-1]->state);
+!                      h[i-1]->$fmap{$_} = src->$_\[i];
+!              }
+!              js->$usuc = h;
+!      }
+!      else {
+!              js->__size$usuc = 0;
+!              js->$usuc = NULL;
+!      }
+};
+               } elsif ($ft eq 'taglist') {
+                       gen qq{
+!      {
+!              struct lbt__tagValue    *t,**tl = NULL;
+!              for (i=0; src->$_ && src->$_\[i].tag; i++) {
+!                      t = soap_malloc(soap,sizeof *t);
+!                      tl = realloc(tl,(i+1) * sizeof *tl);
+!                      t->tag = soap_strdup(soap,src->$_\[i].tag);
+!                      t->value = soap_strdup(soap,src->$_\[i].value);
+!                      tl[i] = t;
+!              }
+!              js->__size$usuc = i;
+!              if (i) {
+!                      js->$usuc = soap_malloc(soap,i * sizeof *tl);
+!                      memcpy(js->$usuc,tl,i * sizeof *tl);
+!                      free(tl);
+!              } else js->$usuc = NULL;
+!      }
+};
+               } elsif ($ft eq 'stslist') {
+                       gen qq{
+!      for (i=0; src->$_ && src->$_\[i].state; i++);
+!      if ((js->__size$usuc = i)) {
+!              js->$usuc = soap_malloc(soap,i * sizeof *js->$usuc);
+!              for (j=0; j<i; i++) edg_wll_StatusToSoap(soap,src->$_+j,&js->$usuc\[j]);
+!      }
+!      else js->$usuc = NULL;
+};
                } elsif ($ft eq 'timeval') {
                        gen "\tjs->$usuc = soap_malloc(soap,sizeof *js->$usuc);\n";
                        gen "\tjs->$usuc->tvSec = src->$_.tv_sec;\n";
                        gen "\tjs->$usuc->tvUsec = src->$_.tv_usec;\n";
-               }
-               else { gen "\tjs->$usuc = src->$_;\n"; }
+               } elsif ($ft eq 'string') {
+                       gen "\tjs->$usuc = soap_strdup(soap,src->$_);\n";
+               } else { gen "\tjs->$usuc = src->$_;\n"; }
        }
 @@@}
 
@@ -85,8 +134,10 @@ int edg_wll_StatusToSoap(struct soap *soap,edg_wll_JobStat const *src,struct edg
        return SOAP_OK;
 }
 
-void edg_wll_SoapToStatus(struct soap *soap,struct edgwll__JobStat const *src,edg_wll_JobStat *dest)
+void edg_wll_SoapToStatus(struct soap *soap,struct lbt__jobStatus const *src,edg_wll_JobStat *dest)
 {
+       int     i;
+
        memset(dest,0,sizeof *dest);
        edg_wll_SoapToJobStatCode(src->state, &(dest->state));
 
@@ -101,17 +152,45 @@ void edg_wll_SoapToStatus(struct soap *soap,struct edgwll__JobStat const *src,ed
                if ($ft eq 'jobid') {
                        gen "\tif (src->$usuc) edg_wlc_JobIdParse(src->$usuc,&dest->$_);\n";
                } elsif ($ft eq 'strlist') {
+                       gen "\tfor (i=0; i<src->__size$usuc; i++) soap_unlink(soap,src->$usuc\[i]);\n";
                        gen "\tsoap_unlink(soap,src->$usuc);\n";
                        gen "\tdest->$_ = realloc(src->$usuc,sizeof(*dest->$_) * (src->__size$usuc + 1));\n";
                        gen "\tdest->$_\[src->__size$usuc] = NULL;\n";
                } elsif ($ft eq 'intlist') {
-                       gen "\tsoap_unlink(soap,src->$usuc);\n";
-                       gen "\tdest->$_ = realloc(src->$usuc,sizeof(*dest->$_) * (src->__size$usuc + 1));\n";
-                       gen "\tmemmove(dest->$_ + 1,dest->$_,sizeof(*dest->$_) * (src->__size$usuc));\n";
-                       gen "\tdest->$_\[0] = src->__size$usuc;\n";
-               } elsif ($ft eq 'stslist' || $ft eq 'taglist') {
-# FIXME
-                       gen "\tdest->$_ = NULL;\n";
+# XXX: only EDG_WLL_NUMBER_OF_STATCODES long lists work
+                       my %fmap = ( children_hist=>'count', stateEnterTimes=>'time');
+                       gen qq {
+!      if (src->__size$usuc) {
+!              dest->$_ = calloc(EDG_WLL_NUMBER_OF_STATCODES+1, sizeof *dest->$_);
+!              dest->$_\[0] = src->__size$usuc;
+!              for (i=0; i<src->__size$usuc; i++) {
+!                      edg_wll_JobStatCode     s;
+!                      edg_wll_SoapToJobStatCode(src->$usuc\[i]->state,&s);
+!                      assert(s>=0); assert(s<EDG_WLL_NUMBER_OF_STATCODES);
+!                      dest->$_\[s+1] = src->$usuc\[i]->$fmap{$_};
+!              }
+!      }
+!      else dest->$_ = NULL;
+};
+               } elsif ($ft eq 'stslist') {
+                       gen qq{
+!      if (src->__size$usuc) {
+!              dest->$_ = calloc(src->__size$usuc + 1,sizeof *dest->$_);
+!              for (i=0; i<src->__size$usuc; i++) edg_wll_SoapToStatus(soap,src->$usuc\[i],dest->$_ + i);
+!      }
+!      else dest->$_ = NULL;
+};
+               } elsif ($ft eq 'taglist') {
+                       gen qq{
+       if (src->__size$usuc) {
+               dest->$_ = calloc(src->__size$usuc + 1,sizeof *dest->$_);
+               for (i=0; i<src->__size$usuc; i++) {
+                       soap_unlink(soap,dest->$_\[i].tag = src->$usuc\[i]->tag);
+                       soap_unlink(soap,dest->$_\[i].tag = src->$usuc\[i]->tag);
+               }
+       }
+       else dest->$_ = NULL;
+};
                } elsif ($ft eq 'timeval') {
                        gen "\tdest->$_.tv_sec = src->$usuc->tvSec;\n";
                        gen "\tdest->$_.tv_usec = src->$usuc->tvUsec;\n";
@@ -125,7 +204,7 @@ void edg_wll_SoapToStatus(struct soap *soap,struct edgwll__JobStat const *src,ed
 @@@}
 }
 
-void edg_wll_SoapToJobStatFlags(const struct edgwll__JobStatFlags *in, int *out)
+void edg_wll_SoapToJobStatFlags(const struct lbt__jobFlags *in, int *out)
 {
        int             i;
 
@@ -139,7 +218,7 @@ void edg_wll_SoapToJobStatFlags(const struct edgwll__JobStatFlags *in, int *out)
        }
 }
 
-int edg_wll_JobStatFlagsToSoap(struct soap *soap, const int in, struct edgwll__JobStatFlags *out)
+int edg_wll_JobStatFlagsToSoap(struct soap *soap, const int in, struct lbt__jobFlags *out)
 {
        int             i = 0;
 
@@ -159,11 +238,12 @@ int edg_wll_JobStatFlagsToSoap(struct soap *soap, const int in, struct edgwll__J
        return SOAP_OK;
 }
 
-void edg_wll_SoapToAttr(const enum edgwll__QueryAttr in, edg_wll_QueryAttr *out)
+#if 0
+void edg_wll_SoapToAttr(const enum lbt__queryAttr in, edg_wll_QueryAttr *out)
 {
        switch ( in )
        {
-       case UNDEF: *out = EDG_WLL_QUERY_ATTR_UNDEF; break;
+//     case UNDEF: *out = EDG_WLL_QUERY_ATTR_UNDEF; break;
        case JOBID: *out = EDG_WLL_QUERY_ATTR_JOBID; break;
        case OWNER: *out = EDG_WLL_QUERY_ATTR_OWNER; break;
        case STATUS: *out = EDG_WLL_QUERY_ATTR_STATUS; break;
@@ -172,12 +252,12 @@ void edg_wll_SoapToAttr(const enum edgwll__QueryAttr in, edg_wll_QueryAttr *out)
        case DONECODE: *out = EDG_WLL_QUERY_ATTR_DONECODE; break;
        case USERTAG: *out = EDG_WLL_QUERY_ATTR_USERTAG; break;
        case TIME: *out = EDG_WLL_QUERY_ATTR_TIME; break;
-       case LEVEL: *out = EDG_WLL_QUERY_ATTR_LEVEL; break;
+//     case LEVEL: *out = EDG_WLL_QUERY_ATTR_LEVEL; break;
        case HOST: *out = EDG_WLL_QUERY_ATTR_HOST; break;
        case SOURCE: *out = EDG_WLL_QUERY_ATTR_SOURCE; break;
        case INSTANCE: *out = EDG_WLL_QUERY_ATTR_INSTANCE; break;
-       case EVENT_TYPE: *out = EDG_WLL_QUERY_ATTR_EVENT_TYPE; break;
-       case CHKPT_TAG: *out = EDG_WLL_QUERY_ATTR_CHKPT_TAG; break;
+       case EVENTTYPE: *out = EDG_WLL_QUERY_ATTR_EVENT_TYPE; break;
+       case CHKPTTAG: *out = EDG_WLL_QUERY_ATTR_CHKPT_TAG; break;
        case RESUBMITTED: *out = EDG_WLL_QUERY_ATTR_RESUBMITTED; break;
        case PARENT: *out = EDG_WLL_QUERY_ATTR_PARENT; break;
        case EXITCODE: *out = EDG_WLL_QUERY_ATTR_EXITCODE; break;
@@ -185,11 +265,11 @@ void edg_wll_SoapToAttr(const enum edgwll__QueryAttr in, edg_wll_QueryAttr *out)
        }
 }
 
-void edg_wll_AttrToSoap(const edg_wll_QueryAttr in, enum edgwll__QueryAttr *out)
+void edg_wll_AttrToSoap(const edg_wll_QueryAttr in, enum lbt__queryAttr *out)
 {
        switch ( in )
        {
-       case EDG_WLL_QUERY_ATTR_UNDEF: *out = UNDEF; break;
+       case EDG_WLL_QUERY_ATTR_UNDEF: *out = -1; break;
        case EDG_WLL_QUERY_ATTR_JOBID: *out = JOBID; break;
        case EDG_WLL_QUERY_ATTR_OWNER: *out = OWNER; break;
        case EDG_WLL_QUERY_ATTR_STATUS: *out = STATUS; break;
@@ -198,12 +278,12 @@ void edg_wll_AttrToSoap(const edg_wll_QueryAttr in, enum edgwll__QueryAttr *out)
        case EDG_WLL_QUERY_ATTR_DONECODE: *out = DONECODE; break;
        case EDG_WLL_QUERY_ATTR_USERTAG: *out = USERTAG; break;
        case EDG_WLL_QUERY_ATTR_TIME: *out = TIME; break;
-       case EDG_WLL_QUERY_ATTR_LEVEL: *out = LEVEL; break;
+//     case EDG_WLL_QUERY_ATTR_LEVEL: *out = LEVEL; break;
        case EDG_WLL_QUERY_ATTR_HOST: *out = HOST; break;
        case EDG_WLL_QUERY_ATTR_SOURCE: *out = SOURCE; break;
        case EDG_WLL_QUERY_ATTR_INSTANCE: *out = INSTANCE; break;
-       case EDG_WLL_QUERY_ATTR_EVENT_TYPE: *out = EVENT_TYPE; break;
-       case EDG_WLL_QUERY_ATTR_CHKPT_TAG: *out = CHKPT_TAG; break;
+       case EDG_WLL_QUERY_ATTR_EVENT_TYPE: *out = EVENTTYPE; break;
+       case EDG_WLL_QUERY_ATTR_CHKPT_TAG: *out = CHKPTTAG; break;
        case EDG_WLL_QUERY_ATTR_RESUBMITTED: *out = RESUBMITTED; break;
        case EDG_WLL_QUERY_ATTR_PARENT: *out = PARENT; break;
        case EDG_WLL_QUERY_ATTR_EXITCODE: *out = EXITCODE; break;
@@ -211,7 +291,7 @@ void edg_wll_AttrToSoap(const edg_wll_QueryAttr in, enum edgwll__QueryAttr *out)
        }
 }
 
-void edg_wll_SoapToQueryOp(const enum edgwll__QueryOp in, edg_wll_QueryOp *out)
+void edg_wll_SoapToQueryOp(const enum lbt__queryOp in, edg_wll_QueryOp *out)
 {
        switch ( in )
        {
@@ -223,7 +303,7 @@ void edg_wll_SoapToQueryOp(const enum edgwll__QueryOp in, edg_wll_QueryOp *out)
        }
 }
 
-void edg_wll_QueryOpToSoap(const edg_wll_QueryOp in, enum edgwll__QueryOp *out)
+void edg_wll_QueryOpToSoap(const edg_wll_QueryOp in, enum lbt__queryOp *out)
 {
        switch ( in )
        {
@@ -237,7 +317,7 @@ void edg_wll_QueryOpToSoap(const edg_wll_QueryOp in, enum edgwll__QueryOp *out)
 
 int edg_wll_SoapToQueryVal(
        const edg_wll_QueryAttr                         attr,
-       const struct edgwll__QueryRecValue *in,
+       const struct lbt__queryRecValue *in,
        union edg_wll_QueryVal                     *out)
 {
        assert(in); assert(out);
@@ -261,7 +341,7 @@ int edg_wll_QueryValToSoap(
        struct soap                                        *soap,
        const edg_wll_QueryAttr                 attr,
        const union edg_wll_QueryVal   *in,
-       struct edgwll__QueryRecValue   *out)
+       struct lbt__queryRecValue   *out)
 {
        assert(in); assert(out);
        memset(out, 0, sizeof(*out));
@@ -305,8 +385,8 @@ int edg_wll_QueryValToSoap(
 }
 
 int edg_wll_SoapToQueryRec(
-       const enum edgwll__QueryAttr    attr,
-       const struct edgwll__QueryRec  *in,
+       const edg_wll_QueryAttr attr,
+       const struct lbt__queryRecord  *in,
        edg_wll_QueryRec                           *out)
 {
        assert(attr); assert(in); assert(out);
@@ -342,9 +422,9 @@ err:
 int edg_wll_QueryRecToSoap(
        struct soap                                *soap,
        const edg_wll_QueryRec     *in,
-       struct edgwll__QueryRec   **out)
+       struct lbt__queryRecord   **out)
 {
-       struct edgwll__QueryRec    *qr;
+       struct lbt__queryRecord    *qr;
 
 
        assert(in); assert(out);
@@ -381,7 +461,7 @@ ret:
        return SOAP_OK;
 }
 
-int edg_wll_SoapToQueryConds(const struct edgwll__QueryCondition *in, edg_wll_QueryRec **out)
+int edg_wll_SoapToQueryConds(const struct lbt__queryConditions *in, edg_wll_QueryRec **out)
 {
        int                                     i;
        edg_wll_QueryRec   *qr;
@@ -405,10 +485,10 @@ err:
 int edg_wll_QueryCondsToSoap(
        struct soap                                        *soap,
        const edg_wll_QueryRec             *in,
-       struct edgwll__QueryCondition **out)
+       struct lbt__queryConditions **out)
 {
        int                                                             i;
-       struct edgwll__QueryCondition  *qc;
+       struct lbt__queryConditions  *qc;
 
 
        assert(out);
@@ -429,7 +509,7 @@ ret:
        return SOAP_OK;
 }
 
-int edg_wll_SoapToQueryCondsExt(const struct edgwll__QueryConditions *in, edg_wll_QueryRec ***out)
+int edg_wll_SoapToQueryCondsExt(const struct lbt__queryConditions *in, edg_wll_QueryRec ***out)
 {
        int                                     i;
        edg_wll_QueryRec  **qr;
@@ -459,10 +539,10 @@ err:
 int edg_wll_QueryCondsExtToSoap(
        struct soap                                                        *soap,
        const edg_wll_QueryRec                            **in,
-       struct edgwll__QueryConditions            **out)
+       struct lbt__queryConditions               **out)
 {
        int                                                             i;
-       struct edgwll__QueryConditions *qc;
+       struct lbt__queryConditions *qc;
 
 
        assert(out);
@@ -486,7 +566,7 @@ int edg_wll_JobsQueryResToSoap(
        struct soap                                                *soap,
        const edg_wlc_JobId                                *jobs,
        const edg_wll_JobStat                      *states,
-       struct edgwll2__QueryJobsResponse  *out)
+       struct _lbe__QueryJobsResponse  *out)
 {
        int                                                     i;
 
@@ -520,3 +600,5 @@ int edg_wll_JobsQueryResToSoap(
 
        return SOAP_OK;
 }
+
+#endif
index 3202547..0a449ab 100644 (file)
@@ -5,61 +5,61 @@
 extern "C" {
 #endif
 
-extern void edg_wll_JobStatCodeToSoap(edg_wll_JobStatCode, enum edgwll__JobStatCode *);
-extern void edg_wll_SoapToJobStatCode(enum edgwll__JobStatCode, edg_wll_JobStatCode *);
+extern void edg_wll_JobStatCodeToSoap(edg_wll_JobStatCode, enum lbt__statName *);
+extern void edg_wll_SoapToJobStatCode(enum lbt__statName, edg_wll_JobStatCode *);
 
-extern void edg_wll_StatusToSoap(struct soap *, edg_wll_JobStat const *, struct edgwll__JobStat **);
-extern void edg_wll_SoapToStatus(struct soap *, struct edgwll__JobStat const *, edg_wll_JobStat **);
+extern void edg_wll_StatusToSoap(struct soap *, edg_wll_JobStat const *, struct lbt__jobStatus **);
+extern void edg_wll_SoapToStatus(struct soap *, struct lbt__jobStatus const *, edg_wll_JobStat *);
 
-extern void edg_wll_SoapToJobStatFlags(const struct edgwll__JobStatFlags *, int *);
-extern int edg_wll_JobStatFlagsToSoap(struct soap *, const int, struct edgwll__JobStatFlags *);
+extern void edg_wll_SoapToJobStatFlags(struct lbt__jobFlags const *, int *);
+extern int edg_wll_JobStatFlagsToSoap(struct soap *, const int, struct lbt__jobFlags *);
 
-extern void edg_wll_SoapToAttr(const enum edgwll__QueryAttr, edg_wll_QueryAttr *);
-extern void edg_wll_AttrToSoap(const edg_wll_QueryAttr, enum edgwll__QueryAttr *);
+extern void edg_wll_SoapToAttr(const enum lbt__queryAttr, edg_wll_QueryAttr *);
+extern void edg_wll_AttrToSoap(const edg_wll_QueryAttr, enum lbt__queryAttr *);
 
 extern void edg_wll_SoapToQueryOp(
-                       const enum edgwll__QueryOp,
+                       const enum lbt__queryOp,
                        edg_wll_QueryOp *);
 extern void edg_wll_QueryOpToSoap(
                        const edg_wll_QueryOp,
-                       enum edgwll__QueryOp *);
+                       enum lbt__queryOp *);
 
 extern int edg_wll_SoapToQueryVal(
                        const edg_wll_QueryAttr,
-                       const struct edgwll__QueryRecValue *,
+                       const struct lbt__queryRecValue *,
                        union edg_wll_QueryVal *);
 extern int edg_wll_QueryValToSoap(struct soap *,
                        const edg_wll_QueryAttr,
                        const union edg_wll_QueryVal *,
-                       struct edgwll__QueryRecValue *);
+                       struct lbt__queryRecValue *);
 
 extern int edg_wll_SoapToQueryRec(
-                       const enum edgwll__QueryAttr,
-                       const struct edgwll__QueryRec *,
+                       const enum lbt__queryAttr,
+                       const struct lbt__queryRecord *,
                        edg_wll_QueryRec *);
 extern int edg_wll_QueryRecToSoap(struct soap *,
                        const edg_wll_QueryRec *,
-                       struct edgwll__QueryRec *);
+                       struct lbt__queryRecord *);
 
 
 extern int edg_wll_SoapToQueryConds(
-                       const struct edgwll__QueryCondition *,
+                       const struct lbt__queryConditions *,
                        edg_wll_QueryRec **);
 extern int edg_wll_QueryCondsToSoap(struct soap *,
                        const edg_wll_QueryRec *,
-                       struct edgwll__QueryCondition **);
+                       struct lbt__queryConditions **);
 
 extern int edg_wll_SoapToQueryCondsExt(
-                       const struct edgwll__QueryConditions *,
+                       const struct lbt__queryConditions *,
                        edg_wll_QueryRec ***);
 extern int edg_wll_QueryCondsExtToSoap(struct soap *,
                        const edg_wll_QueryRec **,
-                       struct edgwll__QueryConditions **);
+                       struct lbt__queryConditions **);
 
 extern int edg_wll_JobsQueryResToSoap(struct soap *,
                        edg_wlc_JobId *,
                        edg_wll_JobStat *,
-                       struct edgwll2__QueryJobsResponse *);
+                       struct _lbe__QueryJobsResponse *);
 
 #ifdef __cplusplus
 }