Пример #1
0
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
}
Пример #2
0
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);
}