chiark / gitweb /
*** empty log message ***
authorjames <james>
Wed, 20 Feb 2008 18:31:44 +0000 (18:31 +0000)
committerjames <james>
Wed, 20 Feb 2008 18:31:44 +0000 (18:31 +0000)
13 files changed:
apps/Makefile.am
apps/client.c [deleted file]
apps/client.h [deleted file]
apps/clients.c
apps/mainloop.c
apps/mainloop.h [new file with mode: 0644]
apps/sympathy.c
apps/sympathyd.c [deleted file]
apps/usage.c
src/prototypes.h
src/symsocket.c
src/symsocket.h
src/tty.c

index 57a6f69d9f524c8068ad900cb0e0f9589bd89aa3..f81709b7ad54d5c2668780c6d1920a4c0721706f 100644 (file)
@@ -7,6 +7,9 @@
 # $Id$
 #
 # $Log$
+# Revision 1.9  2008/02/20 18:33:37  james
+# *** empty log message ***
+#
 # Revision 1.8  2008/02/20 18:31:44  james
 # *** empty log message ***
 #
@@ -41,10 +44,7 @@ noinst_PROGRAMS = sympathyd sympathy
 noinst_HEADERS=clients.h client.h
 
 sympathy_SOURCES = sympathy.c usage.c clients.c mainloop.c
-sympathy_LDADD = ../src/libsympathy.a  -lutil
-
-sympathyd_SOURCES = sympathyd.c clients.c client.c
-sympathyd_LDADD = ../src/libsympathy.a  -lutil
+sympathy_LDADD = ../src/libsympathy.la  -lutil
 
 AM_CFLAGS=-g -Werror
 
diff --git a/apps/client.c b/apps/client.c
deleted file mode 100644 (file)
index 93ade70..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * client.c:
- *
- * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
- * All rights reserved.
- *
- */
-
-static char rcsid[] = "$Id$";
-
-/*
- * $Log$
- * Revision 1.6  2008/02/15 03:32:07  james
- * *** empty log message ***
- *
- * Revision 1.5  2008/02/14 10:34:47  james
- * *** empty log message ***
- *
- * Revision 1.4  2008/02/14 10:34:30  james
- * *** empty log message ***
- *
- * Revision 1.3  2008/02/14 02:46:44  james
- * *** empty log message ***
- *
- * Revision 1.2  2008/02/14 00:57:58  james
- * *** empty log message ***
- *
- * Revision 1.1  2008/02/13 18:05:06  james
- * *** empty log message ***
- *
- */
-
-#include <sympathy.h>
-#include "client.h"
-
-  //vt102_status_line (v, "VT102 foo bar baz I'm the urban spaceman baby");
-
-static void
-server_msg (IPC_Msg * m, Context * c)
-{
-  switch (m->hdr.type)
-    {
-
-    case IPC_MSG_TYPE_NOOP:
-      break;
-    case IPC_MSG_TYPE_DEBUG:
-//          fprintf (stderr,"%p [%d] %s\n", m, m->hdr.size , m->debug.msg );
-      break;
-    case IPC_MSG_TYPE_HISTORY:
-      history_add (c->h, m->history.history.line);
-      break;
-    case IPC_MSG_TYPE_VT102:
-      if (sizeof (VT102) != m->vt102.len)
-        abort ();
-
-      *(c->v) = m->vt102.vt102;
-      break;
-    case IPC_MSG_TYPE_TERM:
-      vt102_parse (c, m->term.term, m->term.len);
-      break;
-    case IPC_MSG_TYPE_STATUS:
-      cmd_new_status (c->d, c, m->status.status);
-      break;
-    default:
-      fprintf (stderr, "Unhandeled message type %d\n", m->hdr.type);
-    }
-}
-
-void
-client (void)
-{
-  Socket *s;
-  fd_set rfds, wfds;
-
-  ANSI a = { 0 };
-  Context c;
-
-
-  s = socket_connect ("socket");
-
-  if (!s)
-    {
-      printf ("no socket");
-      return;
-    }
-
-  c.t = NULL;
-  c.v = vt102_new ();
-  c.h = history_new (200);
-  c.l = NULL;
-  c.k = keydis_ipc_new (s);
-  c.d = cmd_new ();
-
-  terminal_register_handlers ();
-  a.terminal = terminal_open (0, 1);
-
-  ansi_reset (&a, NULL);
-
-  for (;;)
-    {
-      struct timeval tv = { 0, 100000 };
-
-      if (c.d->disconnect)
-        break;
-
-      FD_ZERO (&rfds);
-      FD_ZERO (&wfds);
-
-      socket_pre_select (s, &rfds, &wfds);
-      tty_pre_select (a.terminal, &rfds, &wfds);
-
-      select (FD_SETSIZE, &rfds, &wfds, NULL, &tv);
-
-      if (socket_post_select (s, &rfds, &wfds))
-        break;
-
-      while (s->msg)
-        {
-          server_msg (s->msg, &c);
-          socket_consume_msg (s);
-        }
-
-      if (ansi_dispatch (&a, &c))
-        break;
-
-      ansi_update (&a, &c);
-
-    }
-  ansi_terminal_reset (&a);
-  terminal_atexit ();
-  printf ("QUAT\n");
-
-
-}
diff --git a/apps/client.h b/apps/client.h
deleted file mode 100644 (file)
index d3b650d..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * client.h:
- *
- * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
- * All rights reserved.
- *
- */
-
-/*
- * $Id$
- */
-
-/*
- * $Log$
- * Revision 1.3  2008/02/14 02:46:44  james
- * *** empty log message ***
- *
- * Revision 1.2  2008/02/14 00:57:58  james
- * *** empty log message ***
- *
- * Revision 1.1  2008/02/13 18:05:06  james
- * *** empty log message ***
- *
- */
-
-#ifndef __CLIENT_H__
-#define __CLIENT_H__
-
-void client (void);
-
-
-#endif /* __CLIENT_H__ */
index 04aafc1706b67b5e31082605bc18d6a743c31dcc..73bf65525bfb05363cd01532d8412fde1c313f96 100644 (file)
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.8  2008/02/20 18:31:44  james
+ * *** empty log message ***
+ *
  * Revision 1.7  2008/02/15 23:52:12  james
  * *** empty log message ***
  *
