Commit Graph
259 Commits
Author SHA1 Message Date
Aleksander Morgado c147dfc267 libmm-glib: use ModemManager prefix to refer to the introspected types 2018-03-13 13:07:10 +01:00
Aleksander Morgado 5dff6ce594 libmm-glib,modem: fix introspection annotation for bearer list 2018-03-13 12:53:37 +01:00
Aleksander Morgado eb6b4cac8a libmm-glib: add several missing headers 2018-03-13 12:53:18 +01:00
Aleksander Morgado 1481dd58e2 libmm-glib,bearer-properties: minor documentation typo fix 2018-03-13 12:41:47 +01:00
Aleksander Morgado 9535f4c474 libmm-glib,bearer: cleanup stats related mutex and object 2018-03-13 12:25:43 +01:00
Ville Skyttä 90b89bb9f4 *: Spelling fixes 2018-01-25 09:52:12 +01:00
Aleksander Morgado d4aaa436d9 modem-3gpp: allow loading and changing EPS UE mode of operation
The UE modes of operation for LTE are defined in 3GPP TS 24.301 (e.g.
section 4.3 in v10.3.0):
  * PS mode 1: EPS only, 'voice centric'
  * PS mode 2: EPS only, 'data centric'
  * CS/PS mode 1: EPS and non-EPS, 'voice centric'
  * CS/PS mode 2: EPS and non-EPS, 'data centric'

The mode specifies, among other things, how the UE should behave w.r.t
CS fallback depending on the capabilities reported by the network.
2018-01-20 15:41:07 +01:00
Aleksander Morgado 3ee1dc5fa0 libmm-glib,sms: fix get|dup_data() introspection annotations
We need to specify explicitly that the return type is an array of
guint8 elements.
2017-09-27 17:33:31 +02:00
Ben Chan 9c6a1ebb1e libmm-glib: add helpers for loading hardware revision 2017-09-20 09:56:23 -07:00
Ben Chan 2b08a66645 libmm-glib,cdma: fix potential NULL dereference
This patch fixes a potential NULL referenece issue in
mm_cdma_manual_activation_properties_get_prl() where it accesses
`self->priv->prl->data' when `self->priv->prl' could be potentially
NULL.
2017-08-11 17:09:15 -05:00
Ben Chan c02dcd397a libmm-glib,sms-properties: fix potential NULL dereference
This patch fixes a potential NULL referenece issue in
mm_sms_properties_get_data() where it accesses `self->priv->data->data'
when `self->priv->data' could be potentially NULL.
2017-08-11 17:09:13 -05:00
Ben Chan e33aa01963 location-gps-nmea: fix memory leaks
There are potential memory leaks in MMLocationGpsNmea:

- When the `trace' string provided to location_gps_nmea_take_trace() isn't
  added to the hash table, its ownership is still considered transferred.
  It should thus be freed. Similarly, the `trace_type' string isn't
  added the hash table and should thus be freed.

- mm_location_gps_nmea_add_trace() duplicates a given trace string and
  then passes the trace copy to location_gps_nmea_take_trace(). When
  location_gps_nmea_take_trace() returns FALSE, the ownership of the
  copy isn't transferred. mm_location_gps_nmea_add_trace() should thus
  free the copy.

