ares_prefix=/opt/ares
gsoap_prefix=/opt/gsoap
-# include project/version.properties
-include Makefile.inc
-include ../Makefile.inc
+ifeq ($(GLITE_LB_SERVER_WITH_WS),yes)
+ WS_CFLAGS=-DGLITE_LB_SERVER_WITH_WS
+else
+ WS_CFLAGS=
+endif
+
CC=gcc
GSOAP_FILES_PREFIX:= bk_ws_
# -I/usr/include/libxml2 \
# -DNO_VOMS -DNO_GACL to be removed when voms/gridsite are available
-CFLAGS:= -DNO_VOMS -DNO_GACL \
+CFLAGS:= -DNO_VOMS -DNO_GACL ${WS_CFLAGS} \
${DEBUG} -I${stagedir}/include -I${top_srcdir}/src -I. \
-I${expat_prefix}/include \
-I${ares_prefix}/include \
COMMON_LIB:= -L${stagedir}/lib -lglite_lb_common_${nothrflavour}
+ifeq ($(GLITE_LB_SERVER_WITH_WS),yes)
+ SERVER_SOAP_OBJS:=${GSOAP_FILES_PREFIX}C.o ${GSOAP_FILES_PREFIX}Server.o \
+ ws_plugin.o ws_query.o ws_fault.o ws_typeref.o
+ SERVER_WS_LIBS=${GSOAP_LIBS}
+else
+ SERVER_SOAP_OBJS=
+ SERVER_WS_LIBS=
+endif
+
SERVER_OBJS:= bkserverd.o get_events.o index.o jobstat.o jobstat_supp.o \
write2rgma.o lbs_db.o lb_html.o lb_http.o lb_proto.o lb_xml_parse.o \
lb_xml_parse_V21.o \
stored_master.o srv_purge.o server_state.o dump.o lb_authz.o load.o \
notification.o il_notification.o notif_match.o
-SERVER_SOAP_OBJS:=${GSOAP_FILES_PREFIX}C.o ${GSOAP_FILES_PREFIX}Server.o \
- ws_plugin.o ws_query.o ws_fault.o ws_typeref.o
-
INDEX_OBJS:= index.o index_parse.o jobstat_supp.o lbs_db.o openserver.o \
jobstat.o query.o lock.o get_events.o write2rgma.o index_lex.o \
lb_authz.o store.o bkindex.o
glite_lb_bkserverd: ${SERVER_OBJS} ${SERVER_SOAP_OBJS}
- ${LINK} -o $@ ${SERVER_OBJS} ${SERVER_SOAP_OBJS} ${COMMON_LIB} ${SRVBONES_LIB} ${GSOAP_LIBS} ${EXT_LIBS}
+ ${LINK} -o $@ ${SERVER_OBJS} ${SERVER_SOAP_OBJS} ${COMMON_LIB} ${SRVBONES_LIB} ${EXT_LIBS} ${SERVER_WS_LIBS}
glite_lb_bkindex: ${INDEX_OBJS}
${LINK} -o $@ ${INDEX_OBJS} ${COMMON_LIB} ${EXT_LIBS}
${CXX} -c ${CFLAGS} ${TEST_INC} $<
${LINKXX} -o $@ test_soap_conv.o ${WS_CLIENT_OBJS} ${WS_CLIENT_LIBS} ${COMMON_LIB} ${TEST_LIBS}
+examples: ws_jobstat ws_query_ex
+
ws_jobstat: ws_jobstat.o ${WS_CLIENT_OBJS}
${LINK} -o $@ ws_jobstat.o ${WS_CLIENT_OBJS} ${WS_CLIENT_LIBS} ${EXT_LIBS}
#include <globus_common.h>
+#ifdef GLITE_LB_SERVER_WITH_WS
#include <stdsoap2.h>
+#endif /* GLITE_LB_SERVER_WITH_WS */
#include "glite/lb/srvbones.h"
#include "glite/lb/consumer.h"
#include "lbs_db.h"
#include "lb_authz.h"
#include "il_notification.h"
+
+#ifdef GLITE_LB_SERVER_WITH_WS
#include "ws_plugin.h"
+#endif /* GLITE_LB_SERVER_WITH_WS */
extern int edg_wll_StoreProto(edg_wll_Context ctx);
extern edg_wll_ErrorCode edg_wll_Open(edg_wll_Context ctx, char *cs);
{"CAdir", 1, NULL, 'C'},
{"VOMSdir", 1, NULL, 'V'},
{"port", 1, NULL, 'p'},
+#ifdef GLITE_LB_SERVER_WITH_WS
{"wsport", 1, NULL, 'w'},
+#endif /* GLITE_LB_SERVER_WITH_WS */
{"address", 1, NULL, 'a'},
{"debug", 0, NULL, 'd'},
{"rgmaexport", 0, NULL, 'r'},
{NULL,0,NULL,0}
};
+#ifdef GLITE_LB_SERVER_WITH_WS
+static const char *get_opt_string = "a:c:k:C:V:p:w:drm:ns:l:L:N:i:S:D:X:Y:";
+#else
+static const char *get_opt_string = "a:c:k:C:V:p:drm:ns:l:L:N:i:S:D:X:Y:";
+#endif /* GLITE_LB_SERVER_WITH_WS */
+
static void usage(char *me)
{
fprintf(stderr,"usage: %s [option]\n"
"\t-C, --CAdir\t trusted certificates directory\n"
"\t-V, --VOMSdir\t trusted VOMS servers certificates directory\n"
"\t-p, --port\t port to listen\n"
+#ifdef GLITE_LB_SERVER_WITH_WS
"\t-w, --wsport\t port to serve the web services requests\n"
+#endif /* GLITE_LB_SERVER_WITH_WS */
"\t-m, --mysql\t database connect string\n"
"\t-d, --debug\t don't run as daemon, additional diagnostics\n"
"\t-r, --rgmaexport write state info to RGMA interface\n"
int bk_accept_store(int, void *);
int bk_clnt_disconnect(int, void *);
+#ifdef GLITE_LB_SERVER_WITH_WS
/*
* WS handlers
*/
int bk_accept_ws(int, void *);
int bk_ws_clnt_reject(int);
int bk_ws_clnt_disconnect(int, void *);
-
+#endif /*GLITE_LB_SERVER_WITH_WS */
#define SRV_SERVE 0
#define SRV_STORE 1
+#ifdef GLITE_LB_SERVER_WITH_WS
#define SRV_WS 2
+#endif /* GLITE_LB_SERVER_WITH_WS */
static struct glite_srvbones_service service_table[] = {
{ "serve", -1, bk_handle_connection, bk_accept_serve, bk_clnt_reject, bk_clnt_disconnect },
{ "store", -1, bk_handle_connection, bk_accept_store, bk_clnt_reject, bk_clnt_disconnect },
+#ifdef GLITE_LB_SERVER_WITH_WS
{ "WS", -1, bk_handle_ws_connection, bk_accept_ws, bk_ws_clnt_reject, bk_ws_clnt_disconnect }
+#endif /* GLITE_LB_SERVER_WITH_WS */
};
struct clnt_data_t {
edg_wll_Context ctx;
+#ifdef GLITE_LB_SERVER_WITH_WS
struct soap *soap;
+#endif /* GLITE_LB_SERVER_WITH_WS */
void *mysql;
edg_wll_QueryRec **job_index;
edg_wll_IColumnRec *job_index_cols;
char *mysubj = NULL;
int opt;
char pidfile[PATH_MAX] = EDG_BKSERVERD_PIDFILE,
- *port, *ws_port,
+ *port,
*name,
*cert, *key;
+#ifdef GLITE_LB_SERVER_WITH_WS
+ char *ws_port;
+#endif /* GLITE_LB_SERVER_WITH_WS */
FILE *fpid;
key_t semkey;
edg_wll_Context ctx;
if (name) name++; else name = argv[0];
asprintf(&port, "%d", GLITE_WMSC_JOBID_DEFAULT_PORT);
+#ifdef GLITE_LB_SERVER_WITH_WS
asprintf(&ws_port, "%d", GLITE_WMSC_JOBID_DEFAULT_PORT+2);
+#endif /* GLITE_LB_SERVER_WITH_WS */
cert = key = cadir = vomsdir = NULL;
/* no magic here: 1 month, 3 and 7 days */
if (geteuid()) snprintf(pidfile,sizeof pidfile,"%s/edg-bkserverd.pid",
getenv("HOME"));
- while ((opt = getopt_long(argc,argv,"a:c:k:C:V:p:w:drm:ns:l:L:N:i:S:D:X:Y:",opts,NULL)) != EOF) switch (opt) {
+ while ((opt = getopt_long(argc,argv,get_opt_string,opts,NULL)) != EOF) switch (opt) {
case 'a': fake_host = strdup(optarg); break;
case 'c': cert = optarg; break;
case 'k': key = optarg; break;
case 'C': cadir = optarg; break;
case 'V': vomsdir = optarg; break;
case 'p': free(port); port = strdup(optarg); break;
+#ifdef GLITE_LB_SERVER_WITH_WS
case 'w': free(ws_port); ws_port = strdup(optarg); break;
+#endif /* GLITE_LB_SERVER_WITH_WS */
case 'd': debug = 1; break;
case 'r': rgma_export = 1; break;
case 'm': dbstring = optarg; break;
}
if ( listen(service_table[SRV_STORE].conn, CON_QUEUE) ) { perror("listen()"); return 1; }
+#ifdef GLITE_LB_SERVER_WITH_WS
service_table[SRV_WS].conn = socket(PF_INET, SOCK_STREAM, 0);
if ( service_table[SRV_WS].conn < 0) { perror("socket()"); return 1; }
a.sin_family = AF_INET;
}
if ( listen(service_table[SRV_WS].conn, CON_QUEUE) ) { perror("listen()"); return 1; }
+#endif /* GLITE_LB_SERVER_WITH_WS */
+
if (!cert || !key)
fprintf(stderr, "%s: key or certificate file not specified"
" - unable to watch them for changes!\n", argv[0]);
if ( noAuth ) dprintf(("Promiscuous mode\n"));
dprintf(("Listening at %d,%d (accepting protocols: " COMP_PROTO " and compatible) ...\n",atoi(port),atoi(port)+1));
+
+#ifdef GLITE_LB_SERVER_WITH_WS
dprintf(("Listening at %d (accepting web service protocol) ...\n", atoi(ws_port)));
+#endif /* GLITE_LB_SERVER_WITH_WS */
if (!dbstring) dbstring = getenv("LBDB");
return 0;
}
+#ifdef GLITE_LB_SERVER_WITH_WS
int bk_handle_ws_connection(int conn, struct timeval client_start, void *data)
{
struct clnt_data_t *cdata = (struct clnt_data_t *) data;
return 0;
}
+#endif /* GLITE_LB_SERVER_WITH_WS */
int bk_accept_store(int conn, void *cdata)
{
}
+#ifdef GLITE_LB_SERVER_WITH_WS
int bk_accept_ws(int conn, void *cdata)
{
struct soap *soap = ((struct clnt_data_t *) cdata)->soap;
return 0;
}
+#endif /* GLITE_LB_SERVER_WITH_WS */
int bk_clnt_disconnect(int conn, void *cdata)
return 0;
}
+#ifdef GLITE_LB_SERVER_WITH_WS
int bk_ws_clnt_disconnect(int conn, void *cdata)
{
int rv;
return 0;
}
+#endif /* GLITE_LB_SERVER_WITH_WS */
int bk_clnt_reject(int conn)
{
return 0;
}
+#ifdef GLITE_LB_SERVER_WITH_WS
int bk_ws_clnt_reject(int conn)
{
return bk_clnt_reject(conn);
}
+#endif /* GLITE_LB_SERVER_WITH_WS */
static void wait_for_open(edg_wll_Context ctx, const char *dbstring)