gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r30832 - msh/src


From: gnunet
Subject: [GNUnet-SVN] r30832 - msh/src
Date: Wed, 20 Nov 2013 22:15:38 +0100

Author: harsha
Date: 2013-11-20 22:15:37 +0100 (Wed, 20 Nov 2013)
New Revision: 30832

Modified:
   msh/src/msh.c
   msh/src/mshd.c
Log:
- accept connection before forking


Modified: msh/src/msh.c
===================================================================
--- msh/src/msh.c       2013-11-20 16:56:06 UTC (rev 30831)
+++ msh/src/msh.c       2013-11-20 21:15:37 UTC (rev 30832)
@@ -525,7 +525,7 @@
 static void
 target_connect ()
 {
-  struct MSH_MSG_RunCmd *msg;
+  struct MSH_MSG_SessionOpen *msg;
   struct GNUNET_CONFIGURATION_Handle *cfg;
   uint16_t size;
 
@@ -537,11 +537,15 @@
   ctx_remote.cfg = cfg;
   ctx_remote.conn = GNUNET_CLIENT_connect (MSHD_REMOTE, ctx_remote.cfg);
   GNUNET_assert (NULL != ctx_remote.conn);
-  size = sizeof (struct MSH_MSG_RunCmd) + cmdstr_len;
+  size = sizeof (struct MSH_MSG_SessionOpen);
   msg = GNUNET_malloc (size);
   msg->header.size = htons (size);
-  msg->header.type = htons (MSH_MTYPE_RUNCMD);
-  (void) memcpy (msg->cmd, cmdstr, cmdstr_len);
+  msg->header.type = htons (MSH_MTYPE_SESSION_OPEN);
+  //(void) memcpy (msg->cmd, cmdstr, cmdstr_len);
+  if (!disable_pty && can_pty)
+    msg->type = htonl (MSH_SESSION_TYPE_INTERACTIVE);
+  else
+    msg->type = htonl (MSH_SESSION_TYPE_NONINTERACTIVE);
   queue_message (&ctx_remote, &msg->header);
   GNUNET_CLIENT_receive (ctx_remote.conn, &dispatch, &ctx_remote,
                          GNUNET_TIME_UNIT_FOREVER_REL);

Modified: msh/src/mshd.c
===================================================================
--- msh/src/mshd.c      2013-11-20 16:56:06 UTC (rev 30831)
+++ msh/src/mshd.c      2013-11-20 21:15:37 UTC (rev 30832)
@@ -459,26 +459,27 @@
  * it then forks and execs the remote command.
  */
 static pid_t
-spawn_worker ()
+spawn_worker (struct GNUNET_CONNECTION_Handle *conn)
 {
-  struct GNUNET_NETWORK_Handle *sock;
-  struct GNUNET_CONNECTION_Handle *conn;
   pid_t ret;
+  int listen_fd;
 
   ret = fork ();
   if (0 != ret)
+  {
+    GNUNET_CONNECTION_destroy (conn);
     return ret;
+  }
   /* Child process continues here */
   GNUNET_assert (MODE_SERV == mode);
-  GNUNET_assert (NULL != listen_socket);
   GNUNET_SCHEDULER_cancel (shutdown_task);
   shutdown_task = GNUNET_SCHEDULER_NO_TASK;
   do_shutdown (NULL, NULL);
-  sock = GNUNET_NETWORK_socket_accept (listen_socket, NULL, NULL);
-  conn = GNUNET_CONNECTION_create_from_existing (sock);
   mode = MODE_WORKER;
   init_daemon_server ();
   daemon_server_add_connection (conn);
+  shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
+                                                &do_shutdown, NULL);
   return 0;
 }
 
@@ -519,7 +520,8 @@
     GNUNET_CONTAINER_DLL_insert_tail (rhead, rtail, rctx);    
     break;
   case MODE_SERV:
-    pid = spawn_worker ();
+    conn = GNUNET_CONNECTION_create_from_accept (NULL, NULL, listen_socket);
+    pid = spawn_worker (conn);
     if (-1 == pid)
     {
       GNUNET_break (0);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]