aboutsummaryrefslogtreecommitdiff
path: root/vendor/voclient/libsamp/sampCommands.c
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /vendor/voclient/libsamp/sampCommands.c
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'vendor/voclient/libsamp/sampCommands.c')
-rw-r--r--vendor/voclient/libsamp/sampCommands.c350
1 files changed, 350 insertions, 0 deletions
diff --git a/vendor/voclient/libsamp/sampCommands.c b/vendor/voclient/libsamp/sampCommands.c
new file mode 100644
index 00000000..5e1577dd
--- /dev/null
+++ b/vendor/voclient/libsamp/sampCommands.c
@@ -0,0 +1,350 @@
+/**
+ * SAMPCOMMANDS.C -- SAMP commands used by app to send administrative messages.
+ *
+ *
+ * stat = samp_Register (handle)
+ * stat = samp_UnRegister (handle)
+ * stat = samp_DeclareMetadata (handle)
+ * stat = samp_Ping (handle, appName)
+ * map = samp_GetMetadata (handle, pubId)
+ * samp_DeclareSubscriptions (handle)
+ * map = samp_GetSubscriptions (handle)
+ * list = samp_GetRegisteredClients (handle)
+ * list = samp_GetSubscribedClients (handle, mtype)
+ *
+ *
+ * @brief SAMP commands used by app to send administrative messages.
+ *
+ * @file sampCommands.c
+ * @author Mike Fitzpatrick
+ * @date 7/10/11
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+#include <ctype.h>
+
+#include "samp.h"
+
+
+
+/*****************************************************************************
+*/
+
+/**
+ * SAMP_REGISTER -- Register with the Hub using the currently stored metadata.
+ *
+ * @brief Register with the Hub using the currently stored metadata.
+ * @fn handle = samp_Register (handle_t handle)
+ *
+ * @param handle samp struct handle
+ * @return SAMP_OK or SAMP_ERR
+ */
+int
+samp_Register (handle_t handle)
+{
+ char *privateKey, *hubId, *selfId;
+ Samp *sampP = samp_H2P(handle);
+ Hub *hub = sampP->hub;
+ int reg;
+
+
+ if (!hub)
+ return (SAMP_ERR);
+
+ privateKey = hub->privateKey;
+ hubId = hub->hubId;
+ selfId = hub->selfId;
+
+ xr_initParam (hub->id);
+ xr_setStringInParam (hub->id, hub->secret);
+
+ xr_callSync (hub->id, "samp.hub.register");
+
+ /* Check for an error response.
+ */
+ if (samp_replyStatus (hub->id) != SAMP_OK) {
+ fprintf (stderr, "Hub registration failed.\n");
+ return (SAMP_ERR);
+ }
+
+
+ xr_getStructFromResult (hub->id, &reg);
+ xr_getStringFromStruct (reg, "samp.private-key", &privateKey);
+ xr_getStringFromStruct (reg, "samp.hub-id", &hubId);
+ xr_getStringFromStruct (reg, "samp.self-id", &selfId);
+
+ /* Save the private key we get back. Note there is a difference in
+ * behavior between the hubs as to whether we strip any prefix on the
+ * key returned in the response.
+ *
+ * FIXME ??
+ */
+ strcpy (hub->privateKey, &hub->privateKey[7]);
+
+ return (SAMP_OK);
+}
+
+
+/**
+ * SAMP_UNREGISTER -- Un-Register from the hub.
+ *
+ * @brief Un-Register from the hub.
+ * @fn stat = samp_UnRegister (handle_t handle)
+ *
+ * @param handle samp struct handle
+ * @return SAMP_OK or SAMP_ERR
+ */
+int
+samp_UnRegister (handle_t handle)
+{
+ Samp *sampP = samp_H2P(handle);
+ Hub *hub = sampP->hub;
+
+ return ( hub ? samp_hubUnRegister (hub) : SAMP_ERR );
+}
+
+
+/**
+ * SAMP_DECLAREMETATA -- (Re)Declare all of our metadata.
+ *
+ * @brief (Re)Declare all of our metadata.
+ * @fn stat = samp_DeclareMetadata (handle_t handle)
+ *
+ * @param handle samp struct handle
+ * @return SAMP_OK or SAMP_ERR
+ */
+int
+samp_DeclareMetadata (handle_t handle)
+{
+ Samp *sampP = samp_H2P(handle);
+ Hub *hub = sampP->hub;
+
+ return ( hub ? samp_hubDeclareMetadata (hub) : SAMP_ERR );
+}
+
+
+/**
+ * SAMP_PING -- Ping the hub/app to see if it is alive (returns >0).
+ *
+ * @brief Ping the hub/app to see if it is alive (returns >0).
+ * @fn stat = samp_Ping (handle_t handle, String appName)
+ *
+ * @param handle samp struct handle
+ * @param appName application name
+ * @return OK or ERR if no response
+ */
+int
+samp_Ping (handle_t handle, String appName)
+{
+ int res = -1, status = SAMP_OK;
+ Samp *sampP = samp_H2P(handle);
+ Map resp = (Map) 0;
+ char *tag = samp_msgTag();
+ char *pubId = samp_app2id (handle, appName);
+
+
+ if (strcasecmp (appName, "hub") == 0) {
+ return ( res = samp_hubPing (sampP->hub) );
+
+ } else {
+ Msg msg = samp_newMsg ();
+ Param param = samp_newParam ();
+
+ samp_msgMType (msg, "samp.app.ping");
+ samp_msgParam (msg, param);
+
+ if (strcasecmp (appName, "all") == 0) {
+ resp = samp_callAll (handle, tag, msg);
+ } else {
+ resp = samp_callAndWait (handle, pubId, tag, msg);
+ status = samp_setErr (handle, resp);
+ }
+
+ samp_freeMap (resp);
+ samp_freeMsg (msg);
+
+ return (status);
+ }
+
+ return (SAMP_ERR);
+}
+
+
+/**
+ * SAMP_GETMETADATA -- Get the metadata for a specified app.
+ *
+ * @brief Get the metadata for a specified app.
+ * @fn map = samp_GetMetadata (handle_t handle, String pubId)
+ *
+ * @param handle samp struct handle
+ * @param pubId App public-id
+ * @return Map to message response
+ */
+Map
+samp_GetMetadata (handle_t handle, String pubId)
+{
+ Samp *sampP = samp_H2P(handle);
+ Hub *hub = sampP->hub;
+ Map resp = (Map) 0;
+
+
+ if (!hub)
+ return ((Map) 0);
+
+ xr_initParam (hub->id); /* set calling parameters */
+ xr_setStringInParam (hub->id, hub->privateKey);
+ xr_setStringInParam (hub->id, pubId);
+
+ if (xr_callSync (hub->id, "samp.hub.getMetadata") == OK) {
+ xr_getStructFromResult (hub->id, &resp);
+ return (resp);
+
+ } else {
+ memset (sampP->errortxt, 0, SZ_LINE);
+ strcpy (sampP->errortxt, xr_getErrMsg (hub->id));
+
+ fprintf (stderr, "Error: '%s'\n", sampP->errortxt);
+ }
+
+ return ( (Map) 0 );
+}
+
+
+/**
+ * SAMP_DECLARESUBSCRIPIONS -- Declare the messages we're interested in.
+ *
+ * @brief Declare the messages we're interested in.
+ * @fn stat = samp_DeclareSubscriptions (handle_t handle)
+ *
+ * @param handle samp struct handle
+ * @return SAMP_OK or SAMP_ERR
+ */
+int
+samp_DeclareSubscriptions (handle_t handle)
+{
+ Samp *sampP = samp_H2P(handle);
+ Hub *hub = sampP->hub;
+
+ return ( hub ? samp_hubDeclareSubscriptions (hub) : SAMP_ERR );
+}
+
+
+/**
+ * SAMP_GETSUBSCRIPTIONS -- Get the message subscriptions for a specific app.
+ *
+ * @brief Get the message subscriptions for a specific app.
+ * @fn subs[] = samp_GetSubscriptions (handle_t handle, String pubId)
+ *
+ * @param handle samp struct handle
+ * @param pubId public ID of target app
+ * @return Array of target subscriptions
+ */
+Map
+samp_GetSubscriptions (handle_t handle, String pubId)
+{
+ Samp *sampP = samp_H2P(handle);
+ Hub *hub = sampP->hub;
+ Map resp = (Map) 0;
+
+ if (!hub)
+ return ( (Map) 0);
+
+ xr_initParam (hub->id); /* set calling parameters */
+ xr_setStringInParam (hub->id, hub->privateKey);
+ xr_setStringInParam (hub->id, pubId);
+ if (xr_callSync (hub->id, "samp.hub.getSubscriptions") == OK) {
+ xr_getStructFromResult (hub->id, &resp);
+
+ return ( (Map) 0);
+ }
+
+ return ( (Map) 0 );
+}
+
+
+/**
+ * SAMP_GETREGISTEREDCLIENTS -- Get public-ids of the registered clients.
+ *
+ * @brief Get public-ids of the registered clients.
+ * @fn handle = samp_GetRegisteredClients (handle_t handle)
+ *
+ * @param handle samp struct handle
+ * @return handle to list of registered clients
+ */
+List
+samp_GetRegisteredClients (handle_t handle)
+{
+ Samp *sampP = samp_H2P(handle);
+ Hub *hub = sampP->hub;
+ int i, res;
+ List lres = (List) 0;
+ char name[64], *str = name;
+
+
+ if (!hub)
+ return ((List) 0);
+
+ xr_initParam (hub->id);
+ xr_setStringInParam (hub->id, hub->privateKey);
+ if (xr_callSync (hub->id, "samp.hub.getRegisteredClients") == OK) {
+ xr_getArrayFromResult (hub->id, &res);
+
+ lres = samp_newList ();
+ for (i=0; i < samp_listLen (res); i++) {
+ xr_getStringFromArray (res, i, &str);
+ samp_setStringInList (lres, str);
+
+ //free ((void *) str);
+ }
+ } else {
+ lres = samp_newList ();
+ samp_setStringInList (lres, "");
+ }
+
+ return (lres);
+}
+
+
+/**
+ * SAMP_GETSUBSCRIBEDCLIENTS -- Get clients matching the mtype subscription.
+ *
+ * @brief Get clients matching the mtype subscription.
+ * @fn list = samp_GetSubscribedClients (handle_t handle, String mtype)
+ *
+ * @param handle samp struct handle
+ * @param mtype mtype string
+ * @return handle to list of clients having mtype subscription
+ */
+List
+samp_GetSubscribedClients (handle_t handle, String mtype)
+{
+ Samp *sampP = samp_H2P(handle);
+ Hub *hub = sampP->hub;
+ int i, res;
+ List lres = (List) 0;
+ char name[64], *str = name;
+
+
+ if (!hub)
+ return ((List) 0);
+
+ xr_initParam (hub->id);
+ xr_setStringInParam (hub->id, hub->privateKey);
+ xr_setStringInParam (hub->id, mtype);
+
+ xr_callSync (hub->id, "samp.hub.getSubscribedClients");
+
+ xr_getArrayFromResult (hub->id, &res);
+
+ lres = samp_newList ();
+ for (i=0; i < samp_listLen (res); i++) {
+ xr_getStringFromArray (res, i, &str);
+ samp_setStringInList (lres, str);
+ }
+
+ return (lres);
+}