本文整理汇总了C++中dbus_message_iter_get_basic函数的典型用法代码示例。如果您正苦于以下问题:C++ dbus_message_iter_get_basic函数的具体用法?C++ dbus_message_iter_get_basic怎么用?C++ dbus_message_iter_get_basic使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dbus_message_iter_get_basic函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: rtkit_get_int_property
static long long rtkit_get_int_property(DBusConnection *connection, const char* propname, long long* propval) {
DBusMessage *m = NULL, *r = NULL;
DBusMessageIter iter, subiter;
dbus_int64_t i64;
dbus_int32_t i32;
DBusError error;
int current_type;
long long ret;
const char * interfacestr = "org.freedesktop.RealtimeKit1";
dbus_error_init(&error);
if (!(m = dbus_message_new_method_call(
RTKIT_SERVICE_NAME,
RTKIT_OBJECT_PATH,
"org.freedesktop.DBus.Properties",
"Get"))) {
ret = -ENOMEM;
goto finish;
}
if (!dbus_message_append_args(
m,
DBUS_TYPE_STRING, &interfacestr,
DBUS_TYPE_STRING, &propname,
DBUS_TYPE_INVALID)) {
ret = -ENOMEM;
goto finish;
}
if (!(r = dbus_connection_send_with_reply_and_block(connection, m, -1, &error))) {
ret = translate_error(error.name);
goto finish;
}
if (dbus_set_error_from_message(&error, r)) {
ret = translate_error(error.name);
goto finish;
}
ret = -EBADMSG;
dbus_message_iter_init(r, &iter);
while ((current_type = dbus_message_iter_get_arg_type (&iter)) != DBUS_TYPE_INVALID) {
if (current_type == DBUS_TYPE_VARIANT) {
dbus_message_iter_recurse(&iter, &subiter);
while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID) {
if (current_type == DBUS_TYPE_INT32) {
dbus_message_iter_get_basic(&subiter, &i32);
*propval = i32;
ret = 0;
}
if (current_type == DBUS_TYPE_INT64) {
dbus_message_iter_get_basic(&subiter, &i64);
*propval = i64;
ret = 0;
}
dbus_message_iter_next (&subiter);
}
}
dbus_message_iter_next (&iter);
}
finish:
if (m)
dbus_message_unref(m);
if (r)
dbus_message_unref(r);
dbus_error_free(&error);
return ret;
}
开发者ID:albedozero,项目名称:fluidsynth,代码行数:79,代码来源:fluid_rtkit.c
示例2: parse_player_metadata
static gboolean parse_player_metadata(struct media_player *mp,
DBusMessageIter *iter)
{
DBusMessageIter dict;
DBusMessageIter var;
int ctype;
gboolean title = FALSE;
uint64_t uid;
ctype = dbus_message_iter_get_arg_type(iter);
if (ctype != DBUS_TYPE_ARRAY)
return FALSE;
dbus_message_iter_recurse(iter, &dict);
if (mp->track != NULL)
g_hash_table_unref(mp->track);
mp->track = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
g_free);
while ((ctype = dbus_message_iter_get_arg_type(&dict)) !=
DBUS_TYPE_INVALID) {
DBusMessageIter entry;
const char *key;
if (ctype != DBUS_TYPE_DICT_ENTRY)
return FALSE;
dbus_message_iter_recurse(&dict, &entry);
if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_STRING)
return FALSE;
dbus_message_iter_get_basic(&entry, &key);
dbus_message_iter_next(&entry);
if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_VARIANT)
return FALSE;
dbus_message_iter_recurse(&entry, &var);
if (strcasecmp(key, "xesam:title") == 0) {
if (!parse_string_metadata(mp, "Title", &var))
return FALSE;
title = TRUE;
} else if (strcasecmp(key, "xesam:artist") == 0) {
if (!parse_array_metadata(mp, "Artist", &var))
return FALSE;
} else if (strcasecmp(key, "xesam:album") == 0) {
if (!parse_string_metadata(mp, "Album", &var))
return FALSE;
} else if (strcasecmp(key, "xesam:genre") == 0) {
if (!parse_array_metadata(mp, "Genre", &var))
return FALSE;
} else if (strcasecmp(key, "mpris:length") == 0) {
if (!parse_int64_metadata(mp, "Duration", &var))
return FALSE;
} else if (strcasecmp(key, "xesam:trackNumber") == 0) {
if (!parse_int32_metadata(mp, "TrackNumber", &var))
return FALSE;
} else
DBG("%s not supported, ignoring", key);
dbus_message_iter_next(&dict);
}
if (title == FALSE)
g_hash_table_insert(mp->track, g_strdup("Title"),
g_strdup(""));
mp->position = 0;
g_timer_start(mp->timer);
uid = get_uid(mp);
avrcp_player_event(mp->player, AVRCP_EVENT_TRACK_CHANGED, &uid);
avrcp_player_event(mp->player, AVRCP_EVENT_TRACK_REACHED_START, NULL);
return TRUE;
}
开发者ID:BirdAndEarth,项目名称:RPi,代码行数:79,代码来源:media.c
示例3: utils_get_value_helper_list
/* Helper for utils_get_value, reads a list. The "list" is a struct with the
* list type and an array with the values directly in it.
*/
static GConfValue *
utils_get_value_helper_list (DBusMessageIter *iter)
{
DBusMessageIter struct_iter;
DBusMessageIter array_iter;
GConfValue *value;
gint32 list_type;
GSList *list;
GConfValue *child_value;
d(g_print ("Get value (list)\n"));
value = gconf_value_new (GCONF_VALUE_LIST);
dbus_message_iter_recurse (iter, &struct_iter);
/* Get the list type. */
dbus_message_iter_get_basic (&struct_iter, &list_type);
gconf_value_set_list_type (value, list_type);
/* Get the array. */
dbus_message_iter_next (&struct_iter);
dbus_message_iter_recurse (&struct_iter, &array_iter);
/* And the values from the array. */
list = NULL;
switch (list_type)
{
case GCONF_VALUE_STRING:
while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_STRING)
{
const gchar *str;
dbus_message_iter_get_basic (&array_iter, &str);
child_value = gconf_value_new (GCONF_VALUE_STRING);
gconf_value_set_string (child_value, str);
list = g_slist_prepend (list, child_value);
dbus_message_iter_next (&array_iter);
}
break;
case GCONF_VALUE_INT:
while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_INT32)
{
gint32 i;
dbus_message_iter_get_basic (&array_iter, &i);
child_value = gconf_value_new (GCONF_VALUE_INT);
gconf_value_set_int (child_value, i);
list = g_slist_prepend (list, child_value);
dbus_message_iter_next (&array_iter);
}
break;
case GCONF_VALUE_FLOAT:
while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_DOUBLE)
{
gdouble d;
dbus_message_iter_get_basic (&array_iter, &d);
child_value = gconf_value_new (GCONF_VALUE_FLOAT);
gconf_value_set_float (child_value, d);
list = g_slist_prepend (list, child_value);
dbus_message_iter_next (&array_iter);
}
break;
case GCONF_VALUE_BOOL:
while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_BOOLEAN)
{
gboolean b;
dbus_message_iter_get_basic (&array_iter, &b);
child_value = gconf_value_new (GCONF_VALUE_BOOL);
gconf_value_set_bool (child_value, b);
list = g_slist_prepend (list, child_value);
dbus_message_iter_next (&array_iter);
}
break;
case GCONF_VALUE_SCHEMA:
while (dbus_message_iter_get_arg_type (&array_iter) == DBUS_TYPE_STRUCT)
{
child_value = utils_get_schema_value (&array_iter);
list = g_slist_prepend (list, child_value);
dbus_message_iter_next (&array_iter);
}
break;
//.........这里部分代码省略.........
开发者ID:SpOlErOk38,项目名称:gconf-dbus,代码行数:101,代码来源:gconf-dbus-utils.c
示例4: tool_cmd_scan
//.........这里部分代码省略.........
method_name = WPANTUND_IF_CMD_NET_SCAN_START;
}
}
message = dbus_message_new_method_call(
interface_dbus_name,
path,
WPANTUND_DBUS_APIv1_INTERFACE,
method_name
);
dbus_message_append_args(
message,
DBUS_TYPE_UINT32, &channel_mask,
DBUS_TYPE_INVALID
);
if (sMleDiscoverScan) {
dbus_message_append_args(
message,
DBUS_TYPE_BOOLEAN, &joiner_flag,
DBUS_TYPE_BOOLEAN, &enable_filtering,
DBUS_TYPE_UINT16, &pan_id_filter,
DBUS_TYPE_INVALID
);
}
print_scan_header();
if (!sEnergyScan) {
gScannedNetworkCount = 0;
}
if(!dbus_connection_send_with_reply(
connection,
message,
&pending,
timeout
)) {
fprintf(stderr, "%s: error: IPC failure\n", argv[0]);
ret = ERRORCODE_UNKNOWN;
goto bail;
}
while ((dbus_connection_get_dispatch_status(connection) == DBUS_DISPATCH_DATA_REMAINS)
|| dbus_connection_has_messages_to_send(connection)
|| !dbus_pending_call_get_completed(pending)
) {
dbus_connection_read_write_dispatch(connection, 5000 /*ms*/);
}
reply = dbus_pending_call_steal_reply(pending);
require(reply != NULL, bail);
dbus_message_iter_init(reply, &iter);
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) {
fprintf(stderr, "%s: error: Server returned a bad response ('%c')\n",
argv[0], dbus_message_iter_get_arg_type(&iter));
ret = ERRORCODE_UNKNOWN;
goto bail;
}
// Get return code
dbus_message_iter_get_basic(&iter, &ret);
if (ret) {
fprintf(stderr, "%s failed with error %d. %s\n", argv[0], ret, wpantund_status_to_cstr(ret));
print_error_diagnosis(ret);
goto bail;
}
}
bail:
if (reply) {
dbus_message_unref(reply);
}
if (pending != NULL) {
dbus_pending_call_unref(pending);
}
if (message) {
dbus_message_unref(message);
}
if (connection) {
dbus_bus_remove_match(connection, gDBusObjectManagerMatchString, NULL);
dbus_connection_remove_filter(connection,&dbus_signal_handler,NULL);
dbus_connection_unref(connection);
}
dbus_error_free(&error);
return ret;
}
开发者ID:GiedriusM,项目名称:wpantund,代码行数:101,代码来源:tool-cmd-scan.c
示例5: query
/**
* Call a method on a remote object
*/
void query(char* param)
{
DBusMessage* msg;
DBusMessageIter args;
DBusConnection* conn;
DBusError err;
DBusPendingCall* pending;
int ret;
bool stat;
dbus_uint32_t level;
printf("Calling remote method with %s\n", param);
// initialiset the errors
dbus_error_init(&err);
// connect to the system bus and check for errors
conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
if (dbus_error_is_set(&err)) {
fprintf(stderr, "Connection Error (%s)\n", err.message);
dbus_error_free(&err);
}
if (NULL == conn) {
exit(1);
}
// request our name on the bus
ret = dbus_bus_request_name(conn, "test.method.caller", DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
if (dbus_error_is_set(&err)) {
fprintf(stderr, "Name Error (%s)\n", err.message);
dbus_error_free(&err);
}
if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
exit(1);
}
// create a new method call and check for errors
msg = dbus_message_new_method_call("test.method.server",// target for the method call
"/test/method/Object", // object to call on
"test.method.Type", // interface to call on
"Method"); // method name
if (NULL == msg) {
fprintf(stderr, "Message Null\n");
exit(1);
}
// append arguments
dbus_message_iter_init_append(msg, &args);
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, ¶m)) {
fprintf(stderr, "Out Of Memory!\n");
exit(1);
}
// send message and get a handle for a reply
if (!dbus_connection_send_with_reply (conn, msg, &pending, -1)) { // -1 is default timeout
fprintf(stderr, "Out Of Memory!\n");
exit(1);
}
if (NULL == pending) {
fprintf(stderr, "Pending Call Null\n");
exit(1);
}
dbus_connection_flush(conn);
printf("Request Sent\n");
// free message
dbus_message_unref(msg);
// block until we recieve a reply
dbus_pending_call_block(pending);
// get the reply message
msg = dbus_pending_call_steal_reply(pending);
if (NULL == msg) {
fprintf(stderr, "Reply Null\n");
exit(1);
}
// free the pending message handle
dbus_pending_call_unref(pending);
// read the parameters
if (!dbus_message_iter_init(msg, &args))
fprintf(stderr, "Message has no arguments!\n");
else if (DBUS_TYPE_BOOLEAN != dbus_message_iter_get_arg_type(&args))
fprintf(stderr, "Argument is not boolean!\n");
else
dbus_message_iter_get_basic(&args, &stat);
if (!dbus_message_iter_next(&args))
fprintf(stderr, "Message has too few arguments!\n");
else if (DBUS_TYPE_UINT32 != dbus_message_iter_get_arg_type(&args))
fprintf(stderr, "Argument is not int!\n");
else
dbus_message_iter_get_basic(&args, &level);
printf("Got Reply: %d, %d\n", stat, level);
//.........这里部分代码省略.........
开发者ID:feimengspirit,项目名称:galen-emacs,代码行数:101,代码来源:test.c
示例6: mediaplayer_register
static void mediaplayer_register(const char *id) {
DBusMessage* msg;
DBusMessageIter args, element;
DBusPendingCall* pending;
char *name=NULL;
static const char *prop="Identity";
struct MEDIAPLAYER **mp;
char player[256];
for(mp=&mediaplayer; *mp; mp=&((*mp)->next)) {
if(!strcmp(id, (*mp)->id))
return;
}
sprintf(player, "%s.%s", mpris.interface, id);
if(!(msg=dbus_message_new_method_call(player, mpris.object, dbus.interface_prop, "Get")))
goto do_register;
dbus_message_iter_init_append(msg, &args);
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &mpris.interface)) {
dbus_message_unref(msg);
goto do_register;
}
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &prop)) {
dbus_message_unref(msg);
goto do_register;
}
if(!dbus_connection_send_with_reply(dbus.session.connection, msg, &pending, -1)) {
dbus_message_unref(msg);
goto do_register;
}
if(!pending) {
dbus_message_unref(msg);
goto do_register;
}
dbus_connection_flush(dbus.session.connection);
dbus_message_unref(msg);
dbus_pending_call_block(pending);
if (!(msg=dbus_pending_call_steal_reply(pending))) {
dbus_pending_call_unref(pending);
goto do_register;
}
dbus_pending_call_unref(pending);
if(!dbus_message_iter_init(msg, &args)) {
dbus_message_unref(msg);
goto do_register;
} else if(dbus_message_iter_get_arg_type(&args)!=DBUS_TYPE_VARIANT) {
dbus_message_unref(msg);
goto do_register;
}
dbus_message_iter_recurse(&args, &element);
dbus_message_iter_get_basic(&element, &name);
dbus_message_unref(msg);
do_register:
*mp=malloc(sizeof(struct MEDIAPLAYER));
(*mp)->id=malloc(strlen(id)+1);
if(name) {
(*mp)->name=malloc(strlen(name)+1);
strcpy((void *) (*mp)->name, name);
} else
(*mp)->name=NULL;
(*mp)->next=NULL;
strcpy((void *) (*mp)->id, id);
}
开发者ID:h4xxel,项目名称:desktop-stuff,代码行数:64,代码来源:indicator-music.c
示例7: pdc_intf_show_ipv6_maps
int
pdc_intf_show_ipv6_maps(DBusConnection *connection,
int hansitype, int insid,
struct pdc_ipv6_map_conf *map_conf)
{
DBusMessage *query = NULL;
DBusMessage *reply = NULL;
DBusError err = {0};
DBusMessageIter iter;
DBusMessageIter iter_array;
DBusMessageIter iter_struct;
int iRet = 0;
uint32_t num = 0;
int i = 0;
int eag_slotid = 0;
int eag_hansitype = 0;
int eag_hansiid = 0;
if (NULL == map_conf){
return EAG_ERR_INPUT_PARAM_ERR;
}
memset(map_conf, 0, sizeof(struct pdc_ipv6_map_conf));
pdc_dbus_path_reinit(hansitype,insid);
query = dbus_message_new_method_call(
PDC_DBUS_NAME,
PDC_DBUS_OBJPATH,
PDC_DBUS_INTERFACE,
PDC_DBUS_METHOD_SHOW_IPV6_MAPS);
dbus_error_init(&err);
reply = dbus_connection_send_with_reply_and_block (
connection, query, -1, &err );
dbus_message_unref(query);
if (NULL == reply) {
if (dbus_error_is_set(&err)) {
dbus_error_free(&err);
}
return EAG_ERR_DBUS_FAILED;
}else{
dbus_message_iter_init(reply,&iter);
dbus_message_iter_get_basic(&iter, &iRet);
if( EAG_RETURN_OK == iRet ){
dbus_message_iter_next(&iter);
dbus_message_iter_get_basic(&iter, &num);
if( num > MAX_PDC_IPV6_MAP_NUM ){
num = MAX_PDC_IPV6_MAP_NUM;
}
map_conf->num = num;
if( num > 0 ){
dbus_message_iter_next(&iter);
dbus_message_iter_recurse(&iter,&iter_array);
for( i=0; i<num; i++ ){
dbus_message_iter_recurse(&iter_array,&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&(map_conf->map[i].userip[0]));
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&(map_conf->map[i].userip[1]));
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&(map_conf->map[i].userip[2]));
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&(map_conf->map[i].userip[3]));
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&(map_conf->map[i].prefix_length));
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&eag_slotid);
map_conf->map[i].eag_slotid = eag_slotid;
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&eag_hansitype);
map_conf->map[i].eag_hansitype = eag_hansitype;
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&eag_hansiid);
map_conf->map[i].eag_hansiid = eag_hansiid;
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&(map_conf->map[i].eag_ip));
dbus_message_iter_next(&iter_struct);
dbus_message_iter_get_basic(&iter_struct,
&(map_conf->map[i].eag_port));
dbus_message_iter_next(&iter_array);
}
}
}
}
//.........这里部分代码省略.........
开发者ID:inibir,项目名称:daemongroup,代码行数:101,代码来源:pdc_interface.c
示例8: my_com_netsplit_Nih_Test_Peek_method
static DBusHandlerResult
my_com_netsplit_Nih_Test_Peek_method (NihDBusObject * object,
NihDBusMessage *message)
{
DBusMessageIter iter;
DBusMessage * reply;
uint32_t address;
nih_assert (object != NULL);
nih_assert (message != NULL);
/* Iterate the arguments to the message and demarshal into arguments
* for our own function call.
*/
dbus_message_iter_init (message->message, &iter);
/* Demarshal a uint32_t from the message */
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_UINT32) {
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
"Invalid arguments to Peek method");
if (! reply)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
if (! dbus_connection_send (message->connection, reply, NULL)) {
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
}
dbus_message_iter_get_basic (&iter, &address);
dbus_message_iter_next (&iter);
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
"Invalid arguments to Peek method");
if (! reply)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
if (! dbus_connection_send (message->connection, reply, NULL)) {
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
}
/* Call the handler function */
nih_error_push_context ();
if (my_test_peek (object->data, message, address) < 0) {
NihError *err;
err = nih_error_get ();
if (err->number == ENOMEM) {
nih_free (err);
nih_error_pop_context ();
return DBUS_HANDLER_RESULT_NEED_MEMORY;
} else if (err->number == NIH_DBUS_ERROR) {
NihDBusError *dbus_err = (NihDBusError *)err;
reply = NIH_MUST (dbus_message_new_error (message->message, dbus_err->name, err->message));
nih_free (err);
nih_error_pop_context ();
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
} else {
reply = NIH_MUST (dbus_message_new_error (message->message, DBUS_ERROR_FAILED, err->message));
nih_free (err);
nih_error_pop_context ();
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
}
}
nih_error_pop_context ();
return DBUS_HANDLER_RESULT_HANDLED;
}
开发者ID:Gladiel,项目名称:libnih,代码行数:88,代码来源:test_node_object_functions_standard.c
示例9: my_com_netsplit_Nih_Test_IsValidAddress_method
static DBusHandlerResult
my_com_netsplit_Nih_Test_IsValidAddress_method (NihDBusObject * object,
NihDBusMessage *message)
{
DBusMessageIter iter;
DBusMessage * reply;
uint32_t address;
int is_valid;
nih_assert (object != NULL);
nih_assert (message != NULL);
/* Iterate the arguments to the message and demarshal into arguments
* for our own function call.
*/
dbus_message_iter_init (message->message, &iter);
/* Demarshal a uint32_t from the message */
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_UINT32) {
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
"Invalid arguments to IsValidAddress method");
if (! reply)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
if (! dbus_connection_send (message->connection, reply, NULL)) {
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
}
dbus_message_iter_get_basic (&iter, &address);
dbus_message_iter_next (&iter);
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID) {
reply = dbus_message_new_error (message->message, DBUS_ERROR_INVALID_ARGS,
"Invalid arguments to IsValidAddress method");
if (! reply)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
if (! dbus_connection_send (message->connection, reply, NULL)) {
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
}
/* Call the handler function */
nih_error_push_context ();
if (my_test_is_valid_address (object->data, message, address, &is_valid) < 0) {
NihError *err;
err = nih_error_get ();
if (err->number == ENOMEM) {
nih_free (err);
nih_error_pop_context ();
return DBUS_HANDLER_RESULT_NEED_MEMORY;
} else if (err->number == NIH_DBUS_ERROR) {
NihDBusError *dbus_err = (NihDBusError *)err;
reply = NIH_MUST (dbus_message_new_error (message->message, dbus_err->name, err->message));
nih_free (err);
nih_error_pop_context ();
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
} else {
reply = NIH_MUST (dbus_message_new_error (message->message, DBUS_ERROR_FAILED, err->message));
nih_free (err);
nih_error_pop_context ();
NIH_MUST (dbus_connection_send (message->connection, reply, NULL));
dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
}
}
nih_error_pop_context ();
/* If the sender doesn't care about a reply, don't bother wasting
* effort constructing and sending one.
*/
if (dbus_message_get_no_reply (message->message))
return DBUS_HANDLER_RESULT_HANDLED;
do {
__label__ enomem;
/* Construct the reply message. */
reply = dbus_message_new_method_return (message->message);
if (! reply)
goto enomem;
//.........这里部分代码省略.........
开发者ID:Gladiel,项目名称:libnih,代码行数:101,代码来源:test_node_object_functions_standard.c
示例10: request_input_reply
static void request_input_reply(DBusMessage *reply, void *user_data)
{
struct request_input_reply *pptp_reply = user_data;
const char *error = NULL;
char *username = NULL, *password = NULL;
char *key;
DBusMessageIter iter, dict;
DBG("provider %p", pptp_reply->provider);
if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) {
error = dbus_message_get_error_name(reply);
goto done;
}
if (!vpn_agent_check_reply_has_dict(reply))
goto done;
dbus_message_iter_init(reply, &iter);
dbus_message_iter_recurse(&iter, &dict);
while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
DBusMessageIter entry, value;
const char *str;
dbus_message_iter_recurse(&dict, &entry);
if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_STRING)
break;
dbus_message_iter_get_basic(&entry, &key);
if (g_str_equal(key, "Username")) {
dbus_message_iter_next(&entry);
if (dbus_message_iter_get_arg_type(&entry)
!= DBUS_TYPE_VARIANT)
break;
dbus_message_iter_recurse(&entry, &value);
if (dbus_message_iter_get_arg_type(&value)
!= DBUS_TYPE_STRING)
break;
dbus_message_iter_get_basic(&value, &str);
username = g_strdup(str);
}
if (g_str_equal(key, "Password")) {
dbus_message_iter_next(&entry);
if (dbus_message_iter_get_arg_type(&entry)
!= DBUS_TYPE_VARIANT)
break;
dbus_message_iter_recurse(&entry, &value);
if (dbus_message_iter_get_arg_type(&value)
!= DBUS_TYPE_STRING)
break;
dbus_message_iter_get_basic(&value, &str);
password = g_strdup(str);
}
dbus_message_iter_next(&dict);
}
done:
pptp_reply->callback(pptp_reply->provider, username, password, error,
pptp_reply->user_data);
g_free(username);
g_free(password);
g_free(pptp_reply);
}
开发者ID:amccarthy,项目名称:connman,代码行数:68,代码来源:pptp.c
示例11: dbus_message_iter_get_arg_type
CVariant CDBusUtil::ParseType(DBusMessageIter *itr)
{
CVariant value;
const char * string = NULL;
dbus_int32_t int32 = 0;
dbus_uint32_t uint32 = 0;
dbus_int64_t int64 = 0;
dbus_uint64_t uint64 = 0;
dbus_bool_t boolean = false;
double doublev = 0;
int type = dbus_message_iter_get_arg_type(itr);
switch (type)
{
case DBUS_TYPE_OBJECT_PATH:
case DBUS_TYPE_STRING:
dbus_message_iter_get_basic(itr, &string);
value = string;
break;
case DBUS_TYPE_UINT32:
dbus_message_iter_get_basic(itr, &uint32);
value = (uint64_t)uint32;
break;
case DBUS_TYPE_BYTE:
case DBUS_TYPE_INT32:
dbus_message_iter_get_basic(itr, &int32);
value = (int64_t)int32;
break;
case DBUS_TYPE_UINT64:
dbus_message_iter_get_basic(itr, &uint64);
value = (uint64_t)uint64;
break;
case DBUS_TYPE_INT64:
dbus_message_iter_get_basic(itr, &int64);
value = (int64_t)int64;
break;
case DBUS_TYPE_BOOLEAN:
dbus_message_iter_get_basic(itr, &boolean);
value = (bool)boolean;
break;
case DBUS_TYPE_DOUBLE:
dbus_message_iter_get_basic(itr, &doublev);
value = (double)doublev;
break;
case DBUS_TYPE_ARRAY:
DBusMessageIter array;
dbus_message_iter_recurse(itr, &array);
value = CVariant::VariantTypeArray;
do
{
CVariant item = ParseType(&array);
if (!item.isNull())
value.push_back(item);
} while (dbus_message_iter_next(&array));
break;
}
return value;
}
开发者ID:FLyrfors,项目名称:xbmc,代码行数:61,代码来源:DBusUtil.cpp
示例12: pptp_notify
static int pptp_notify(DBusMessage *msg, struct vpn_provider *provider)
{
DBusMessageIter iter, dict;
const char *reason, *key, *value;
char *addressv4 = NULL, *netmask = NULL, *gateway = NULL;
char *ifname = NULL, *nameservers = NULL;
struct connman_ipaddress *ipaddress = NULL;
dbus_message_iter_init(msg, &iter);
dbus_message_iter_get_basic(&iter, &reason);
dbus_message_iter_next(&iter);
if (!provider) {
connman_error("No provider found");
return VPN_STATE_FAILURE;
}
if (strcmp(reason, "auth failed") == 0) {
DBG("authentication failure");
vpn_provider_set_string(provider, "PPTP.User", NULL);
vpn_provider_set_string(provider, "PPTP.Password", NULL);
return VPN_STATE_AUTH_FAILURE;
}
if (strcmp(reason, "connect"))
return VPN_STATE_DISCONNECT;
dbus_message_iter_recurse(&iter, &dict);
while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
DBusMessageIter entry;
dbus_message_iter_recurse(&dict, &entry);
dbus_message_iter_get_basic(&entry, &key);
dbus_message_iter_next(&entry);
dbus_message_iter_get_basic(&entry, &value);
DBG("%s = %s", key, value);
if (!strcmp(key, "INTERNAL_IP4_ADDRESS"))
addressv4 = g_strdup(value);
if (!strcmp(key, "INTERNAL_IP4_NETMASK"))
netmask = g_strdup(value);
if (!strcmp(key, "INTERNAL_IP4_DNS"))
nameservers = g_strdup(value);
if (!strcmp(key, "INTERNAL_IFNAME"))
ifname = g_strdup(value);
dbus_message_iter_next(&dict);
}
if (vpn_set_ifname(provider, ifname) < 0) {
g_free(ifname);
g_free(addressv4);
g_free(netmask);
g_free(nameservers);
return VPN_STATE_FAILURE;
}
if (addressv4)
ipaddress = connman_ipaddress_alloc(AF_INET);
g_free(ifname);
if (!ipaddress) {
connman_error("No IP address for provider");
g_free(addressv4);
g_free(netmask);
g_free(nameservers);
return VPN_STATE_FAILURE;
}
value = vpn_provider_get_string(provider, "HostIP");
if (value) {
vpn_provider_set_string(provider, "Gateway", value);
gateway = g_strdup(value);
}
if (addressv4)
connman_ipaddress_set_ipv4(ipaddress, addressv4, netmask,
gateway);
vpn_provider_set_ipaddress(provider, ipaddress);
vpn_provider_set_nameservers(provider, nameservers);
g_free(addressv4);
g_free(netmask);
g_free(gateway);
g_free(nameservers);
connman_ipaddress_free(ipaddress);
return VPN_STATE_CONNECT;
}
开发者ID:amccarthy,项目名称:connman,代码行数:99,代码来源:pptp.c
示例13: dbus_read_servers_ex
static DBusMessage* dbus_read_servers_ex(DBusMessage *message)
{
DBusMessageIter iter, array_iter, string_iter;
DBusMessage *error = NULL;
const char *addr_err;
if (!dbus_message_iter_init(message, &iter))
{
return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
"Failed to initialize dbus message iter");
}
/* check that the message contains an array of arrays */
if ((dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY) ||
(dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_ARRAY))
{
return dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
"Expected array of string arrays");
}
mark_dbus();
/* array_iter points to each "as" element in the outer array */
dbus_message_iter_recurse(&iter, &array_iter);
while (dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_INVALID)
{
const char *str = NULL;
union mysockaddr addr, source_addr;
char interface[IF_NAMESIZE];
char *str_addr;
/* check the types of the struct and its elements */
if ((dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_ARRAY) ||
(dbus_message_iter_get_element_type(&array_iter) != DBUS_TYPE_STRING))
{
error = dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
"Expected inner array of strings");
break;
}
/* string_iter points to each "s" element in the inner array */
dbus_message_iter_recurse(&array_iter, &string_iter);
if (dbus_message_iter_get_arg_type(&string_iter) != DBUS_TYPE_STRING)
{
/* no IP address given */
error = dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
"Expected IP address");
break;
}
dbus_message_iter_get_basic(&string_iter, &str);
if (!str || !strlen (str))
{
error = dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
"Empty IP address");
break;
}
memset(&addr, 0, sizeof(addr));
memset(&source_addr, 0, sizeof(source_addr));
memset(&interface, 0, sizeof(interface));
/* dup the string because it gets modified during parsing */
str_addr = strdup(str);
if (!str_addr)
{
error = dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS,
"Out of memory parsing IP address");
break;
}
/* parse the IP address */
addr_err = parse_server(str_addr, &addr, &source_addr, &interface, NULL);
free(str_addr);
if (addr_err)
{
error = dbus_message_new_error_printf(message, DBUS_ERROR_INVALID_ARGS,
"Invalid IP address '%s': %s",
str, addr_err);
break;
}
/* jump past the address to the domain list (if any) */
dbus_message_iter_next (&string_iter);
/* parse domains and add each server/domain pair to the list */
do {
str = NULL;
if (dbus_message_iter_get_arg_type(&string_iter) == DBUS_TYPE_STRING)
dbus_message_iter_get_basic(&string_iter, &str);
dbus_message_iter_next (&string_iter);
add_update_server(&addr, &source_addr, interface, str);
} while (dbus_message_iter_get_arg_type(&string_iter) == DBUS_TYPE_STRING);
/* jump to next element in outer array */
dbus_message_iter_next(&array_iter);
}
//.........这里部分代码省略.........
开发者ID:StephenMacras,项目名称:dsl-n55u-bender,代码行数:101,代码来源:dbus.c
示例14: dbus_read_servers
static void dbus_read_servers(DBusMessage *message)
{
DBusMessageIter iter;
union mysockaddr addr, source_addr;
char *domain;
dbus_message_iter_init(message, &iter);
mark_dbus();
while (1)
{
int skip = 0;
if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_UINT32)
{
u32 a;
dbus_message_iter_get_basic(&iter, &a);
dbus_message_iter_next (&iter);
#ifdef HAVE_SOCKADDR_SA_LEN
source_addr.in.sin_len = addr.in.sin_len = sizeof(struct sockaddr_in);
#endif
addr.in.sin_addr.s_addr = ntohl(a);
source_addr.in.sin_family = addr.in.sin_family = AF_INET;
addr.in.sin_port = htons(NAMESERVER_PORT);
source_addr.in.sin_addr.s_addr = INADDR_ANY;
source_addr.in.sin_port = htons(daemon->query_port);
}
else if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_BYTE)
{
unsigned char p[sizeof(struct in6_addr)];
unsigned int i;
skip = 1;
for(i = 0; i < sizeof(struct in6_addr); i++)
{
dbus_message_iter_get_basic(&iter, &p[i]);
dbus_message_iter_next (&iter);
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BYTE)
break;
}
#ifndef HAVE_IPV6
my_syslog(LOG_WARNING, _("attempt to set an IPv6 server address via DBus - no IPv6 support"));
#else
if (i == sizeof(struct in6_addr)-1)
{
memcpy(&addr.in6.sin6_addr, p, sizeof(struct in6_addr));
#ifdef HAVE_SOCKADDR_SA_LEN
source_addr.in6.sin6_len = addr.in6.sin6_len = sizeof(struct sockaddr_in6);
#endif
source_addr.in6.sin6_family = addr.in6.sin6_family = AF_INET6;
addr.in6.sin6_port = htons(NAMESERVER_PORT);
source_addr.in6.sin6_flowinfo = addr.in6.sin6_flowinfo = 0;
source_addr.in6.sin6_scope_id = addr.in6.sin6_scope_id = 0;
source_addr.in6.sin6_addr = in6addr_any;
source_addr.in6.sin6_port = htons(daemon->query_port);
skip = 0;
}
#endif
}
else
/* At the end */
break;
/* process each domain */
do {
if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRING)
{
dbus_message_iter_get_basic(&iter, &domain);
dbus_message_iter_next (&iter);
}
else
domain = NULL;
if (!skip)
add_update_server(&addr, &source_addr, NULL, domain);
} while (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRING);
}
/* unlink and free anything still marked. */
cleanup_dbus();
}
开发者ID:StephenMacras,项目名称:dsl-n55u-bender,代码行数:87,代码来源:dbus.c
示例15: mediaplayer_get_track
static struct TRACK mediaplayer_get_track(const char *id) {
int current_type;
DBusMessage* msg;
DBusMessageIter args, array, dict, element, var, artist;
DBusPendingCall* pending;
static const char *prop="Metadata";
char player[256];
struct TRACK track={
"Unknown",
"Unknown",
"Unknown",
};
sprintf(player, "%s%s", mpris.base, id);
if(!(msg=dbus_message_new_method_call(player, mpris.object, dbus.interface_prop, "Get")))
return track;
dbus_message_iter_init_append(msg, &args);
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &mpris.interface_player)) {
dbus_message_unref(msg);
return track;
}
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &prop)) {
dbus_message_unref(msg);
return track;
}
if(!dbus_connection_send_with_reply(dbus.session.connection, msg, &pending, -1)) {
dbus_message_unref(msg);
return track;
}
if(!pending) {
dbus_message_unref(msg);
return track;
}
dbus_connection_flush(dbus.session.connection);
dbus_message_unref(msg);
dbus_pending_call_block(pending);
if(!(msg=dbus_pending_call_steal_reply(pending))) {
dbus_pending_call_unref(pending);
return track;
}
dbus_pending_call_unref(pending);
if(!dbus_message_iter_init(msg, &args)) {
dbus_message_unref(msg);
return track;
}
if(dbus_message_iter_get_arg_type(&args)!=DBUS_TYPE_VARIANT) {
dbus_message_unref(msg);
return track;
}
dbus_message_iter_recurse(&args, &array);
if(dbus_message_iter_get_arg_type(&array)!=DBUS_TYPE_ARRAY) {
dbus_message_unref(msg);
return track;
}
for(dbus_message_iter_recurse(&array, &dict); (current_type=dbus_message_iter_get_arg_type(&dict))!=DBUS_TYPE_INVALID; dbus_message_iter_next(&dict)) {
char *element_key, *element_value;
int element_type;
dbus_message_iter_recurse(&dict, &element);
if(dbus_message_iter_get_arg_type(&element)!=DBUS_TYPE_STRING)
continue;
dbus_message_iter_get_basic(&element, &element_key);
dbus_message_iter_next(&element);
if(dbus_message_iter_get_arg_type(&element)!=DBUS_TYPE_VARIANT)
continue;
dbus_message_iter_recurse(&element, &var);
element_type=dbus_message_iter_get_arg_type(&var);
if(element_type==DBUS_TYPE_STRING) {
dbus_message_iter_get_basic(&var, &element_value);
if(!strcmp(element_key, "xesam:album"))
snprintf(track.album, TRACK_ELEMENT_LENGTH, "%s", element_value);
else if(!strcmp(element_key, "xesam:title"))
snprintf(track.title, TRACK_ELEMENT_LENGTH, "%s", element_value);
} else if(element_type==DBUS_TYPE_ARRAY) {
/*just handle one artist for now*/
dbus_message_iter_recurse(&var, &artist);
if(dbus_message_iter_get_arg_type(&artist)!=DBUS_TYPE_STRING)
continue;
dbus_message_iter_get_basic(&artist, &element_value);
if(!strcmp(element_key, "xesam:artist"))
snprintf(track.artist, TRACK_ELEMENT_LENGTH, "%s", element_value);
}
}
dbus_message_unref(msg);
return track;
}
开发者ID:h4xxel,项目名称:desktop-stuff,代码行数:89,代码来源:indicator-music.c
示例16: do_iter
static void
do_iter (DBusMessageIter *iter)
{
static struct timeval album_time={0,0}, artist_time={0,0}, title_time={0,0}, now_time={0,0};
char *decoded;
int pos, len, i;
do
{
int type = dbus_message_iter_get_arg_type (iter);
const char *str;
if (type == DBUS_TYPE_INVALID)
break;
switch (type)
{
case DBUS_TYPE_STRING:
dbus_message_iter_get_basic (iter, &str);
if(varian_now){
gettimeofday(&now_time,NULL);
mylog("DBUS>> %s : '%s'\n",last_string,str);
if((strcmp(ALBUM_STRING,last_string)==0) || (strcmp(ALBUM_STRING2,last_string)==0)){
strncpy(album,str,MAX_STR_LEN);
now_playing_changed=1;
if(now_time.tv_sec-artist_time.tv_sec>DBUS_INTERVAL) artist[0]='\0';
if(now_time.tv_sec-title_time.tv_sec >DBUS_INTERVAL) title[0]='\0';
album_time.tv_sec=now_time.tv_sec;
mylog("DBUS>> ALBUM='%s'\n",str);
}
else if((strcmp(TITLE_STRING,last_string)==0) || (strcmp(TITLE_STRING2,last_string)==0)){
strncpy(title,str,MAX_STR_LEN);
now_playing_changed=1;
if(now_time.tv_sec-artist_time.tv_sec>DBUS_INTERVAL) artist[0]='\0';
if(now_time.tv_sec-album_time.tv_sec >DBUS_INTERVAL) album[0]='\0';
title_time.tv_sec=now_time.tv_sec;
mylog("DBUS>> TITLE='%s'\n",str);
}
else if((strcmp(ARTIST_STRING,last_string)==0) || (strcmp(ARTIST_STRING2,last_string)==0)){
strncpy(artist,str,MAX_STR_LEN);
now_playing_changed=1;
if(now_time.tv_sec-album_time.tv_sec>DBUS_INTERVAL) album[0]='\0';
if(now_time.tv_sec-title_time.tv_sec>DBUS_INTERVAL) title[0]='\0';
artist_time.tv_sec=now_time.tv_sec;
mylog("DBUS>> AR
|
请发表评论