From a027fd2026936a1b3132b38aeac78c8540329646 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Mon, 27 Jun 2005 09:57:25 +0000 Subject: [PATCH] Web service implementation. It doesn't work yet, just compiles OK. --- org.glite.lb.server/examples/ws_getversion.c | 10 +- org.glite.lb.server/src/ws_query.c | 192 ++++++++++----------------- org.glite.lb.server/src/ws_typeref.c.T | 78 ++++++----- org.glite.lb.server/src/ws_typeref.h | 7 +- 4 files changed, 125 insertions(+), 162 deletions(-) diff --git a/org.glite.lb.server/examples/ws_getversion.c b/org.glite.lb.server/examples/ws_getversion.c index cc7284e..906056d 100644 --- a/org.glite.lb.server/examples/ws_getversion.c +++ b/org.glite.lb.server/examples/ws_getversion.c @@ -21,14 +21,14 @@ static void usage(char *me) , me); } -static void printstat(edg_wll_JobStat stat, int level); +//static void printstat(edg_wll_JobStat stat, int level); int main(int argc,char** argv) { edg_wll_Context ctx; glite_gsplugin_Context gsplugin_ctx; struct soap soap; - struct edgwll2__GetVersionResponse out; + struct _lbe__GetVersionResponse out; int opt, err; char *server = "http://localhost:8999/", *name = NULL; @@ -57,12 +57,14 @@ int main(int argc,char** argv) glite_gsplugin_set_udata(&soap, gsplugin_ctx); - switch (err = soap_call_edgwll2__GetVersion(&soap, server, "", &out)) + switch (err = soap_call___lb__GetVersion(&soap, server, "", NULL, &out)) { case SOAP_OK: printf("Server version: %s\n", out.version); break; case SOAP_FAULT: - default: printf("???\n"); + default: printf("???, err=%d\n", err); } + soap_done(&soap); + return 0; } diff --git a/org.glite.lb.server/src/ws_query.c b/org.glite.lb.server/src/ws_query.c index fb30e49..abba6fa 100644 --- a/org.glite.lb.server/src/ws_query.c +++ b/org.glite.lb.server/src/ws_query.c @@ -23,22 +23,19 @@ #endif -#if 0 -int edgwll2__GetVersion( - struct soap *soap, - struct edgwll2__GetVersionResponse *out) -{ - out->version = strdup(VERSION); +static void freeQueryRecsExt(edg_wll_QueryRec **qr); +static void freeJobIds(edg_wlc_JobId *jobs); +static void freeJobStats(edg_wll_JobStat *stats); - return SOAP_OK; -} -#endif SOAP_FMAC5 int SOAP_FMAC6 __lb__GetVersion( struct soap* soap, struct _lbe__GetVersion *in, struct _lbe__GetVersionResponse *out) { + out->version = soap_strdup(soap, VERSION); + + return out->version ? SOAP_OK : SOAP_FAULT; } SOAP_FMAC5 int SOAP_FMAC6 __lb__JobStatus( @@ -77,66 +74,53 @@ SOAP_FMAC5 int SOAP_FMAC6 __lb__QueryJobs( struct _lbe__QueryJobs *in, struct _lbe__QueryJobsResponse *out) { -} - - -#if 0 -int edgwll2__QueryJobs( - struct soap *soap, - struct edgwll__QueryConditions *conditions, - struct edgwll__JobStatFlags *flags, - struct edgwll2__QueryJobsResponse *out) -{ - edg_wll_Context ctx = (edg_wll_Context) glite_gsplugin_get_udata(soap); - edg_wlc_JobId *jobsOut = NULL; - edg_wll_JobStat *statesOut = NULL; - edg_wll_QueryRec **qr = NULL; - int fl, - i, j, - ret = SOAP_FAULT; - + edg_wll_Context ctx; + edg_wll_QueryRec **conditions; + int flags; + edg_wlc_JobId *jobs; + edg_wll_JobStat *states; + int ret; out->states = soap_malloc(soap, sizeof(*out->states)); out->jobs = soap_malloc(soap, sizeof(*out->jobs)); if ( !out->states || !out->jobs ) goto cleanup; - memset(out->states, 0, sizeof(*(out->states))); - memset(out->jobs, 0, sizeof(*(out->jobs))); + + ctx = (edg_wll_Context) glite_gsplugin_get_udata(soap); + jobs = NULL; + states = NULL; + ret = SOAP_FAULT; edg_wll_ResetError(ctx); - edg_wll_SoapToJobStatFlags(flags, &fl); - if ( edg_wll_SoapToQueryCondsExt(conditions, &qr) ) { + if ( edg_wll_SoapToQueryCondsExt(*in->conditions, in->__sizeconditions, &conditions) ) { edg_wll_SetError(ctx, ENOMEM, "Couldn't create internal structures"); goto cleanup; } - if ( edg_wll_QueryJobsServer(ctx, (const edg_wll_QueryRec **)qr, fl, - &jobsOut, &statesOut) ) goto cleanup; - if ( edg_wll_JobsQueryResToSoap(soap, jobsOut, statesOut, out) ) goto cleanup; + edg_wll_SoapToJobStatFlags(in->flags, &flags); + + if (edg_wll_QueryJobsServer(ctx, (const edg_wll_QueryRec **)conditions, flags, &jobs, &states) != 0) goto cleanup; + + if (edg_wll_JobsQueryResToSoap(soap, jobs, states, out) != SOAP_OK) goto cleanup; ret = SOAP_OK; cleanup: - if ( qr ) { - for ( i = 0; qr[i]; i++ ) { - for ( j = 0; qr[i][j].attr; j++ ) - edg_wll_QueryRecFree(&qr[i][j]); - free(qr[i]); - } - free(qr); - } - if ( jobsOut ) { - for ( i = 0; jobsOut[i]; i++ ) - edg_wlc_JobIdFree(jobsOut[i]); - free(jobsOut); - } - if ( statesOut ) { - for ( i = 0; statesOut[i].state; i++ ) - edg_wll_FreeStatus(&statesOut[i]); - free(statesOut); - } + freeQueryRecsExt(conditions); + freeJobIds(jobs); + freeJobStats(states); + if ( ret == SOAP_FAULT ) edg_wll_ErrToFault(ctx, soap); return ret; } + +SOAP_FMAC5 int SOAP_FMAC6 __lb__UserJobs( + struct soap *soap, + struct _lbe__UserJobs *in, + struct _lbe__UserJobsResponse *out) +{ +} + +#if 0 int edgwll2__UserJobs( struct soap *soap, struct edgwll2__UserJobsResponse *out) @@ -147,89 +131,49 @@ int edgwll2__UserJobs( return SOAP_OK; } -/* -int edgwll2__QueryEvents( - struct soap *soap, - struct edgwll__QueryConditions *jc, - struct edgwll__QueryConditions *ec, - struct edgwll2__QueryEventsResponse *out) -{ - edg_wll_Context ctx = (edg_wll_Context) glite_gsplugin_get_udata(soap); - edg_wll_Event *eventsOut = NULL; - edg_wll_QueryRec **qrj = NULL, - **qre = NULL; - - int fl, - i, j, - ret = SOAP_FAULT; - - -x out->states = soap_malloc(soap, sizeof(*out->states)); -x out->jobs = soap_malloc(soap, sizeof(*out->jobs)); -x if ( !out->states || !out->jobs ) goto cleanup; -x memset(out->states, 0, sizeof(*(out->states))); -x memset(out->jobs, 0, sizeof(*(out->jobs))); +#endif - edg_wll_ResetError(ctx); - if ( edg_wll_SoapToQueryCondsExt(jc, &qrj) ) { - edg_wll_SetError(ctx, ENOMEM, "Couldn't create internal structures"); - goto cleanup; - } - if ( edg_wll_SoapToQueryCondsExt(ec, &qre) ) { - edg_wll_SetError(ctx, ENOMEM, "Couldn't create internal structures"); - goto cleanup; - } - if ( edg_wll_QueryEventsServer( ctx, ctx->noAuth, (const edg_wll_QueryRec **) jc, - (const edg_wll_QueryRec **) ec, &eventsOut) ) - goto cleanup; +SOAP_FMAC5 int SOAP_FMAC6 __lb__QueryEvents( + struct soap *soap, + struct _lbe__QueryEvents *in, + struct _lbe__QueryEventsResponse *out) +{ +} - if ( edg_wll_EventsQueryResToSoap(soap, eventsOut, out) ) goto cleanup; - ret = SOAP_OK; -cleanup: - if ( qrj ) { - for ( i = 0; qrj[i]; i++ ) { - for ( j = 0; qrj[i][j].attr; j++ ) - edg_wll_QueryRecFree(&qrj[i][j]); - free(qrj[i]); - } - free(qrj); - } +static void freeQueryRecsExt(edg_wll_QueryRec **qr) { + int i, j; - if ( qre ) { - for ( i = 0; qre[i]; i++ ) { - for ( j = 0; qre[i][j].attr; j++ ) - edg_wll_QueryRecFree(&qre[i][j]); - free(qre[i]); + if ( qr ) { + for ( i = 0; qr[i]; i++ ) { + if (qr[i]) { + for ( j = 0; qr[i][j].attr; j++ ) edg_wll_QueryRecFree(&qr[i][j]); + free(qr[i]); + } } free(qr); } - if ( eventsOut ) { - for ( i = 0; eventsOut[i].type; i++ ) - edg_wll_FreeEvent(&eventsOut[i]); - free(eventssOut); - } - if ( ret == SOAP_FAULT ) edg_wll_ErrToFault(ctx, soap); - - return ret; } -*/ -#endif -/* TODO */ -SOAP_FMAC5 int SOAP_FMAC6 __lb__UserJobs( - struct soap *soap, - struct _lbe__UserJobs *in, - struct _lbe__UserJobsResponse *out) -{ -} +static void freeJobIds(edg_wlc_JobId *jobs) { + int i; -SOAP_FMAC5 int SOAP_FMAC6 __lb__QueryEvents( - struct soap *soap, - struct _lbe__QueryEvents *in, - struct _lbe__QueryEventsResponse *out) -{ + if ( jobs ) { + for ( i = 0; jobs[i]; i++ ) + edg_wlc_JobIdFree(jobs[i]); + free(jobs); + } } + +static void freeJobStats(edg_wll_JobStat *stats) { + int i; + + if ( stats ) { + for ( i = 0; stats[i].state; i++ ) + edg_wll_FreeStatus(&stats[i]); + free(stats); + } +} diff --git a/org.glite.lb.server/src/ws_typeref.c.T b/org.glite.lb.server/src/ws_typeref.c.T index e19553e..7b2d873 100644 --- a/org.glite.lb.server/src/ws_typeref.c.T +++ b/org.glite.lb.server/src/ws_typeref.c.T @@ -238,7 +238,6 @@ int edg_wll_JobStatFlagsToSoap(struct soap *soap, const int in, struct lbt__jobF return SOAP_OK; } -#if 0 void edg_wll_SoapToAttr(const enum lbt__queryAttr in, edg_wll_QueryAttr *out) { switch ( in ) @@ -385,20 +384,20 @@ int edg_wll_QueryValToSoap( } int edg_wll_SoapToQueryRec( - const edg_wll_QueryAttr attr, + const struct lbt__queryConditions *collection, const struct lbt__queryRecord *in, edg_wll_QueryRec *out) { - assert(attr); assert(in); assert(out); + assert(collection); assert(in); assert(out); memset(out, 0, sizeof(*out)); - edg_wll_SoapToAttr(attr, &out->attr); + edg_wll_SoapToAttr(collection->attr, &out->attr); switch ( out->attr ) { case EDG_WLL_QUERY_ATTR_TIME: - edg_wll_SoapToJobStatCode(*(in->attrid->state), &(out->attr_id.state)); + edg_wll_SoapToJobStatCode(*(collection->statName), &(out->attr_id.state)); break; case EDG_WLL_QUERY_ATTR_USERTAG: - out->attr_id.tag = strdup(in->attrid->tag); + out->attr_id.tag = strdup(collection->tagName); break; default: break; @@ -418,6 +417,7 @@ err: edg_wll_QueryRecFree(out); return -1; } +#if 0 int edg_wll_QueryRecToSoap( struct soap *soap, @@ -460,17 +460,23 @@ ret: *out = qr; return SOAP_OK; } +#endif +/** + * Translate query conditions from Soap form to query rec structure + * + * \param IN in pointer to soap query condition + * \param OUT out target array of queryRec + */ int edg_wll_SoapToQueryConds(const struct lbt__queryConditions *in, edg_wll_QueryRec **out) { int i; edg_wll_QueryRec *qr; - assert(in); assert(out); - if ( !(qr = calloc(in->__sizerecords+1, sizeof(*qr))) ) goto err; - for ( i = 0; i < in->__sizerecords; i++ ) - if ( edg_wll_SoapToQueryRec(in->attr, in->records[i], qr+i) ) goto err; + if ( !(qr = calloc(in->__sizerecord+1, sizeof(*qr))) ) goto err; + for ( i = 0; i < in->__sizerecord; i++ ) + if ( edg_wll_SoapToQueryRec(in, in->record[i], qr+i) ) goto err; *out = qr; return 0; @@ -482,6 +488,7 @@ err: return -1; } +#if 0 int edg_wll_QueryCondsToSoap( struct soap *soap, const edg_wll_QueryRec *in, @@ -508,17 +515,24 @@ ret: *out = qc; return SOAP_OK; } +#endif -int edg_wll_SoapToQueryCondsExt(const struct lbt__queryConditions *in, edg_wll_QueryRec ***out) +/** + * Translate extended query conditions from Soap form to query rec structure + * + * \param IN in array of soap query condition + * \param OUT out target array of queryRec + */ +int edg_wll_SoapToQueryCondsExt(const struct lbt__queryConditions *in, int __sizecondition, edg_wll_QueryRec ***out) { int i; edg_wll_QueryRec **qr; assert(in); assert(out); - if ( !(qr = calloc(in->__sizecondition+1, sizeof(*qr))) ) return -1; - for ( i = 0; i < in->__sizecondition; i++ ) - if ( edg_wll_SoapToQueryConds(in->condition[i], qr+i) ) goto err; + if ( !(qr = calloc(__sizecondition, sizeof(*qr))) ) return -1; + for ( i = 0; i < __sizecondition; i++ ) + if ( edg_wll_SoapToQueryConds(&in[i], qr+i) ) goto err; *out = qr; return 0; @@ -536,6 +550,7 @@ err: return -1; } +#if 0 int edg_wll_QueryCondsExtToSoap( struct soap *soap, const edg_wll_QueryRec **in, @@ -561,44 +576,45 @@ ret: *out = qc; return SOAP_OK; } +#endif int edg_wll_JobsQueryResToSoap( - struct soap *soap, - const edg_wlc_JobId *jobs, - const edg_wll_JobStat *states, - struct _lbe__QueryJobsResponse *out) + struct soap *soap, + const edg_wlc_JobId *jobs, + const edg_wll_JobStat *states, + struct _lbe__QueryJobsResponse *out) { int i; - assert(out); assert(out->states); assert(out->jobs); - memset(out->jobs, 0, sizeof(*(out->jobs))); - memset(out->states, 0, sizeof(*(out->states))); + assert(out); //assert(out->states); assert(out->jobs); + out->jobs = NULL; + out->states = NULL; + out->__sizejobs = 0; + out->__sizestates = 0; if ( jobs ) { for ( i = 0; jobs[i]; i++ ) ; - out->jobs->jobs = soap_malloc(soap, sizeof(*(out->jobs->jobs))*i); - if ( !out->jobs->jobs ) return SOAP_FAULT; - out->jobs->__sizejobs = i; + out->jobs = soap_malloc(soap, sizeof(*(out->jobs))*i); + if ( !out->jobs ) return SOAP_FAULT; + out->__sizejobs = i; for ( i = 0; jobs[i]; i++ ) { char *s; if ( !(s = edg_wlc_JobIdUnparse(jobs[i])) ) return SOAP_FAULT; - if ( !(out->jobs->jobs[i] = soap_strdup(soap, s)) ) return SOAP_FAULT; + if ( !(out->jobs[i] = soap_strdup(soap, s)) ) return SOAP_FAULT; free(s); } } if ( states ) { for ( i = 0; states[i].state; i++ ) ; - out->states->states = soap_malloc(soap, sizeof(*(out->states->states))*i); - if ( !out->states->states ) return SOAP_FAULT; - out->states->__sizestates = i; + out->states = soap_malloc(soap, sizeof(*(out->states))*i); + if ( !out->states ) return SOAP_FAULT; + out->__sizestates = i; for ( i = 0; states[i].state; i++ ) - if ( edg_wll_StatusToSoap(soap, states+i, out->states->states+i) ) + if ( edg_wll_StatusToSoap(soap, states+i, out->states+i) ) return SOAP_FAULT; } return SOAP_OK; } - -#endif diff --git a/org.glite.lb.server/src/ws_typeref.h b/org.glite.lb.server/src/ws_typeref.h index 0a449ab..d8fb566 100644 --- a/org.glite.lb.server/src/ws_typeref.h +++ b/org.glite.lb.server/src/ws_typeref.h @@ -34,9 +34,9 @@ extern int edg_wll_QueryValToSoap(struct soap *, struct lbt__queryRecValue *); extern int edg_wll_SoapToQueryRec( - const enum lbt__queryAttr, - const struct lbt__queryRecord *, - edg_wll_QueryRec *); + const struct lbt__queryConditions *collection, + const struct lbt__queryRecord *in, + edg_wll_QueryRec *out); extern int edg_wll_QueryRecToSoap(struct soap *, const edg_wll_QueryRec *, struct lbt__queryRecord *); @@ -51,6 +51,7 @@ extern int edg_wll_QueryCondsToSoap(struct soap *, extern int edg_wll_SoapToQueryCondsExt( const struct lbt__queryConditions *, + int __sizecondition, edg_wll_QueryRec ***); extern int edg_wll_QueryCondsExtToSoap(struct soap *, const edg_wll_QueryRec **, -- 1.8.2.3