From d1cb96c4a8bac3c220e08a4b60aab8c4e8b6f38d Mon Sep 17 00:00:00 2001
From: marha <marha@users.sourceforge.net>
Date: Tue, 1 Feb 2011 16:40:17 +0000
Subject: Added host selection menu in case -broadcast was specified

---
 xorg-server/os/xdmcp.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 60 insertions(+), 1 deletion(-)

(limited to 'xorg-server/os')

diff --git a/xorg-server/os/xdmcp.c b/xorg-server/os/xdmcp.c
index 6429b8b77..83e391319 100644
--- a/xorg-server/os/xdmcp.c
+++ b/xorg-server/os/xdmcp.c
@@ -776,6 +776,37 @@ XdmcpSelectHost(
  * selects the first host to respond with willing message.
  */
 
+#ifdef _MSC_VER
+void DisplayXdmcpHostsDialog(void);
+int XdmcpHostAddName(const char *HostName, int HostIndex);
+
+struct hostinfo
+{
+  struct sockaddr *from;
+  int              fromlen;
+  ARRAY8           AuthenticationName;
+};
+static int g_NrHosts;
+static struct hostinfo *g_Hosts;
+
+void XdmcpHostSelected(int HostIdx)
+{
+  int i;
+
+    /* Connect to the selected host */
+  XdmcpSelectHost(g_Hosts[HostIdx].from, g_Hosts[HostIdx].fromlen, &g_Hosts[HostIdx].AuthenticationName);
+
+  for (i=0; i<g_NrHosts; i++)
+  {
+    free(g_Hosts[i].from);
+    free(g_Hosts[i].AuthenticationName.data);
+  }
+  free(g_Hosts);
+  g_Hosts=NULL;
+  g_NrHosts=0;
+}
+#endif
+
 /*ARGSUSED*/
 static void
 XdmcpAddHost(
@@ -785,7 +816,35 @@ XdmcpAddHost(
     ARRAY8Ptr		hostname,
     ARRAY8Ptr		status)
 {
-    XdmcpSelectHost(from, fromlen, AuthenticationName);
+#ifdef _MSC_VER
+  char szHostName[100];
+  int HostIdx;
+  
+  memcpy(szHostName,hostname->data,hostname->length);
+  szHostName[hostname->length]=0;
+
+  DisplayXdmcpHostsDialog();  /* Display the dialog if not already displayed */
+  
+  HostIdx=XdmcpHostAddName(szHostName, g_NrHosts);
+  if (HostIdx==-1)
+  {
+    HostIdx=g_NrHosts;
+    g_NrHosts++;
+    g_Hosts=realloc(g_Hosts,g_NrHosts*sizeof(*g_Hosts));
+    g_Hosts[HostIdx].AuthenticationName.data=NULL;
+    g_Hosts[HostIdx].from=NULL;
+  }
+
+  g_Hosts[HostIdx].fromlen=fromlen;
+  g_Hosts[HostIdx].from=realloc(g_Hosts[HostIdx].from,g_Hosts[HostIdx].fromlen);
+  memcpy(g_Hosts[HostIdx].from,from,fromlen);
+
+  g_Hosts[HostIdx].AuthenticationName.length=AuthenticationName->length;
+  g_Hosts[HostIdx].AuthenticationName.data=realloc(g_Hosts[HostIdx].AuthenticationName.data,AuthenticationName->length);
+  memcpy(g_Hosts[HostIdx].AuthenticationName.data,AuthenticationName->data,AuthenticationName->length);
+#else
+  XdmcpSelectHost(from, fromlen, AuthenticationName);
+#endif
 }
 
 /*
-- 
cgit v1.2.3