]> git.mikk.net Git - smtpsink/commitdiff
Merge branch 'master' into modules
authorchris mikkelson <chris@mikk.net>
Fri, 3 Apr 2009 01:19:27 +0000 (20:19 -0500)
committerchris mikkelson <chris@mikk.net>
Fri, 3 Apr 2009 01:19:27 +0000 (20:19 -0500)
Conflicts:
smtp.c

1  2 
module_api.c

diff --cc module_api.c
index 7a2ec324fdcedf9055c8c9a1f62e7d35b7352963,0000000000000000000000000000000000000000..e4829d239c1ae62cdb5c79aa91faf175c843aa0d
mode 100644,000000..100644
--- /dev/null
@@@ -1,54 -1,0 +1,58 @@@
-               c->state = SMTP_CLOSED;
-               return 0;
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <string.h>
 +#include <dlfcn.h>
 +#include <unistd.h>
++#include <sys/errno.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) {
++              if (errno != EAGAIN) {
++                      c->state = SMTP_CLOSED;
++                      return 0;
++              }
++              nw = 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->ssm_module_index];
 +}
 +
 +void
 +ssm_setpriv(struct smtpsink_module *m, struct conn *c, void *data)
 +{
 +      assert(c->priv_data);
 +      c->priv_data[m->ssm_module_index] = data;
 +}