This patch fixes the above memory leaks by having
location_gps_nmea_take_trace() always take the ownership of the `trace'
string and internally free `trace' and `trace_type' when necessary.
2017-08-04 15:07:56 +02:00
Ben Chan bae4590784 libmm-glib,firmware: fix unique_id checks
The following checks in mm_modem_firmware_select() and
mm_modem_firmware_select_sync() could result in a NULL pointer
dereference if `unique_id' is NULL:

  g_return_if_fail (unique_id != NULL || unique_id[0] == '\0')
  g_return_val_if_fail (unique_id != NULL || unique_id[0] == '\0', FALSE)

This patch fixes the checks to properly verify that `unique_id' is
neither NULL nor an empty string.
2017-08-03 12:19:37 +02:00
Ben Chan 3d800c2f49 compat: add compatibility definitions for old MM_MODEM_BAND_EUTRAN_* values
Those Roman numeral suffixes in MM_MODEM_BAND_EUTRAN_* were replaced
with 1, 2, 3, ..., etc. This patch adds a compatibility header,
ModemManager-compat.h, to alias the old MM_MODEM_BAND_EUTRAN_* values to
the new values.
2017-06-28 18:21:25 +02:00
Ben Chan 292f2402d0 libmm-glib,voice: port mm_modem_voice_list_calls to use GTask 2017-06-25 09:47:58 +02:00
Ben Chan 9bf9d036ec libmm-glib,voice: port mm_modem_voice_create_call to use GTask 2017-06-25 09:47:58 +02:00
Ben Chan 135fc84cf1 libmm-glib,messaging: port mm_modem_messaging_list to use GTask 2017-06-25 09:47:58 +02:00
Ben Chan 498400d943 libmm-glib,messaging: port mm_modem_messaging_create to use GTask 2017-06-25 09:47:58 +02:00
Ben Chan aebc1f3f6c libmm-glib,modem: port mm_modem_list_bearers to use GTask 2017-06-25 09:45:18 +02:00
Ben Chan 23206d794a libmm-glib,modem: port mm_modem_create_bearer to use GTask 2017-06-23 22:32:08 +02:00
Ben Chan d84bb54e77 libmm-glib,modem: port mm_modem_get_sim to use GTask 2017-06-23 22:32:08 +02:00
Ben Chan 2327ebddf1 libmm-glib: use g_list_copy_deep for deep copying a GList 2017-06-23 22:32:07 +02:00
Ben Chan 19794d0846 libmm-glib,manager: port mm_manager_scan_devices to use GTask 2017-06-23 10:26:53 +02:00
Ben Chan 2f3d9642f6 libmm-glib,manager: port mm_manager_set_logging to use GTask 2017-06-23 10:26:52 +02:00
Ben Chan 56ec672669 libmm-glib,simple: port mm_modem_simple_connect to use GTask 2017-06-23 10:26:50 +02:00
Ben Chan 9920f868eb libmm-glib,voice: fix object unref in list_call_context_complete_and_free 2017-06-23 10:09:08 +02:00
Ben Chan c927c0236e libmm-glib,modem: fix object unref in list_bearers_context_complete_and_free 2017-06-23 10:09:08 +02:00
Ben Chan 8c1bc84af8 libmm-glib,messaging: fix object unref in list_sms_context_complete_and_free 2017-06-23 10:09:08 +02:00
Ben Chan 78e6ba5688 libmm-glib: remove explicit GDestroyNotify cast on g_object_unref
g_object_unref is in form of  `void (*)(gpointer)`, which matches the
GDestroyNotify signature. An explicit GDestroyNotify cast on
g_object_unref is thus not needed.
2017-03-29 10:22:34 +02:00
Aleksander Morgado 91613543d5 libmm-glib: set clear func by default in the MMModemPortInfo array
So that we don't leak the port names allocated within each
MMModemPortInfo.

    ==261== 672 bytes in 84 blocks are definitely lost in loss record 7,314 of 7,383
    ==261== at 0x402C51E: malloc (vg_replace_malloc.c:299)
    ==261== by 0x4484878: g_malloc (gmem.c:94)
    ==261== by 0x449D51D: g_strdup (gstrfuncs.c:363)
    ==261== by 0x44B5B73: g_variant_dup_string (gvariant.c:1529)
    ==261== by 0x44B945E: g_variant_valist_get_nnp (gvariant.c:4775)
    ==261== by 0x44B945E: g_variant_valist_get_leaf (gvariant.c:4945)
    ==261== by 0x44B945E: g_variant_valist_get (gvariant.c:5126)
    ==261== by 0x44B922C: g_variant_valist_get (gvariant.c:5161)
    ==261== by 0x44B9FC9: g_variant_get_va (gvariant.c:5388)
    ==261== by 0x44BA3C5: g_variant_get_child (gvariant.c:5486)
    ==261== by 0x6613FA8: mm_common_ports_variant_to_garray (mm-common-helpers.c:238)
    ==261== by 0x6601AB9: ensure_internal_ports (mm-modem.c:766)
    ==261== by 0x6603E42: mm_modem_peek_ports (mm-modem.c:825)
    ==261== by 0x65CD94D: owns_port (nm-modem-broadband.c:196)

