diff -Nru vvmd-0.6.1/ChangeLog vvmd-0.7/ChangeLog --- vvmd-0.6.1/ChangeLog 2021-10-26 20:18:06.000000000 +0000 +++ vvmd-0.7/ChangeLog 2021-12-03 01:16:26.000000000 +0000 @@ -1,3 +1,8 @@ +vvmd (0.7) + + [ Chris Talbot ] + * Fix various small bugs + vvmd (0.6.1) [ Chris Talbot ] diff -Nru vvmd-0.6.1/debian/changelog vvmd-0.7/debian/changelog --- vvmd-0.6.1/debian/changelog 2021-11-13 15:01:32.000000000 +0000 +++ vvmd-0.7/debian/changelog 2021-12-09 11:06:06.000000000 +0000 @@ -1,3 +1,17 @@ +vvmd (0.7-1) unstable; urgency=medium + + * Team upload. + + [ Chris Talbot ] + * New upstream version + + [ Guido Günther ] + * Document changes and release 0.7-1 + * d/copyright: Work around space in directory name. + See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=809637 + + -- Guido Günther Thu, 09 Dec 2021 12:06:06 +0100 + vvmd (0.6.1-1) unstable; urgency=medium [ Chris Talbot ] diff -Nru vvmd-0.6.1/debian/copyright vvmd-0.7/debian/copyright --- vvmd-0.6.1/debian/copyright 2021-11-13 15:01:32.000000000 +0000 +++ vvmd-0.7/debian/copyright 2021-12-09 11:06:06.000000000 +0000 @@ -12,7 +12,7 @@ Copyright: 2021, Clayton Craft License: GPL-2.0 -Files: docs/* src/dbus* src/vvmutil* unit/* +Files: docs/* src/dbus* src/vvmutil* unit/* python?examples/* Copyright: 2021, Chris Talbot License: GPL-2.0 @@ -29,6 +29,22 @@ Copyright: 2020, Purism SPC License: GPL-2.0+ +Files: src/phone-utils* +Copyright: 2012-2013, Intel Corporation + 2021, Chris Talbot +License: LGPL-2.0 + +Files: src/service-providers* +Copyright: 2009, Novell, Inc. + 2009-2019, Red Hat, Inc. + 2012, Lanedo GmbH + 2021, Chris Talbot +License: LGPL-2.1+ + +Files: unit/test-service-providers.c +Copyright: 2009, Novell, Inc. +License: LGPL-2.1+ + License: GPL-2.0 This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -61,3 +77,36 @@ . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". + +License: LGPL-2.0 + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see + . + On Debian systems, the complete text of the GNU Lesser General + Public License version 2.0 can be found in "/usr/share/common-licenses/LGPL-2.0". + +License: LGPL-2.1+ + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see + . + On Debian systems, the complete text of the GNU Lesser General + Public License version 2.1 can be found in "/usr/share/common-licenses/LGPL-2.1". diff -Nru vvmd-0.6.1/meson.build vvmd-0.7/meson.build --- vvmd-0.6.1/meson.build 2021-10-26 20:18:06.000000000 +0000 +++ vvmd-0.7/meson.build 2021-12-03 01:16:26.000000000 +0000 @@ -1,7 +1,7 @@ project( 'vvmd', 'c', 'cpp', - version : '0.6.1', + version : '0.7', meson_version : '>= 0.56.0', ) @@ -28,7 +28,7 @@ endforeach conf_data.set('VERSION', meson.project_version()) conf_data.set('NAME', meson.project_name()) -mobile_broadband_provider_info_database = dependency('mobile-broadband-provider-info').get_variable('database') +mobile_broadband_provider_info_database = dependency('mobile-broadband-provider-info').get_variable(pkgconfig: 'database') conf_data.set('MOBILE_BROADBAND_PROVIDER_INFO_DATABASE', mobile_broadband_provider_info_database) conf_data.set('SOURCE_ROOT', meson.project_source_root()) diff -Nru vvmd-0.6.1/plugins/modemmanager.c vvmd-0.7/plugins/modemmanager.c --- vvmd-0.6.1/plugins/modemmanager.c 2021-10-26 20:18:06.000000000 +0000 +++ vvmd-0.7/plugins/modemmanager.c 2021-12-03 01:16:26.000000000 +0000 @@ -82,6 +82,7 @@ char *path; MMSim *sim; gchar *imsi; + gchar *mccmnc; char *registered_imsi; MMModemMessaging *modem_messaging; MMModemState state; @@ -539,12 +540,22 @@ } static gboolean +retry_sync_vvm_imap_server(gpointer user_data) +{ + DBG("Retrying sync...."); + + mm_sync_vvm_imap_server(); + return FALSE; +} + +static gboolean new_sync_vvm_timeout(gpointer user_data) { char *dup_msg = user_data; DBG("Processing VVM sync message."); if(vvm_service_new_vvm(modem->service, dup_msg, NULL, modem->vvm_type) == FALSE) { vvm_error("Error making VVM!."); + g_timeout_add_seconds(60, retry_sync_vvm_imap_server, NULL); } g_free(dup_msg); return FALSE; @@ -1497,9 +1508,14 @@ vvm_service_set_country_code(modem->service, mm_sim_get_imsi(modem->sim)); if (strstr (modem->vvm_type, "invalid")) { + g_free (modem->mccmnc); + modem->mccmnc = mm_sim_dup_operator_identifier (modem->sim); + if (!modem->mccmnc) + modem->mccmnc = g_strndup(modem->imsi, 6); + DBG("Attempting to autopopulate VVM carrier settings"); vvmd_service_providers_find_settings(MOBILE_BROADBAND_PROVIDER_INFO_DATABASE, - modem->imsi, + modem->mccmnc, find_settings_cb, NULL); } else { @@ -1561,12 +1577,12 @@ gdbus_modem = MM_GDBUS_MODEM(modem->modem); vvmd_disconnect_from_sms_wap(); - g_signal_handler_disconnect(gdbus_modem, modem->modem_state_watch_id); g_object_unref(modem->sim); - g_free(modem->imsi); - g_free(modem->path); + g_clear_pointer (&modem->mccmnc, g_free); + g_clear_pointer (&modem->imsi, g_free); + g_clear_pointer (&modem->path, g_free); g_clear_object(&modem->modem); g_clear_object(&modem->modem_messaging); modem->object = NULL; diff -Nru vvmd-0.6.1/src/service.c vvmd-0.7/src/service.c --- vvmd-0.6.1/src/service.c 2021-10-26 20:18:06.000000000 +0000 +++ vvmd-0.7/src/service.c 2021-12-03 01:16:26.000000000 +0000 @@ -134,33 +134,25 @@ DBG("Retrieving all Messages..."); - g_variant_builder_init(&messages_builder, G_VARIANT_TYPE ("a(oa{sv})")); - - g_hash_table_iter_init(&table_iter, service->messages); - while (g_hash_table_iter_next(&table_iter, &key, &value)) { - i = i+1; - DBG("On message %d!", i); - g_variant_builder_open (&messages_builder, G_VARIANT_TYPE ("(oa{sv})")); - append_message_entry(key, service, value, &messages_builder); - g_variant_builder_close (&messages_builder); - } - DBG("Messages total: %d", i); - - if (i == 0) { + if (g_hash_table_size (service->messages) == 0) { + all_messages = g_variant_new("(a(oa{sv}))", NULL); DBG("No Messages!"); - vvm_error("You are about to get two Glib Asserts. They can be ignored"); - // If you are looking for the source of the "Glib: Critical" - // Messages, you found it. This is done intentionally to be - // Backwards compatible with the dbus client that was here. - // If you know the "proper" way to do this, please contact me - g_variant_builder_open (&messages_builder, G_VARIANT_TYPE ("(oa{sv})")); - g_variant_builder_close (&messages_builder); - } - messages = g_variant_builder_end (&messages_builder); + } else { + g_variant_builder_init(&messages_builder, G_VARIANT_TYPE ("a(oa{sv})")); - all_messages = g_variant_new("(*)", messages); + g_hash_table_iter_init(&table_iter, service->messages); + while (g_hash_table_iter_next(&table_iter, &key, &value)) { + i = i+1; + DBG("On message %d!", i); + g_variant_builder_open (&messages_builder, G_VARIANT_TYPE ("(oa{sv})")); + append_message_entry(key, service, value, &messages_builder); + g_variant_builder_close (&messages_builder); + } + DBG("Messages total: %d", i); + messages = g_variant_builder_end (&messages_builder); - DBG("All Messages: %s", g_variant_print(all_messages, TRUE)); + all_messages = g_variant_new("(*)", messages); + } g_dbus_method_invocation_return_value (invocation, all_messages); @@ -214,37 +206,27 @@ { if (g_strcmp0 (method_name, "GetServices") == 0) { struct vvm_service *service; - GVariantBuilder service_builder; - GVariant *get_services, *all_services; + GVariant *all_services; GList *l; - guint i = 0; - - g_variant_builder_init(&service_builder, G_VARIANT_TYPE ("a(oa{sv})")); DBG("At Get Services Method Call"); - for (l = service_list; l != NULL; l = l->next) { - i = i + 1; - service = l -> data; - g_variant_builder_open(&service_builder, G_VARIANT_TYPE ("(oa{sv})")); - append_properties(&service_builder, service); - g_variant_builder_close(&service_builder); - } - if (i == 0) { - DBG("No Services!"); - vvm_error("You are about to get two Glib Asserts. They can be ignored"); - // If you are looking for the source of the "Glib: Critical" - // Messages, you found it. This is done intentionally to be - // Backwards compatible with the dbus client that was here. - // If you know the "proper" way to do this, please contact me - g_variant_builder_open (&service_builder, G_VARIANT_TYPE ("(oa{sv})")); - g_variant_builder_close (&service_builder); + if (service_list) { + GVariantBuilder service_builder; + GVariant *get_services; + + g_variant_builder_init(&service_builder, G_VARIANT_TYPE ("a(oa{sv})")); + for (l = service_list; l != NULL; l = l->next) { + service = l -> data; + g_variant_builder_open(&service_builder, G_VARIANT_TYPE ("(oa{sv})")); + append_properties(&service_builder, service); + g_variant_builder_close(&service_builder); + } + get_services = g_variant_builder_end (&service_builder); + all_services = g_variant_new("(*)", get_services); + } else { + all_services = g_variant_new("(a(oa{sv}))", NULL); } - - get_services = g_variant_builder_end (&service_builder); - - all_services = g_variant_new("(*)", get_services); - g_dbus_method_invocation_return_value (invocation, all_services); } else { g_dbus_method_invocation_return_error (invocation, @@ -1346,6 +1328,17 @@ return realsize; } +static gboolean +retry_sync_vvm_imap_server(gpointer user_data) +{ + struct vvm_service *service = user_data; + DBG("retrying sync...."); + if(vvm_service_sync_vvm_imap_server(service) == FALSE) { + vvm_error("Error resyncing voicemail!"); + } + return FALSE; +} + int vvm_service_sync_vvm_imap_server(struct vvm_service *service) { @@ -1394,6 +1387,7 @@ DBG("Token: %s", tokens[i]); if(vvm_service_new_vvm(service, NULL, tokens[i], service->mailbox_vvm_type) == FALSE) { vvm_error("Error creating VVM!"); + g_timeout_add_seconds(60, retry_sync_vvm_imap_server, service); return FALSE; } } diff -Nru vvmd-0.6.1/src/service-providers.c vvmd-0.7/src/service-providers.c --- vvmd-0.6.1/src/service-providers.c 2021-10-26 20:18:06.000000000 +0000 +++ vvmd-0.7/src/service-providers.c 2021-12-03 01:16:26.000000000 +0000 @@ -419,7 +419,7 @@ void vvmd_service_providers_find_settings(const char *service_providers, - const char *imsi, + const char *mccmnc, VvmdServiceProvidersCallback callback, gpointer user_data) { @@ -427,7 +427,7 @@ ParseContext *parse_context; parse_context = g_slice_new0(ParseContext); parse_context->callback = callback; - parse_context->mccmnc = g_strndup(imsi, 6); + parse_context->mccmnc = g_strdup(mccmnc); parse_context->user_data = user_data; parse_context->ctx = g_markup_parse_context_new(&parser, 0, parse_context, NULL); diff -Nru vvmd-0.6.1/src/service-providers.h vvmd-0.7/src/service-providers.h --- vvmd-0.6.1/src/service-providers.h 2021-10-26 20:18:06.000000000 +0000 +++ vvmd-0.7/src/service-providers.h 2021-12-03 01:16:26.000000000 +0000 @@ -36,7 +36,7 @@ gpointer user_data); void vvmd_service_providers_find_settings (const char *service_providers, - const char *imsi, + const char *mccmnc, VvmdServiceProvidersCallback callback, gpointer user_data);