struct ngx_module_s {
- ngx_uint_t ctx_index;
- ngx_uint_t index;
- void *ctx;
- ngx_command_t *commands;
- ngx_uint_t type;
- ngx_int_t (*init_module)(ngx_cycle_t *cycle);
- ngx_int_t (*init_process)(ngx_cycle_t *cycle);
+ ngx_uint_t ctx_index;
+ ngx_uint_t index;
+ void *ctx;
+ ngx_command_t *commands;
+ ngx_uint_t type;
+ ngx_int_t (*init_module)(ngx_cycle_t *cycle);
+ ngx_int_t (*init_process)(ngx_cycle_t *cycle);
#if 0
- ngx_int_t (*init_thread)(ngx_cycle_t *cycle);
+ ngx_int_t (*init_thread)(ngx_cycle_t *cycle);
#endif
};
#define NGX_EVENT_MODULE 0x544E5645 /* "EVNT" */
-#define NGX_EVENT_CONF 0x00200000
+#define NGX_EVENT_CONF 0x02000000
typedef struct {
in_port->port = lscf[l].port;
- ngx_test_null(in_port->port_name.data, ngx_palloc(cf->pool, 7),
+ ngx_test_null(in_port->port_text.data, ngx_palloc(cf->pool, 7),
NGX_CONF_ERROR);
- in_port->port_name.len = ngx_snprintf((char *)
- in_port->port_name.data,
+ in_port->port_text.len = ngx_snprintf((char *)
+ in_port->port_text.data,
7, ":%d",
in_port->port);
NGX_CONF_ERROR);
inport->port = in_port[p].port;
- inport->port_name = in_port[p].port_name;
+ inport->port_text = in_port[p].port_text;
/* init list of the addresses ... */
typedef struct {
in_port_t port;
- ngx_str_t port_name;
+ ngx_str_t port_text;
ngx_array_t addrs; /* array of ngx_http_in_addr_t */
} ngx_http_in_port_t;
+ r->server_name->len + r->headers_out.location->value.len + 2;
if (r->port != 80) {
- len += r->port_name->len;
+ len += r->port_text->len;
}
}
b->last = ngx_cpymem(b->last, r->server_name->data,
r->server_name->len);
if (r->port != 80) {
- b->last = ngx_cpymem(b->last, r->port_name->data,
- r->port_name->len);
+ b->last = ngx_cpymem(b->last, r->port_text->data,
+ r->port_text->len);
}
b->last = ngx_cpymem(b->last, r->headers_out.location->value.data,
in_addr = in_port->addrs.elts;
r->port = in_port->port;
- r->port_name = &in_port->port_name;
+ r->port_text = &in_port->port_text;
i = 0;
uint32_t in_addr;
ngx_uint_t port;
- ngx_str_t *port_name; /* ":80" */
+ ngx_str_t *port_text; /* ":80" */
ngx_str_t *server_name;
ngx_array_t *virtual_names;
#define NGX_IMAP_PROXY_ERROR 11
+#define NGX_IMAP_MODULE 0x50414D49 /* "IMAP" */
+
+#define NGX_IMAP_CONF 0x02000000
+
+
void ngx_imap_init_connection(ngx_connection_t *c);
void ngx_imap_close_connection(ngx_connection_t *c);
c = rev->data;
- /* TODO: timeout */
+ if (rev->timedout) {
+ ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+ ngx_imap_close_connection(c);
+ return;
+ }
if (!(s = ngx_pcalloc(c->pool, sizeof(ngx_imap_session_t)))) {
ngx_imap_close_connection(c);
ngx_log_debug0(NGX_LOG_DEBUG_IMAP, c->log, 0, "pop3 auth state");
- /* TODO: timeout */
+ if (rev->timedout) {
+ ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+ ngx_imap_close_connection(c);
+ return;
+ }
rc = ngx_pop3_read_command(s);
peers->number = 1;
peers->max_fails = 1;
+#if 0
peers->peers[0].addr = inet_addr("81.19.69.70");
peers->peers[0].addr_port_text.len = sizeof("81.19.69.70:110") - 1;
peers->peers[0].addr_port_text.data = "81.19.69.70:110";
peers->peers[0].port = htons(110);
+#else
+ peers->peers[0].addr = inet_addr("81.19.64.101");
+ peers->peers[0].addr_port_text.len = sizeof("81.19.64.101:110") - 1;
+ peers->peers[0].addr_port_text.data = "81.19.64.101:110";
+ peers->peers[0].port = htons(110);
+#endif
rc = ngx_event_connect_peer(&p->upstream);
c = rev->data;
s = c->data;
+ if (rev->timedout) {
+ ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
+ ngx_imap_proxy_close_session(s);
+ return;
+ }
+
if (s->proxy->buffer == NULL) {
s->proxy->buffer = ngx_create_temp_buf(c->pool, /* STUB */ 4096);
if (s->proxy->buffer == NULL) {
size_t size;
ssize_t n;
ngx_buf_t *b;
- ngx_uint_t data, do_write;
+ ngx_uint_t again, do_write;
ngx_connection_t *c, *src, *dst;
ngx_imap_session_t *s;
c = ev->data;
s = c->data;
+ if (ev->timedout) {
+ if (c == s->connection) {
+ ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
+ "client timed out");
+ } else {
+ ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
+ "upstream timed out");
+ }
+
+ ngx_imap_proxy_close_session(s);
+ return;
+ }
+
if (c == s->connection) {
- src = c;
- dst = s->proxy->upstream.connection;
- b = s->buffer;
+ if (ev->write) {
+ src = s->proxy->upstream.connection;
+ dst = c;
+ b = s->proxy->buffer;
+
+ } else {
+ src = c;
+ dst = s->proxy->upstream.connection;
+ b = s->buffer;
+ }
} else {
- src = c;
- dst = s->connection;
- b = s->proxy->buffer;
+ if (ev->write) {
+ src = s->connection;
+ dst = c;
+ b = s->buffer;
+
+ } else {
+ src = c;
+ dst = s->connection;
+ b = s->proxy->buffer;
+ }
}
do_write = ev->write ? 1 : 0;
do_write, src->fd, dst->fd);
do {
- data = 0;
+ again = 0;
if (do_write == 1) {
size = b->last - b->pos;
- if (dst->write->ready && size) {
+ if (size && dst->write->ready) {
n = ngx_send(dst, b->pos, size);
if (n == NGX_ERROR) {
}
if (n > 0) {
- data = 1;
+ again = 1;
b->pos += n;
if (b->pos == b->last) {
size = b->end - b->last;
- if (src->read->ready && size) {
+ if (size && src->read->ready) {
n = ngx_recv(src, b->last, size);
if (n == NGX_ERROR || n == 0) {
}
if (n > 0) {
- data = 1;
+ again = 1;
do_write = 1;
b->last += n;
}
}
}
- } while (data);
+ } while (again);
}