summaryrefslogtreecommitdiff
path: root/src/ivyd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ivyd.c')
-rw-r--r--src/ivyd.c49
1 files changed, 29 insertions, 20 deletions
diff --git a/src/ivyd.c b/src/ivyd.c
index 6aac230..6dfc27a 100644
--- a/src/ivyd.c
+++ b/src/ivyd.c
@@ -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);