@@ -74,7 +77,9 @@ client_free (Client * c)
     socket_free (c->s);
 
   free (c);
+#if 0
   fprintf (stderr, "Client at %p freed\n", c);
+#endif
 }
 
 Client *
@@ -91,7 +96,9 @@ clients_new_client (Clients * cs, Socket * s, Context * ctx)
   cs->head = c;
   cs->n++;
 
+#if 0
   fprintf (stderr, "Client at %p created\n", c);
+#endif
 
 
   if (ipc_msg_send_debug (s, "new_client"))
index 851f2966af00ba191a1e60022b894aadedbb30c5..fd2947f8af97729d5fa382f988cb4eba0e69d43c 100644 (file)
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.5  2008/02/20 18:31:44  james
+ * *** empty log message ***
+ *
  * Revision 1.4  2008/02/20 17:18:33  james
  * *** empty log message ***
  *
@@ -62,8 +65,8 @@ static char rcsid[] = "$Id$";
 
 #include <sys/time.h>
 #include <sympathy.h>
+#include "mainloop.h"
 
-#include "client.h"
 #include "clients.h"
 
 typedef struct
@@ -233,11 +236,11 @@ check_status (Context * c, Clients * cs)
   status = get_status (c->t, cs);
   if (!memcmp (&status, &old_status, sizeof (status)))
     return;
-  old_status = status;
-
 
   log_line_changes (c, old_status.lines, status.lines);
 
+  old_status = status;
+
   ptr += sprintf (ptr, "CTRL-B ");
 
   t = c->t->name;
@@ -293,7 +296,7 @@ check_status (Context * c, Clients * cs)
   if (cs)
     send_status (cs, buf);
   else
-    cmd_new_status (c->d, c, m->status.status);
+    cmd_new_status (c->d, c, buf);
 
 }
 
@@ -317,7 +320,7 @@ msg_from_server (IPC_Msg * m, Context * c)
         abort ();
 
       *(c->v) = m->vt102.vt102;
-       //FIXME HTML hook
+      //FIXME HTML hook
       break;
     case IPC_MSG_TYPE_TERM:
       vt102_parse (c, m->term.term, m->term.len);
@@ -332,23 +335,22 @@ msg_from_server (IPC_Msg * m, Context * c)
 
 
 void
