aboutsummaryrefslogtreecommitdiff
path: root/src/supplemental/http/http.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-12-26 16:18:38 -0800
committerGarrett D'Amore <garrett@damore.org>2017-12-26 16:37:41 -0800
commiteb1f8db4ed87867f0f08afba79253e3981db9c88 (patch)
treeaa85c54c5c53ab62cc269e83c04e106637d49473 /src/supplemental/http/http.c
parent93db6fe3aaff421d61a15993ba6827b742ab00d1 (diff)
downloadnng-eb1f8db4ed87867f0f08afba79253e3981db9c88.tar.gz
nng-eb1f8db4ed87867f0f08afba79253e3981db9c88.tar.bz2
nng-eb1f8db4ed87867f0f08afba79253e3981db9c88.zip
fixes #165 Add address properties for websocket pipes
Diffstat (limited to 'src/supplemental/http/http.c')
-rw-r--r--src/supplemental/http/http.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/src/supplemental/http/http.c b/src/supplemental/http/http.c
index 3958a738..08a8eb13 100644
--- a/src/supplemental/http/http.c
+++ b/src/supplemental/http/http.c
@@ -42,6 +42,8 @@ struct nni_http {
void *sock;
void (*rd)(void *, nni_aio *);
void (*wr)(void *, nni_aio *);
+ int (*sock_addr)(void *, nni_sockaddr *);
+ int (*peer_addr)(void *, nni_sockaddr *);
void (*close)(void *);
void (*fini)(void *);
@@ -549,6 +551,26 @@ nni_http_write_full(nni_http *http, nni_aio *aio)
nni_mtx_unlock(&http->mtx);
}
+int
+nni_http_sock_addr(nni_http *http, nni_sockaddr *sa)
+{
+ int rv;
+ nni_mtx_lock(&http->mtx);
+ rv = http->closed ? NNG_ECLOSED : http->sock_addr(http->sock, sa);
+ nni_mtx_unlock(&http->mtx);
+ return (rv);
+}
+
+int
+nni_http_peer_addr(nni_http *http, nni_sockaddr *sa)
+{
+ int rv;
+ nni_mtx_lock(&http->mtx);
+ rv = http->closed ? NNG_ECLOSED : http->peer_addr(http->sock, sa);
+ nni_mtx_unlock(&http->mtx);
+ return (rv);
+}
+
void
nni_http_fini(nni_http *http)
{
@@ -591,12 +613,14 @@ nni_http_init(nni_http **httpp, nni_http_tran *tran)
nni_http_fini(http);
return (rv);
}
- http->rd_bufsz = HTTP_BUFSIZE;
- http->rd = tran->h_read;
- http->wr = tran->h_write;
- http->close = tran->h_close;
- http->fini = tran->h_fini;
- http->sock = tran->h_data;
+ http->rd_bufsz = HTTP_BUFSIZE;
+ http->rd = tran->h_read;
+ http->wr = tran->h_write;
+ http->close = tran->h_close;
+ http->fini = tran->h_fini;
+ http->sock = tran->h_data;
+ http->sock_addr = tran->h_sock_addr;
+ http->peer_addr = tran->h_peer_addr;
*httpp = http;