comparison src/stream/ngx_stream_proxy_module.c @ 6200:abee77018d3a

Stream: common handler for upstream and downstream.
author Roman Arutyunyan <arut@nginx.com>
date Tue, 23 Jun 2015 20:17:47 +0300
parents fa663739e115
children 24488e6db782
comparison
equal deleted inserted replaced
6199:4b703a5a4631 6200:abee77018d3a
50 static void ngx_stream_proxy_handler(ngx_stream_session_t *s); 50 static void ngx_stream_proxy_handler(ngx_stream_session_t *s);
51 static void ngx_stream_proxy_connect(ngx_stream_session_t *s); 51 static void ngx_stream_proxy_connect(ngx_stream_session_t *s);
52 static void ngx_stream_proxy_init_upstream(ngx_stream_session_t *s); 52 static void ngx_stream_proxy_init_upstream(ngx_stream_session_t *s);
53 static void ngx_stream_proxy_upstream_handler(ngx_event_t *ev); 53 static void ngx_stream_proxy_upstream_handler(ngx_event_t *ev);
54 static void ngx_stream_proxy_downstream_handler(ngx_event_t *ev); 54 static void ngx_stream_proxy_downstream_handler(ngx_event_t *ev);
55 static void ngx_stream_proxy_process_connection(ngx_event_t *ev,
56 ngx_uint_t from_upstream);
55 static void ngx_stream_proxy_connect_handler(ngx_event_t *ev); 57 static void ngx_stream_proxy_connect_handler(ngx_event_t *ev);
56 static ngx_int_t ngx_stream_proxy_test_connect(ngx_connection_t *c); 58 static ngx_int_t ngx_stream_proxy_test_connect(ngx_connection_t *c);
57 static ngx_int_t ngx_stream_proxy_process(ngx_stream_session_t *s, 59 static ngx_int_t ngx_stream_proxy_process(ngx_stream_session_t *s,
58 ngx_uint_t from_upstream, ngx_uint_t do_write); 60 ngx_uint_t from_upstream, ngx_uint_t do_write);
59 static void ngx_stream_proxy_next_upstream(ngx_stream_session_t *s); 61 static void ngx_stream_proxy_next_upstream(ngx_stream_session_t *s);
813 815
814 816
815 static void 817 static void
816 ngx_stream_proxy_downstream_handler(ngx_event_t *ev) 818 ngx_stream_proxy_downstream_handler(ngx_event_t *ev)
817 { 819 {
820 ngx_stream_proxy_process_connection(ev, ev->write);
821 }
822
823
824 static void
825 ngx_stream_proxy_upstream_handler(ngx_event_t *ev)
826 {
827 ngx_stream_proxy_process_connection(ev, !ev->write);
828 }
829
830
831 static void
832 ngx_stream_proxy_process_connection(ngx_event_t *ev, ngx_uint_t from_upstream)
833 {
818 ngx_connection_t *c; 834 ngx_connection_t *c;
819 ngx_stream_session_t *s; 835 ngx_stream_session_t *s;
820 ngx_stream_upstream_t *u; 836 ngx_stream_upstream_t *u;
821 837
822 c = ev->data; 838 c = ev->data;
823 s = c->data; 839 s = c->data;
840 u = s->upstream;
824 841
825 if (ev->timedout) { 842 if (ev->timedout) {
826 ngx_connection_error(c, NGX_ETIMEDOUT, "connection timed out"); 843 ngx_connection_error(c, NGX_ETIMEDOUT, "connection timed out");
827 ngx_stream_proxy_finalize(s, NGX_DECLINED); 844 ngx_stream_proxy_finalize(s, NGX_DECLINED);
828 return; 845 return;
829 } 846 }
830 847
831 u = s->upstream; 848 if (from_upstream && u->upstream_buf.start == NULL) {
832 849 return;
833 if (!ev->write) { 850 }
834 ngx_stream_proxy_process(s, 0, 0); 851
835 852 ngx_stream_proxy_process(s, from_upstream, ev->write);
836 } else if (u->upstream_buf.start) {
837 ngx_stream_proxy_process(s, 1, 1);
838 }
839 }
840
841
842 static void
843 ngx_stream_proxy_upstream_handler(ngx_event_t *ev)
844 {
845 ngx_connection_t *c;
846 ngx_stream_session_t *s;
847 ngx_stream_upstream_t *u;
848
849 c = ev->data;
850 s = c->data;
851
852 u = s->upstream;
853
854 if (ev->write) {
855 ngx_stream_proxy_process(s, 0, 1);
856
857 } else if (u->upstream_buf.start) {
858 ngx_stream_proxy_process(s, 1, 0);
859 }
860 } 853 }
861 854
862 855
863 static void 856 static void
864 ngx_stream_proxy_connect_handler(ngx_event_t *ev) 857 ngx_stream_proxy_connect_handler(ngx_event_t *ev)