-mainloop (TTY * tty, Socket * server_socket, Socket * client_socket, Ansi * a,
-          Log * log)
+mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
+          ANSI * ansi, Log * log, int nhistory)
 {
   fd_set rfds, wfds;
-  Context c={0};
+  Context c = { 0 };
   Clients *clients;
 
 
   c.v = vt102_new ();
-  c.h = history_new (200);
+  c.h = history_new (nhistory);
   c.l = log;
-    /* are we being fed by a tty or a socket */
-    if (client_socket)
+  /* are we being fed by a tty or a socket */
+  if (client_socket)
     {
       if (server_socket)
         abort ();
-      c.s = client_socket;
       c.k = keydis_ipc_new (client_socket);
     }
   else
@@ -386,8 +388,12 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket, Ansi * a,
     {
       struct timeval tv = { 1, 0 };
 
-      /*update the status lines, locally or remotely*/
-      check_status (&c, clients);
+      if ((c.d) && (c.d->disconnect))
+        break;
+
+      /*update the status lines, locally or remotely */
+      if (c.t)
+        check_status (&c, clients);
 
       FD_ZERO (&rfds);
       FD_ZERO (&wfds);
@@ -414,7 +420,7 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket, Ansi * a,
         {
           Socket *new_client_socket;
           if (FD_ISSET (server_socket->fd, &rfds)
-              && ((new_client_socket = socket_accept (s))))
+              && ((new_client_socket = socket_accept (server_socket))))
             {
               {
                 Client *new_client;
@@ -444,14 +450,15 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket, Ansi * a,
 
           if (red)
             {
-              send_output (clients, buf, red);
+              if (clients)
+                send_output (clients, buf, red);
               vt102_parse (&c, buf, red);
             }
         }
 
 
 
-      /*any data from the server*/
+      /*any data from the server */
       if (client_socket)
         {
           if (socket_post_select (client_socket, &rfds, &wfds))
@@ -465,7 +472,7 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket, Ansi * a,
         }
 
 
-      /*update our local screen*/
+      /*update our local screen */
       if (ansi)
         {
           if (ansi_dispatch (ansi, &c))
@@ -476,8 +483,5 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket, Ansi * a,
     }
 
   if (clients)
-    {
-      clients_shutdown (clients);
-    }
-  printf ("QUAT\n");
+    clients_shutdown (clients);
 }
diff --git a/apps/mainloop.h b/apps/mainloop.h
new file mode 100644 (file)
index 0000000..23d6e12
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * mainloop.h:
+ *
+ * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
+ * All rights reserved.
+ *
+ */
+
+/*
+ * $Id$
+ */
+
+/*
+ * $Log$
+ * Revision 1.1  2008/02/20 18:33:37  james
+ * *** empty log message ***
+ *
+ */
+
+#ifndef __MAINLOOP_H__
+#define __MAINLOOP_H__
+
+#include <sympathy.h>
+
+void
+mainloop (TTY * tty, Socket * server_socket, Socket * client_socket, ANSI * a,
+          Log * log, int nhistory);
+
+#endif /* __MAINLOOP_H__ */
index 29cf0ace8f1c5fffb29405b44020d99a069b554e..a754b3dce44f83eaf7a921ec008b81fa5128d412 100644 (file)
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.8  2008/02/20 18:33:37  james
+ * *** empty log message ***
+ *
  * Revision 1.7  2008/02/20 18:31:44  james
  * *** empty log message ***
  *
@@ -303,11 +306,11 @@ main (int argc, char *argv[])
 
   if (oflags['n'])
     {
-      nhistory = safe_atoi (oargs['n']);
-      if (nhistory < 0)
+      history = safe_atoi (oargs['n']);
+      if (history < 0)
         fatal_moan ("cannot parse -n %s as an integer", oargs['n']);
 
-      if (!nhistory)
+      if (!history)
         fatal_moan ("agrument to -n must be greater than zero");
     }
 
@@ -468,7 +471,7 @@ main (int argc, char *argv[])
         }
     }
 
