diff options
Diffstat (limited to 'src/ivyd.c')
-rw-r--r-- | src/ivyd.c | 49 |
1 files changed, 29 insertions, 20 deletions
@@ -37,7 +37,6 @@ const char* const servicename = "ivyd"; const char* const port_env_variable = "INIVYD_PORT"; const int default_port = DEFAULT_INIVYD_PORT; -static char * HomeDir; int debug = 0; static void @@ -54,7 +53,7 @@ Usage (const char* progname) * Envoie un numero de port au super-serveur de la machine locale */ int -SendPort (int port) +SendPort (int key, int port) { struct servent *serv; u_short serv_port; @@ -81,7 +80,11 @@ SendPort (int port) sin.sin_port = serv_port; sin.sin_addr.s_addr = LOCALHOST; - msg.msg_uid = getuid (); +#if 0 + msg.msg_key = getuid (); +#else + msg.msg_key = key; +#endif msg.msg_port = port; msg.msg_type = MSG_SERVER; @@ -104,7 +107,7 @@ failed: int -InitSocket () +InitSocket (int key) { int s, i; struct sockaddr_in addr; @@ -134,7 +137,7 @@ InitSocket () if (debug) printf ("Ivyd listens on port %d\n", ntohs (addr.sin_port)); - if (! SendPort (addr.sin_port)) { + if (! SendPort (key, addr.sin_port)) { fprintf (stderr, "No Ivyd port server. Continuing with port = %d\n", ntohs (addr.sin_port)); } @@ -173,7 +176,8 @@ HandleRequests (void* ch, int fd, void* data) struct sockaddr_in addr; int len = sizeof (addr); - fprintf (stderr, "REQUEST on %d\n", fd); + if (debug) + fprintf (stderr, "REQUEST on %d\n", fd); /* retrieve request */ while (n > 0) { @@ -202,7 +206,8 @@ HandleRequests (void* ch, int fd, void* data) ans.ok = 1; write ( #endif - fprintf (stderr, "REQUEST [%s]\n", req.buffer); + if (debug) + fprintf (stderr, "REQUEST [%s]\n", req.buffer); IvySendMsg (req.buffer); } @@ -212,16 +217,28 @@ HandleConnections (void* ch, int fd, void* data) static struct sockaddr sa; static int acc; int newfd = accept (fd, &sa, &acc); - fprintf (stderr, "CONNECTION %d\n", newfd); + if (debug) + fprintf (stderr, "CONNECTION %d\n", newfd); IvyChannelSetUp (newfd, 0, 0, HandleRequests); } +int +ExtractPort (const char* bus) +{ + int res = DEFAULT_BUS; + const char* p; + if (bus && (p = index (bus, ':'))) { + res = atoi (p+1); + } + return res; +} void main (int argc, char **argv) { int sock; char busbuf [128]; + int busport; const char* bus = 0; int c; @@ -245,22 +262,14 @@ main (int argc, char **argv) if (fork ()) exit (0); + /* determine port in bus address */ + busport = ExtractPort (bus); + /* create server port */ - sock = InitSocket (); + sock = InitSocket (busport); signal (SIGTERM, exit); /* pour flinguer le serveur */ -#if 0 - /* - * Charger le fichier de personnalisation. - */ - HomeDir = getenv ("HOME"); - - if (!HomeDir || !*HomeDir) - fprintf (stderr, "%s: No HOME environment variable.\n", argv0); - else - StartUp (HomeDir); -#endif /* Ivy initialization and main loop */ IvyInit ("IVYD", 0, 0, 0, 0, 0); |