]> git.mikk.net Git - smtpsink/commitdiff
Made API for module -- module_api.c now contains respond() and
authorchris mikkelson <chris@mikk.net>
Fri, 27 Mar 2009 05:01:33 +0000 (00:01 -0500)
committerchris mikkelson <chris@mikk.net>
Fri, 27 Mar 2009 05:01:33 +0000 (00:01 -0500)
accessors for module-private per-connection data.

Makefile
module_api.c [new file with mode: 0644]
smtp.c
smtpsink.h

index 3bccc70d8869a67843aa6574cc12da28943cc58b..73abcb59aa9349dab818a0baf70ee0becc9b19d8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,7 @@
 CFLAGS=-g -Wall -I/usr/local/include
 
-SMTPSINK_OBJS=conn_pool.o conn_queue.o io.o smtp.o module.o smtpsink.o
+SMTPSINK_OBJS=conn_pool.o conn_queue.o io.o smtp.o \
+       module.o module_api.o smtpsink.o
 
 default: smtpsink
 
@@ -22,6 +23,10 @@ smtp.o: smtp.c smtpsink.h conn_queue.h smtpsink-int.h responses.inc
 module.o: module.c smtpsink.h
        cc $(CFLAGS) -c module.c
 
+module_api.o: module_api.c smtpsink.h
+       cc $(CFLAGS) -c module_api.c
+
+
 smtpsink.o: smtpsink.c smtpsink.h conn_queue.h smtpsink-int.h
 
 clean:
diff --git a/module_api.c b/module_api.c
new file mode 100644 (file)
index 0000000..ec0bbf3
--- /dev/null
@@ -0,0 +1,53 @@
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <assert.h>
+#include <err.h>
+
+#include <sys/queue.h>
+#include <netinet/in.h>
+#include <event.h>
+#include "smtpsink.h"
+
+int
+respond(struct conn *c, const char *fmt, ...)
+{
+       va_list ap;
+       char buf[2048];
+       int ret, nw;
+
+       va_start(ap, fmt);
+       ret = vsnprintf(buf, sizeof(buf), fmt, ap);
+       if (ret < 0) assert(0); 
+       nw = write(c->fd, buf, ret);
+       if (nw < 0) {
+               c->state = SMTP_CLOSED;
+               return 0;
+       }
+       if (nw < ret) {
+               if (!(c->wdata.s = malloc(ret - nw))) {
+                       c->state = SMTP_CLOSED;
+                       return 0;
+               }
+               memcpy(c->wdata.s, buf + nw, ret - nw);
+               c->wdata.off = 0;
+               c->wdata.len = ret - nw;
+               return 0;
+       }
+       return 1;
+}
+
+void *
+ssm_getpriv(struct smtpsink_module *m, struct conn *c)
+{
+       assert(c->priv_data);
+       return c->priv_data[m->mod_index];
+}
+
+void
+ssm_setpriv(struct smtpsink_module *m, struct conn *c, void *data)
+{
+       assert(c->priv_data);
+       c->priv_data[m->mod_index] = data;
+}
diff --git a/smtp.c b/smtp.c
index 7b1630089f550df1071f06443d17fefcab1c7451..9e4cc41fdb09d64f4ca9049279f4744f24cee18f 100644 (file)
--- a/smtp.c
+++ b/smtp.c
@@ -27,34 +27,6 @@ smtp_init(int tstart)
        }
 }
 
-int
-respond(struct conn *c, const char *fmt, ...)
-{
-       va_list ap;
-       char buf[2048];
-       int ret, nw;
-
-       va_start(ap, fmt);
-       ret = vsnprintf(buf, sizeof(buf), fmt, ap);
-       if (ret < 0) assert(0); 
-       nw = write(c->fd, buf, ret);
-       if (nw < 0) {
-               c->state = SMTP_CLOSED;
-               return 0;
-       }
-       if (nw < ret) {
-               if (!(c->wdata.s = malloc(ret - nw))) {
-                       c->state = SMTP_CLOSED;
-                       return 0;
-               }
-               memcpy(c->wdata.s, buf + nw, ret - nw);
-               c->wdata.off = 0;
-               c->wdata.len = ret - nw;
-               return 0;
-       }
-       return 1;
-}
-
 #include "responses.inc"
 
 int
index c67eb23bc816119158f78f5c3bb52d546c3e98d6..78630385974d63b714552f79c98acb30a5b0d2e0 100644 (file)
@@ -65,3 +65,6 @@ struct smtpsink_module {
        /* module index (filled in by module_init) */
        unsigned mod_index;
 };
+
+void *ssm_getpriv(struct smtpsink_module *, struct conn *);
+void ssm_setpriv(struct smtpsink_module *, struct conn *, void *);