summaryrefslogtreecommitdiffstats
path: root/common/trans.c
diff options
context:
space:
mode:
authorJustin Terry (VM) <juterry@microsoft.com>2017-09-21 16:13:05 -0700
committerjsorg71 <jay.sorg@gmail.com>2017-11-07 18:20:45 -0800
commit50bd624cc49d7409f6f73b65aeae4cabdec3e7ee (patch)
tree93efaaa410fb6bd279979bd1f590df407a22350f /common/trans.c
parent3d29b6ec768155b6eacf2846dbdb43eddde1d48c (diff)
downloadxrdp-proprietary-50bd624cc49d7409f6f73b65aeae4cabdec3e7ee.tar.gz
xrdp-proprietary-50bd624cc49d7409f6f73b65aeae4cabdec3e7ee.zip
Implements XRDP over vsock
1. Implements the ability to use AV_VSOCK for the transport rather than TCP. 2. Updates the ini file to be able to conditionally turn this feature on.
Diffstat (limited to 'common/trans.c')
-rw-r--r--common/trans.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/common/trans.c b/common/trans.c
index d73764de..8a271722 100644
--- a/common/trans.c
+++ b/common/trans.c
@@ -831,6 +831,26 @@ trans_listen_address(struct trans *self, char *port, const char *address)
}
}
}
+#if defined(XRDP_ENABLE_VSOCK)
+ else if (self->mode == TRANS_MODE_VSOCK) /* vsock socket */
+ {
+ self->sck = g_vsock_socket();
+ if (self->sck < 0)
+ return 1;
+
+ g_tcp_set_non_blocking(self->sck);
+
+ if (g_vsock_bind(self->sck, port) == 0)
+ {
+ if (g_tcp_listen(self->sck) == 0)
+ {
+ self->status = TRANS_STATUS_UP; /* ok */
+ self->type1 = TRANS_TYPE_LISTENER; /* listener */
+ return 0;
+ }
+ }
+ }
+#endif
return 1;
}