[gtk+] broadway: Proper handling of http port and display nr



commit 3558e655b40c4e8c4b998553727d02bd44de5e66
Author: Alexander Larsson <alexl redhat com>
Date:   Sun Dec 23 23:05:05 2012 +0100

    broadway: Proper handling of http port and display nr

 gdk/broadway/broadwayd.c           |   47 ++++++++++++++++++++++++++++++++----
 gdk/broadway/gdkdisplay-broadway.c |    6 ++++-
 2 files changed, 47 insertions(+), 6 deletions(-)
---
diff --git a/gdk/broadway/broadwayd.c b/gdk/broadway/broadwayd.c
index 62685ad..c4ae7be 100644
--- a/gdk/broadway/broadwayd.c
+++ b/gdk/broadway/broadwayd.c
@@ -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);
diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c
index ef3084c..8a3bf65 100644
--- a/gdk/broadway/gdkdisplay-broadway.c
+++ b/gdk/broadway/gdkdisplay-broadway.c
@@ -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;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]