aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/mmcli-manager.c18
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt1
-rw-r--r--introspection/org.freedesktop.ModemManager1.xml7
-rw-r--r--libmm-glib/mm-manager.c29
-rw-r--r--libmm-glib/mm-manager.h2
-rw-r--r--src/mm-base-manager.c2
6 files changed, 54 insertions, 5 deletions
diff --git a/cli/mmcli-manager.c b/cli/mmcli-manager.c
index 41bda211..810b0aa3 100644
--- a/cli/mmcli-manager.c
+++ b/cli/mmcli-manager.c
@@ -51,6 +51,7 @@ typedef struct {
static Context *ctx;
/* Options */
+static gboolean get_daemon_version_flag;
static gboolean list_modems_flag;
static gboolean monitor_modems_flag;
static gboolean scan_modems_flag;
@@ -62,6 +63,10 @@ static gboolean report_kernel_event_auto_scan;
#endif
static GOptionEntry entries[] = {
+ { "get-daemon-version", 'B', 0, G_OPTION_ARG_NONE, &get_daemon_version_flag,
+ "Get ModemManager daemon version",
+ NULL
+ },
{ "set-logging", 'G', 0, G_OPTION_ARG_STRING, &set_logging_str,
"Set logging level in the ModemManager daemon",
"[ERR,WARN,INFO,DEBUG]",
@@ -116,7 +121,8 @@ mmcli_manager_options_enabled (void)
if (checked)
return !!n_actions;
- n_actions = (list_modems_flag +
+ n_actions = (get_daemon_version_flag +
+ list_modems_flag +
monitor_modems_flag +
scan_modems_flag +
!!set_logging_str +
@@ -131,7 +137,9 @@ mmcli_manager_options_enabled (void)
exit (EXIT_FAILURE);
}
- if (monitor_modems_flag) {
+ if (get_daemon_version_flag)
+ mmcli_force_sync_operation ();
+ else if (monitor_modems_flag) {
if (mmcli_output_get () != MMC_OUTPUT_TYPE_HUMAN) {
g_printerr ("error: modem monitoring not available in keyvalue output\n");
exit (EXIT_FAILURE);
@@ -495,6 +503,12 @@ mmcli_manager_run_synchronous (GDBusConnection *connection)
ctx = g_new0 (Context, 1);
ctx->manager = mmcli_get_manager_sync (connection);
+ /* Get daemon version? */
+ if (get_daemon_version_flag) {
+ g_print ("ModemManager daemon %s running\n", mm_manager_get_version (ctx->manager));
+ return;
+ }
+
/* Setup operation timeout */
mmcli_force_operation_timeout (mm_manager_peek_proxy (ctx->manager));
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index 81e9f1e4..69e0731d 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -14,6 +14,7 @@ mm_manager_new
mm_manager_new_finish
mm_manager_new_sync
<SUBSECTION Methods>
+mm_manager_get_version
mm_manager_scan_devices
mm_manager_scan_devices_finish
mm_manager_scan_devices_sync
diff --git a/introspection/org.freedesktop.ModemManager1.xml b/introspection/org.freedesktop.ModemManager1.xml
index 49503c1d..4d7a4e84 100644
--- a/introspection/org.freedesktop.ModemManager1.xml
+++ b/introspection/org.freedesktop.ModemManager1.xml
@@ -106,5 +106,12 @@
<arg name="properties" type="a{sv}" direction="in" />
</method>
+ <!--
+ Version:
+
+ The runtime version of the ModemManager daemon.
+ -->
+ <property name="Version" type="s" access="read" />
+
</interface>
</node>
diff --git a/libmm-glib/mm-manager.c b/libmm-glib/mm-manager.c
index 9276c159..e33ec038 100644
--- a/libmm-glib/mm-manager.c
+++ b/libmm-glib/mm-manager.c
@@ -17,14 +17,13 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2011 - 2012 Aleksander Morgado <aleksander@gnu.org>
* Copyright (C) 2011 - 2012 Google, Inc.
- *
- * Author: Aleksander Morgado <aleksander@lanedo.com>
+ * Copyright (C) 2011 - 2018 Aleksander Morgado <aleksander@aleksander.es>
*/
#include <ModemManager.h>
+#include "mm-helpers.h"
#include "mm-errors-types.h"
#include "mm-gdbus-manager.h"
#include "mm-manager.h"
@@ -266,6 +265,30 @@ mm_manager_get_proxy (MMManager *manager)
/*****************************************************************************/
/**
+ * mm_manager_get_version:
+ * @manager: A #MMManager.
+ *
+ * Gets the ModemManager version, as reported by the daemon.
+ *
+ * It is safe to assume this value never changes during runtime.
+ *
+ * Returns: (transfer none): The version, or %NULL if none available. Do not free the returned value, it belongs to @self.
+ */
+const gchar *
+mm_manager_get_version (MMManager *manager)
+{
+ g_return_val_if_fail (MM_IS_MANAGER (manager), NULL);
+
+ if (!ensure_modem_manager1_proxy (manager, NULL))
+ return NULL;
+
+ RETURN_NON_EMPTY_CONSTANT_STRING (
+ mm_gdbus_org_freedesktop_modem_manager1_get_version (manager->priv->manager_iface_proxy));
+}
+
+/*****************************************************************************/
+
+/**
* mm_manager_set_logging_finish:
* @manager: A #MMManager.
* @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_set_logging().
diff --git a/libmm-glib/mm-manager.h b/libmm-glib/mm-manager.h
index 57a129f5..fc79a984 100644
--- a/libmm-glib/mm-manager.h
+++ b/libmm-glib/mm-manager.h
@@ -85,6 +85,8 @@ MMManager *mm_manager_new_sync (
GDBusProxy *mm_manager_peek_proxy (MMManager *manager);
GDBusProxy *mm_manager_get_proxy (MMManager *manager);
+const gchar *mm_manager_get_version (MMManager *manager);
+
void mm_manager_set_logging (MMManager *manager,
const gchar *level,
GCancellable *cancellable,
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c
index be92b5e2..b2dabfdd 100644
--- a/src/mm-base-manager.c
+++ b/src/mm-base-manager.c
@@ -36,6 +36,7 @@
#include <mm-gdbus-manager.h>
#include <mm-gdbus-test.h>
+#include "mm-context.h"
#include "mm-base-manager.h"
#include "mm-daemon-enums-types.h"
#include "mm-device.h"
@@ -988,6 +989,7 @@ mm_base_manager_new (GDBusConnection *connection,
MM_BASE_MANAGER_FILTER_POLICY, filter_policy,
MM_BASE_MANAGER_INITIAL_KERNEL_EVENTS, initial_kernel_events,
MM_BASE_MANAGER_ENABLE_TEST, enable_test,
+ "version", MM_DIST_VERSION,
NULL);
}