コード例 #1
0
ファイル: sampHandlers.c プロジェクト: pkgw/iraf
/**
 *  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);
}
コード例 #2
0
/**
 *  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);
}
コード例 #3
0
/* 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);
}
コード例 #4
0
ファイル: sampHandlers.c プロジェクト: pkgw/iraf
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);
    }
}