本文整理汇总了C++中dbus_message_iter_recurse函数的典型用法代码示例。如果您正苦于以下问题:C++ dbus_message_iter_recurse函数的具体用法?C++ dbus_message_iter_recurse怎么用?C++ dbus_message_iter_recurse使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dbus_message_iter_recurse函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: notify
void notify(DBusMessage * dmsg)
{
DBusMessage *reply;
DBusMessageIter args;
DBusMessageIter hints;
DBusMessageIter hint;
char *hint_name;
int i;
int id;
const char *appname = NULL;
const char *summary = NULL;
const char *body = NULL;
const char *icon = NULL;
const char *fgcolor = NULL;
const char *bgcolor = NULL;
int urgency = 1;
int progress = -1;
notification *n = malloc(sizeof(notification));
dbus_uint32_t replaces_id = 0;
dbus_int32_t expires = -1;
dbus_serial++;
dbus_message_iter_init(dmsg, &args);
_extract_basic(DBUS_TYPE_STRING, &args, &appname);
dbus_message_iter_next(&args);
_extract_basic(DBUS_TYPE_UINT32, &args, &replaces_id);
dbus_message_iter_next(&args);
_extract_basic(DBUS_TYPE_STRING, &args, &icon);
dbus_message_iter_next(&args);
_extract_basic(DBUS_TYPE_STRING, &args, &summary);
dbus_message_iter_next(&args);
_extract_basic(DBUS_TYPE_STRING, &args, &body);
dbus_message_iter_next(&args);
dbus_message_iter_next(&args);
dbus_message_iter_recurse(&args, &hints);
dbus_message_iter_next(&args);
_extract_basic(DBUS_TYPE_INT32, &args, &expires);
while (dbus_message_iter_get_arg_type(&hints) != DBUS_TYPE_INVALID) {
dbus_message_iter_recurse(&hints, &hint);
while (dbus_message_iter_get_arg_type(&hint) !=
DBUS_TYPE_INVALID) {
if (dbus_message_iter_get_arg_type(&hint) !=
DBUS_TYPE_STRING) {
dbus_message_iter_next(&hint);
continue;
}
dbus_message_iter_get_basic(&hint, &hint_name);
_extract_hint(DBUS_TYPE_BYTE, "urgency", hint_name,
&hint, &urgency);
_extract_hint(DBUS_TYPE_STRING, "fgcolor", hint_name,
&hint, &fgcolor);
_extract_hint(DBUS_TYPE_STRING, "bgcolor", hint_name,
&hint, &bgcolor);
_extract_hint(DBUS_TYPE_INT32, "value", hint_name,
&hint, &progress);
if (!progress)
_extract_hint(DBUS_TYPE_UINT32, "value",
hint_name, &hint, &progress);
dbus_message_iter_next(&hint);
}
dbus_message_iter_next(&hints);
}
if (expires > 0) {
/* do some rounding */
expires = (expires + 500) / 1000;
if (expires < 1) {
expires = 1;
}
}
n->appname = appname != NULL ? strdup(appname) : "";
n->summary = summary != NULL ? strdup(summary) : "";
n->body = body != NULL ? strdup(body) : "";
n->icon = icon != NULL ? strdup(icon) : "";
n->timeout = expires;
n->progress = (progress < 0 || progress > 100) ? 0 : progress + 1;
n->urgency = urgency;
n->dbus_client = strdup(dbus_message_get_sender(dmsg));
for (i = 0; i < ColLast; i++) {
n->color_strings[i] = NULL;
}
n->color_strings[ColFG] = fgcolor == NULL ? NULL : strdup(fgcolor);
n->color_strings[ColBG] = bgcolor == NULL ? NULL : strdup(bgcolor);
id = init_notification(n, replaces_id);
if (id > 0)
map_win();
reply = dbus_message_new_method_return(dmsg);
//.........这里部分代码省略.........
开发者ID:losciamano,项目名称:dunst,代码行数:101,代码来源:dunst_dbus.c
示例2: qaul_network_devices_json
/**
* Write a Json configuration to @a json_txt of available network devices.
* Only Wifi and Ethernet devices are represented as the other device cannot be
* configured at the moment. @a json_txt needs to be a pointer ot a char buffer
* of the size MAX_JSON_LEN +1.
*
* @retval 1 success
* @retval 2 error
*
* https://developer.gnome.org/NetworkManager/unstable/spec.html
* GetDevices() → ao
*
* Dbus messages:
* http://dbus.freedesktop.org/doc/api/html/group__DBusMessage.html
* DBUS_EXPORT int dbus_message_iter_get_arg_type(DBusMessageIter * iter)
*/
int qaul_network_devices_json(DBusConnection* dbus_connection, char* json_txt)
{
DBusMessage* msg;
DBusMessageIter iter, iter_array;
int current_type, json_pos, i;
const char* device_path_ptr;
qaul_dbus_device_properties device;
printf("qaul_network_devices_json\n");
i = 0;
msg = networkmanager_dbus_method_call("GetDevices");
if(msg == NULL)
return 0;
dbus_message_iter_init_append(msg, &iter);
if(!networkmanager_dbus_send(&msg, dbus_connection))
{
printf("qaul_network_devices_json networkmanager_dbus_send error\n");
return 0;
}
if(!dbus_message_iter_init(msg, &iter)
|| dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY)
{
printf("qaul_network_devices_json dbus_message_iter_init | DBUS_TYPE_ARRAY error\n");
dbus_message_unref(msg);
return 0;
}
// loop recursively over the array
json_pos = 0;
strncpy(json_txt +json_pos, "", MAX_JSON_LEN -json_pos);
dbus_message_iter_recurse (&iter, &iter_array);
while((current_type = dbus_message_iter_get_arg_type(&iter_array)) != DBUS_TYPE_INVALID)
{
if(current_type == DBUS_TYPE_OBJECT_PATH)
{
dbus_message_iter_get_basic(&iter_array, &device_path_ptr);
strncpy(device.dbus_device_path, device_path_ptr, sizeof(device.dbus_device_path));
// get interface name and interface type
// dbus low level: dbus_message_new_method_call interface:"org.freedesktop.DBus.Properties" method:"Get" property:"(String)Interface, (UInt32)DeviceType"
if(networkmanager_device_properties(dbus_connection, &device))
{
// only wifi and ethernet connections can be handled at the moment
if(device.type == 2 || device.type == 1)
{
if(i > 0)
{
json_pos = strlen(json_txt);
strncpy(json_txt +json_pos, ",", MAX_JSON_LEN -json_pos);
}
i++;
// write to json
json_pos = strlen(json_txt);
strncpy(json_txt +json_pos, "{\"name\":\"", MAX_JSON_LEN -json_pos);
json_pos = strlen(json_txt);
strncpy(json_txt +json_pos, device.interface, MAX_JSON_LEN -json_pos);
json_pos = strlen(json_txt);
if(device.type == 2)
{
strncpy(json_txt +json_pos, "\",\"ui_name\":\"WIFI (", MAX_JSON_LEN -json_pos);
json_pos = strlen(json_txt);
strncpy(json_txt +json_pos, device.interface, MAX_JSON_LEN -json_pos);
json_pos = strlen(json_txt);
strncpy(json_txt +json_pos, ")\",\"type\":1", MAX_JSON_LEN -json_pos);
}
else if(device.type == 1)
{
strncpy(json_txt +json_pos, "\",\"ui_name\":\"ETHERNET (", MAX_JSON_LEN -json_pos);
json_pos = strlen(json_txt);
strncpy(json_txt +json_pos, device.interface, MAX_JSON_LEN -json_pos);
json_pos = strlen(json_txt);
strncpy(json_txt +json_pos, ")\",\"type\":2", MAX_JSON_LEN -json_pos);
}
json_pos = strlen(json_txt);
strncpy(json_txt +json_pos, "}", MAX_JSON_LEN -json_pos);
}
}
else
printf("qaul_network_devices_json networkmanager_device_get_property failed\n");
//.........这里部分代码省略.........
开发者ID:anuvazhayil,项目名称:qaul.net,代码行数:101,代码来源:network.c
示例3: request_navit_set_attr
static DBusHandlerResult
request_navit_set_attr(DBusConnection *connection, DBusMessage *message)
{
struct navit *navit;
DBusMessageIter iter, iterattr;
struct attr attr;
char *attr_type;
navit = object_get_from_message(message, "navit");
if (! navit)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
dbus_message_iter_init(message, &iter);
dbus_message_iter_get_basic(&iter, &attr_type);
attr.type = attr_from_name(attr_type);
dbg(0, "attr value: 0x%x string: %s\n", attr.type, attr_type);
if (attr.type == attr_none)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
dbus_message_iter_next(&iter);
dbus_message_iter_recurse(&iter, &iterattr);
dbg(0, "seems valid. signature: %s\n", dbus_message_iter_get_signature(&iterattr));
if (attr.type > attr_type_item_begin && attr.type < attr_type_item_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if (attr.type > attr_type_int_begin && attr.type < attr_type_boolean_begin) {
if (dbus_message_iter_get_arg_type(&iterattr) == DBUS_TYPE_INT32)
{
dbus_message_iter_get_basic(&iterattr, &attr.u.num);
if (navit_set_attr(navit, &attr))
return empty_reply(connection, message);
}
}
else if(attr.type > attr_type_boolean_begin && attr.type < attr_type_int_end) {
if (dbus_message_iter_get_arg_type(&iterattr) == DBUS_TYPE_BOOLEAN)
{
dbus_message_iter_get_basic(&iterattr, &attr.u.num);
if (navit_set_attr(navit, &attr))
return empty_reply(connection, message);
}
}
#if 0
else if(attr.type > attr_type_string_begin && attr.type < attr_type_string_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if(attr.type > attr_type_special_begin && attr.type < attr_type_special_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if(attr.type > attr_type_double_begin && attr.type < attr_type_double_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if(attr.type > attr_type_coord_geo_begin && attr.type < attr_type_coord_geo_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if(attr.type > attr_type_color_begin && attr.type < attr_type_color_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if(attr.type > attr_type_object_begin && attr.type < attr_type_object_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if(attr.type > attr_type_coord_begin && attr.type < attr_type_coord_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if(attr.type > attr_type_pcoord_begin && attr.type < attr_type_pcoord_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
else if(attr.type > attr_type_callback_begin && attr.type < attr_type_callback_end)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
#endif
else {
dbg(0, "zomg really unhandled111\n");
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
开发者ID:justinzane,项目名称:navit,代码行数:78,代码来源:binding_dbus.c
示例4: DBG
static DBusMessage *change_session(DBusConnection *conn,
DBusMessage *msg, void *user_data)
{
struct connman_session *session = user_data;
struct session_info *info = session->info;
DBusMessageIter iter, value;
const char *name;
const char *val;
GSList *allowed_bearers;
int err;
DBG("session %p", session);
if (dbus_message_iter_init(msg, &iter) == FALSE)
return __connman_error_invalid_arguments(msg);
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
return __connman_error_invalid_arguments(msg);
dbus_message_iter_get_basic(&iter, &name);
dbus_message_iter_next(&iter);
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
return __connman_error_invalid_arguments(msg);
dbus_message_iter_recurse(&iter, &value);
switch (dbus_message_iter_get_arg_type(&value)) {
case DBUS_TYPE_ARRAY:
if (g_str_equal(name, "AllowedBearers") == TRUE) {
err = parse_bearers(&value, &allowed_bearers);
if (err < 0)
return __connman_error_failed(msg, err);
g_slist_free(info->config.allowed_bearers);
session->user_allowed_bearers = allowed_bearers;
err = apply_policy_on_bearers(
session->policy_config->allowed_bearers,
session->user_allowed_bearers,
&info->config.allowed_bearers);
if (err < 0)
return __connman_error_failed(msg, err);
} else {
goto err;
}
break;
case DBUS_TYPE_STRING:
if (g_str_equal(name, "ConnectionType") == TRUE) {
dbus_message_iter_get_basic(&value, &val);
info->config.type = apply_policy_on_type(
session->policy_config->type,
connman_session_parse_connection_type(val));
} else {
goto err;
}
break;
default:
goto err;
}
session_changed(session, CONNMAN_SESSION_TRIGGER_SETTING);
return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
err:
return __connman_error_invalid_arguments(msg);
}
开发者ID:leinomii,项目名称:connman,代码行数:68,代码来源:session.c
示例5: networkmanager_get_property
/**
* get @a property via @a dbus_connection .
* org.freedesktop.DBus.Properties
* Get (String interface, String propname) -> (Variant value)
*/
static int networkmanager_get_property(DBusConnection* dbus_connection, networkmanager_property* property)
{
DBusMessage* msg;
DBusMessageIter iter, iter_variant;
DBusPendingCall* pending;
int success;
char* value_str_ptr;
msg = dbus_message_new_method_call(
"org.freedesktop.NetworkManager",
property->dbus_path,
"org.freedesktop.DBus.Properties",
"Get"
);
if(msg == NULL)
{
printf("networkmanager_get_property msg error\n");
return 0;
}
dbus_message_iter_init_append(msg, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property->dbus_interface);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property->dbus_property_name);
// send dbus message
// -1 is the default time out. Other time outs can be configured in milli seconds.
success = dbus_connection_send_with_reply(dbus_connection, msg, &pending, -1);
if(!success)
{
printf("networkmanager_get_property dbus send error\n");
return 0;
}
if(pending == NULL)
{
printf ("networkmanager_get_property dbus calling error\n");
return 0;
}
dbus_connection_flush(dbus_connection);
dbus_message_unref(msg);
dbus_pending_call_block(pending);
msg = dbus_pending_call_steal_reply(pending);
dbus_pending_call_unref(pending);
if(msg == NULL)
{
printf("networkmanager_get_property msg error 2\n");
return 0;
}
if(!dbus_message_iter_init(msg, &iter))
{
printf("networkmanager_get_property dbus_message_iter_init error\n");
dbus_message_unref(msg);
return 0;
}
if(dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_VARIANT)
{
dbus_message_iter_recurse(&iter, &iter_variant);
if(dbus_message_iter_get_arg_type(&iter_variant) == DBUS_TYPE_STRING)
{
dbus_message_iter_get_basic(&iter_variant, &value_str_ptr);
strncpy(property->value_string, value_str_ptr, property->value_string_len);
printf("networkmanager_get_property %s %s: %s\n", property->dbus_path, property->dbus_property_name, value_str_ptr);
}
else if(dbus_message_iter_get_arg_type(&iter_variant) == DBUS_TYPE_UINT32)
{
dbus_message_iter_get_basic(&iter_variant, &property->value_int);
printf("networkmanager_get_property %s %s: %i\n", property->dbus_path, property->dbus_property_name, property->value_int);
}
else
{
printf("networkmanager_get_property dbus_message_iter_get_arg_type error\n");
dbus_message_unref(msg);
return 0;
}
}
else
{
printf("networkmanager_get_property dbus_message_iter_get_arg_type not variant error\n");
dbus_message_unref(msg);
return 0;
}
dbus_message_unref(msg);
return 1;
}
开发者ID:anuvazhayil,项目名称:qaul.net,代码行数:95,代码来源:network.c
示例6: handle_message
static void handle_message (DBusMessage *msg, struct cb_data *data)
{
char *cb_decision_name;
int found = 0, i = 0;
struct transaction_data *trans_data = NULL;
/* parse the message to ep_decision array */
dbus_uint32_t txid;
char *actname;
DBusMessageIter msgit;
DBusMessageIter arrit;
DBusMessageIter entit;
DBusMessageIter actit;
DBusMessageIter structit;
DBusMessageIter structfieldit;
DBusMessageIter variantit;
int success = TRUE;
/* printf("libep: parsing the message\n"); */
/**
* This is really complicated and nasty. Idea is that the message is
* supposed to look something like this:
*
* uint32 0
* array [
* dict entry(
* string "com.nokia.policy.audio_route"
* array [
* array [
* struct {
* string "type"
* variant string "source"
* }
* struct {
* string "device"
* variant string "headset"
* }
* ]
* array [
* struct {
* string "type"
* variant string "sink"
* }
* struct {
* string "device"
* variant string "headset"
* }
* ]
* ]
* )
* ]
*
*/
dbus_message_iter_init(msg, &msgit);
if (dbus_message_iter_get_arg_type(&msgit) != DBUS_TYPE_UINT32)
return;
dbus_message_iter_get_basic(&msgit, (void *)&txid);
if (txid != 0) {
trans_data = calloc(1, sizeof(struct transaction_data));
if (!trans_data)
goto send_signal;
trans_data->txid = txid;
if (!ep_list_append(&transaction_list, trans_data)) {
success = FALSE;
goto send_signal;
}
}
/* printf("libep: txid: %u\n", txid); */
if (!dbus_message_iter_next(&msgit) ||
dbus_message_iter_get_arg_type(&msgit) != DBUS_TYPE_ARRAY) {
success = FALSE;
goto send_signal;
}
dbus_message_iter_recurse(&msgit, &arrit);
do {
if (dbus_message_iter_get_arg_type(&arrit) != DBUS_TYPE_DICT_ENTRY) {
success = FALSE;
continue;
}
dbus_message_iter_recurse(&arrit, &entit);
do {
struct ep_decision **decisions = NULL;
struct ep_list_head_s decision_list;
memset(&decision_list, 0, sizeof(struct ep_list_head_s));
//.........这里部分代码省略.........
开发者ID:arcean,项目名称:ohm-plugins-misc,代码行数:101,代码来源:ep.c
示例7: request_input_reply
static void request_input_reply(DBusMessage *reply, void *user_data)
{
struct request_input_reply *l2tp_reply = user_data;
const char *error = NULL;
char *username = NULL, *password = NULL;
char *key;
DBusMessageIter iter, dict;
DBG("provider %p", l2tp_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) == FALSE)
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:
l2tp_reply->callback(l2tp_reply->provider, username, password, error,
l2tp_reply->user_data);
g_free(username);
g_free(password);
g_free(l2tp_reply);
}
开发者ID:Jubei-Mitsuyoshi,项目名称:aaa-connman,代码行数:68,代码来源:l2tp.c
示例8: __ofono_atom_get_modem
static DBusMessage *cf_set_property(DBusConnection *conn, DBusMessage *msg,
void *data)
{
struct ofono_call_forwarding *cf = data;
struct ofono_modem *modem = __ofono_atom_get_modem(cf->atom);
DBusMessageIter iter;
DBusMessageIter var;
const char *property;
int cls;
int type;
if (ofono_modem_get_online(modem) == FALSE)
return __ofono_error_not_available(msg);
if (__ofono_call_forwarding_is_busy(cf) ||
__ofono_ussd_is_busy(cf->ussd))
return __ofono_error_busy(msg);
if (!dbus_message_iter_init(msg, &iter))
return __ofono_error_invalid_args(msg);
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
return __ofono_error_invalid_args(msg);
dbus_message_iter_get_basic(&iter, &property);
dbus_message_iter_next(&iter);
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
return __ofono_error_invalid_args(msg);
dbus_message_iter_recurse(&iter, &var);
if (cf_condition_timeout_property(property, &cls)) {
dbus_uint16_t timeout;
GSList *l;
struct ofono_call_forwarding_condition *c;
type = CALL_FORWARDING_TYPE_NO_REPLY;
if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_UINT16)
return __ofono_error_invalid_args(msg);
dbus_message_iter_get_basic(&var, &timeout);
if (timeout < 1 || timeout > 30)
return __ofono_error_invalid_format(msg);
l = g_slist_find_custom(cf->cf_conditions[type],
GINT_TO_POINTER(cls),
cf_condition_find_with_cls);
if (l == NULL)
return __ofono_error_failed(msg);
c = l->data;
return set_property_request(cf, msg, type, cls,
&c->phone_number, timeout);
} else if (cf_condition_enabled_property(cf, property, &type, &cls)) {
struct ofono_phone_number ph;
const char *number;
int timeout;
ph.number[0] = '\0';
ph.type = 129;
if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_STRING)
return __ofono_error_invalid_args(msg);
dbus_message_iter_get_basic(&var, &number);
if (strlen(number) > 0 && !valid_phone_number_format(number))
return __ofono_error_invalid_format(msg);
if (number[0] != '\0')
string_to_phone_number(number, &ph);
timeout = cf_find_timeout(cf->cf_conditions[type], cls);
return set_property_request(cf, msg, type, cls, &ph,
timeout);
}
return __ofono_error_invalid_args(msg);
}
开发者ID:Conjuror,项目名称:ofono,代码行数:85,代码来源:call-forwarding.c
示例9: qIterGet
inline QVariant qIterGet(DBusMessageIter *it)
{
DBusMessageIter sub;
dbus_message_iter_recurse(it, &sub);
return QDBusTypeHelper<QVariant>::toVariant(qFetchParameter(&sub));
}
开发者ID:freedesktop-unofficial-mirror,项目名称:dbus__dbus-qt3,代码行数:6,代码来源:qdbusmarshall.cpp
示例10: oc_notify
static int oc_notify(DBusMessage *msg, struct vpn_provider *provider)
{
DBusMessageIter iter, dict;
const char *reason, *key, *value;
char *domain = NULL;
char *addressv4 = NULL, *addressv6 = NULL;
char *netmask = NULL, *gateway = NULL;
unsigned char prefix_len = 0;
struct connman_ipaddress *ipaddress;
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, "connect"))
return VPN_STATE_DISCONNECT;
domain = g_strdup(vpn_provider_get_string(provider, "VPN.Domain"));
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);
if (strcmp(key, "CISCO_CSTP_OPTIONS"))
DBG("%s = %s", key, value);
if (!strcmp(key, "VPNGATEWAY"))
gateway = g_strdup(value);
if (!strcmp(key, "INTERNAL_IP4_ADDRESS"))
addressv4 = g_strdup(value);
if (!strcmp(key, "INTERNAL_IP6_ADDRESS")) {
addressv6 = g_strdup(value);
prefix_len = 128;
}
if (!strcmp(key, "INTERNAL_IP4_NETMASK"))
netmask = g_strdup(value);
if (!strcmp(key, "INTERNAL_IP6_NETMASK")) {
char *sep;
/* The netmask contains the address and the prefix */
sep = strchr(value, '/');
if (sep != NULL) {
unsigned char ip_len = sep - value;
addressv6 = g_strndup(value, ip_len);
prefix_len = (unsigned char)
strtol(sep + 1, NULL, 10);
}
}
if (!strcmp(key, "INTERNAL_IP4_DNS") ||
!strcmp(key, "INTERNAL_IP6_DNS"))
vpn_provider_set_nameservers(provider, value);
if (!strcmp(key, "CISCO_PROXY_PAC"))
vpn_provider_set_pac(provider, value);
if (domain == NULL && !strcmp(key, "CISCO_DEF_DOMAIN")) {
g_free(domain);
domain = g_strdup(value);
}
if (g_str_has_prefix(key, "CISCO_SPLIT_INC") == TRUE ||
g_str_has_prefix(key, "CISCO_IPV6_SPLIT_INC") == TRUE)
vpn_provider_append_route(provider, key, value);
dbus_message_iter_next(&dict);
}
DBG("%p %p", addressv4, addressv6);
if (addressv4 != NULL)
ipaddress = connman_ipaddress_alloc(AF_INET);
else if (addressv6 != NULL)
ipaddress = connman_ipaddress_alloc(AF_INET6);
else
ipaddress = NULL;
if (ipaddress == NULL) {
g_free(addressv4);
g_free(addressv6);
g_free(netmask);
g_free(gateway);
g_free(domain);
//.........这里部分代码省略.........
开发者ID:Jubei-Mitsuyoshi,项目名称:aaa-connman,代码行数:101,代码来源:openconnect.c
示例11: __ofono_error_busy
static DBusMessage *radio_set_property(DBusConnection *conn, DBusMessage *msg,
void *data)
{
struct ofono_radio_settings *rs = data;
DBusMessageIter iter;
DBusMessageIter var;
const char *property;
if (rs->pending)
return __ofono_error_busy(msg);
if (!dbus_message_iter_init(msg, &iter))
return __ofono_error_invalid_args(msg);
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
return __ofono_error_invalid_args(msg);
dbus_message_iter_get_basic(&iter, &property);
dbus_message_iter_next(&iter);
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
return __ofono_error_invalid_args(msg);
dbus_message_iter_recurse(&iter, &var);
if (g_strcmp0(property, "TechnologyPreference") == 0) {
const char *value;
enum ofono_radio_access_mode mode;
if (rs->driver->set_rat_mode == NULL)
return __ofono_error_not_implemented(msg);
if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_STRING)
return __ofono_error_invalid_args(msg);
dbus_message_iter_get_basic(&var, &value);
if (radio_access_mode_from_string(value, &mode) == FALSE)
return __ofono_error_invalid_args(msg);
if (rs->mode == mode)
return dbus_message_new_method_return(msg);
rs->pending = dbus_message_ref(msg);
rs->pending_mode = mode;
rs->driver->set_rat_mode(rs, mode, radio_mode_set_callback, rs);
return NULL;
} else if (g_strcmp0(property, "GsmBand") == 0) {
const char *value;
enum ofono_radio_band_gsm band;
if (rs->driver->set_band == NULL)
return __ofono_error_not_implemented(msg);
if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_STRING)
return __ofono_error_invalid_args(msg);
dbus_message_iter_get_basic(&var, &value);
if (radio_band_gsm_from_string(value, &band) == FALSE)
return __ofono_error_invalid_args(msg);
if (rs->band_gsm == band)
return dbus_message_new_method_return(msg);
rs->pending = dbus_message_ref(msg);
rs->pending_band_gsm = band;
rs->driver->set_band(rs, band, rs->band_umts,
radio_band_set_callback, rs);
return NULL;
} else if (g_strcmp0(property, "UmtsBand") == 0) {
const char *value;
enum ofono_radio_band_umts band;
if (rs->driver->set_band == NULL)
return __ofono_error_not_implemented(msg);
if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_STRING)
return __ofono_error_invalid_args(msg);
dbus_message_iter_get_basic(&var, &value);
if (radio_band_umts_from_string(value, &band) == FALSE)
return __ofono_error_invalid_args(msg);
if (rs->band_umts == band)
return dbus_message_new_method_return(msg);
rs->pending = dbus_message_ref(msg);
rs->pending_band_umts = band;
rs->driver->set_band(rs, rs->band_gsm, band,
radio_band_set_callback, rs);
return NULL;
} else if (g_strcmp0(property, "FastDormancy") == 0) {
dbus_bool_t value;
int target;
//.........这里部分代码省略.........
开发者ID:stskeeps,项目名称:ofono,代码行数:101,代码来源:radio-settings.c
示例12: request_input_cookie_reply
static void request_input_cookie_reply(DBusMessage *reply, void *user_data)
{
struct oc_private_data *data = user_data;
char *cookie = NULL, *servercert = NULL, *vpnhost = NULL;
char *key;
DBusMessageIter iter, dict;
DBG("provider %p", data->provider);
if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) {
goto err;
}
if (vpn_agent_check_reply_has_dict(reply) == FALSE)
goto err;
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;
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, "OpenConnect.Cookie")) {
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, &cookie);
vpn_provider_set_string_hide_value(data->provider,
key, cookie);
} else if (g_str_equal(key, "OpenConnect.ServerCert")) {
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, &servercert);
vpn_provider_set_string(data->provider, key,
servercert);
} else if (g_str_equal(key, "OpenConnect.VPNHost")) {
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, &vpnhost);
vpn_provider_set_string(data->provider, key, vpnhost);
}
dbus_message_iter_next(&dict);
}
if (cookie == NULL || servercert == NULL || vpnhost == NULL)
goto err;
run_connect(data->provider, data->task, data->if_name, data->cb,
data->user_data);
free_private_data(data);
return;
err:
vpn_provider_indicate_error(data->provider,
VPN_PROVIDER_ERROR_AUTH_FAILED);
free_private_data(data);
}
开发者ID:Jubei-Mitsuyoshi,项目名称:aaa-connman,代码行数:85,代码来源:openconnect.c
示例13: kwallet_read_password_list
static vlc_keystore_entry*
kwallet_read_password_list( vlc_keystore* p_keystore, char* psz_entry_name,
unsigned int* pi_count )
{
vlc_keystore_sys* p_sys = p_keystore->p_sys;
DBusMessage* msg = NULL;
DBusMessage* repmsg = NULL;
DBusMessageIter args;
DBusMessageIter sub_iter;
DBusMessageIter dict_iter;
DBusMessageIter var_iter;
vlc_keystore_entry* p_entries = NULL;
size_t i_size;
uint8_t* p_secret_decoded;
char* p_reply;
char* p_secret;
int i = 0;
/* init */
*pi_count = 0;
if ( !( msg = vlc_dbus_new_method( p_keystore, "readPasswordList" ) ) )
{
msg_Err( p_keystore, "kwallet_read_password_list : vlc_dbus_new_method failed" );
goto error;
}
/* argument init */
dbus_message_iter_init_append( msg, &args );
if ( !dbus_message_iter_append_basic( &args, DBUS_TYPE_INT32, &p_sys->i_handle ) ||
!dbus_message_iter_append_basic( &args, DBUS_TYPE_STRING, &psz_folder ) ||
!dbus_message_iter_append_basic( &args, DBUS_TYPE_STRING, &psz_entry_name ) ||
!dbus_message_iter_append_basic( &args, DBUS_TYPE_STRING, &p_sys->psz_app_id ) )
goto error;
/* sending message */
if ( !( repmsg = vlc_dbus_send_message( p_keystore, msg ) ) )
{
msg_Err( p_keystore, "kwallet_read_password_list : vlc_dbus_send_message failed" );
goto error;
}
/* handling reply */
if ( !dbus_message_iter_init( repmsg, &args ) )
{
msg_Err( p_keystore, "kwallet_read_password_list : Message has no arguments" );
goto error;
}
else if ( dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_ARRAY )
{
msg_Err( p_keystore, "kwallet_read_password_list : Wrong reply type" );
goto error;
}
else
{
/* calculating p_entries's size */
dbus_message_iter_recurse( &args, &sub_iter );
do
{
if ( dbus_message_iter_get_arg_type( &sub_iter ) != DBUS_TYPE_DICT_ENTRY )
continue;
dbus_message_iter_recurse( &sub_iter, &dict_iter );
if ( dbus_message_iter_get_arg_type( &dict_iter ) != DBUS_TYPE_STRING )
continue;
dbus_message_iter_next(&dict_iter);
if ( dbus_message_iter_get_arg_type( &dict_iter ) != DBUS_TYPE_VARIANT )
continue;
++( *pi_count );
} while ( dbus_message_iter_next( &sub_iter ) );
if ( *pi_count == 0 )
goto error;
if ( !( p_entries = calloc( *pi_count, sizeof( vlc_keystore_entry ) ) ) )
goto error;
dbus_message_iter_init( repmsg, &args );
/* recurse into the reply array */
dbus_message_iter_recurse( &args, &sub_iter );
do
{
if ( dbus_message_iter_get_arg_type( &sub_iter ) != DBUS_TYPE_DICT_ENTRY )
{
msg_Err( p_keystore, "Wrong type not DBUS_TYPE_DICT_ENTRY" );
continue;
}
/* recurse into the dict-entry in the array */
dbus_message_iter_recurse( &sub_iter, &dict_iter );
if ( dbus_message_iter_get_arg_type( &dict_iter ) != DBUS_TYPE_STRING )
{
msg_Err( p_keystore, "First type of Dict-Entry is not a string" );
continue;
}
dbus_message_iter_get_basic( &dict_iter, &p_reply );
dbus_message_iter_next(&dict_iter);
if ( dbus_message_iter_get_arg_type( &dict_iter ) != DBUS_TYPE_VARIANT )
{
msg_Err( p_keystore, "Second type of Dict-Entry is not a variant" );
continue;
}
/* recurse into the variant in the dict-entry */
dbus_message_iter_recurse( &dict_iter, &var_iter );
//.........这里部分代码省略.........
开发者ID:chouquette,项目名称:vlc,代码行数:101,代码来源:kwallet.c
示例14: show_status
static int show_status(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
const char *interface = "";
int r;
DBusMessageIter iter, sub, sub2, sub3;
StatusInfo info = {};
assert(args);
r = bus_method_call_with_reply(
bus,
"org.freedesktop.locale1",
"/org/freedesktop/locale1",
"org.freedesktop.DBus.Properties",
"GetAll",
&reply,
NULL,
DBUS_TYPE_STRING, &interface,
DBUS_TYPE_INVALID);
if (r < 0)
return r;
if (!dbus_message_iter_init(reply, &iter) ||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_DICT_ENTRY) {
log_error("Failed to parse reply.");
return -EIO;
}
dbus_message_iter_recurse(&iter, &sub);
while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
const char *name;
if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_DICT_ENTRY) {
log_error("Failed to parse reply.");
return -EIO;
}
dbus_message_iter_recurse(&sub, &sub2);
if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &name, true) < 0) {
log_error("Failed to parse reply.");
return -EIO;
}
if (dbus_message_iter_get_arg_type(&sub2) != DBUS_TYPE_VARIANT) {
log_error("Failed to parse reply.");
return -EIO;
}
dbus_message_iter_recurse(&sub2, &sub3);
r = status_property(name, &sub3, &info);
if (r < 0) {
log_error("Failed to parse reply.");
return r;
}
dbus_message_iter_next(&sub);
}
print_status_info(&info);
strv_free(info.locale);
return 0;
}
开发者ID:kwirk,项目名称:systemd,代码行数:66,代码来源:localectl.c
示例15: show_ac_ip_list_one_cmd
/*id的范围是1至ACIPLIST_NUM-1*/
int show_ac_ip_list_one_cmd(int instance_id,char *id, DCLI_AC_IP_LIST_API_GROUP **IPLIST)/*返回0表示失败,返回1表示成功,返回-1表示unknown id format*/
/*返回-2表示AC IP LIST id should be 1 to ACIPLIST_NUM-1*/
/*返回-3表示id does not exist,返回-4表示error*/
{
if(NULL == id)
{
*IPLIST = NULL;
return 0;
}
int ret;
unsigned char ID = 0;
#if 0
int i = 0;
unsigned int num = 0;
struct wid_ac_ip **iplist;
char en[] = "enable";
char dis[] = "disable";
DBusMessage *query, *reply;
DBusMessageIter iter;
DBusMessageIter iter_array;
DBusError err;
#endif
int retu;
ret = parse_char_ID((char*)id, &ID);
if(ret != WID_DBUS_SUCCESS){
return -1;
}
if(ID >= ACIPLIST_NUM || ID == 0){
return -2;
}
int index;
#if 0
char BUSNAME[PATH_LEN];
char OBJPATH[PATH_LEN];
char INTERFACE[PATH_LEN];
#endif
/*if(vty->node == CONFIG_NODE){
index = 0;
}else if(vty->node == HANSI_NODE){
index = vty->index;
}*/
index = instance_id;
#if 0
ReInitDbusPath(index,WID_DBUS_BUSNAME,BUSNAME);
ReInitDbusPath(index,WID_DBUS_ACIPLIST_OBJPATH,OBJPATH);
ReInitDbusPath(index,WID_DBUS_ACIPLIST_INTERFACE,INTERFACE);
query = dbus_message_new_method_call(BUSNAME,OBJPATH,INTERFACE,WID_DBUS_ACIPLIST_METHOD_SHOW_AC_IP_LIST_ONE);
/* query = dbus_message_new_method_call(WID_DBUS_BUSNAME,WID_DBUS_ACIPLIST_OBJPATH,\
WID_DBUS_ACIPLIST_INTERFACE,WID_DBUS_ACIPLIST_METHOD_SHOW_AC_IP_LIST_ONE);*/
dbus_error_init(&err);
dbus_message_append_args(query,
DBUS_TYPE_BYTE,&ID,
DBUS_TYPE_INVALID);
reply = dbus_connection_send_with_reply_and_block (dcli_dbus_connection,query,-1, &err);
dbus_message_unref(query);
if (NULL == reply) {
vty_out(vty,"<error> failed get reply.\n");
if (dbus_error_is_set(&err)) {
vty_out(vty,"%s raised: %s",err.name,err.message);
dbus_error_free(&err);
}
return CMD_SUCCESS;
}
dbus_message_iter_init(reply,&iter);
dbus_message_iter_get_basic(&iter,&ret);
if(ret == 0 )
{
AC_IP_LIST = (wid_ac_ip_group *)malloc(sizeof(wid_ac_ip_group));
dbus_message_iter_next(&iter);
dbus_message_iter_get_basic(&iter,&AC_IP_LIST->GroupID);
dbus_message_iter_next(&iter);
dbus_message_iter_get_basic(&iter,&AC_IP_LIST->ifname);
dbus_message_iter_next(&iter);
dbus_message_iter_get_basic(&iter,&num);
iplist = malloc(num* sizeof(struct wid_ac_ip *));
memset(iplist, 0, num*sizeof(struct wid_ac_ip*));
dbus_message_iter_next(&iter);
dbus_message_iter_recurse(&iter,&iter_array);
for (i = 0; i < num; i++) {
DBusMessageIter iter_struct;
//.........这里部分代码省略.........
开发者ID:inibir,项目名称:daemongroup,代码行数:101,代码来源:ws_dcli_ac_ip_list.c
示例16: qFetchParameter
static QVariant qFetchParameter(DBusMessageIter *it)
{
switch (dbus_message_iter_get_arg_type(it)) {
case DBUS_TYPE_BYTE:
return qVariantFromValue(qIterGet<unsigned char>(it));
case DBUS_TYPE_IN
|
请发表评论