Reported-by: Piotr Figiel <p.figiel@camlintechnologies.com>
2017-02-10 10:29:52 +01:00
Piotr Figiel 255e4c769b libmm-glib: fix leaking bearer_path string
==261== 482 bytes in 12 blocks are definitely lost in loss record 7,290 of 7,383
    ==261== at 0x402C51E: malloc (vg_replace_malloc.c:299)
    ==261== by 0x4484878: g_malloc (gmem.c:94)
    ==261== by 0x449D51D: g_strdup (gstrfuncs.c:363)
    ==261== by 0x44B5B73: g_variant_dup_string (gvariant.c:1529)
    ==261== by 0x44B945E: g_variant_valist_get_nnp (gvariant.c:4775)
    ==261== by 0x44B945E: g_variant_valist_get_leaf (gvariant.c:4945)
    ==261== by 0x44B945E: g_variant_valist_get (gvariant.c:5126)
    ==261== by 0x44B922C: g_variant_valist_get (gvariant.c:5161)
    ==261== by 0x44B9FC9: g_variant_get_va (gvariant.c:5388)
    ==261== by 0x44BA1DB: g_variant_get (gvariant.c:5335)
    ==261== by 0x664E2EF: mm_gdbus_modem_simple_call_connect_finish (mm-gdbus-modem.c:22451)
    ==261== by 0x6608A08: simple_connect_ready (mm-modem-simple.c:154)
    ==261== by 0x429136F: g_task_return_now (gtask.c:1107)
    ==261== by 0x4291A69: g_task_return (gtask.c:1165)
2017-02-08 18:38:03 +01:00
Ben Chan 31655bb5a5 glib: remove invocations of g_type_init()
g_type_init() has been deprecated (and also marked with the attribute
'deprecated') since glib 2.36 as the type system is automatically
initialized. Since the minimum version of glib required by ModemManager
is 2.36, calling g_type_init() isn't necessarily in the ModemManager
code.
2017-02-03 10:05:14 +01:00
Aleksander Morgado 2f12d96fe4 libmm-glib,modem: init/clear ports mutex 2017-01-04 13:45:38 +01:00
Thomas Haller 094fea5392 libmm-glib: fix memleak of MMModem's ports
Fixes: 3206e95663
2017-01-04 13:36:31 +01:00
Aleksander Morgado 17a90b8fa6 libmm-glib,call-properties: fix wrong enum returned
https://bugs.freedesktop.org/show_bug.cgi?id=98220
2016-10-13 12:08:21 +02:00
Aleksander Morgado 292914cf65 iface-modem: always sort supported and current bands before exposing them 2016-10-12 13:24:09 +02:00
Aleksander Morgado 9b3549e375 api,signal: new RSCP item 2016-10-12 13:24:08 +02:00
Aleksander Morgado 58c955f5f2 core: allow building and running without udev
Instead of relying on the udev daemon and GUDev to manage the devices reported
by the kernel, we can now run ModemManager relying solely on the kernel events
reported via the new ReportKernelEvent() API. Therefore, the '--no-auto-scan'
option is implicit for the ModemManager daemon when udev is disabled in the
build.

Additionally, a new custom implementation of the kernel device object is
provided, which uses sysfs to load the properties and attributes required in
each kernel device, instead of using a GUdevDevice.

