/* * Copyright (c) 2004 Smithsonian Astrophysical Observatory */ /* * * rtest -- server test for xpa * */ #include #define MAX_XPAS 10 extern char *optarg; extern int optind; #define BUFSIZE 1000000 char xbuf[BUFSIZE+1]; size_t xlen; int quiet=0; #ifdef ANSI_FUNC int send_cb (void *client_data, void *call_data, char *paramlist, char **buf, size_t *len) #else int send_cb(client_data, call_data, paramlist, buf, len) void *client_data; void *call_data; char *paramlist; char **buf; size_t *len; #endif { XPA xpa = (XPA)call_data; if( !xpa ) return(-1); *len = xlen; *buf = (char *)xmalloc(*len); memcpy(*buf, xbuf, *len); if( !quiet ) fprintf(stderr, "sent (%s): %lu\n", paramlist, (unsigned long)xlen); return(0); } #ifdef ANSI_FUNC int receive_cb (void *client_data, void *call_data, char *paramlist, char *buf, size_t len) #else int receive_cb(client_data, call_data, paramlist, buf, len) void *client_data; void *call_data; char *paramlist; char *buf; size_t len; #endif { XPA xpa = (XPA)call_data; if( !xpa ) return(-1); if( !quiet ) fprintf(stderr, "recd (%s): %s\n", paramlist, buf); return(0); } #ifdef ANSI_FUNC int main (int argc, char **argv) #else main(argc, argv) int argc; char **argv; #endif { int c; int i, j; int got; int delay=-1; int total=0; int dobig=0; int dofd=0; int doexit=0; int poll=1; int msec=100; size_t lens[MAX_XPAS]; char *bufs[MAX_XPAS]; char *names[MAX_XPAS]; char *errs[MAX_XPAS]; char *xmode=""; char xname[SZ_LINE]; char xclass[SZ_LINE]; char paramlist[SZ_LINE]; int xfds[1]; XPA xpa; /* we use the xpa timestamp routine */ putenv("XPA_TIMESTAMP_ERRORS=true"); /* process switch arguments */ while ((c = getopt(argc, argv, "bd:fm:pqv")) != -1){ switch(c){ case 'b': dobig = 1; break; case 'd': delay = atoi(optarg); break; case 'f': dofd = 1; break; case 'm': msec = atoi(optarg); break; case 'p': poll = 0; break; case 'q': quiet = 1; break; case 'v': break; default: break; } } /* make sure we have the xpa argument */ if( optind >= argc ){ fprintf(stderr, "usage: %s [xpa] [target1 target2 ...]\n", argv[0]); exit(1); } strcpy(xname, argv[optind++]); strcpy(xclass, xname); cluc(xclass); if( (xpa = XPANew(xclass, xname, "help is on the way", send_cb, (void *)xname, xmode, receive_cb, (void *)xname, xmode)) ){ fprintf(stdout, "%s using method: %s\n", xpa_name(xpa), xpa_method(xpa)); } else{ fprintf(stderr, "ERROR: could not init xpa\n"); exit(1); } if( dobig ){ for(i=0; i 0 ) XPASleep(delay); } } done: XPAFree(xpa); exit(0); }