151 #include <sys/socket.h>
152 #include <sys/time.h>
174 static void smtp_timeout_reset(
VSTREAM *stream)
190 static NORETURN smtp_longjmp(
VSTREAM *stream,
int err,
const char *context)
211 const char *myname =
"smtp_stream_setup";
214 msg_info(
"%s: maxtime=%d enable_deadline=%d",
215 myname, maxtime, enable_deadline);
235 smtp_timeout_reset(stream);
256 smtp_timeout_reset(stream);
290 smtp_timeout_reset(stream);
319 smtp_timeout_reset(stream);
320 last_char = (bound == 0 ?
vstring_get(vp, stream) :
367 && next_char !=
'\n')
388 msg_panic(
"smtp_fputs: negative todo %ld", (
long) todo);
393 smtp_timeout_reset(stream);
413 msg_panic(
"smtp_fwrite: negative todo %ld", (
long) todo);
418 smtp_timeout_reset(stream);
439 smtp_timeout_reset(stream);
int smtp_fgetc(VSTREAM *stream)
#define CA_VSTREAM_CTL_TIMEOUT(v)
NORETURN msg_panic(const char *fmt,...)
VSTREAM * vstream_vfprintf(VSTREAM *vp, const char *format, va_list ap)
#define vstream_longjmp(stream, val)
#define vstream_clearerr(vp)
int vstring_get(VSTRING *vp, VSTREAM *fp)
#define CA_VSTREAM_CTL_DOUBLE
VSTRING * vstring_truncate(VSTRING *vp, ssize_t len)
#define vstream_wr_error(vp)
int smtp_get(VSTRING *vp, VSTREAM *stream, ssize_t bound, int flags)
#define VSTRING_TERMINATE(vp)
void smtp_vprintf(VSTREAM *stream, const char *fmt, va_list ap)
#define VSTRING_ADDCH(vp, ch)
void smtp_fputc(int ch, VSTREAM *stream)
#define CA_VSTREAM_CTL_START_DEADLINE
#define vstream_ungetc(vp, ch)
#define vstream_ftimeout(vp)
void smtp_stream_setup(VSTREAM *stream, int maxtime, int enable_deadline)
void smtp_fputs(const char *cp, ssize_t todo, VSTREAM *stream)
void smtp_printf(VSTREAM *stream, const char *fmt,...)
#define VSTREAM_FLAG_DEADLINE
void smtp_fwrite(const char *cp, ssize_t todo, VSTREAM *stream)
int vstream_fflush(VSTREAM *stream)
void smtp_flush(VSTREAM *stream)
#define vstream_fwrite(v, b, n)
#define vstream_fstat(vp, fl)
#define CA_VSTREAM_CTL_EXCEPT
#define vstream_fileno(vp)
#define CA_VSTREAM_CTL_END
#define VSTREAM_PUTC(ch, vp)
#define SMTP_GET_FLAG_SKIP
#define CA_VSTREAM_CTL_STOP_DEADLINE
void vstream_control(VSTREAM *stream, int name,...)
#define vstream_ferror(vp)
int vstring_get_bound(VSTRING *vp, VSTREAM *fp, ssize_t bound)
int vstream_fputs(const char *str, VSTREAM *stream)
void msg_info(const char *fmt,...)