src/transport_fd.c
branchnew-transport
changeset 159 d3e253d7281a
parent 157 1e5674d0eec4
child 176 6750d50ee8cd
--- a/src/transport_fd.c	Tue Apr 28 23:09:28 2009 +0300
+++ b/src/transport_fd.c	Tue Apr 28 23:10:30 2009 +0300
@@ -7,19 +7,23 @@
 #include <assert.h>
 
 /**
- * Our pseudo-transport_type
- */
-static struct transport_type transport_fd_type;
-
-/**
  * Our libevent callback
  */
-static void transport_fd_on_event (evutil_socket_t _fd, short what, void *arg) 
+static void transport_fd_on_event (evutil_socket_t _fd, short ev_what, void *arg) 
 {
     struct transport_fd *fd = arg;
 
     (void) _fd;
 
+    short what = 0;
+
+    // build flags
+    if (ev_what & EV_READ)
+        what |= TRANSPORT_READ;
+
+    if (ev_what & EV_WRITE)
+        what |= TRANSPORT_WRITE;
+
     // invoke user callback
     fd->cb_func(fd, what, fd->cb_arg);
 }
@@ -31,6 +35,8 @@
 {
     struct transport_fd *fd = transport_check(transport, &transport_fd_type);
     int ret;
+
+    RESET_ERROR(err);
     
     // read(), and detect non-EAGAIN or EOF
     if ((ret = read(fd->fd, buf, *len)) < 0 && errno != EAGAIN)
@@ -60,6 +66,8 @@
     struct transport_fd *fd = transport_check(transport, &transport_fd_type);
     int ret;
     
+    RESET_ERROR(err);
+    
     // write(), and detect non-EAGAIN or EOF
     if ((ret = write(fd->fd, buf, *len)) < 0 && errno != EAGAIN)
         // unexpected error
@@ -87,19 +95,19 @@
     return SUCCESS;
 }
 
-err_t transport_fd_methods_events (transport_t *transport, short mask, error_t *err)
+err_t transport_fd_methods_events (transport_t *transport, short ev_mask, error_t *err)
 {
     struct transport_fd *fd = transport_check(transport, &transport_fd_type);
     
-    short _mask = 0;
+    short mask = 0;
 
     // enable read as requested
-    if (mask & TRANSPORT_READ)
-        _mask |= TRANSPORT_READ;
+    if (ev_mask & TRANSPORT_READ)
+        mask |= TRANSPORT_READ;
     
     // enable write if requested and it's currently enabled
-    if ((mask & TRANSPORT_WRITE) && event_pending(fd->ev_write, EV_WRITE, NULL))
-        _mask |= TRANSPORT_WRITE;
+    if ((ev_mask & TRANSPORT_WRITE) && event_pending(fd->ev_write, EV_WRITE, NULL))
+        mask |= TRANSPORT_WRITE;
 
     // set
     return (ERROR_CODE(err) = transport_fd_events(fd, mask));
@@ -112,11 +120,14 @@
     transport_fd_destroy(fd);
 }
 
-const struct transport_methods transport_fd_methods = {
-    .read       = transport_fd_methods_read,
-    .write      = transport_fd_methods_write,
-    .events     = transport_fd_methods_events,
-    .destroy    = _transport_fd_destroy
+const struct transport_type transport_fd_type = {
+    .parent     = NULL,
+    .methods    = {
+        .read       = transport_fd_methods_read,
+        .write      = transport_fd_methods_write,
+        .events     = transport_fd_methods_events,
+        .destroy    = _transport_fd_destroy
+    }
 };
 
 /**