aboutsummaryrefslogtreecommitdiff
path: root/src/platform/windows/win_ipcdial.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-12-22 19:23:26 -0800
committerGitHub <noreply@github.com>2018-12-22 19:23:26 -0800
commitee16d11a59120cd4d981e0dcb90741fa4141372a (patch)
tree98da4bc9601f30e2c9deb403fe213c9fb4335597 /src/platform/windows/win_ipcdial.c
parentd00483eadbee48b820a8a79163c5296953b6f5cb (diff)
downloadnng-ee16d11a59120cd4d981e0dcb90741fa4141372a.tar.gz
nng-ee16d11a59120cd4d981e0dcb90741fa4141372a.tar.bz2
nng-ee16d11a59120cd4d981e0dcb90741fa4141372a.zip
fixes #823 Define public IPC (#824)
This introduces a basic IPC API, modeled on the TCP API, for direct access. Only connection options are exposed at present -- we need to add options for dialers and listeners (and particularly listener settings for permissions and security attributes.) Documentation is still outstanding, but a very limited test suite exists.
Diffstat (limited to 'src/platform/windows/win_ipcdial.c')
-rw-r--r--src/platform/windows/win_ipcdial.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/platform/windows/win_ipcdial.c b/src/platform/windows/win_ipcdial.c
index 67865687..4c3d5c6c 100644
--- a/src/platform/windows/win_ipcdial.c
+++ b/src/platform/windows/win_ipcdial.c
@@ -10,8 +10,6 @@
#include "core/nng_impl.h"
-#ifdef NNG_PLATFORM_WINDOWS
-
#include "win_ipc.h"
#include <stdio.h>
@@ -108,16 +106,21 @@ ipc_dial_thr(void *arg)
nni_list_remove(&d->aios, aio);
nni_aio_set_prov_extra(aio, 0, NULL);
- nni_strfree(path);
if (((rv = nni_win_io_register(f)) != 0) ||
((rv = nni_win_ipc_conn_init(&c, f)) != 0)) {
DisconnectNamedPipe(f);
CloseHandle(f);
nni_aio_finish_error(aio, rv);
+ nni_strfree(path);
continue;
}
- c->dialer = d;
+ c->dialer = true;
+ c->sa.s_ipc.sa_family = NNG_AF_IPC;
+ snprintf(c->sa.s_ipc.sa_path,
+ sizeof(c->sa.s_ipc.sa_path), "%s",
+ path + strlen(IPC_PIPE_PREFIX));
+ nni_strfree(path);
nni_aio_set_output(aio, 0, c);
nni_aio_finish(aio, 0, 0);
}
@@ -169,8 +172,8 @@ nni_ipc_dialer_dial(nni_ipc_dialer *d, const nni_sockaddr *sa, nni_aio *aio)
nni_aio_finish_error(aio, NNG_EADDRINVAL);
return;
}
- if ((rv = nni_asprintf(&path, "\\\\.\\pipe\\%s", sa->s_ipc.sa_path)) !=
- 0) {
+ if ((rv = nni_asprintf(
+ &path, IPC_PIPE_PREFIX "%s", sa->s_ipc.sa_path)) != 0) {
nni_aio_finish_error(aio, rv);
return;
}
@@ -261,5 +264,3 @@ nni_win_ipc_sysfini(void)
nni_cv_fini(&worker->cv);
nni_mtx_fini(&worker->mtx);
}
-
-#endif // NNG_PLATFORM_WINDOWS