]> Pileus Git - ~andy/gtk/commitdiff
broadway: Proper handling of http port and display nr
authorAlexander Larsson <alexl@redhat.com>
Sun, 23 Dec 2012 22:05:05 +0000 (23:05 +0100)
committerAlexander Larsson <alexl@redhat.com>
Thu, 27 Dec 2012 21:56:04 +0000 (22:56 +0100)
gdk/broadway/broadwayd.c
gdk/broadway/gdkdisplay-broadway.c

index 62685ad7deb53fd5a4ed9239316f5ce3e31683b9..c4ae7be48e3b0b7078d15bb61946be91a95f9be3 100644 (file)
@@ -1,7 +1,9 @@
+#include "config.h"
 #include <string.h>
 #include <sys/mman.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <stdlib.h>
 
 #include <glib.h>
 #include <gio/gio.h>
@@ -376,24 +378,59 @@ incoming_client (GSocketService    *service,
   return TRUE;
 }
 
+
 int
 main (int argc, char *argv[])
 {
-  GError *error;
+  GError *error = NULL;
+  GOptionContext *context;
   GMainLoop *loop;
   GSocketAddress *address;
   GSocketService *listener;
-  char *path;
+  char *path, *base;
+  int http_port = 0;
+  int display = 1;
+  const GOptionEntry entries[] = {
+    { "port", 'p', 0, G_OPTION_ARG_INT, &http_port, "Httpd port", "PORT" },
+    { NULL }
+  };
+
+  context = g_option_context_new ("[:DISPLAY] - broadway display daemon");
+  g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
+  if (!g_option_context_parse (context, &argc, &argv, &error))
+    {
+      g_printerr ("option parsing failed: %s\n", error->message);
+      exit (1);
+    }
+
+  if (argc > 1)
+    {
+      if (*argv[1] != ':')
+       {
+         g_printerr ("Usage broadwayd [:DISPLAY]\n");
+         exit (1);
+       }
+      display = strtol(argv[1]+1, NULL, 10);
+      if (display == 0)
+       {
+         g_printerr ("Failed to parse display num %s\n", argv[1]);
+         exit (1);
+       }
+    }
+
+  if (http_port == 0)
+    http_port = 8080 + (display - 1);
 
-  error = NULL;
-  server = _gdk_broadway_server_new (8080, &error);
+  server = _gdk_broadway_server_new (http_port, &error);
   if (server == NULL)
     {
       g_printerr ("%s\n", error->message);
       return 1;
     }
 
-  path = g_build_filename (g_get_user_runtime_dir (), "broadway1.socket", NULL);
+  base = g_strdup_printf ("broadway%d.socket", display);
+  path = g_build_filename (g_get_user_runtime_dir (), base, NULL);
+  g_free (base);
   g_print ("Listening on %s\n", path);
   address = g_unix_socket_address_new_with_type (path, -1,
                                                 G_UNIX_SOCKET_ADDRESS_ABSTRACT);
index ef3084c8fcfb643f9e3b74c076239b4708f9f715..8a3bf6500a8a54b85f37010dd9fe7c0a5257af0b 100644 (file)
@@ -157,7 +157,11 @@ _gdk_broadway_display_open (const gchar *display_name)
 
   port = 0;
   if (display_name != NULL)
-    port = strtol(display_name, NULL, 10);
+    {
+      if (*display_name == ':')
+       display_name++;
+      port = strtol(display_name, NULL, 10);
+    }
   if (port == 0)
     port = 1;