static ngx_int_t ngx_http_upstream_get_zeromq_peer(ngx_peer_connection_t *pc, void *data) { ngx_http_upstream_zeromq_peer_data_t *zp = data; ngx_int_t rc; if (zp->recv.endpoint != zp->send.endpoint) { pc->data = &zp->recv; rc = ngx_zeromq_connect(pc); pc->data = data; if (rc != NGX_OK) { return rc; } zp->recv.connection.data = zp->request; } pc->data = &zp->send; rc = ngx_zeromq_connect(pc); pc->data = data; if (rc != NGX_OK) { return rc; } zp->send.connection.data = zp->request; if (zp->recv.endpoint != zp->send.endpoint) { zp->send.recv = zp->recv.recv; zp->recv.send = zp->send.send; } if (zp->recv.endpoint->rand && zp->headers) { ngx_zeromq_headers_set_http(zp->headers->buf, zp->recv.endpoint); } return NGX_DONE; }
static ngx_int_t ngx_http_upstream_get_zeromq_peer(ngx_peer_connection_t *pc, void *data) { ngx_http_upstream_zeromq_peer_data_t *zp = data; ngx_int_t rc; u_char *zmq_peer; size_t len; rc = ngx_http_upstream_get_round_robin_peer(pc, data); if (rc != NGX_OK) { return rc; } len = sizeof("tcp://") + pc->name->len; zmq_peer = ngx_pnalloc(zp->request->pool, len); if (zmq_peer == NULL) { return NGX_ERROR; } (void) ngx_snprintf(zmq_peer, len - 1, "tcp://%V", pc->name); zmq_peer[len - 1] = '\0'; pc->data = zmq_peer; rc = ngx_zeromq_connect(pc); pc->data = data; if (rc != NGX_OK) { return rc; } zp->zmq = pc->connection->data; ngx_http_set_ctx(zp->request, zp->zmq, ngx_zeromq_module); return NGX_DONE; }