static gboolean transaction_parser(GObject *conn, GObject *transaction, gpointer data) { #define PREFIX "com.nokia.policy." (void)conn; (void)data; static argdsc_t dspuser_args [] = { { argtype_integer , "pid" , STRUCT_OFFSET(user_t, pid) }, { argtype_invalid , NULL , 0 } }; static actdsc_t actions[] = { { PREFIX "dsp_user", dspuser_action, dspuser_args, sizeof(user_t) }, { NULL , NULL , NULL , 0 } }; guint txid; GSList *entry, *list; char *name; actdsc_t *action; gboolean success; gchar *signal; OHM_DEBUG(DBG_ACTION, "got actions"); g_object_get(transaction, "txid" , &txid , NULL); g_object_get(transaction, "facts" , &list , NULL); g_object_get(transaction, "signal", &signal, NULL); success = TRUE; if (!strcmp(signal, "dsp_actions")) { OHM_DEBUG(DBG_ACTION, "txid: %d", txid); memset(users, 0, sizeof(users)); nuser = 0; for (entry = list; entry != NULL; entry = g_slist_next(entry)) { name = (char *)entry->data; for (action = actions; action->name != NULL; action++) { if (!strcmp(name, action->name)) success &= action_parser(action); } } success = dsp_set_users(users, nuser); } g_free(signal); return success; #undef PREFIX }
static int remote_ending_action_parser(struct nv_pair *nv, int line, remote_conf_t *config) { if (strcasecmp(nv->value, "reconnect") == 0) { config->remote_ending_action = FA_RECONNECT; return 0; } return action_parser(nv, line, &config->remote_ending_action, &config->remote_ending_exe); }