Merge remote-tracking branch 'cros/upstream' into 'cros/master'
diff --git a/src/libmbim-glib/mbim-message.c b/src/libmbim-glib/mbim-message.c
index 5ca8ef5..b625ee5 100644
--- a/src/libmbim-glib/mbim-message.c
+++ b/src/libmbim-glib/mbim-message.c
@@ -1811,9 +1811,8 @@
     const MbimUuid *service_id;
 
     /* Known service required */
-    g_return_val_if_fail (service > MBIM_SERVICE_INVALID, FALSE);
-    g_return_val_if_fail (service <= MBIM_SERVICE_PROXY_CONTROL, FALSE);
     service_id = mbim_uuid_from_service (service);
+    g_return_val_if_fail (service_id != NULL, NULL);
 
     self = _mbim_message_allocate (MBIM_MESSAGE_TYPE_COMMAND,
                                    transaction_id,
diff --git a/src/libmbim-glib/mbim-uuid.c b/src/libmbim-glib/mbim-uuid.c
index 81f6f7a..6497645 100644
--- a/src/libmbim-glib/mbim-uuid.c
+++ b/src/libmbim-glib/mbim-uuid.c
@@ -356,6 +356,9 @@
  *
  * Get the UUID corresponding to @service.
  *
+ * The @service needs to be either a generic one (including #MBIM_SERVICE_INVALID)
+ * or a custom registered one.
+ *
  * Returns: (transfer none): a #MbimUuid.
  */
 const MbimUuid *
@@ -396,7 +399,7 @@
             if (service == ((MbimCustomService *)l->data)->service_id)
                 return &((MbimCustomService *)l->data)->uuid;
         }
-        g_assert_not_reached ();
+        g_return_val_if_reached (NULL);
     }
 }
 
diff --git a/src/libmbim-glib/test/test-message.c b/src/libmbim-glib/test/test-message.c
index 6908eaf..a962db6 100644
--- a/src/libmbim-glib/test/test-message.c
+++ b/src/libmbim-glib/test/test-message.c
@@ -149,6 +149,36 @@
 }
 
 static void
+test_message_command_custom_service (void)
+{
+    static const gchar *nick = "My custom service";
+    static const MbimUuid uuid_custom = {
+        .a = { 0x11, 0x22, 0x33, 0x44 },
+        .b = { 0x11, 0x11 },
+        .c = { 0x22, 0x22 },
+        .d = { 0x33, 0x33 },
+        .e = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
+    };
+    guint service;
+    MbimMessage *message;
+
+    service = mbim_register_custom_service (&uuid_custom, nick);
+    g_assert (mbim_service_id_is_custom (service));
+
+    message = mbim_message_command_new (0x01,
+                                        service,
+                                        0x11223344,
+                                        MBIM_MESSAGE_COMMAND_TYPE_QUERY);
+    g_assert (message);
+    g_assert_cmpuint (mbim_message_command_get_service (message), ==, service);
+    g_assert (mbim_uuid_cmp (mbim_message_command_get_service_id (message), &uuid_custom));
+    g_assert_cmpuint (mbim_message_command_get_cid (message), ==, 0x11223344);
+    g_assert_cmpuint (mbim_message_command_get_command_type (message), ==, MBIM_MESSAGE_COMMAND_TYPE_QUERY);
+
+    mbim_message_unref (message);
+}
+
+static void
 test_message_command_done (void)
 {
     MbimMessage *message;
@@ -195,13 +225,14 @@
 {
     g_test_init (&argc, &argv, NULL);
 
-    g_test_add_func ("/libmbim-glib/message/open",              test_message_open);
-    g_test_add_func ("/libmbim-glib/message/open-done",         test_message_open_done);
-    g_test_add_func ("/libmbim-glib/message/close",             test_message_close);
-    g_test_add_func ("/libmbim-glib/message/close-done",        test_message_close_done);
-    g_test_add_func ("/libmbim-glib/message/command/empty",     test_message_command_empty);
-    g_test_add_func ("/libmbim-glib/message/command/not-empty", test_message_command_not_empty);
-    g_test_add_func ("/libmbim-glib/message/command-done",      test_message_command_done);
+    g_test_add_func ("/libmbim-glib/message/open",                   test_message_open);
+    g_test_add_func ("/libmbim-glib/message/open-done",              test_message_open_done);
+    g_test_add_func ("/libmbim-glib/message/close",                  test_message_close);
+    g_test_add_func ("/libmbim-glib/message/close-done",             test_message_close_done);
+    g_test_add_func ("/libmbim-glib/message/command/empty",          test_message_command_empty);
+    g_test_add_func ("/libmbim-glib/message/command/not-empty",      test_message_command_not_empty);
+    g_test_add_func ("/libmbim-glib/message/command/custom-service", test_message_command_custom_service);
+    g_test_add_func ("/libmbim-glib/message/command-done",           test_message_command_done);
 
     return g_test_run ();
 }
diff --git a/utils/mbim-network.in b/utils/mbim-network.in
index 5ea8dd6..48d6e11 100755
--- a/utils/mbim-network.in
+++ b/utils/mbim-network.in
@@ -21,12 +21,14 @@
 
 print_usage ()
 {
-    echo "usage: $0 [DEVICE] [COMMAND]"
+    echo "usage: $0 [OPTIONS] [DEVICE] [COMMAND]"
 }
 
 help ()
 {
-    echo "Usage: mbim-network [OPTIONS] [DEVICE] [COMMAND] - Simple network management of MBIM devices"
+    echo "Usage: mbim-network [OPTIONS] [DEVICE] [COMMAND]"
+    echo
+    echo "Simple network management of MBIM devices"
     echo
     echo "Commands:"
     echo "  start           Start network connection"
@@ -37,12 +39,30 @@
     echo "  --help          Show help options"
     echo "  --version       Show version"
     echo
+    echo "Notes:"
+    echo
+    echo "   1) [DEVICE] is given as the full path to the cdc-wdm character"
+    echo "   device, e.g.:"
+    echo "      /dev/cdc-wdm0"
+    echo
+    echo "   2) The mbim-network script requires a profile to be available"
+    echo "   in the following path:"
+    echo "      /etc/mbim-network.conf"
+    echo
+    echo "   3) The APN to use should be configured in the profile, in the"
+    echo "   following way (e.g. assuming APN is called 'internet':"
+    echo "      APN=internet"
+    echo
+    echo "   4) Once the mbim-network script reports a successful connection"
+    echo "   you still need to run a DHCP client on the associated WWAN network"
+    echo "   interface."
+    echo
 }
 
 version ()
 {
     echo "mbim-network @VERSION@"
-    echo "Copyright (2013) Aleksander Morgado"
+    echo "Copyright (2013-2015) Aleksander Morgado"
     echo "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>"
     echo "This is free software: you are free to change and redistribute it."
     echo "There is NO WARRANTY, to the extent permitted by law."