The udev rule files are kept in place, and a simple custom parser is provided
which preloads all rules in memory once and then applies them to the different
kernel objects reported via ReportKernelEvent(), e.g. to set port type hints.
A simple unit test setup is prepared to validate the udev rules during the
`check' Makefile target.
2016-09-29 15:43:05 +02:00
Aleksander Morgado c4a584416a core: allow disabling auto-scan and notifying ports one by one via API
This commit enables a new core ModemManager daemon option, so that automatic
detection of available modems is totally disabled: '--no-auto-scan'. Note that
this option also replaces the previously used '--test-no-auto-scan' option,
which was only used during tests.

Along with the new ModemManager option, a new ReportKernelEvent() method in
the API is defined, which allows notifying the daemon of which interfaces it
should be accessing, as well as the main details of each interface. The only
mandatory parameters in the new method are 'action' (add/remove), 'name' (the
name of the interface) and 'subsystem' (the subsystem of the interface).

The mmcli tool has support for using the new api method via several new options:

 * The '--report-kernel-event' option allows specifying device ports one by
   one, and is a direct mapping of the ReportKernelEvent() method:
     $ sudo mmcli --report-kernel-event="action=add,name=wwan0,subsystem=net"
     $ sudo mmcli --report-kernel-event="action=add,name=cdc-wdm0,subsystem=usbmisc"

 * The '--report-kernel-event-auto-scan' option uses udev monitoring to notify
   events automatically to the daemon. This allows to operate in a way
   equivalent to the default daemon operation (with implicit auto-scan).

Worth noting that the ReportKernelEvent() method is only usable when
'--no-auto-scan' is explicitly used in the daemon. An error will be reported if
the method is tried while standard udev monitoring is enabled (implicit if
auto scan isn't explicitly disabled in the daemon).

If mmcli is going to be used only to report 'real time' events, an optional
'--initial-kernel-events=[PATH]' may be given in the ModemManager call to
automatically process a set of port kernel events one by one on boot. The file
may e.g. contain:
  action=add,name=wwan0,subsystem=net
  action=add,name=cdc-wdm0,subsystem=usbmisc
2016-09-29 15:43:05 +02:00
Aleksander Morgado 3047522b2e api,signal: Ec/Io is in dB, not dBm 2016-08-10 09:05:47 +02:00
Aleksander Morgado 7460793caa libmm-glib,helpers: don't warn when trying to read invalid match info index
We may want to use the mm_get_()_from_match_info() calls to read optional items,
so that the method returns FALSE if the item index doesn't apply. So, avoid the
implicit warning issued by g_return_val_if_fail().
2016-08-10 09:04:54 +02:00
Aleksander Morgado ccc148fe9b libmm-glib,common-helpers: fix reading boolean from string
The "0" case wasn't being handled properly:
  $ sudo mmcli -m 0 --create-bearer="apn=,allow-roaming=0"
  Error parsing properties string: 'Cannot get boolean from string '0''
2016-04-19 14:02:13 +02:00
Brian Norris 34961f20a6 libmm-glib: fix enum conversion warning/error
mm-modem-oma.c:400:51: error: implicit conversion from enumeration type 'MMOmaSessionType' to different enumeration type 'MMOmaFeature'
      [-Werror,-Wenum-conversion]
    g_return_val_if_fail (MM_IS_MODEM_OMA (self), MM_OMA_SESSION_TYPE_UNKNOWN);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/glib-2.0/glib/gmessages.h:382:11: note: expanded from macro 'g_return_val_if_fail'
         return (val);                                                  \
         ~~~~~~  ^~~

This should be MMOmaFeature, not MMOmaSessionType. The end result is the same,
as both are 0.
2016-03-25 11:14:00 +01:00
Aleksander Morgado d7a643b16a libmm-glib,modem-voice: fix unknown methods in documentation
html/MMCallProperties.html:141: warning: no link for: 'mm-modem-voice-create' -> (<code class="function">mm_modem_voice_create()</code>).
    html/MMCallProperties.html:141: warning: no link for: 'mm-modem-voice-create-sync' -> (<code class="function">mm_modem_voice_create_sync()</code>).
    html/MMModemVoice.html:379: warning: no link for: 'mm-modem-voice-delete-finish' -> (<code class="function">mm_modem_voice_delete_finish()</code>).
    html/MMModemVoice.html:380: warning: no link for: 'mm-modem-voice-delete-sync' -> (<code class="function">mm_modem_voice_delete_sync()</code>).
2016-03-16 18:26:33 +01:00
Aleksander Morgado 4055488fd0 libmm-glib,modem-location: fix unknown method in documentation
html/MMModemLocation.html:516: warning: no link for: 'mm-modem-dup-supl-server' -> (<code class="function">mm_modem_dup_supl_server()</code>).
2016-03-16 18:13:18 +01:00
Aleksander Morgado 93bf189fa2 build,libmm-glib: built headers shouldn't be included in dist 2016-03-15 19:15:25 +01:00
Aleksander Morgado eeb9e2bdcc build: end all multiline list variables with $(NULL)
So that appending a new item in the list only inserts one new line (i.e. the
last $(NULL) is the last item always).
2016-03-15 19:15:25 +01:00
Aleksander Morgado 3bac0a17f5 build,libmm-glib: fix gdbus-codegen rules
The rule with multiple targets means that for each of the target the command
specified is run; not that a single run of the command generates all the targets
specified.

So, generate the .c file with the command, and make the .h and the .xml files
a side-effect of the .c generation.
2016-03-15 19:15:25 +01:00
Dan Williams 0512a820cd libmm-glib: make C++ happy by not using 'class' 2016-01-20 17:06:33 -06:00
Aleksander Morgado 6c35878f12 location: support updating the GPS refresh time
The default setup uses a refresh time of 30s, which means that even if the GPS
location updates are received at a higher frequency, the DBus interface will
still expose at most one update every 30s.

This patch includes a new "SetGpsRefreshTime()" method in the Location
interface, which takes a single 'u' parameter, specifying the refresh rate to
use, in seconds. This method also allows 0 being passed, which will make the
implementation to publish the GPS location updates are soon as ModemManager
detects them.

Along with the new method, a "GpsRefreshTime" read-only property is exposed
to specify the refresh time in effect.

The new method and property will only be applicable if the device has GPS
capabilities.

https://bugs.freedesktop.org/show_bug.cgi?id=89924
2015-12-19 12:22:30 +01:00