![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package ofono for openSUSE:Factory checked in at 2018-10-15 09:46:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ofono (Old) and /work/SRC/openSUSE:Factory/.ofono.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "ofono" Mon Oct 15 09:46:05 2018 rev:10 rq:641935 version:1.25 Changes: -------- --- /work/SRC/openSUSE:Factory/ofono/ofono.changes 2018-06-19 12:05:09.046718813 +0200 +++ /work/SRC/openSUSE:Factory/.ofono.new/ofono.changes 2018-10-15 09:46:57.891135207 +0200 @@ -1,0 +2,10 @@ +Sun Oct 14 15:11:56 UTC 2018 - mardnh@gmx.de + +- Update to version 1.25: + * Fix issue with handling GPRS context release. + * Fix issue with GPRS context shutdown and Huawei modems. + * Fix issue with roaming status report and QMI devices. + * Add support for voice call handling of U-Blox modems + * Add support for EUTRAN technology reporting. + +------------------------------------------------------------------- Old: ---- ofono-1.24.tar.xz ofono-1.24.tar.xz.sig New: ---- ofono-1.25.tar.xz ofono-1.25.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ofono.spec ++++++ --- /var/tmp/diff_new_pack.vcCEdO/_old 2018-10-15 09:47:02.479130095 +0200 +++ /var/tmp/diff_new_pack.vcCEdO/_new 2018-10-15 09:47:02.483130090 +0200 @@ -19,7 +19,7 @@ Name: ofono -Version: 1.24 +Version: 1.25 Release: 0 Summary: Mobile telephony application development framework License: GPL-2.0-only ++++++ ofono-1.24.tar.xz -> ofono-1.25.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/AUTHORS new/ofono-1.25/AUTHORS --- old/ofono-1.24/AUTHORS 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/AUTHORS 2018-09-29 10:33:43.000000000 +0200 @@ -135,3 +135,5 @@ Bob Ham <bob.ham@puri.sm> Varun Gargi <varun.gargi@intel.com> Florent Beillonnet <florent.beillonnet@gmail.com> +Martin Hundebøll <martin@geanix.com> +Julien Tournier <tournier.julien@gmail.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/ChangeLog new/ofono-1.25/ChangeLog --- old/ofono-1.24/ChangeLog 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/ChangeLog 2018-09-29 10:33:43.000000000 +0200 @@ -1,3 +1,10 @@ +ver 1.25: + Fix issue with handling GPRS context release. + Fix issue with GPRS context shutdown and Huawei modems. + Fix issue with roaming status report and QMI devices. + Add support for voice call handling of U-Blox modems + Add support for EUTRAN technology reporting. + ver 1.24: Fix issue with property changed signals and CDMA networks. Fix issue with handling SIM filesystem and SIM removal. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/Makefile.in new/ofono-1.25/Makefile.in --- old/ofono-1.24/Makefile.in 2018-06-14 23:23:00.000000000 +0200 +++ new/ofono-1.25/Makefile.in 2018-09-29 10:34:16.000000000 +0200 @@ -1462,8 +1462,6 @@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ -GTHREAD_CFLAGS = @GTHREAD_CFLAGS@ -GTHREAD_LIBS = @GTHREAD_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/config.h.in new/ofono-1.25/config.h.in --- old/ofono-1.24/config.h.in 2018-06-14 23:22:53.000000000 +0200 +++ new/ofono-1.25/config.h.in 2018-09-29 10:34:09.000000000 +0200 @@ -40,9 +40,6 @@ */ #undef LT_OBJDIR -/* Define if threading support is required */ -#undef NEED_THREADS - /* Name of package */ #undef PACKAGE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/configure new/ofono-1.25/configure --- old/ofono-1.24/configure 2018-06-14 23:22:56.000000000 +0200 +++ new/ofono-1.25/configure 2018-09-29 10:34:12.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for ofono 1.24. +# Generated by GNU Autoconf 2.69 for ofono 1.25. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='ofono' PACKAGE_TARNAME='ofono' -PACKAGE_VERSION='1.24' -PACKAGE_STRING='ofono 1.24' +PACKAGE_VERSION='1.25' +PACKAGE_STRING='ofono 1.25' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -681,8 +681,6 @@ DBUS_CONFDIR DBUS_LIBS DBUS_CFLAGS -GTHREAD_LIBS -GTHREAD_CFLAGS GLIB_LIBS GLIB_CFLAGS CPP @@ -819,7 +817,6 @@ enable_optimization enable_debug enable_pie -enable_threads with_dbusconfdir with_dbusdatadir with_systemdunitdir @@ -856,8 +853,6 @@ CPP GLIB_CFLAGS GLIB_LIBS -GTHREAD_CFLAGS -GTHREAD_LIBS DBUS_CFLAGS DBUS_LIBS UDEV_CFLAGS @@ -1406,7 +1401,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures ofono 1.24 to adapt to many kinds of systems. +\`configure' configures ofono 1.25 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1476,7 +1471,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ofono 1.24:";; + short | recursive ) echo "Configuration of ofono 1.25:";; esac cat <<\_ACEOF @@ -1501,7 +1496,6 @@ --disable-optimization disable code optimization through compiler --enable-debug enable compiling with debugging information --enable-pie enable position independent executables flag - --enable-threads enable threading support --enable-test enable test/example scripts --enable-tools enable testing tools --enable-dundee enable dialup deamon support @@ -1550,10 +1544,6 @@ CPP C preprocessor GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config - GTHREAD_CFLAGS - C compiler flags for GTHREAD, overriding pkg-config - GTHREAD_LIBS - linker flags for GTHREAD, overriding pkg-config DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config DBUS_LIBS linker flags for DBUS, overriding pkg-config UDEV_CFLAGS C compiler flags for UDEV, overriding pkg-config @@ -1630,7 +1620,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ofono configure 1.24 +ofono configure 1.25 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1908,7 +1898,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ofono $as_me 1.24, which was +It was created by ofono $as_me 1.25, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2772,7 +2762,7 @@ # Define the identity of the package. PACKAGE='ofono' - VERSION='1.24' + VERSION='1.25' cat >>confdefs.h <<_ACEOF @@ -12545,12 +12535,6 @@ fi -# Check whether --enable-threads was given. -if test "${enable_threads+set}" = set; then : - enableval=$enable_threads; enable_threads=${enableval} -fi - - ac_fn_c_check_func "$LINENO" "signalfd" "ac_cv_func_signalfd" if test "x$ac_cv_func_signalfd" = xyes; then : dummy=yes @@ -12676,85 +12660,6 @@ -if (test "${enable_threads}" = "yes"); then - -$as_echo "#define NEED_THREADS 1" >>confdefs.h - - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTHREAD" >&5 -$as_echo_n "checking for GTHREAD... " >&6; } - -if test -n "$GTHREAD_CFLAGS"; then - pkg_cv_GTHREAD_CFLAGS="$GTHREAD_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0 >= 2.16\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gthread-2.0 >= 2.16") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_GTHREAD_CFLAGS=`$PKG_CONFIG --cflags "gthread-2.0 >= 2.16" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$GTHREAD_LIBS"; then - pkg_cv_GTHREAD_LIBS="$GTHREAD_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0 >= 2.16\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gthread-2.0 >= 2.16") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_GTHREAD_LIBS=`$PKG_CONFIG --libs "gthread-2.0 >= 2.16" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - GTHREAD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gthread-2.0 >= 2.16" 2>&1` - else - GTHREAD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gthread-2.0 >= 2.16" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$GTHREAD_PKG_ERRORS" >&5 - - as_fn_error $? "GThread >= 2.16 is required" "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "GThread >= 2.16 is required" "$LINENO" 5 -else - GTHREAD_CFLAGS=$pkg_cv_GTHREAD_CFLAGS - GTHREAD_LIBS=$pkg_cv_GTHREAD_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - dummy=yes -fi - GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS" - GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS" -fi - pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5 @@ -14053,7 +13958,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by ofono $as_me 1.24, which was +This file was extended by ofono $as_me 1.25, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14119,7 +14024,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -ofono config.status 1.24 +ofono config.status 1.25 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/configure.ac new/ofono-1.25/configure.ac --- old/ofono-1.24/configure.ac 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/configure.ac 2018-09-29 10:33:43.000000000 +0200 @@ -1,5 +1,5 @@ AC_PREREQ(2.60) -AC_INIT(ofono, 1.24) +AC_INIT(ofono, 1.25) AM_INIT_AUTOMAKE([foreign subdir-objects color-tests]) AC_CONFIG_HEADERS(config.h) @@ -54,9 +54,6 @@ fi ]) -AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], - [enable threading support]), [enable_threads=${enableval}]) - AC_CHECK_FUNC(signalfd, dummy=yes, AC_MSG_ERROR(signalfd support is required)) @@ -68,14 +65,6 @@ AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) -if (test "${enable_threads}" = "yes"); then - AC_DEFINE(NEED_THREADS, 1, [Define if threading support is required]) - PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes, - AC_MSG_ERROR(GThread >= 2.16 is required)) - GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS" - GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS" -fi - PKG_CHECK_MODULES(DBUS, dbus-1 >= 1.4, dummy=yes, AC_MSG_ERROR(D-Bus >= 1.4 is required)) AC_SUBST(DBUS_CFLAGS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/doc/location-reporting-api.txt new/ofono-1.25/doc/location-reporting-api.txt --- old/ofono-1.24/doc/location-reporting-api.txt 2012-09-11 12:09:25.000000000 +0200 +++ new/ofono-1.25/doc/location-reporting-api.txt 2018-09-29 10:33:43.000000000 +0200 @@ -13,7 +13,7 @@ filedescriptor Request() Asks to turn ON the NMEA stream and supplies the - gps device file descriptor. The external cliend should + gps device file descriptor. The external client should use the file descriptor to receive the NMEA data. Possible Errors: [service].Error.InProgress diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/drivers/atmodem/cbs.c new/ofono-1.25/drivers/atmodem/cbs.c --- old/ofono-1.24/drivers/atmodem/cbs.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/drivers/atmodem/cbs.c 2018-09-29 10:33:43.000000000 +0200 @@ -166,6 +166,7 @@ switch (data->vendor) { case OFONO_VENDOR_GOBI: case OFONO_VENDOR_QUALCOMM_MSM: + case OFONO_VENDOR_GEMALTO: g_at_chat_send(data->chat, "AT+CSCB=0", none_prefix, NULL, NULL, NULL); break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/drivers/atmodem/gprs-context.c new/ofono-1.25/drivers/atmodem/gprs-context.c --- old/ofono-1.24/drivers/atmodem/gprs-context.c 2017-10-05 16:32:37.000000000 +0200 +++ new/ofono-1.25/drivers/atmodem/gprs-context.c 2018-09-29 10:33:43.000000000 +0200 @@ -461,10 +461,19 @@ static void at_gprs_context_remove(struct ofono_gprs_context *gc) { struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc); + GAtIO *io; DBG(""); if (gcd->state != STATE_IDLE && gcd->ppp) { + if ((gcd->vendor == OFONO_VENDOR_HUAWEI) && gcd->chat) { + /* immediately send escape sequence */ + io = g_at_chat_get_io(gcd->chat); + + if (io) + g_at_io_write(io, "+++", 3); + } + g_at_ppp_unref(gcd->ppp); g_at_chat_resume(gcd->chat); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/drivers/atmodem/network-registration.c new/ofono-1.25/drivers/atmodem/network-registration.c --- old/ofono-1.24/drivers/atmodem/network-registration.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/drivers/atmodem/network-registration.c 2018-09-29 10:33:43.000000000 +0200 @@ -228,6 +228,10 @@ if ((status == 1 || status == 5) && (tech == -1)) tech = nd->tech; + /* 6-10 is EUTRAN, with 8 being emergency bearer case */ + if (status > 5 && tech == -1) + tech = ACCESS_TECHNOLOGY_EUTRAN; + cb(&error, status, lac, ci, tech, cbd->data); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/drivers/atmodem/sim.c new/ofono-1.25/drivers/atmodem/sim.c --- old/ofono-1.24/drivers/atmodem/sim.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/drivers/atmodem/sim.c 2018-09-29 10:33:43.000000000 +0200 @@ -66,10 +66,11 @@ static const char *cpinr_prefixes[] = { "+CPINR:", "+CPINRE:", NULL }; static const char *epin_prefix[] = { "*EPIN:", NULL }; static const char *simcom_spic_prefix[] = { "+SPIC:", NULL }; -static const char *cinterion_spic_prefix[] = { "^SPIC:", NULL }; +static const char *gemalto_spic_prefix[] = { "^SPIC:", NULL }; static const char *pct_prefix[] = { "#PCT:", NULL }; static const char *pnnm_prefix[] = { "+PNNM:", NULL }; static const char *qpinc_prefix[] = { "+QPINC:", NULL }; +static const char *qtrpin_prefix[] = { "+QTRPIN:", NULL }; static const char *upincnt_prefix[] = { "+UPINCNT:", NULL }; static const char *cuad_prefix[] = { "+CUAD:", NULL }; static const char *ccho_prefix[] = { "+CCHO:", NULL }; @@ -982,6 +983,49 @@ CALLBACK_WITH_FAILURE(cb, NULL, cbd->data); } +static void at_qtrpin_cb(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct cb_data *cbd = user_data; + ofono_sim_pin_retries_cb_t cb = cbd->cb; + const char *final = g_at_result_final_response(result); + GAtResultIter iter; + struct ofono_error error; + int retries[OFONO_SIM_PASSWORD_INVALID]; + size_t i; + + decode_at_error(&error, final); + + if (!ok) { + cb(&error, NULL, cbd->data); + return; + } + + for (i = 0; i < OFONO_SIM_PASSWORD_INVALID; i++) + retries[i] = -1; + + g_at_result_iter_init(&iter, result); + + while (g_at_result_iter_next(&iter, "+QTRPIN:")) { + int pin, pin2, puk, puk2; + + if (!g_at_result_iter_next_number(&iter, &pin)) + continue; + if (!g_at_result_iter_next_number(&iter, &pin2)) + continue; + if (!g_at_result_iter_next_number(&iter, &puk)) + continue; + if (!g_at_result_iter_next_number(&iter, &puk2)) + continue; + + retries[OFONO_SIM_PASSWORD_SIM_PIN] = pin; + retries[OFONO_SIM_PASSWORD_SIM_PUK] = puk; + retries[OFONO_SIM_PASSWORD_SIM_PIN2] = pin2; + retries[OFONO_SIM_PASSWORD_SIM_PUK2] = puk2; + } + + cb(&error, retries, cbd->data); +} + static void at_qpinc_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct cb_data *cbd = user_data; @@ -1066,7 +1110,7 @@ CALLBACK_WITH_FAILURE(cb, NULL, cbd->data); } -static void cinterion_spic_cb(gboolean ok, GAtResult *result, +static void gemalto_spic_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct cb_data *cbd = user_data; @@ -1172,15 +1216,20 @@ at_qpinc_cb, cbd, g_free) > 0) return; break; + case OFONO_VENDOR_QUECTEL_M95: + if (g_at_chat_send(sd->chat, "AT+QTRPIN", qtrpin_prefix, + at_qtrpin_cb, cbd, g_free) > 0) + return; + break; case OFONO_VENDOR_UBLOX: case OFONO_VENDOR_UBLOX_TOBY_L2: if (g_at_chat_send(sd->chat, "AT+UPINCNT", upincnt_prefix, upincnt_cb, cbd, g_free) > 0) return; break; - case OFONO_VENDOR_CINTERION: - if (g_at_chat_send(sd->chat, "AT^SPIC", cinterion_spic_prefix, - cinterion_spic_cb, cbd, g_free) > 0) + case OFONO_VENDOR_GEMALTO: + if (g_at_chat_send(sd->chat, "AT^SPIC", gemalto_spic_prefix, + gemalto_spic_cb, cbd, g_free) > 0) return; break; default: @@ -1305,6 +1354,7 @@ case OFONO_VENDOR_HUAWEI: case OFONO_VENDOR_SIMCOM: case OFONO_VENDOR_SIERRA: + case OFONO_VENDOR_QUECTEL_M95: /* * On ZTE modems, after pin is entered, SIM state is checked * by polling CPIN as their modem doesn't provide unsolicited diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/drivers/atmodem/sms.c new/ofono-1.25/drivers/atmodem/sms.c --- old/ofono-1.24/drivers/atmodem/sms.c 2017-05-05 08:22:20.000000000 +0200 +++ new/ofono-1.25/drivers/atmodem/sms.c 2018-09-29 10:33:43.000000000 +0200 @@ -220,9 +220,16 @@ int len; if (mms) { - snprintf(buf, sizeof(buf), "AT+CMMS=%d", mms); - g_at_chat_send(data->chat, buf, none_prefix, - NULL, NULL, NULL); + switch (data->vendor) { + case OFONO_VENDOR_GEMALTO: + /* no mms support */ + break; + default: + snprintf(buf, sizeof(buf), "AT+CMMS=%d", mms); + g_at_chat_send(data->chat, buf, none_prefix, + NULL, NULL, NULL); + break; + } } len = snprintf(buf, sizeof(buf), "AT+CMGS=%d\r", tpdu_len); @@ -329,7 +336,7 @@ /* We must acknowledge the PDU using CNMA */ if (data->cnma_ack_pdu) { switch (data->vendor) { - case OFONO_VENDOR_CINTERION: + case OFONO_VENDOR_GEMALTO: snprintf(buf, sizeof(buf), "AT+CNMA=1"); break; default: @@ -411,9 +418,25 @@ goto err; switch (data->vendor) { - case OFONO_VENDOR_CINTERION: - if (!g_at_result_iter_next_number(&iter, &tpdu_len)) - goto err; + case OFONO_VENDOR_GEMALTO: + if (!g_at_result_iter_next_number(&iter, &tpdu_len)) { + /* + * Some Gemalto modems (ALS3,PLS8...), act in + * accordance with 3GPP 27.005. So we need to skip + * the first (<alpha>) field + * \r\n+CMT: ,23\r\nCAFECAFECAFE... ...\r\n + * ^------- PDU length + */ + DBG("Retrying to find the PDU length"); + + if (!g_at_result_iter_skip_next(&iter)) + goto err; + + /* Next attempt at finding the PDU length. */ + if (!g_at_result_iter_next_number(&iter, &tpdu_len)) + goto err; + } + break; default: if (!g_at_result_iter_skip_next(&iter)) @@ -439,6 +462,7 @@ if (data->vendor != OFONO_VENDOR_SIMCOM) at_ack_delivery(sms); + return; err: ofono_error("Unable to parse CMT notification"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/drivers/atmodem/vendor.h new/ofono-1.25/drivers/atmodem/vendor.h --- old/ofono-1.24/drivers/atmodem/vendor.h 2017-10-05 16:32:37.000000000 +0200 +++ new/ofono-1.25/drivers/atmodem/vendor.h 2018-09-29 10:33:43.000000000 +0200 @@ -44,8 +44,10 @@ OFONO_VENDOR_WAVECOM_Q2XXX, OFONO_VENDOR_ALCATEL, OFONO_VENDOR_QUECTEL, + OFONO_VENDOR_QUECTEL_M95, OFONO_VENDOR_UBLOX, OFONO_VENDOR_UBLOX_TOBY_L2, OFONO_VENDOR_CINTERION, OFONO_VENDOR_XMM, + OFONO_VENDOR_GEMALTO, }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/drivers/mbimmodem/mbimmodem.c new/ofono-1.25/drivers/mbimmodem/mbimmodem.c --- old/ofono-1.24/drivers/mbimmodem/mbimmodem.c 2018-01-21 18:59:31.000000000 +0100 +++ new/ofono-1.25/drivers/mbimmodem/mbimmodem.c 2018-09-29 10:33:43.000000000 +0200 @@ -33,7 +33,7 @@ mbim_devinfo_init(); mbim_sim_init(); mbim_netreg_init(); - mbim_sms_exit(); + mbim_sms_init(); mbim_gprs_init(); mbim_gprs_context_init(); return 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/drivers/qmimodem/network-registration.c new/ofono-1.25/drivers/qmimodem/network-registration.c --- old/ofono-1.24/drivers/qmimodem/network-registration.c 2018-01-21 18:59:31.000000000 +0100 +++ new/ofono-1.25/drivers/qmimodem/network-registration.c 2018-09-29 10:33:43.000000000 +0200 @@ -42,6 +42,13 @@ struct qmi_service *nas; struct ofono_network_operator operator; uint8_t current_rat; + bool is_roaming; +}; + +enum roaming_status { + ROAMING_STATUS_OFF, + ROAMING_STATUS_ON, + ROAMING_STATUS_NO_CHANGE, }; static bool extract_ss_info_time( @@ -78,11 +85,12 @@ static bool extract_ss_info(struct qmi_result *result, int *status, int *lac, int *cellid, int *tech, + enum roaming_status *roaming, struct ofono_network_operator *operator) { const struct qmi_nas_serving_system *ss; const struct qmi_nas_current_plmn *plmn; - uint8_t i, roaming; + uint8_t i, roaming_status; uint16_t value16, len, opname_len; uint32_t value32; @@ -104,10 +112,13 @@ *tech = qmi_nas_rat_to_tech(ss->radio_if[i]); } + *roaming = ROAMING_STATUS_NO_CHANGE; if (qmi_result_get_uint8(result, QMI_NAS_RESULT_ROAMING_STATUS, - &roaming)) { - if (ss->status == 1 && roaming == 0) - *status = NETWORK_REGISTRATION_STATUS_ROAMING; + &roaming_status)) { + if (roaming_status == 0) + *roaming = ROAMING_STATUS_ON; + else if (roaming_status == 1) + *roaming = ROAMING_STATUS_OFF; } if (!operator) @@ -149,7 +160,8 @@ else *cellid = -1; - DBG("lac %d cellid %d tech %d", *lac, *cellid, *tech); + DBG("roaming %u lac %d cellid %d tech %d", *roaming, *lac, *cellid, + *tech); return true; } @@ -160,16 +172,26 @@ struct ofono_network_time net_time; struct netreg_data *data = ofono_netreg_get_data(netreg); int status, lac, cellid, tech; + enum roaming_status roaming; DBG(""); if (extract_ss_info_time(result, &net_time)) ofono_netreg_time_notify(netreg, &net_time); - if (!extract_ss_info(result, &status, &lac, &cellid, &tech, + if (!extract_ss_info(result, &status, &lac, &cellid, &tech, &roaming, &data->operator)) return; + if (roaming == ROAMING_STATUS_ON) + data->is_roaming = true; + else if (roaming == ROAMING_STATUS_OFF) + data->is_roaming = false; + + if (status == QMI_NAS_REGISTRATION_STATE_REGISTERED && + data->is_roaming) + status = NETWORK_REGISTRATION_STATUS_ROAMING; + ofono_netreg_status_notify(netreg, status, lac, cellid, tech); } @@ -179,6 +201,7 @@ ofono_netreg_status_cb_t cb = cbd->cb; struct netreg_data *data = cbd->user; int status, lac, cellid, tech; + enum roaming_status roaming; DBG(""); @@ -187,12 +210,21 @@ return; } - if (!extract_ss_info(result, &status, &lac, &cellid, &tech, + if (!extract_ss_info(result, &status, &lac, &cellid, &tech, &roaming, &data->operator)) { CALLBACK_WITH_FAILURE(cb, -1, -1, -1, -1, cbd->data); return; } + if (roaming == ROAMING_STATUS_ON) + data->is_roaming = true; + else if (roaming == ROAMING_STATUS_OFF) + data->is_roaming = false; + + if (status == QMI_NAS_REGISTRATION_STATE_REGISTERED && + data->is_roaming) + status = NETWORK_REGISTRATION_STATUS_ROAMING; + CALLBACK_WITH_SUCCESS(cb, status, lac, cellid, tech, cbd->data); } @@ -580,6 +612,7 @@ data->operator.tech = -1; data->current_rat = QMI_NAS_NETWORK_RAT_NO_CHANGE; + data->is_roaming = false; ofono_netreg_set_data(netreg, data); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/include/lte.h new/ofono-1.25/include/lte.h --- old/ofono-1.24/include/lte.h 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/include/lte.h 2018-09-29 10:33:43.000000000 +0200 @@ -61,6 +61,8 @@ void *ofono_lte_get_data(const struct ofono_lte *lte); +struct ofono_modem *ofono_lte_get_modem(const struct ofono_lte *lte); + #ifdef __cplusplus } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/include/modem.h new/ofono-1.25/include/modem.h --- old/ofono-1.24/include/modem.h 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/include/modem.h 2018-09-29 10:33:43.000000000 +0200 @@ -31,6 +31,7 @@ struct ofono_modem; struct ofono_gprs; struct ofono_sim; +struct ofono_voicecall; enum ofono_modem_type { OFONO_MODEM_TYPE_HARDWARE = 0, @@ -84,6 +85,7 @@ const char *ofono_modem_get_path(struct ofono_modem *modem); struct ofono_sim *ofono_modem_get_sim(struct ofono_modem *modem); struct ofono_gprs *ofono_modem_get_gprs(struct ofono_modem *modem); +struct ofono_voicecall *ofono_modem_get_voicecall(struct ofono_modem *modem); void ofono_modem_set_data(struct ofono_modem *modem, void *data); void *ofono_modem_get_data(struct ofono_modem *modem); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/include/types.h new/ofono-1.25/include/types.h --- old/ofono-1.24/include/types.h 2016-05-03 19:04:11.000000000 +0200 +++ new/ofono-1.25/include/types.h 2018-09-29 10:33:43.000000000 +0200 @@ -56,6 +56,7 @@ OFONO_ERROR_TYPE_CEER, OFONO_ERROR_TYPE_SIM, OFONO_ERROR_TYPE_FAILURE, + OFONO_ERROR_TYPE_ERRNO }; enum ofono_disconnect_reason { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/include/voicecall.h new/ofono-1.25/include/voicecall.h --- old/ofono-1.24/include/voicecall.h 2018-03-10 17:16:16.000000000 +0100 +++ new/ofono-1.25/include/voicecall.h 2018-09-29 10:33:43.000000000 +0200 @@ -160,6 +160,8 @@ */ void ofono_voicecall_mpty_hint(struct ofono_voicecall *vc, unsigned int ids); +struct ofono_modem *ofono_voicecall_get_modem(struct ofono_voicecall *vc); + int ofono_voicecall_driver_register(const struct ofono_voicecall_driver *d); void ofono_voicecall_driver_unregister(const struct ofono_voicecall_driver *d); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/plugins/gemalto.c new/ofono-1.25/plugins/gemalto.c --- old/ofono-1.24/plugins/gemalto.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/plugins/gemalto.c 2018-09-29 10:33:43.000000000 +0200 @@ -571,7 +571,7 @@ ofono_devinfo_create(modem, 0, "atmodem", data->app); ofono_location_reporting_create(modem, 0, "gemaltomodem", data->app); - data->sim = ofono_sim_create(modem, OFONO_VENDOR_CINTERION, "atmodem", + data->sim = ofono_sim_create(modem, OFONO_VENDOR_GEMALTO, "atmodem", data->app); if (data->sim && data->have_sim == TRUE) @@ -589,7 +589,7 @@ ofono_phonebook_create(modem, 0, "atmodem", data->app); - ofono_sms_create(modem, OFONO_VENDOR_CINTERION, "atmodem", data->app); + ofono_sms_create(modem, OFONO_VENDOR_GEMALTO, "atmodem", data->app); gprs = ofono_gprs_create(modem, 0, "atmodem", data->app); gc = ofono_gprs_context_create(modem, 0, "atmodem", data->mdm); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/plugins/huawei.c new/ofono-1.25/plugins/huawei.c --- old/ofono-1.24/plugins/huawei.c 2017-05-05 08:22:20.000000000 +0200 +++ new/ofono-1.25/plugins/huawei.c 2018-09-29 10:33:43.000000000 +0200 @@ -875,7 +875,7 @@ data->gprs = ofono_gprs_create(modem, OFONO_VENDOR_HUAWEI, "atmodem", data->pcui); - data->gc = ofono_gprs_context_create(modem, 0, + data->gc = ofono_gprs_context_create(modem, OFONO_VENDOR_HUAWEI, "atmodem", data->modem); if (data->gprs && data->gc) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/plugins/mbim.c new/ofono-1.25/plugins/mbim.c --- old/ofono-1.24/plugins/mbim.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/plugins/mbim.c 2018-09-29 10:33:43.000000000 +0200 @@ -422,8 +422,6 @@ static int mbim_init(void) { - l_debug("------------------->Foobar"); - return ofono_modem_driver_register(&mbim_driver); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/plugins/ublox.c new/ofono-1.25/plugins/ublox.c --- old/ofono-1.24/plugins/ublox.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/plugins/ublox.c 2018-09-29 10:33:43.000000000 +0200 @@ -40,6 +40,7 @@ #include <ofono/gprs-context.h> #include <ofono/netmon.h> #include <ofono/lte.h> +#include <ofono/voicecall.h> #include <drivers/atmodem/atutil.h> #include <drivers/atmodem/vendor.h> @@ -286,6 +287,14 @@ DBG("%p", modem); ofono_devinfo_create(modem, 0, "atmodem", data->aux); + /* + * Call support is technically possible only after sim insertion + * with the module online. However the EMERGENCY_SETUP procedure of + * the 3GPP TS_24.008 is triggered by the same AT command, + * and namely 'ATD112;' and 'ATD911;'. Therefore it makes sense to + * add the voice support as soon as possible. + */ + ofono_voicecall_create(modem, 0, "atmodem", data->aux); sim = ofono_sim_create(modem, data->vendor_family, "atmodem", data->aux); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/plugins/udevng.c new/ofono-1.25/plugins/udevng.c --- old/ofono-1.24/plugins/udevng.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/plugins/udevng.c 2018-09-29 10:33:43.000000000 +0200 @@ -233,10 +233,11 @@ } } + DBG("qmi=%s net=%s mdm=%s gps=%s diag=%s", qmi, net, mdm, gps, diag); + if (qmi == NULL || mdm == NULL || net == NULL) return FALSE; - DBG("qmi=%s net=%s mdm=%s gps=%s diag=%s", qmi, net, mdm, gps, diag); ofono_modem_set_string(modem->modem, "Device", qmi); ofono_modem_set_string(modem->modem, "Modem", mdm); @@ -710,7 +711,8 @@ return TRUE; } -static gboolean setup_sim900(struct modem_info *modem) +/* TODO: Not used as we have no simcom driver */ +static gboolean setup_simcom(struct modem_info *modem) { const char *mdm = NULL, *aux = NULL, *gps = NULL, *diag = NULL; GSList *list; @@ -1280,7 +1282,7 @@ { "nokia", setup_nokia }, { "telit", setup_telit, "device/interface" }, { "telitqmi", setup_telitqmi }, - { "sim900", setup_sim900 }, + { "simcom", setup_simcom }, { "sim7100", setup_sim7100 }, { "zte", setup_zte }, { "icera", setup_icera }, @@ -1379,11 +1381,19 @@ const char *devpath = user_data; GSList *list; - for (list = modem->devices; list; list = list->next) { - struct device_info *info = list->data; + switch (modem->type) { + case MODEM_TYPE_USB: + for (list = modem->devices; list; list = list->next) { + struct device_info *info = list->data; - if (g_strcmp0(info->devpath, devpath) == 0) + if (g_strcmp0(info->devpath, devpath) == 0) + return TRUE; + } + break; + case MODEM_TYPE_SERIAL: + if (g_strcmp0(modem->serial->devpath, devpath) == 0) return TRUE; + break; } return FALSE; @@ -1645,7 +1655,7 @@ { "alcatel", "option", "1bbb", "0017" }, { "novatel", "option", "1410" }, { "zte", "option", "19d2" }, - { "sim900", "option", "05c6", "9000" }, + { "simcom", "option", "05c6", "9000" }, { "sim7100", "option", "1e0e", "9001" }, { "telit", "usbserial", "1bc7" }, { "telit", "option", "1bc7" }, @@ -1732,6 +1742,9 @@ DBG("%s [%s:%s]", drv, vendor, model); + if (vendor == NULL || model == NULL) + return; + for (i = 0; vendor_list[i].driver; i++) { if (g_str_equal(vendor_list[i].drv, drv) == FALSE) continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/src/dbus.c new/ofono-1.25/src/dbus.c --- old/ofono-1.24/src/dbus.c 2018-01-21 18:59:31.000000000 +0100 +++ new/ofono-1.25/src/dbus.c 2018-09-29 10:33:43.000000000 +0200 @@ -24,6 +24,7 @@ #endif #include <glib.h> +#include <errno.h> #include <gdbus.h> #include "ofono.h" @@ -37,7 +38,7 @@ DBusMessage *(*ofono_error_func)(DBusMessage *); }; -struct error_mapping_entry cme_errors_mapping[] = { +static const struct error_mapping_entry cme_errors_mapping[] = { { 3, __ofono_error_not_allowed }, { 4, __ofono_error_not_supported }, { 16, __ofono_error_incorrect_password }, @@ -45,6 +46,16 @@ { 31, __ofono_error_timed_out }, { 32, __ofono_error_access_denied }, { 50, __ofono_error_invalid_args }, + { } +}; + +static const struct error_mapping_entry errno_errors_mapping[] = { + { EACCES, __ofono_error_access_denied }, + { EOPNOTSUPP, __ofono_error_not_supported }, + { ENOSYS, __ofono_error_not_implemented }, + { ETIMEDOUT, __ofono_error_timed_out }, + { EINPROGRESS, __ofono_error_busy }, + { } }; static void append_variant(DBusMessageIter *iter, @@ -419,26 +430,31 @@ " network"); } +static DBusMessage *__ofono_map_error(const struct error_mapping_entry *map, + int error, DBusMessage *msg) +{ + const struct error_mapping_entry *e; + + for (e = map; e->ofono_error_func; e++) + if (e->error == error) + return e->ofono_error_func(msg); + + return __ofono_error_failed(msg); +} + DBusMessage *__ofono_error_from_error(const struct ofono_error *error, DBusMessage *msg) { - struct error_mapping_entry *e; - int maxentries; - int i; - switch (error->type) { case OFONO_ERROR_TYPE_CME: - e = cme_errors_mapping; - maxentries = sizeof(cme_errors_mapping) / - sizeof(struct error_mapping_entry); - for (i = 0; i < maxentries; i++) - if (e[i].error == error->error) - return e[i].ofono_error_func(msg); - break; + return __ofono_map_error(cme_errors_mapping, error->error, msg); case OFONO_ERROR_TYPE_CMS: return __ofono_error_failed(msg); case OFONO_ERROR_TYPE_CEER: return __ofono_error_failed(msg); + case OFONO_ERROR_TYPE_ERRNO: + return __ofono_map_error(errno_errors_mapping, + ABS(error->error), msg); default: return __ofono_error_failed(msg); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/src/emulator.c new/ofono-1.25/src/emulator.c --- old/ofono-1.24/src/emulator.c 2016-05-03 19:04:11.000000000 +0200 +++ new/ofono-1.25/src/emulator.c 2018-09-29 10:33:43.000000000 +0200 @@ -1347,6 +1347,7 @@ case OFONO_ERROR_TYPE_CEER: case OFONO_ERROR_TYPE_SIM: case OFONO_ERROR_TYPE_FAILURE: + case OFONO_ERROR_TYPE_ERRNO: failure: g_at_server_send_final(em->server, G_AT_SERVER_RESULT_ERROR); break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/src/gprs.c new/ofono-1.25/src/gprs.c --- old/ofono-1.24/src/gprs.c 2018-01-21 18:59:31.000000000 +0100 +++ new/ofono-1.25/src/gprs.c 2018-09-29 10:33:43.000000000 +0200 @@ -1008,7 +1008,7 @@ value = pri_ctx->active; - gprs->flags &= !GPRS_FLAG_ATTACHING; + gprs->flags &= ~GPRS_FLAG_ATTACHING; gprs->driver_attached = TRUE; gprs_set_attached_property(gprs, TRUE); @@ -1635,6 +1635,9 @@ if (gc->driver->detach_shutdown != NULL) gc->driver->detach_shutdown(gc, ctx->context.cid); + + /* Make sure the context is properly cleared */ + release_context(ctx); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/src/lte.c new/ofono-1.25/src/lte.c --- old/ofono-1.24/src/lte.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/src/lte.c 2018-09-29 10:33:43.000000000 +0200 @@ -343,7 +343,7 @@ const char *imsi = ofono_sim_get_imsi(sim); if (imsi == NULL) { - ofono_error("No sim atom required for registering LTE atom."); + ofono_error("No sim atom found. It is required for registering LTE atom."); return; } @@ -373,3 +373,8 @@ { return lte->driver_data; } + +struct ofono_modem *ofono_lte_get_modem(const struct ofono_lte *lte) +{ + return __ofono_atom_get_modem(lte->atom); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/src/main.c new/ofono-1.25/src/main.c --- old/ofono-1.24/src/main.c 2018-01-21 18:59:31.000000000 +0100 +++ new/ofono-1.25/src/main.c 2018-09-29 10:33:43.000000000 +0200 @@ -211,11 +211,6 @@ struct ell_event_source *source; #endif -#ifdef NEED_THREADS - if (g_thread_supported() == FALSE) - g_thread_init(NULL); -#endif - context = g_option_context_new(NULL); g_option_context_add_main_entries(context, options, NULL); @@ -246,13 +241,6 @@ event_loop = g_main_loop_new(NULL, FALSE); -#ifdef NEED_THREADS - if (dbus_threads_init_default() == FALSE) { - fprintf(stderr, "Can't init usage of threads\n"); - exit(1); - } -#endif - #ifdef HAVE_ELL l_log_set_stderr(); l_debug_enable("*"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/src/modem.c new/ofono-1.25/src/modem.c --- old/ofono-1.24/src/modem.c 2018-06-14 23:22:27.000000000 +0200 +++ new/ofono-1.25/src/modem.c 2018-09-29 10:33:43.000000000 +0200 @@ -194,6 +194,11 @@ return __ofono_atom_find(OFONO_ATOM_TYPE_GPRS, modem); } +struct ofono_voicecall *ofono_modem_get_voicecall(struct ofono_modem *modem) +{ + return __ofono_atom_find(OFONO_ATOM_TYPE_VOICECALL, modem); +} + struct ofono_atom *__ofono_modem_add_atom(struct ofono_modem *modem, enum ofono_atom_type type, void (*destruct)(struct ofono_atom *), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/src/plugin.c new/ofono-1.25/src/plugin.c --- old/ofono-1.24/src/plugin.c 2011-10-11 20:21:45.000000000 +0200 +++ new/ofono-1.25/src/plugin.c 2018-09-29 10:33:43.000000000 +0200 @@ -190,17 +190,26 @@ DBG(""); + /* + * Terminate the plugins but don't unload the libraries yet. + * Plugins may reference data structures allocated by each other. + */ for (list = plugins; list; list = list->next) { struct ofono_plugin *plugin = list->data; if (plugin->active == TRUE && plugin->desc->exit) plugin->desc->exit(); + } + + /* Second pass - unload the libraries */ + for (list = plugins; list; list = list->next) { + struct ofono_plugin *plugin = list->data; if (plugin->handle) dlclose(plugin->handle); - - g_free(plugin); } - g_slist_free(plugins); + /* Finally, free the memory */ + g_slist_free_full(plugins, g_free); + plugins = NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/src/voicecall.c new/ofono-1.25/src/voicecall.c --- old/ofono-1.24/src/voicecall.c 2018-03-10 17:16:16.000000000 +0100 +++ new/ofono-1.25/src/voicecall.c 2018-09-29 10:33:43.000000000 +0200 @@ -3734,6 +3734,11 @@ return vc->driver_data; } +struct ofono_modem *ofono_voicecall_get_modem(struct ofono_voicecall *vc) +{ + return __ofono_atom_get_modem(vc->atom); +} + int ofono_voicecall_get_next_callid(struct ofono_voicecall *vc) { struct ofono_modem *modem; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/test/send-sms new/ofono-1.25/test/send-sms --- old/ofono-1.24/test/send-sms 2014-06-29 21:43:22.000000000 +0200 +++ new/ofono-1.25/test/send-sms 2018-09-29 10:33:43.000000000 +0200 @@ -6,6 +6,7 @@ if len(sys.argv) < 4: print("Usage: %s [modem] <to> <message> <delivery report>" %\ (sys.argv[0])) + print(" where delivery report is 0|1") sys.exit(1) bus = dbus.SystemBus() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/tools/auto-enable.c new/ofono-1.25/tools/auto-enable.c --- old/ofono-1.24/tools/auto-enable.c 2012-07-19 20:51:33.000000000 +0200 +++ new/ofono-1.25/tools/auto-enable.c 2018-09-29 10:33:43.000000000 +0200 @@ -492,11 +492,6 @@ guint watch; struct sigaction sa; -#ifdef NEED_THREADS - if (g_thread_supported() == FALSE) - g_thread_init(NULL); -#endif - context = g_option_context_new(NULL); g_option_context_add_main_entries(context, options, NULL); @@ -518,13 +513,6 @@ main_loop = g_main_loop_new(NULL, FALSE); -#ifdef NEED_THREADS - if (dbus_threads_init_default() == FALSE) { - fprintf(stderr, "Can't init usage of threads\n"); - exit(1); - } -#endif - dbus_error_init(&err); conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, &err); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ofono-1.24/tools/huawei-audio.c new/ofono-1.25/tools/huawei-audio.c --- old/ofono-1.24/tools/huawei-audio.c 2012-07-19 20:51:33.000000000 +0200 +++ new/ofono-1.25/tools/huawei-audio.c 2018-09-29 10:33:43.000000000 +0200 @@ -775,11 +775,6 @@ guint watch; struct sigaction sa; -#ifdef NEED_THREADS - if (g_thread_supported() == FALSE) - g_thread_init(NULL); -#endif - context = g_option_context_new(NULL); g_option_context_add_main_entries(context, options, NULL); @@ -801,13 +796,6 @@ main_loop = g_main_loop_new(NULL, FALSE); -#ifdef NEED_THREADS - if (dbus_threads_init_default() == FALSE) { - fprintf(stderr, "Can't init usage of threads\n"); - exit(1); - } -#endif - dbus_error_init(&err); conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, &err); ++++++ ofono-1.24.tar.xz.sig -> ofono-1.25.tar.xz.sig ++++++ --- /work/SRC/openSUSE:Factory/ofono/ofono-1.24.tar.xz.sig 2018-06-19 12:05:09.034719258 +0200 +++ /work/SRC/openSUSE:Factory/.ofono.new/ofono-1.25.tar.xz.sig 2018-10-15 09:46:56.347136927 +0200 @@ -287,20 +287,24 @@ 4dacdc61571aad7ce8b4412ed51d03bec3d4060b93ee68f8c69b26b223bdc975 ofono-1.23.tar.xz b34a2490ba9218ae6450513731ef985337ab1c934615ad20e5ffb1d9e25ee65d ofono-1.24.tar.gz 9c8e351b7658f4b43f9a4380b731c47d2d7544a89987c48c3f227e73636c87ae ofono-1.24.tar.xz +17b0fb2854ed9d053dc2ff753dc9f4c85d52a0ff89befd167c82092c49f76c50 ofono-1.25.tar.gz +eb011fcd3080e93f3a56f96be60350b6595a8b5f36b61646312ba41b0bcb0d75 ofono-1.25.tar.xz +4a1c2fc163e64c274822f99231afb15c3dc544b101d7b83116d20265d374fbc3 phonesim-1.21.tar.gz +dd2793861d8dd8c2cfed9391b850575607edf8d1aaee5c7250bf7b7fe8975d49 phonesim-1.21.tar.xz -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) -iQIcBAEBCAAGBQJbIt/RAAoJEGMtOgZYnaaxNq4QAKG5gXTj05spt9Rv3OtuqbA3 -wHJ5qgw5dYJ81peiiaFVqiHqU7lZZ2AweeQkzVjJxUtIjwekJwuSzbyaWRD3gJYT -nJMWHntrPl6I7Z2y0GgjhNKxRnHIGvLDl5mnnfBqpcmXY6ccLSS5ilk41+e2o2or -EGhipD2yKegqaLZKU2LOajxS8Y5UKcNI5Yx0fmkq7A9j2GD93CwIxNiFN/YUdp0n -qPtp/6ncoR06J1vgL/Gd5zpq9K38LC3Eq8HXlzpyyrOdLdiRGz67GZBYL6lfC2ok -0Y32EoaGSBkH697CtbmldO0o/SRXD2K67XqVyAuFY5wltelkDXpydwXP/iwgWXZ7 -IIhv8F8ZSqL0ASW4n4bhrWXSje38PWqoLYLm4TwtyrKYyeFROCIidqYeChKxkz+F -xDvcQU1KO0cEFVF6/CSX1WtTCtrV7PmIPovmHNK9mXG8Xkv+LvbVLHk5x4y0EMor -6nzg9FgnsOkvHK3GoO1g/Hqho7CvlnjIjozhA7dapMWNV1e/H0nGHhGxIhzWVPwp -F1rcWHYBZpli+NZOfU4yoRb31DHDfPyTpdeI65PGriMo4fEYTy4evTj/mmew8TQ4 -u/BU8EYzXsS+qGp/p/M7T7W57ly/qwybhWQJCMBenLAJ22pvjNEvE6jCVHJ83MMO -o0x0sdTjwWBHfutfM1m0 -=OsSN +iQIcBAEBCAAGBQJbtSEfAAoJEGMtOgZYnaax9rIP/RdoFgTtw3T8ZjIvv0VYUeRG +DmBFwtfjlvDMS7ppcYO0cYLl091pMptnq5NNtOiOIJFhJKwUS05b/Rou1k7sn4Mi +a5solkp395ZBBM59Km78666Wog/WXPmLQfuRSDfIfG4/fe6vLxY242kK1L9L0ihD +ZQSEqO6FUNNSuZ5Jo3L0aPD3bXhKWhK3vV/4U7d9UGZXdmDZzsdX7L51VZaDsTgc +0JarzTXSbVAgOjZ0TYUdtOhn5vApqLGoY8xnlSBCNNY/5nUoqVrP/qVRAaKRlmpg +CzMm6zXNCCJqqddYBxquYv+0rRbXR9i/FqlZSsQ4FVE7vBXzdHDFOoutYMyCxwqZ +vzHsOkBAHwh1mghv4/n3kEBoZjReV1SWMYVEqcTVHA796xLXeYAG/qJt306XzApq +rSc93bgQ1H7Il0wUx8wKE/njXz+yuXTUYOgxHimlXrWtNxk2/0z0AtuMHJCLsf5t +tGyyrAkCHtm/QmZQoPpvPJ+f+8meyriiYADf08Q3QPgvbVPP4dNh/qwqPuCEjHqx +J7PqJY135pvXcUzGELeqFNz5NVacWx+d7Uxdhz92rL3giDfuWjHaYVCNeyAK91XO +ze8YZoAt5/pk9o9A3uoePp7SIB87hZdjY5mLFdSoM2HYQaMkFTBnf57reMPIsTCF +V2VcLm4YRHpEx3dOufD/ +=ImhY -----END PGP SIGNATURE-----