UltraVNC offers an add-on to connect clients and servers via IDs with a so-called repeater (e.g. to bridge firewalled clients and servers): http://www.uvnc.com/products/uvnc-repeater.html This example demonstrates how to use that feature with a LibVNCServer-based server. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>pull/1/head
parent
7b9fc019de
commit
c0e012e4d2
@ -0,0 +1,62 @@
|
||||
/* This example shows how to connect to an UltraVNC repeater. */
|
||||
|
||||
#include <rfb/rfb.h>
|
||||
|
||||
int main(int argc,char** argv)
|
||||
{
|
||||
char *repeaterHost;
|
||||
int repeaterPort, sock;
|
||||
char id[250];
|
||||
rfbClientPtr cl;
|
||||
|
||||
int i,j;
|
||||
uint16_t* f;
|
||||
|
||||
/* Parse command-line arguments */
|
||||
if (argc < 3) {
|
||||
fprintf(stderr,
|
||||
"Usage: %s <id> <repeater-host> [<repeater-port>]\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
snprintf(id, sizeof(id) - 1, "ID:%s", argv[1]);
|
||||
repeaterHost = argv[2];
|
||||
repeaterPort = argc < 4 ? 5500 : atoi(argv[3]);
|
||||
|
||||
/* The initialization is identical to simple15.c */
|
||||
rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,400,300,5,3,2);
|
||||
if(!server)
|
||||
return 0;
|
||||
server->frameBuffer=(char*)malloc(400*300*2);
|
||||
f=(uint16_t*)server->frameBuffer;
|
||||
for(j=0;j<300;j++)
|
||||
for(i=0;i<400;i++)
|
||||
f[j*400+i]=/* red */ ((j*32/300) << 10) |
|
||||
/* green */ (((j+400-i)*32/700) << 5) |
|
||||
/* blue */ ((i*32/400));
|
||||
|
||||
/* Now for the repeater-specific part: */
|
||||
server->port = -1; /* do not listen on any port */
|
||||
server->ipv6port = -1; /* do not listen on any port */
|
||||
|
||||
sock = rfbConnectToTcpAddr(repeaterHost, repeaterPort);
|
||||
if (sock < 0) {
|
||||
perror("connect to repeater");
|
||||
return 1;
|
||||
}
|
||||
if (write(sock, id, sizeof(id)) != sizeof(id)) {
|
||||
perror("writing id");
|
||||
return 1;
|
||||
}
|
||||
cl = rfbNewClient(server, sock);
|
||||
if (!cl) {
|
||||
perror("new client");
|
||||
return 1;
|
||||
}
|
||||
cl->reverseConnection = 0;
|
||||
|
||||
/* Run the server */
|
||||
rfbInitServer(server);
|
||||
rfbRunEventLoop(server,-1,FALSE);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue