diff options
-rw-r--r-- | dpi/dpiutil.c | 127 | ||||
-rw-r--r-- | dpi/dpiutil.h | 37 |
2 files changed, 0 insertions, 164 deletions
diff --git a/dpi/dpiutil.c b/dpi/dpiutil.c index ec51494d..e29d529f 100644 --- a/dpi/dpiutil.c +++ b/dpi/dpiutil.c @@ -163,130 +163,3 @@ char *Filter_smtp_hack(char *url) return url; } - -/* Streamed Sockets API (not mandatory) ----------------------------------*/ - -/* - * Create and initialize the SockHandler structure - */ -SockHandler *sock_handler_new(int fd_in, int fd_out, int flush_sz) -{ - SockHandler *sh = dNew(SockHandler, 1); - - /* init descriptors and streams */ - sh->fd_in = fd_in; - sh->fd_out = fd_out; - sh->out = fdopen(fd_out, "w"); - - /* init buffer */ - sh->buf_max = 8 * 1024; - sh->buf = dNew(char, sh->buf_max); - sh->buf_sz = 0; - sh->flush_sz = flush_sz; - - return sh; -} - -/* - * Streamed write to socket - * Return: 0 on success, 1 on error. - */ -int sock_handler_write(SockHandler *sh, int flush, - const char *Data, size_t DataSize) -{ - int ret = 1; - - /* append to buf */ - while (sh->buf_max < sh->buf_sz + DataSize) { - sh->buf_max <<= 1; - sh->buf = dRealloc(sh->buf, sh->buf_max); - } - memcpy(sh->buf + sh->buf_sz, Data, DataSize); - sh->buf_sz += DataSize; -/* - MSG("sh->buf=%p, sh->buf_sz=%d, sh->buf_max=%d, sh->flush_sz=%d\n", - sh->buf, sh->buf_sz, sh->buf_max, sh->flush_sz); -*/ -/**/ -#if 0 -{ - uint_t i; - /* Test dpip's stream handling by chopping data into characters */ - for (i = 0; i < sh->buf_sz; ++i) { - fputc(sh->buf[i], sh->out); - fflush(sh->out); - usleep(50); - } - if (i == sh->buf_sz) { - sh->buf_sz = 0; - ret = 0; - } -} -#else - /* flush data if necessary */ - if (flush || sh->buf_sz >= sh->flush_sz) { - if (sh->buf_sz && fwrite (sh->buf, sh->buf_sz, 1, sh->out) != 1) { - perror("[sock_handler_write]"); - } else { - fflush(sh->out); - sh->buf_sz = 0; - ret = 0; - } - - } else { - ret = 0; - } -#endif - return ret; -} - -/* - * Convenience function. - */ -int sock_handler_write_str(SockHandler *sh, int flush, const char *str) -{ - return sock_handler_write(sh, flush, str, strlen(str)); -} - -/* - * Return a newlly allocated string with the contents read from the socket. - */ -char *sock_handler_read(SockHandler *sh) -{ - ssize_t st; - char buf[16384]; - - /* can't use fread() */ - do - st = read(sh->fd_in, buf, 16384); - while (st < 0 && errno == EINTR); - - if (st == -1) - perror("[sock_handler_read]"); - - return (st > 0) ? dStrndup(buf, (uint_t)st) : NULL; -} - -/* - * Close this socket for reading and writing. - */ -void sock_handler_close(SockHandler *sh) -{ - /* flush before closing */ - sock_handler_write(sh, 1, "", 0); - - fclose(sh->out); - close(sh->fd_out); -} - -/* - * Free the SockHandler structure - */ -void sock_handler_free(SockHandler *sh) -{ - dFree(sh->buf); - dFree(sh); -} - -/* ------------------------------------------------------------------------ */ - diff --git a/dpi/dpiutil.h b/dpi/dpiutil.h index b137fa0c..d939ddcb 100644 --- a/dpi/dpiutil.h +++ b/dpi/dpiutil.h @@ -28,43 +28,6 @@ extern "C" { #endif /* __cplusplus */ -#define BUFLEN 256 -#define TOUT 300 - - -/* Streamed Sockets API (not mandatory) ----------------------------------*/ - -typedef struct _SockHandler SockHandler; -struct _SockHandler { - int fd_in; - int fd_out; - /* FILE *in; --Unused. The stream functions block when reading. */ - FILE *out; - - char *buf; /* internal buffer */ - uint_t buf_sz; /* data size */ - uint_t buf_max; /* allocated size */ - uint_t flush_sz; /* max size before flush */ -}; - -SockHandler *sock_handler_new(int fd_in, int fd_out, int flush_sz); -int sock_handler_write(SockHandler *sh, int flush, - const char *Data,size_t DataSize); -int sock_handler_write_str(SockHandler *sh, int flush, const char *str); -char *sock_handler_read(SockHandler *sh); -void sock_handler_close(SockHandler *sh); -void sock_handler_free(SockHandler *sh); - -#define sock_handler_printf(sh, flush, ...) \ - D_STMT_START { \ - Dstr *dstr = dStr_sized_new(128); \ - dStr_sprintf(dstr, __VA_ARGS__); \ - sock_handler_write(sh, flush, dstr->str, dstr->len); \ - dStr_free(dstr, 1); \ - } D_STMT_END - -/* ----------------------------------------------------------------------- */ - /* * Escape URI characters in 'esc_set' as %XX sequences. * Return value: New escaped string. |