keep fd in buffer rather than connection
authorChristian Thaeter <ct@pipapo.org>
Mon, 22 Oct 2007 18:28:06 +0000 (20:28 +0200)
committerChristian Thaeter <ct@pipapo.org>
Mon, 22 Oct 2007 18:28:06 +0000 (20:28 +0200)
src/rxpd.h
src/rxpd_buffer.c
src/rxpd_connection.c

index e8dd20c..64bb1c2 100644 (file)
@@ -224,7 +224,7 @@ enum rxpd_buffer_state_e
 
 struct rxpd_buffer
 {
-  struct rxpd_connection* conn;
+  int fd;
   enum rxpd_buffer_state_e state;
   char* eol;
   char* eob;
@@ -232,7 +232,7 @@ struct rxpd_buffer
 };
 
 struct rxpd_buffer*
-rxpd_buffer_init (struct rxpd_buffer* self, struct rxpd_connection* conn);
+rxpd_buffer_init (struct rxpd_buffer* self, int fd);
 
 char*
 rxpd_buffer_readline (struct rxpd_buffer* self);
index 74dd47c..17a1e51 100644 (file)
@@ -22,9 +22,9 @@
 #include "rxpd.h"
 
 struct rxpd_buffer*
-rxpd_buffer_init (struct rxpd_buffer* self, struct rxpd_connection* conn)
+rxpd_buffer_init (struct rxpd_buffer* self, int fd)
 {
-  self->conn = conn;
+  self->fd = fd;
   self->state = RXPD_OK;
   self->eol = self->eob = self->buffer;
   self->buffer [4095] = '\0';
@@ -35,8 +35,6 @@ rxpd_buffer_init (struct rxpd_buffer* self, struct rxpd_connection* conn)
 char*
 rxpd_buffer_readline (struct rxpd_buffer* self)
 {
-  int fd = self->conn->fd;
-
   if (self->eol < self->eob)
     {
       //there was a line pending, shift buffer left
@@ -66,7 +64,7 @@ rxpd_buffer_readline (struct rxpd_buffer* self)
         ssize_t r = 0;
         do
           {
-            r = pth_read (fd, self->eob, 4095 - (self->eob - self->buffer));
+            r = pth_read (self->fd, self->eob, 4095 - (self->eob - self->buffer));
           }
         while (r == -1 && errno == EINTR);
 
@@ -74,7 +72,7 @@ rxpd_buffer_readline (struct rxpd_buffer* self)
           {
             if (r == 0)
               {
-                shutdown (fd, SHUT_RD);
+                shutdown (self->fd, SHUT_RD);
                 self->state = RXPD_EOF;
               }
             self->eob += r;
@@ -82,7 +80,7 @@ rxpd_buffer_readline (struct rxpd_buffer* self)
         else
           self->state = RXPD_ERROR;
       }
-  } while (1);  // TODO while (!buffer overfulls)  
+  } while (self->state == RXPD_OK);  // TODO while (!buffer overfulls)
   return NULL;
 }
 
@@ -96,7 +94,7 @@ rxpd_buffer_printf (struct rxpd_buffer* self, const char* fmt, ...)
   int n = vsnprintf (self->buffer, 4096, fmt, ap);
   va_end(ap);
 
-  pth_write (self->conn->fd, self->buffer, n);
+  pth_write (self->fd, self->buffer, n);
 
   if (n>4095)
     return 0;
index a6c8355..b091704 100644 (file)
@@ -33,8 +33,8 @@ rxpd_connection_new (struct rxpd_socket* socket, int fd)
   self->tmp_str = NULL;
   llist_init (&self->tmp_list);
 
-  rxpd_buffer_init (&self->in, self);
-  rxpd_buffer_init (&self->out, self);
+  rxpd_buffer_init (&self->in, fd);
+  rxpd_buffer_init (&self->out, fd);
   
   self->connecter = NULL;