Mercurial > hg > nginx-quic
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) |