1/* This example shows how to connect to an UltraVNC repeater. */ 2 3#include <rfb/rfb.h> 4 5static void clientGone(rfbClientPtr cl) 6{ 7 rfbShutdownServer(cl->screen, TRUE); 8} 9 10int main(int argc,char** argv) 11{ 12 char *repeaterHost; 13 int repeaterPort, sock; 14 char id[250]; 15 rfbClientPtr cl; 16 17 int i,j; 18 uint16_t* f; 19 20 /* Parse command-line arguments */ 21 if (argc < 3) { 22 fprintf(stderr, 23 "Usage: %s <id> <repeater-host> [<repeater-port>]\n", argv[0]); 24 exit(1); 25 } 26 snprintf(id, sizeof(id) - 1, "ID:%s", argv[1]); 27 repeaterHost = argv[2]; 28 repeaterPort = argc < 4 ? 5500 : atoi(argv[3]); 29 30 /* The initialization is identical to simple15.c */ 31 rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,400,300,5,3,2); 32 if(!server) 33 return 0; 34 server->frameBuffer=(char*)malloc(400*300*2); 35 f=(uint16_t*)server->frameBuffer; 36 for(j=0;j<300;j++) 37 for(i=0;i<400;i++) 38 f[j*400+i]=/* red */ ((j*32/300) << 10) | 39 /* green */ (((j+400-i)*32/700) << 5) | 40 /* blue */ ((i*32/400)); 41 42 /* Now for the repeater-specific part: */ 43 server->port = -1; /* do not listen on any port */ 44 server->ipv6port = -1; /* do not listen on any port */ 45 46 sock = rfbConnectToTcpAddr(repeaterHost, repeaterPort); 47 if (sock < 0) { 48 perror("connect to repeater"); 49 return 1; 50 } 51 if (write(sock, id, sizeof(id)) != sizeof(id)) { 52 perror("writing id"); 53 return 1; 54 } 55 cl = rfbNewClient(server, sock); 56 if (!cl) { 57 perror("new client"); 58 return 1; 59 } 60 cl->reverseConnection = 0; 61 cl->clientGoneHook = clientGone; 62 63 /* Run the server */ 64 rfbInitServer(server); 65 rfbRunEventLoop(server,-1,FALSE); 66 67 return 0; 68} 69