/** * SAMP_TBSELECTHANDLER -- Handle a table.select.rowList message * * @brief Handle a table.select.rowList message * @fn int samp_tbSelectHandler (String sender, * String mtype, String msg_id, Map msg_map) * * @param sender sender name * @param mtype mtype string * @param msg_id message id * @param msg_map message map struct * @return SAMP_OK or SAMP_ERR */ int samp_tbSelectHandler (String sender, String mtype, String msg_id, Map msg_map) { char url[SZ_URL], tblId[SZ_NAME]; int *rowList = (int *) NULL, nrows = 0; List rlist = (List) 0; void (*func) (); strcpy (url, samp_getStringFromMap (msg_map, "url")); strcpy (tblId, samp_getStringFromMap (msg_map, "table-id")); rlist = samp_getListFromMap (msg_map, "row-list"); nrows = samp_listLen (rlist); rowList = calloc (nrows, sizeof (int)); /* Call the user handler. */ if ( (func = samp_getUserHandler ("table.select.rowList")) ) { if (sampP->handlerMode == SAMP_CBR) (*func) (url, tblId, rowList, &nrows, strlen(url), strlen(tblId)); else (*func) (url, tblId, rowList, nrows); } free ((void *) rowList); return (SAMP_OK); }
/** * SAMP_MAPCLIENTS -- Map the public-ids of registered clients to the * appName. */ int samp_mapClients (handle_t handle) { Samp *sampP = samp_H2P (handle); /* get struct pointer */ register int i = 0; char *pub, rstr[SZ_RESSTR], *sres = rstr; List clients; Map resp; /* Get the list of registered clients and their metadata. */ sampP->nclients = 0; clients = samp_GetRegisteredClients (handle); for (i=0; i < samp_listLen (clients); i++) { pub = samp_getStringFromList (clients, i); resp = samp_GetMetadata (handle, pub); xr_getStringFromStruct (resp, "samp.name", &sres); memset (sampP->clients[i].name, 0, SZ_NAME); memset (sampP->clients[i].pubId, 0, SZ_NAME); sampP->nclients++; strcpy (sampP->clients[i].name, sres); strcpy (sampP->clients[i].pubId, pub); /* if (resp) xr_freeStruct (resp); */ } samp_freeList (clients); return (SAMP_OK); }
/* PROC_CMD -- Process a single command. */ static int proc_cmd (int samp, char *method, char *arg1, char *arg2, char *arg3, char *arg4) { register int i = 0, stat = 0; char *appName = NULL; char rstr[SZ_RESSTR], *sres = rstr; Map resp; if (debug) fprintf (stderr, "Proc_Cmd Method '%s' Args: '%s' '%s' '%s'\n", method,arg1,arg2,arg3); if (strcasecmp (method, "quit") == 0) { /* QUIT */ printf ("Quitting....\n\n"); if (sampShutdown (samp) != 0) fprintf (stderr, "Shutdown fails\n"); sampClose (samp); return (0); } else if (strcasecmp (method, "start") == 0) { /* START */ printf ("Starting SAMP interface .....\n"); sampStartup (samp); } else if (strcasecmp (method, "stop") == 0) { /* STOP */ printf ("Stopping SAMP interface .....\n"); sampShutdown (samp); } else if (strcasecmp (method, "help") == 0) { /* HELP */ help_summary (); } else if (strcasecmp (method, "listClient") == 0) { /* LISTCLIENT */ samp_listClients (samp); } else if (strcasecmp (method, "trace") == 0) { /* TRACE */ trace++; if (trace % 2) setenv ("XMLRPC_TRACE_XML", "1", 1); else unsetenv ("XMLRPC_TRACE_XML"); } else if (strcasecmp (method, "target") == 0) { /* TARGET */ appName = arg1; } else if (strcasecmp (method, "envSet") == 0) { /* ENVSET */ if (nscan < 4) { cmdUsage ("envSet appName keyw value"); } else { stat = samp_envSet (samp, arg1, arg2, arg3); print_result (samp, stat); } } else if (strcasecmp (method, "envGet") == 0) { /* ENVGET */ if (nscan < 3) { cmdUsage ("envGet appName keyw"); } else { char *v = samp_envGet (samp, arg1, arg2); if (v) printf ("OK '%s' = '%s'\n", arg2, v); else printf ("ERR '%s' not found\n", arg2); } ; } else if (strcasecmp (method, "paramSet") == 0) { /* PARAMSET */ if (nscan < 4) { cmdUsage ("envSet appName keyw value"); } else { stat = samp_paramSet (samp, arg1, arg2, arg3); print_result (samp, stat); } } else if (strcasecmp (method, "paramGet") == 0) { /* PARAMGET */ ; } else if (strcasecmp (method, "notify") == 0) { /* NOTIFY */ if (nscan < 3) { cmdUsage ("notify appName mtype"); } else { int msg = make_msg (arg2); samp_notify (samp, arg1, msg); print_result (samp, SAMP_OK); } } else if (strcasecmp (method, "notifyAll") == 0) { /* NOTIFYALL */ if (nscan < 2) { cmdUsage ("notifyAll mtype"); } else { int msg = make_msg (arg1); stat = samp_notifyAll (samp, msg); print_result (samp, stat); } } else if (strcasecmp (method, "call") == 0) { /* CALL */ if (nscan < 3) { cmdUsage ("call appName mtype"); } else { int msg = make_msg (arg2); char *id = samp_call (samp, arg1, "testTag", msg); fprintf (stderr, "msgId = '%s'\n", id); print_result (samp, stat); } } else if (strcasecmp (method, "callAll") == 0) { /* CALLALL */ if (nscan < 2) { cmdUsage ("callAll mtype"); } else { int msg = make_msg (arg1); stat = samp_callAll (samp, "allTag", msg); print_result (samp, stat); } } else if (strcasecmp (method, "callAndWait") == 0) { /* CALLANDWAIT*/ if (nscan < 3) { cmdUsage ("callAndWait appName mtype"); } else { int msg = make_msg (arg2); stat = samp_callAndWait (samp, arg1, "waitTag", msg); print_result (samp, stat); } } else if (strcasecmp (method, "Register") == 0) { /* REGISTER */ if (nscan < 3) { cmdUsage ("Register appName appDesc"); } else { if (samp_Register (samp) != OK) fprintf (stderr, "Registration fails\n"); else { registered = 1; fprintf (stderr, "Registration OK\n"); } } } else if (strcasecmp (method, "Unregister") == 0) { /* UNREGISTER */ if (samp == 0) { fprintf (stderr, "Samp Hub not connected\n"); } else { if (samp_UnRegister (samp) != OK) fprintf (stderr, "UnRegistration fails\n"); else { registered = 0; fprintf (stderr, "UnRegistration OK\n"); } } } else if (strcasecmp (method, "DeclareMetadata") == 0) { /* METADATA */ if (samp == 0) { fprintf (stderr, "Samp Hub not connected\n"); } else { if (samp_DeclareMetadata (samp) != OK) fprintf (stderr, "Metadata declaration fails\n"); else fprintf (stderr, "Metadata declaration OK\n"); } } else if (strcasecmp (method, "Ping") == 0) { /* PING */ if (nscan < 2) { cmdUsage ("Ping appName"); } else { if ((samp_Ping (samp, arg1)) < 0) fprintf (stderr, "%s responds w/ ERR\n", arg1); else fprintf (stderr, "%s responds OK [%d]\n", arg1, cmdNum++); } } else if (strcasecmp (method, "GetMetadata") == 0) { /* GETMETADATA */ if (nscan < 2) { cmdUsage ("GetMetadata appName"); } else { if ((resp = samp_GetMetadata (samp, arg1)) > 0) { xr_getStringFromStruct (resp, "samp.name", &sres); printf (" Name = '%s'\n", sres); xr_getStringFromStruct (resp, "author.name", &sres); printf (" Author = '%s'\n", sres); xr_getStringFromStruct (resp, "samp.description.text", &sres); printf (" Descr = '%s'\n", sres); xr_getStringFromStruct (resp, "samp.icon.url", &sres); printf ("IconURL = '%s'\n", sres); xr_getStringFromStruct (resp, "samp.documentation.url", &sres); printf (" DocURL = '%s'\n", sres); } } /* SUBSCRIPTIONS */ } else if (strcasecmp (method, "DeclareSubscriptions") == 0) { if ((samp_DeclareSubscriptions (samp)) < 0) fprintf (stderr, "DeclareSubscriptions responds w/ ERR\n"); else fprintf (stderr, "DeclareSubscriptions OK\n"); } else if (strcasecmp (method, "GetSubscriptions") == 0) { Map subs = (Map) 0; if ((subs = samp_GetSubscriptions (samp, arg1)) > 0) { /* Need xmlrpc_struct_read_member() to scan map names .... */ } /* CLIENTS */ } else if (strcasecmp (method, "GetRegisteredClients") == 0) { /* Print the list of registered clients. */ List clients = samp_GetRegisteredClients (samp); for (i=0; i < samp_listLen (clients); i++) printf ("%s\n", samp_getStringFromList (clients, i)); samp_freeList (clients); } else if (strcasecmp (method, "GetSubscribedClients") == 0) { if (nscan < 2) { cmdUsage ("GetSubscribedClients mtype"); } else { /* Print the list of clients subscribed to a specific mtype. */ List clients = samp_GetSubscribedClients (samp, arg1); for (i=0; i < samp_listLen (clients); i++) printf ("%s\n", samp_getStringFromList (clients, i)); samp_freeList (clients); } /* table.load.votable (url, [table-id], [name]) */ } else if (strcasecmp (method, "tableLoadVOTable") == 0) { if (nscan < 2) { cmdUsage ("tableLoadVOTable appName url [table-id] [name]"); } else { if (samp_tableLoadVOTable (samp, arg1, arg2, arg3, arg4) == SAMP_OK) printf ("OK\n"); else printf ("Error: '%s'\n", samp_getErr (samp)); } /* table.load.fits (url, [table-id], [name]) */ } else if (strcasecmp (method, "tableLoadFITS") == 0) { if (nscan < 2) { cmdUsage ("tableLoadFITS appName url [table-id] [name]"); } else { if (samp_tableLoadFITS (samp, arg1, arg2, arg3, arg4) == SAMP_OK) printf ("OK\n"); else printf ("Error: '%s'\n", samp_getErr (samp)); } /* table.highlight.row (table-id, url, (int) row) */ } else if (strcasecmp (method, "tableHighlightRow") == 0) { ; /* table.highlight.rowList (table-id, url, (List)row) */ } else if (strcasecmp (method, "tableSelectRowList") == 0) { ; /* image.load.fits (url, [table-id], [name]) */ } else if (strcasecmp (method, "imageLoadFits") == 0) { if (nscan < 2) { cmdUsage ("imageLoadFITS appName url [image-id] [name]"); } else { if (samp_imageLoadFITS (samp, arg1, arg2, arg3, arg4) == SAMP_OK) printf ("OK\n"); else printf ("Error: '%s'\n", samp_getErr (samp)); } /* coord.pointAt.sky ((float)ra, (float)dec) */ } else if (strcasecmp (method, "coordPointAtSky") == 0) { ; /* spectrum.load.ssa-generic (url, (Map)meta, [spectrum-id], [name]) */ } else if (strcasecmp (method, "specLoadSSAGeneric") == 0) { ; /* send (appName, mtype) */ } else if (strcasecmp (method, "send") == 0) { ; } else if (method[0]) fprintf (stderr, "Unknown command '%s'\n", method); return (0); }
void samp_printMessage (String mtype, String sender, String msg_id, Map params) { extern Samp *sampP; char s1[SZ_NAME], s2[SZ_NAME], s3[SZ_NAME], s4[SZ_NAME]; Map meta = (Map) 0, subs = (Map) 0, ids = (Map) 0; List list = (List) 0; int i, ival1; double dval1, dval2; memset (s1, 0, SZ_NAME); /* initialize */ memset (s2, 0, SZ_NAME); memset (s3, 0, SZ_NAME); memset (s4, 0, SZ_NAME); printf ("%-35.35s Sender: %-10.10s Id: %s\n", mtype, sender, (msg_id ? msg_id : "")); /* Process the mtype. */ if (PMATCH ("samp.app.ping")) { /* no-op */ ; } else if (PMATCH ("samp.app.status")) { printf ("\ttxt: %s\n", samp_getStringFromMap (params, "txt")); } else if (PMATCH ("samp.app.event.shutdown")) { ; /* no-op */ } else if (PMATCH ("samp.msg.progress")) { strcpy (s1, samp_getStringFromMap (params, "msgid")); strcpy (s2, samp_getStringFromMap (params, "txt")); strcpy (s3, samp_getStringFromMap (params, "percent")); strcpy (s4, samp_getStringFromMap (params, "timeLeft")); printf ("\tmsgid: %s\n\ttxt: %s\n\tpercent: %s\n\ttimeLeft: %s\n", s1, s2, POPT(s3), POPT(s4)); } else if (PMATCH ("samp.hub.event.shutdown")) { /* no-op */ ; } else if (PMATCH ("samp.hub.event.register")) { printf ("\tid: %s\n", samp_getStringFromMap (params, "id")); } else if (PMATCH ("samp.hub.event.unregister")) { printf ("\tid: %s\n", samp_getStringFromMap (params, "id")); } else if (PMATCH ("samp.hub.event.metadata")) { printf ("\tid: %s\n", samp_getStringFromMap (params, "id")); samp_printMap ("metadata", (meta = samp_getMapFromMap (params, "metadata"))); } else if (PMATCH ("samp.hub.event.subscriptions")) { printf ("\tid: %s\n", samp_getStringFromMap (params, "id")); samp_printMap ("subscriptions", (subs = samp_getMapFromMap (params, "subscriptions"))); } else if (PMATCH ("samp.hub.disconnect")) { strcpy (s1, samp_getStringFromMap (params, "reason")); printf ("\treason: %s\n", POPT(s1)); } else if (PMATCH ("table.load.fits")) { strcpy (s1, samp_getStringFromMap (params, "url")); strcpy (s2, samp_getStringFromMap (params, "table-id")); strcpy (s3, samp_getStringFromMap (params, "name")); printf ("\turl: %s\n\ttable-id: %s\n\tname: %s\n", s1, s2, s3); } else if (PMATCH ("table.load.votable")) { strcpy (s1, samp_getStringFromMap (params, "url")); strcpy (s2, samp_getStringFromMap (params, "table-id")); strcpy (s3, samp_getStringFromMap (params, "name")); printf ("\turl: %s\n\ttable-id: %s\n\tname: %s\n", s1, s2, s3); } else if (PMATCH ("table.highlight.row")) { strcpy (s1, samp_getStringFromMap (params, "table-id")); strcpy (s2, samp_getStringFromMap (params, "url")); ival1 = samp_getIntFromMap (params, "row"); printf ("\turl: %s\n\ttable-id: %s\n\trow: %d\n", s1, s2, ival1); } else if (PMATCH ("image.load.fits")) { strcpy (s1, samp_getStringFromMap (params, "url")); strcpy (s2, samp_getStringFromMap (params, "image-id")); strcpy (s3, samp_getStringFromMap (params, "name")); printf ("\turl: %s\n\timage-id: %s\n\trow: %s\n", s1, s2, s3); } else if (PMATCH ("coord.pointAt.sky")) { dval1 = (double) samp_getFloatFromMap (params, "ra"); dval2 = (double) samp_getFloatFromMap (params, "dec"); printf ("\tra: %g\n\tdec: %g\n", dval1, dval2); } else if (PMATCH ("client.cmd.exec")) { strcpy (s1, samp_getStringFromMap (params, "cmd")); printf ("\tcmd: %s\n", s1); } else if (PMATCH ("client.env.get")) { strcpy (s1, samp_getStringFromMap (params, "name")); printf ("\tname: %s\n", s1); } else if (PMATCH ("client.env.set")) { strcpy (s1, samp_getStringFromMap (params, "name")); strcpy (s2, samp_getStringFromMap (params, "value")); printf ("\tname: %s\n\tvalue: %s\n", s1, s2); } else if (PMATCH ("client.param.get")) { strcpy (s1, samp_getStringFromMap (params, "name")); printf ("\tname: %s\n", s1); } else if (PMATCH ("client.param.set")) { strcpy (s1, samp_getStringFromMap (params, "name")); strcpy (s2, samp_getStringFromMap (params, "value")); printf ("\tname: %s\n\tvalue: %s\n", s1, s2); } else if (PMATCH ("bibcode.load")) { strcpy (s1, samp_getStringFromMap (params, "url")); printf ("\turl: %s\n", s1); } else if (PMATCH ("table.select.rowList")) { strcpy (s1, samp_getStringFromMap (params, "table-id")); strcpy (s2, samp_getStringFromMap (params, "url")); printf ("\turl: %s\n\ttable-id: %s\n\t", s1, s2); list = samp_getListFromMap (params, "row-list"); printf ("rows: "); for (i=0; i < samp_listLen (list); i++) printf ("%d%c", samp_getIntFromList (list, i), (i < samp_listLen (list) - 1) ? ',' : '\n'); } else if (PMATCH ("spectrum.load.*")) { strcpy (s1, samp_getStringFromMap (params, "url")); strcpy (s2, samp_getStringFromMap (params, "spectrum-id")); strcpy (s3, samp_getStringFromMap (params, "name")); printf ("\turl: %s\n\tspectrum-id: %s\tname: %s\n", s1, s2, s3); samp_printMap ("meta", (meta = samp_getMapFromMap (params, "meta"))); } else if (PMATCH ("voresource.loadlist.*")) { strcpy (s1, samp_getStringFromMap (params, "name")); printf ("\tname: %s\n\t", s1); samp_printMap ("ids", (ids = samp_getMapFromMap (params, "ids"))); } else { /* Print a generic message. */ samp_printMap ("msg", params); } }