diff options
author | rikky <rikky@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2010-06-03 12:04:29 +0000 |
---|---|---|
committer | rikky <rikky@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2010-06-03 12:04:29 +0000 |
commit | e7a89180448477e5c2459795ff28e60132ad4073 (patch) | |
tree | 3715ffda8ce952c42180b357c85d9702b3f76648 /navit/binding | |
parent | 54e1af4ce8dd8fe50756e4608490d1a4c072dba1 (diff) | |
download | navit-svn-e7a89180448477e5c2459795ff28e60132ad4073.tar.gz |
Fix:binding_dbus:Do not add attribute on destroy
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@3334 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/binding')
-rw-r--r-- | navit/binding/dbus/binding_dbus.c | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/navit/binding/dbus/binding_dbus.c b/navit/binding/dbus/binding_dbus.c index 239e9616..05a51f0c 100644 --- a/navit/binding/dbus/binding_dbus.c +++ b/navit/binding/dbus/binding_dbus.c @@ -98,7 +98,7 @@ object_get(const char *path) return g_hash_table_lookup(object_hash, path); } -static void +static void object_destroy(const char *path, void *object) { if (!path && !object) @@ -179,7 +179,7 @@ resolve_object(const char *opath, char *type) if (navit_get_attr(navit.u.navit, attr_mapset, &attr, NULL)) { if (!oprefix[0]) { return attr.u.mapset; - } + } if (!strncmp(oprefix,def_map,strlen(def_map))) { if (mapset_get_attr(attr.u.mapset, attr_map, &attr, NULL)) { return attr.u.map; @@ -230,16 +230,16 @@ object_get_from_message(DBusMessage *message, char *type) return resolve_object(dbus_message_get_path(message), type); } -static enum attr_type +static enum attr_type attr_type_get_from_message(DBusMessageIter *iter) { char *attr_type; - if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRING) + if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRING) return attr_none; dbus_message_iter_get_basic(iter, &attr_type); dbus_message_iter_next(iter); - return attr_from_name(attr_type); + return attr_from_name(attr_type); } static void @@ -411,7 +411,7 @@ dbus_dump(DBusMessage *message) dbus_message_iter_init(message, &iter); dbus_dump_iter("",&iter); - + } #endif @@ -433,16 +433,16 @@ pcoord_get_from_message(DBusMessage *message, DBusMessageIter *iter, struct pcoo dbus_message_iter_get_basic(iter, &coordstring); if(!pcoord_parse(coordstring, projection_mg, pc)) return 0; - + return 1; } else { - + DBusMessageIter iter2; dbus_message_iter_recurse(iter, &iter2); if(!strcmp(dbus_message_iter_get_signature(iter), "(is)")) { char *coordstring; int projection; - + dbus_message_iter_get_basic(&iter2, &projection); dbus_message_iter_next(&iter2); @@ -453,12 +453,12 @@ pcoord_get_from_message(DBusMessage *message, DBusMessageIter *iter, struct pcoo return 1; } else if(!strcmp(dbus_message_iter_get_signature(iter), "(iii)")) { - + dbus_message_iter_get_basic(&iter2, &pc->pro); - + dbus_message_iter_next(&iter2); dbus_message_iter_get_basic(&iter2, &pc->x); - + dbus_message_iter_next(&iter2); dbus_message_iter_get_basic(&iter2, &pc->y); @@ -466,7 +466,7 @@ pcoord_get_from_message(DBusMessage *message, DBusMessageIter *iter, struct pcoo } } return 0; - + } static void @@ -492,12 +492,12 @@ decode_attr_type_from_iter(DBusMessageIter *iter) { char *attr_type; enum attr_type ret; - + if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRING) return attr_none; dbus_message_iter_get_basic(iter, &attr_type); dbus_message_iter_next(iter); - ret=attr_from_name(attr_type); + ret=attr_from_name(attr_type); dbg(1, "attr value: 0x%x string: %s\n", ret, attr_type); return ret; } @@ -512,11 +512,11 @@ decode_attr_from_iter(DBusMessageIter *iter, struct attr *attr) attr->type=decode_attr_type_from_iter(iter); if (attr->type == attr_none) return 0; - + dbus_message_iter_recurse(iter, &iterattr); dbus_message_iter_next(iter); dbg(1, "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 0; @@ -645,7 +645,7 @@ request_attr_iter_destroy(DBusConnection *connection, DBusMessage *message, char static DBusHandlerResult request_destroy(DBusConnection *connection, DBusMessage *message, char *type, void *data, void (*func)(void *)) { - if (!data) + if (!data) data=object_get_from_message(message, type); if (!data) return dbus_error_invalid_object_path(connection, message); @@ -675,7 +675,7 @@ request_get_attr(DBusConnection *connection, DBusMessage *message, char *type, v attr_type=attr_type_get_from_message(&iter); if (attr_type == attr_none) return dbus_error_invalid_attr_type(connection, message); - iter_name=get_iter_name(type); + iter_name=get_iter_name(type); attr_iter=object_get_from_message_arg(&iter, iter_name); g_free(iter_name); if (func(data, attr_type, &attr, attr_iter)) { @@ -688,7 +688,7 @@ request_get_attr(DBusConnection *connection, DBusMessage *message, char *type, v return DBUS_HANDLER_RESULT_HANDLED; } return empty_reply(connection, message); - + } static DBusHandlerResult @@ -704,7 +704,7 @@ request_command(DBusConnection *connection, DBusMessage *message, char *type, vo return dbus_error_invalid_object_path(connection, message); dbus_message_iter_init(message, &iter); - if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) return dbus_error_invalid_parameter(connection, message); dbus_message_iter_get_basic(&iter, &command); dbus_message_iter_next(&iter); @@ -713,7 +713,7 @@ request_command(DBusConnection *connection, DBusMessage *message, char *type, vo callback_list_call_attr_4(attr.u.callback_list, attr_command, command, NULL, NULL, &valid); } return empty_reply(connection, message); - + } static DBusHandlerResult @@ -722,7 +722,7 @@ request_set_add_remove_attr(DBusConnection *connection, DBusMessage *message, ch struct attr attr; int ret; - if (! data) + if (! data) data = object_get_from_message(message, type); if (! data) return dbus_error_invalid_object_path(connection, message); @@ -730,7 +730,7 @@ request_set_add_remove_attr(DBusConnection *connection, DBusMessage *message, ch if (decode_attr(message, &attr)) { ret=(*func)(data, &attr); destroy_attr(&attr); - if (ret) + if (ret) return empty_reply(connection, message); } return dbus_error_invalid_parameter(connection, message); @@ -775,7 +775,7 @@ request_callback_new(DBusConnection *connection, DBusMessage *message) enum attr_type type; dbus_message_iter_init(message, &iter); - if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) return dbus_error_invalid_parameter(connection, message); dbus_message_iter_get_basic(&iter, &signal); dbus_message_iter_next(&iter); @@ -841,7 +841,7 @@ request_graphics_get_data(DBusConnection *connection, DBusMessage *message) #endif dbus_message_iter_init_append(reply, &iter1); dbus_message_iter_open_container(&iter1, DBUS_TYPE_ARRAY, "y", &iter2); - if (image->data && image->size) + if (image->data && image->size) dbus_message_iter_append_fixed_array(&iter2, DBUS_TYPE_BYTE, &image->data, image->size); dbus_message_iter_close_container(&iter1, &iter2); dbus_connection_send (connection, reply, NULL); @@ -957,7 +957,7 @@ request_navit_draw(DBusConnection *connection, DBusMessage *message) return dbus_error_invalid_object_path(connection, message); navit_draw(navit); - + return empty_reply(connection, message); } @@ -976,26 +976,26 @@ point_get_from_message(DBusMessage *message, DBusMessageIter *iter, struct point DBusMessageIter iter2; dbg(0,"%s\n", dbus_message_iter_get_signature(iter)); - + dbus_message_iter_recurse(iter, &iter2); if (dbus_message_iter_get_arg_type(&iter2) != DBUS_TYPE_INT32) return 0; dbus_message_iter_get_basic(&iter2, &p->x); - + dbus_message_iter_next(&iter2); - + if (dbus_message_iter_get_arg_type(&iter2) != DBUS_TYPE_INT32) return 0; dbus_message_iter_get_basic(&iter2, &p->y); dbg(0, " x -> %x y -> %x\n", p->x, p->y); - + dbus_message_iter_next(&iter2); if (dbus_message_iter_get_arg_type(&iter2) != DBUS_TYPE_INVALID) return 0; - + return 1; } @@ -1011,7 +1011,7 @@ request_navit_add_message(DBusConnection *connection, DBusMessage *message) { struct navit *navit; char *usermessage; - + DBusMessageIter iter; navit=object_get_from_message(message, "navit"); @@ -1020,9 +1020,9 @@ request_navit_add_message(DBusConnection *connection, DBusMessage *message) dbus_message_iter_init(message, &iter); dbus_message_iter_get_basic(&iter, &usermessage); - + navit_add_message(navit, usermessage); - + return empty_reply(connection, message); } @@ -1049,7 +1049,7 @@ request_navit_set_center(DBusConnection *connection, DBusMessage *message) if (!pcoord_get_from_message(message, &iter, &pc)) return dbus_error_invalid_parameter(connection, message); - + navit_set_center(navit, &pc, 0); return empty_reply(connection, message); } @@ -1096,10 +1096,10 @@ request_navit_set_layout(DBusConnection *connection, DBusMessage *message) navit=object_get_from_message(message, "navit"); if (! navit) return dbus_error_invalid_object_path(connection, message); - + if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &new_layout_name, DBUS_TYPE_INVALID)) return dbus_error_invalid_parameter(connection, message); - + iter=navit_attr_iter_new(); while(navit_get_attr(navit, attr_layout, &attr, iter)) { if (strcmp(attr.u.layout->name, new_layout_name) == 0) { @@ -1123,9 +1123,9 @@ request_navit_zoom(DBusConnection *connection, DBusMessage *message) dbus_message_iter_init(message, &iter); dbg(0,"%s\n", dbus_message_iter_get_signature(&iter)); - + dbus_message_iter_get_basic(&iter, &factor); - + if (dbus_message_iter_has_next(&iter)) { dbus_message_iter_next(&iter); @@ -1156,19 +1156,19 @@ request_navit_resize(DBusConnection *connection, DBusMessage *message) dbus_message_iter_init(message, &iter); dbg(0,"%s\n", dbus_message_iter_get_signature(&iter)); - + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) return dbus_error_invalid_parameter(connection, message); dbus_message_iter_get_basic(&iter, &w); - + dbus_message_iter_next(&iter); - + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) return dbus_error_invalid_parameter(connection, message); dbus_message_iter_get_basic(&iter, &h); dbg(0, " w -> %i h -> %i\n", w, h); - + navit_handle_resize(navit, w, h); return empty_reply(connection, message); @@ -1243,7 +1243,7 @@ request_navit_set_position(DBusConnection *connection, DBusMessage *message) dbus_message_iter_init(message, &iter); if (!pcoord_get_from_message(message, &iter, &pc)) return dbus_error_invalid_parameter(connection, message); - + navit_set_position(navit, &pc); return empty_reply(connection, message); } @@ -1263,11 +1263,11 @@ request_navit_set_destination(DBusConnection *connection, DBusMessage *message) dbus_message_iter_init(message, &iter); if (!pcoord_get_from_message(message, &iter, &pc)) return dbus_error_invalid_parameter(connection, message); - + dbus_message_iter_next(&iter); dbus_message_iter_get_basic(&iter, &description); dbg(0, " destination -> %s\n", description); - + navit_set_destination(navit, &pc, description, 1); return empty_reply(connection, message); } @@ -1335,13 +1335,13 @@ request_search_list_get_result(DBusConnection *connection, DBusMessage *message) dbus_message_iter_open_container(&iter2, DBUS_TYPE_DICT_ENTRY, NULL, &iter3); dbus_message_iter_append_basic(&iter3, DBUS_TYPE_STRING, &country); dbus_message_iter_open_container(&iter3, DBUS_TYPE_ARRAY, "{sv}", &iter4); - if (result->country->car) + if (result->country->car) encode_dict_string_variant_string(&iter4, "car", result->country->car); - if (result->country->iso2) + if (result->country->iso2) encode_dict_string_variant_string(&iter4, "iso2", result->country->iso2); - if (result->country->iso3) + if (result->country->iso3) encode_dict_string_variant_string(&iter4, "iso3", result->country->iso3); - if (result->country->name) + if (result->country->name) encode_dict_string_variant_string(&iter4, "name", result->country->name); dbus_message_iter_close_container(&iter3, &iter4); dbus_message_iter_close_container(&iter2, &iter3); @@ -1409,7 +1409,7 @@ request_search_list_search(DBusConnection *connection, DBusMessage *message) dbus_message_iter_init(message, &iter); if (!decode_attr_from_iter(&iter, &attr)) return dbus_error_invalid_parameter(connection, message); - if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) return dbus_error_invalid_parameter(connection, message); dbus_message_iter_get_basic(&iter, &partial); search_list_search(search_list, &attr, partial); @@ -1429,13 +1429,13 @@ request_search_list_select(DBusConnection *connection, DBusMessage *message) return dbus_error_invalid_object_path(connection, message); dbus_message_iter_init(message, &iter); - attr_type=decode_attr_type_from_iter(&iter); + attr_type=decode_attr_type_from_iter(&iter); if (attr_type == attr_none) return dbus_error_invalid_parameter(connection, message); - if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) return dbus_error_invalid_parameter(connection, message); dbus_message_iter_get_basic(&iter, &id); - if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) return dbus_error_invalid_parameter(connection, message); dbus_message_iter_get_basic(&iter, &mode); search_list_select(search_list, attr_type, id, mode); @@ -1460,14 +1460,14 @@ request_vehicle_set_attr(DBusConnection *connection, DBusMessage *message) struct vehicle *vehicle; struct attr attr; int ret; - + vehicle = object_get_from_message(message, "vehicle"); if (! vehicle) return dbus_error_invalid_object_path(connection, message); if (decode_attr(message, &attr)) { ret=vehicle_set_attr(vehicle, &attr); destroy_attr(&attr); - if (ret) + if (ret) return empty_reply(connection, message); } return dbus_error_invalid_parameter(connection, message); @@ -1575,7 +1575,7 @@ introspect_path(const char *object) for (i = 0 ; i < strlen(ret); i++) if (ret[i] == '/') ret[i]='.'; - + for (i = strlen(ret)-1 ; i >= 0 ; i--) { if (!strncmp(ret+i, def, def_len)) { memmove(ret+1,ret+i+def_len,strlen(ret+i+def_len)+1); @@ -1594,10 +1594,10 @@ generate_navitintrospectxml(const char *object) if (!path) return NULL; dbg(1,"path=%s\n",path); - + // write header and make navit introspectable navitintrospectxml = g_strdup_printf("%s%s%s\n", navitintrospectxml_head1, object, navitintrospectxml_head2); - + methods_size=sizeof(dbus_methods)/sizeof(struct dbus_method); for (i = 0 ; i < methods_size ; i++) { // start new interface if it's the first method or it changed @@ -1606,28 +1606,28 @@ generate_navitintrospectxml(const char *object) if ((n == 0) || strcmp(dbus_methods[i-1].path, dbus_methods[i].path)) navitintrospectxml = g_strconcat_printf(navitintrospectxml, " <interface name=\"%s%s\">\n", service_name, dbus_methods[i].path); n++; - + // start the new method navitintrospectxml = g_strconcat_printf(navitintrospectxml, " <method name=\"%s\">\n", dbus_methods[i].method); // set input signature if existent if (strcmp(dbus_methods[i].signature, "")) navitintrospectxml = g_strconcat_printf(navitintrospectxml, " <arg direction=\"in\" name=\"%s\" type=\"%s\" />\n", dbus_methods[i].signature_name, dbus_methods[i].signature); - + // set response signature if existent if (strcmp(dbus_methods[i].response, "")) navitintrospectxml = g_strconcat_printf(navitintrospectxml, " <arg direction=\"out\" name=\"%s\" type=\"%s\" />\n", dbus_methods[i].response_name, dbus_methods[i].response); - + // close the method navitintrospectxml = g_strconcat_printf(navitintrospectxml, " </method>\n"); - + // close the interface if we reached the last method or the interface changes if ((methods_size == i+1) || ((methods_size > i+1) && strcmp(dbus_methods[i+1].path, dbus_methods[i].path))) navitintrospectxml = g_strconcat_printf(navitintrospectxml, " </interface>\n\n"); } // close the "mother tag" navitintrospectxml = g_strconcat_printf(navitintrospectxml, "</node>\n"); - + return navitintrospectxml; } @@ -1651,7 +1651,7 @@ navit_handler_func(DBusConnection *connection, DBusMessage *message, void *user_ } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } - + for (i = 0 ; i < sizeof(dbus_methods)/sizeof(struct dbus_method) ; i++) { path=g_strdup_printf("%s%s", service_name, dbus_methods[i].path); if (dbus_message_is_method_call(message, path, dbus_methods[i].method) && @@ -1709,7 +1709,7 @@ dbus_cmd_send_signal(struct navit *navit, char *command, struct attr **in, struc g_free(interface); return 0; } - + static struct command_table commands[] = { {"dbus_send_signal",command_cast(dbus_cmd_send_signal)}, @@ -1720,7 +1720,7 @@ static void dbus_main_navit(struct navit *navit, int added) { struct attr attr; - if (added) { + if (added==1) { DBusMessage* msg; char *opath=object_new("navit",navit); char *interface=g_strdup_printf("%s%s", service_name, ".navit"); |