How to implement handshake in an upstream module?

Maxim Dounin mdounin at mdounin.ru
Wed Dec 4 22:38:35 UTC 2013


Hello!

On Thu, Dec 05, 2013 at 02:39:28AM +0530, Reetesh Ranjan wrote:

> Before I send my main request and process the response through 
> create_request and process_header (and filter) callbacks, I need 
> to have a short handshake with the upstream servers. It consists 
> of a send() and a recv() from the upstream module. How to 
> implement this?
> Would the following sequence work?States: H = do-handshake 
> (initial state), R = do-request1   In state H, send handshake 
> req first through create_request()2   In process_header() in 
> state == H     2.1  call 'create_request' again with state set 
> to R, so main request gets created     2.2  call 
> 'ngx_http_upstream_send_request' manually to restart the 
> req-response cycle3  Because of 2.2 we get a process_header() 
> call in state R
> Regards,Reetesh 		 	   		  

Obvious problem with the sequence: 
ngx_http_upstream_send_request() is static functions, and can't be 
called from a protocol module without modifications to 
ngx_http_upstream.c.

I don't think that handshake can be implemented without 
modifications to upstream module.  It's designed to implement 
request/response logic and doesn't assume any handshakes.

-- 
Maxim Dounin
http://nginx.org/en/donation.html



More information about the nginx-devel mailing list