+static gboolean
+handle_command_line (int argc,
+ char **argv,
+ GDBusConnection *connection)
+{
+ GOptionContext *context = g_option_context_new (NULL);
+ LAHandler *legacy_app_handler;
+ gboolean do_register = FALSE;
+ gboolean do_deregister = FALSE;
+ GError *error = NULL;
+ gchar *unit = NULL;
+ gchar *log_message = NULL;
+ gchar *mode = NULL;
+ gint timeout = 0;
+
+ GOptionEntry entries[] = {
+ {"deregister", 0, 0, G_OPTION_ARG_NONE, &do_deregister, NULL, NULL},
+ {"register", 0, 0, G_OPTION_ARG_NONE, &do_register, NULL, NULL},
+ {"unit", 0, 0, G_OPTION_ARG_STRING, &unit, NULL, NULL},
+ {"timeout", 0, 0, G_OPTION_ARG_INT, &timeout, NULL, NULL},
+ {"shutdown-mode", 0, 0, G_OPTION_ARG_STRING, &mode, NULL, NULL},
+ {NULL},
+ };
+
+ /* set up the option context */
+ g_option_context_set_help_enabled (context, FALSE);
+ g_option_context_add_main_entries (context, entries, NULL);
+
+ /* parse the arguments into argument data */
+ if (!g_option_context_parse (context, &argc, &argv, &error) || error != NULL)
+ {
+ /* an error occurred */
+ log_message =
+ g_strdup_printf ("Error occurred parsing arguments: %s\n", error->message);
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR, DLT_STRING (log_message));
+
+ g_error_free (error);
+ g_free (log_message);
+
+ return FALSE;
+ }
+ else if (do_register && !do_deregister)
+ {
+ if (unit == NULL || *unit == '\0' || timeout < 0)
+ {
+ /* register was called incorrectly */
+ log_message =
+ g_strdup_printf ("Invalid arguments for --register. A unit must be specified"
+ " and the timeout must be positive.");
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR, DLT_STRING (log_message));
+
+ g_free (log_message);
+
+ return FALSE;
+ }
+
+ /* get a legacy app handler interface */
+ legacy_app_handler =
+ la_handler_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE,
+ "org.genivi.LegacyAppHandler1",
+ "/org/genivi/LegacyAppHandler1", NULL, &error);
+ if (error != NULL)
+ {
+ /* failed to connect to the legacy app handler */
+ log_message =
+ g_strdup_printf ("Error occurred connecting to legacy app handler "
+ "interface: %s", error->message);
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR, DLT_STRING (log_message));
+
+ g_free (log_message);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ /* call the legacy app handler's Register() method */
+ la_handler_call_register_sync (legacy_app_handler, unit,
+ mode ? mode : "normal", (guint) timeout, NULL,
+ &error);
+ if (error != NULL)
+ {
+ /* failed to register the legacy app */
+ log_message = g_strdup_printf ("Error occurred registering legacy app: %s",
+ error->message);
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR, DLT_STRING (log_message));
+
+ g_object_unref (legacy_app_handler);
+ g_free (log_message);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ g_object_unref (legacy_app_handler);
+
+ return TRUE;
+
+ }
+ else if (do_deregister && !do_register)
+ {
+ if (unit == NULL || *unit == '\0')
+ {
+ /* deregister was called incorrectly */
+ log_message =
+ g_strdup_printf ("Invalid arguments for --deregister. A unit must be "
+ "specified.");
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR, DLT_STRING (log_message));
+
+ g_free (log_message);
+
+ return FALSE;
+ }
+
+ /* get a legacy app handler interface */
+ legacy_app_handler =
+ la_handler_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_NONE,
+ "org.genivi.LegacyAppHandler1",
+ "/org/genivi/LegacyAppHandler1", NULL, &error);
+ if (error != NULL)
+ {
+ log_message =
+ g_strdup_printf ("Error occurred connecting to legacy app handler "
+ "interface: %s", error->message);
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR, DLT_STRING (log_message));
+
+ g_free (log_message);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ /* call the legacy app handler's Deregister() method */
+ la_handler_call_deregister_sync (legacy_app_handler, unit, NULL, &error);
+ if (error != NULL)
+ {
+ log_message = g_strdup_printf ("Error occurred deregistering legacy "
+ "app: %s", error->message);
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR, DLT_STRING (log_message));
+
+ g_object_unref (legacy_app_handler);
+ g_free (log_message);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ g_object_unref (legacy_app_handler);
+
+ return TRUE;
+ }
+ else if (do_register && do_deregister)
+ {
+ log_message =
+ g_strdup_printf ("Invalid arguments. Please choose either --register or "
+ "--deregister.");
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR, DLT_STRING (log_message));
+
+ g_free (log_message);
+
+ return FALSE;
+ }
+ else
+ {
+ DLT_LOG (la_handler_context, DLT_LOG_ERROR,
+ DLT_STRING ("No arguments recognised"));
+ return FALSE;
+ }
+}
+
+
+