-  mainloop (tty, server_socket, client_socket, ansi, log, nhistory);
+  mainloop (tty, server_socket, client_socket, ansi, log, history);
 
   if (ansi)
     {
diff --git a/apps/sympathyd.c b/apps/sympathyd.c
deleted file mode 100644 (file)
index 65ef1f9..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * sympathy.c:
- *
- * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
- * All rights reserved.
- *
- */
-
-static char rcsid[] =
-  "$Id$";
-
-/*
- * $Log$
- * Revision 1.13  2008/02/15 23:52:12  james
- * *** empty log message ***
- *
- * Revision 1.12  2008/02/15 03:32:07  james
- * *** empty log message ***
- *
- * Revision 1.11  2008/02/14 16:21:17  james
- * *** empty log message ***
- *
- * Revision 1.10  2008/02/14 10:39:14  james
- * *** empty log message ***
- *
- * Revision 1.9  2008/02/14 10:34:47  james
- * *** empty log message ***
- *
- * Revision 1.8  2008/02/14 10:34:30  james
- * *** empty log message ***
- *
- * Revision 1.7  2008/02/14 02:46:44  james
- * *** empty log message ***
- *
- * Revision 1.6  2008/02/14 00:57:58  james
- * *** empty log message ***
- *
- * Revision 1.5  2008/02/13 18:05:06  james
- * *** empty log message ***
- *
- * Revision 1.4  2008/02/13 17:21:55  james
- * *** empty log message ***
- *
- * Revision 1.3  2008/02/08 15:06:52  james
- * *** empty log message ***
- *
- * Revision 1.2  2008/02/07 15:42:49  james
- * *** empty log message ***
- *
- * Revision 1.1  2008/02/05 14:25:49  james
- * *** empty log message ***
- *
- */
-
-#include <sys/time.h>
-#include <sympathy.h>
-
-#include "client.h"
-#include "clients.h"
-
-typedef struct
-{
-  int nclients;
-  int lines;
-  int baud;
-  int crtscts;
-  int cd_edge_sec;
-  int blocked;
-  int bootstrap;
-} Status;
-
-static Status
-get_status (TTY * t, Clients * cs)
-{
-  static struct timeval last_cd_edge = { 0 };
-  static int last_cd_state = -1;
-  int cd;
-  struct timeval now, dif;
-
-  TTY_Status tty_status = { 0 };
-  Status status;
-
-  tty_get_status (t, &tty_status);
-
-  status.bootstrap = 1;
-  status.nclients = cs->n;
-  status.lines = tty_status.lines;
-  status.baud = tty_status.baud;
-  status.crtscts = (tty_status.termios.c_cflag & CRTSCTS) ? 1 : 0;
-  status.blocked = tty_status.blocked;
-
-  cd = (tty_status.lines & TIOCM_CD) ? 1 : 0;
-
-  if (cd != last_cd_state)
-    {
-      gettimeofday (&last_cd_edge, NULL);
-      last_cd_state = cd;
-    }
-
-  gettimeofday (&now, NULL);
-  timersub (&now, &last_cd_edge, &dif);
-  status.cd_edge_sec = dif.tv_sec;
-
-  return status;
-}
-
-static char *
-line_to_name (int l)
-{
-
-  switch (l)
-    {
-#ifdef TIOCM_LE
-    case TIOCM_LE:
-      return "LE";
-#endif
-#ifdef TIOCM_DTR
-    case TIOCM_DTR:
-      return "DTR";
-#endif
-#ifdef TIOCM_RTS
-    case TIOCM_RTS:
-      return "RTS";
-#endif
-#ifdef TIOCM_ST
-    case TIOCM_ST:
-      return "ST";
-#endif
-#ifdef TIOCM_SR
-    case TIOCM_SR:
-      return "SR";
-#endif
-#ifdef TIOCM_CTS
-    case TIOCM_CTS:
-      return "CTS";
-#endif
-#ifdef TIOCM_CD
-    case TIOCM_CD:
-      return "CD";
-#endif
-#ifdef TIOCM_RI
-    case TIOCM_RI:
-      return "RI";
-#endif
-#ifdef TIOCM_DSR
-    case TIOCM_DSR:
-      return "DSR";
-#endif
-    }
-  return "??";
-}
-
-static void
-log_line_changes (Context * ctx, int old, int new)
-{
-  int dif = old ^ new;
-  int c = 1;
-  char buf[1024], *ptr = buf;
-  char *n;
-
-  if (!dif)
-    return;
-  if (!ctx->l)
-    return;
-
-  n = "<Modem lines changed:";
-
-  while (*n)
-    *(ptr++) = *(n++);
-
-  while (dif >= c)
-    {
-
-      if (dif & c)
-        {
-          *(ptr++) = ' ';
-          *(ptr++) = (new & c) ? '+' : '-';
-          n = line_to_name (c);
-          while (*n)
-            *(ptr++) = *(n++);
-        }
-
-      c <<= 1;
-    }
-  *(ptr++) = '>';
-  *ptr = 0;
-
-
-  ctx->l->log (ctx->l, buf);
-
-}
-
-static char *
-do_line (char *ptr, int lines, int line)
-{
-  char *lname;
-
-  if (!(lines & line))
-    return ptr;
-  lname = line_to_name (line);
-
-  *(ptr++) = ' ';
-  while (*lname)
-    *(ptr++) = *(lname++);
-
-  return ptr;
-}
-
-
-
-static void
-check_status (Context * c, Clients * cs)
-{
-  static Status old_status = { 0 };
-  Status status;
-  char buf[1024];
-  char *ptr = buf;
-  char *t;
-
-  status = get_status (c->t, cs);
-  if (!memcmp (&status, &old_status, sizeof (status)))
-    return;
-  old_status = status;
-
-
-  log_line_changes (c, old_status.lines, status.lines);
-
-  ptr += sprintf (ptr, "CTRL-B ");
-
-  t = c->t->name;
-  if (!strncmp (t, "/dev/", 5))
-    t += 5;
-  while (*t)
-    *(ptr++) = *(t++);
-
-  ptr += sprintf (ptr, " %db", status.baud);
-
-  ptr = do_line (ptr, status.lines, TIOCM_RTS);
-  ptr = do_line (ptr, status.lines, TIOCM_CTS);
-  ptr = do_line (ptr, status.lines, TIOCM_DTR);
-  ptr = do_line (ptr, status.lines, TIOCM_DSR);
-  ptr = do_line (ptr, status.lines, TIOCM_RI);
-  ptr = do_line (ptr, status.lines, TIOCM_CD);
-
-  if (status.blocked)
-    {
-      t = ", Locked";
-      while (*t)
-        *(ptr++) = *(t++);
-    }
-
-  if (status.crtscts)
-    {
-      t = ", Flow";
-      while (*t)
-        *(ptr++) = *(t++);
-    }
-
-#if 0
-  if (status.lines & TIOCM_CD)
-    {
-      ptr +=
-        sprintf (ptr, ", On %d.%d", status.cd_edge_sec / 60,
-                 status.cd_edge_sec % 60);
-    }
-  else
-    {
-      ptr +=
-        sprintf (ptr, ", Off %d.%d", status.cd_edge_sec / 60,
-                 status.cd_edge_sec % 60);
-    }
-#endif
-
-  ptr +=
-    sprintf (ptr, ", %d client%s", status.nclients,
-             (status.nclients == 1) ? "" : "s");
-
-  *ptr = 0;
-
-  send_status (cs, buf);
-}
-
-int
-main (int argc, char *argv[])
-{
-  fd_set rfds, wfds;
-  Context c;
-  Socket *s, *cs;
-  Clients *clients;
-
-
-#if 0
-  construct_possible_lock_files ("/dev/modem");
-  return 0;
-#endif
-
-  s = socket_listen ("socket");
-
-// c.t = ptty_open (NULL, NULL);
-  c.t = serial_open ("/dev/cellmodem", 0);
-  c.v = vt102_new ();
-  c.h = history_new (200);
-  c.l = file_log_new ("log");
-  c.k = keydis_vt102_new ();
-  c.d = NULL;
-
-
-  clients = clients_new ();
-
-  for (;;)
-    {
-      struct timeval tv = { 1, 0 };
-
-      check_status (&c, clients);
-
-      FD_ZERO (&rfds);
-      FD_ZERO (&wfds);
-
-      tty_pre_select (c.t, &rfds, &wfds);
-
-      FD_SET (s->fd, &rfds);
-
-      socket_pre_select (s, &rfds, &wfds);
-
-      clients_pre_select (clients, &rfds, &wfds);
-
-      select (FD_SETSIZE, &rfds, &wfds, NULL, &tv);
-
-      if (FD_ISSET (s->fd, &rfds) && ((cs = socket_accept (s))))
-        {
-          {
-            Client *cl;
-            /*New client connexion */
-            cl = clients_new_client (clients, cs, &c);
-
-            send_history (c.h, cl);
-            send_vt102 (c.v, cl);
-
-          }
-        }
-
-
-      clients_post_select (clients, &c, &rfds, &wfds);
-
-      if (FD_ISSET (c.t->rfd, &rfds))
-        {
-          char buf[IPC_MAX_BUF];
-          int red;
-
-          red = c.t->recv (c.t, buf, sizeof (buf));
-
-          if (red < 0)
-            break;
-
-          if (red)
-            {
-              send_output (clients, buf, red);
-              vt102_parse (&c, buf, red);
-            }
-        }
-
-
-
-    }
-
-  clients_shutdown (clients);
-  terminal_atexit ();
-  printf ("QUAT\n");
-}
index 0ef2667e76a12aec27af5143d9773da040e0be32..b34d75b8d845b3fa6936d0d787aac49308409e96 100644 (file)
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.5  2008/02/20 18:31:44  james
+ * *** empty log message ***
+ *
  * Revision 1.4  2008/02/20 17:18:33  james
  * *** empty log message ***
  *
@@ -24,6 +27,7 @@ static char rcsid[] = "$Id$";
  *
  */
 
+#include <stdio.h>
 
 void
 usage (void)
index 69ef02de85639fd86fde567517e0f007bd5a18b8..cdb31119a01f650ac651860bd00b09a9f2297cad 100644 (file)
@@ -77,6 +77,7 @@ extern int tty_get_status(TTY *t, TTY_Status *s);
 extern void tty_set_baud(TTY *t, int rate);
 extern void tty_send_break(TTY *t);
 extern void tty_set_flow(TTY *t, int flow);
+extern void tty_hangup(TTY *t);
 /* keydis.c */
 extern KeyDis *keydis_vt102_new(void);
 extern KeyDis *keydis_ipc_new(Socket *s);
@@ -122,6 +123,7 @@ extern int ipc_msg_send_status(Socket *s, char *buf);
 extern int ipc_msg_send_setbaud(Socket *s, int baud);
 extern int ipc_msg_send_sendbreak(Socket *s);
 extern int ipc_msg_send_setflow(Socket *s, int flow);
+extern int ipc_msg_send_hangup(Socket *s);
 /* slide.c */
 extern void slide_free(Slide *s);
 extern void slide_consume(Slide *s, int n);
@@ -129,7 +131,10 @@ extern void slide_added(Slide *s, int n);
 extern Slide *slide_new(int n);
 extern void slide_expand(Slide *s, int n);
 /* symsocket.c */
+extern int wrap_recv(int fd, void *buf, int len);
+extern int wrap_send(int fd, void *buf, int len);
 extern void socket_free(Socket *s);
+extern void socket_free_parent(Socket *s);
 extern Socket *socket_listen(char *path);
 extern Socket *socket_accept(Socket *l);
 extern Socket *socket_connect(char *path);
@@ -165,4 +170,3 @@ extern void lockfile_unlock(Filelist *fl);
 extern int serial_lock_check(Serial_lock *l);
 extern void serial_lock_free(Serial_lock *l);
 extern Serial_lock *serial_lock_new(char *dev, int mode);
-extern int main(int argc, char *argv[]);
index 061ff6d3f7329376fdef4d08b73079db5be4490c..bb8f4fff6ca42d681738cbcb74b6b380ee447aab 100644 (file)
@@ -11,6 +11,9 @@ static char rcsid[] =
 
 /*
  * $Log$
+ * Revision 1.4  2008/02/20 18:31:53  james
+ * *** empty log message ***
+ *
  * Revision 1.3  2008/02/14 02:46:44  james
  * *** empty log message ***
  *
@@ -29,6 +32,38 @@ static char rcsid[] =
 #define BUF_SIZE 16384
 #define MAX_TXN 4096
 
+int
+wrap_recv (int fd, void *buf, int len)
+{
+  int red;
+
+  red = recv (fd, buf, len,0);
+  if (!red)
+    return -1;
+
+  if ((red < 0) && (errno == EAGAIN))
+    red = 0;
+
+  return red;
+}
+
+int
+wrap_send (int fd, void *buf, int len)
+{
+  int writ;
+
+  errno = 0;
+
+  writ = send (fd, buf, len,MSG_NOSIGNAL);
+
+  if (!writ)
+    return -1;
+
+  if ((writ < 0) && (errno == EAGAIN))
+    writ = 0;
+
+  return writ;
+}
 
 void
 socket_free (Socket * s)
@@ -39,7 +74,28 @@ socket_free (Socket * s)
     slide_free (s->read_buf);
   if (s->write_buf)
     slide_free (s->write_buf);
+  if (s->path_to_unlink) {
+       unlink(s->path_to_unlink);
+       free(s->path_to_unlink); 
+  }
+  close (s->fd);
+  free(s);
+}
+
+void
+socket_free_parent (Socket * s)
+{
+  if (!s)
+    return;
+  if (s->read_buf)
+    slide_free (s->read_buf);
+  if (s->write_buf)
+    slide_free (s->write_buf);
+  if (s->path_to_unlink) 
+       free(s->path_to_unlink); 
   close (s->fd);
+
+  free(s);
 }
 
 
@@ -89,6 +145,7 @@ socket_listen (char *path)
   ret->write_buf = NULL;
 
   ret->fd = fd;
+  ret->path_to_unlink=strdup(path);
 
 
   return ret;
@@ -215,7 +272,7 @@ socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds)
       n =
         (SLIDE_BYTES (s->write_buf) >
          MAX_TXN) ? MAX_TXN : SLIDE_BYTES (s->write_buf);
-      n = wrap_write (s->fd, SLIDE_RPTR (s->write_buf), n);
+      n = wrap_send (s->fd, SLIDE_RPTR (s->write_buf), n);
       if (n > 0)
         slide_consume (s->write_buf, n);
       if (n < 0)
@@ -227,7 +284,7 @@ socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds)
       n =
         (SLIDE_SPACE (s->read_buf) >
          MAX_TXN) ? MAX_TXN : SLIDE_SPACE (s->read_buf);
-      n = wrap_read (s->fd, SLIDE_WPTR (s->read_buf), n);
+      n = wrap_recv (s->fd, SLIDE_WPTR (s->read_buf), n);
       if (n > 0)
         slide_added (s->read_buf, n);
       if (n < 0)
@@ -253,7 +310,7 @@ socket_write (Socket * s, void *buf, int len)
   n =
     (SLIDE_BYTES (s->write_buf) >
      MAX_TXN) ? MAX_TXN : SLIDE_BYTES (s->write_buf);
-  n = wrap_write (s->fd, SLIDE_RPTR (s->write_buf), n);
+  n = wrap_send (s->fd, SLIDE_RPTR (s->write_buf), n);
   {
     uint8_t *c = SLIDE_RPTR (s->write_buf);
   }
index 39968166d3dc460975610cce193664597dbf8234..34961d0a98f4bcf22473d007a33fcecfac78a6ea 100644 (file)
@@ -12,6 +12,9 @@
 
 /*
  * $Log$
+ * Revision 1.2  2008/02/20 18:31:53  james
+ * *** empty log message ***
+ *
  * Revision 1.1  2008/02/13 18:05:06  james
  * *** empty log message ***
  *
@@ -29,6 +32,8 @@ typedef struct
 
   IPC_Msg *msg;
 
+  char *path_to_unlink;
+
 } Socket;
 
 #define SOCKET_IS_LISTENER(s) (!((s)->read_buf))
index de1bdcaf6b4b096a07ff1ac7c84f2c7eaafb0f77..1765878c27c977f56aa6feb5258c30b832887878 100644 (file)
--- a/src/tty.c
+++ b/src/tty.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.11  2008/02/20 18:31:53  james
+ * *** empty log message ***
+ *
  * Revision 1.10  2008/02/15 23:52:12  james
  * *** empty log message ***
  *
@@ -223,7 +226,9 @@ tty_pre_select (TTY * t, fd_set * rfds, fd_set * wfds)
       timersub (&now, &t->hangup_clock, &dif);
       if (dif.tv_sec)
         {
+#if 0
           fprintf (stderr, "+DTR\n");
+#endif
 
           line = TIOCM_DTR;
           ioctl (t->rfd, TIOCMBIS, &line);
@@ -241,8 +246,11 @@ tty_get_status (TTY * t, TTY_Status * s)
 
   s->lines = 0;
   ioctl (t->rfd, TIOCMGET, &s->lines);
+
+#if 0
   if (t->hanging_up)
     fprintf (stderr, "s->lines & TIOCM_DTR=%x\n", s->lines & TIOCM_DTR);
+#endif
 
   if (tcgetattr (t->rfd, &s->termios))
     return -1;
@@ -305,7 +313,9 @@ tty_hangup (TTY * t)
 
   t->hanging_up = 1;
   gettimeofday (&t->hangup_clock, NULL);
+#if 0
   fprintf (stderr, "-DTR\n");
+#endif
 
 }