Blame examples/repeater.c

Packit 9c64f8
/* This example shows how to connect to an UltraVNC repeater. */
Packit 9c64f8
Packit 9c64f8
#include <rfb/rfb.h>
Packit 9c64f8
Packit 9c64f8
static void clientGone(rfbClientPtr cl)
Packit 9c64f8
{
Packit 9c64f8
  rfbShutdownServer(cl->screen, TRUE);
Packit 9c64f8
}
Packit 9c64f8
Packit 9c64f8
int main(int argc,char** argv)
Packit 9c64f8
{
Packit 9c64f8
  char *repeaterHost;
Packit 9c64f8
  int repeaterPort, sock;
Packit 9c64f8
  char id[250];
Packit 9c64f8
  rfbClientPtr cl;
Packit 9c64f8
Packit 9c64f8
  int i,j;
Packit 9c64f8
  uint16_t* f;
Packit 9c64f8
Packit 9c64f8
  /* Parse command-line arguments */
Packit 9c64f8
  if (argc < 3) {
Packit 9c64f8
    fprintf(stderr,
Packit 9c64f8
      "Usage: %s <id> <repeater-host> [<repeater-port>]\n", argv[0]);
Packit 9c64f8
    exit(1);
Packit 9c64f8
  }
Packit 9c64f8
  snprintf(id, sizeof(id) - 1, "ID:%s", argv[1]);
Packit 9c64f8
  repeaterHost = argv[2];
Packit 9c64f8
  repeaterPort = argc < 4 ? 5500 : atoi(argv[3]);
Packit 9c64f8
Packit 9c64f8
  /* The initialization is identical to simple15.c */
Packit 9c64f8
  rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,400,300,5,3,2);
Packit 9c64f8
  if(!server)
Packit 9c64f8
    return 0;
Packit 9c64f8
  server->frameBuffer=(char*)malloc(400*300*2);
Packit 9c64f8
  f=(uint16_t*)server->frameBuffer;
Packit 9c64f8
  for(j=0;j<300;j++)
Packit 9c64f8
    for(i=0;i<400;i++)
Packit 9c64f8
      f[j*400+i]=/* red */ ((j*32/300) << 10) |
Packit 9c64f8
		 /* green */ (((j+400-i)*32/700) << 5) |
Packit 9c64f8
		 /* blue */ ((i*32/400));
Packit 9c64f8
Packit 9c64f8
  /* Now for the repeater-specific part: */
Packit 9c64f8
  server->port = -1; /* do not listen on any port */
Packit 9c64f8
  server->ipv6port = -1; /* do not listen on any port */
Packit 9c64f8
Packit 9c64f8
  sock = rfbConnectToTcpAddr(repeaterHost, repeaterPort);
Packit 9c64f8
  if (sock < 0) {
Packit 9c64f8
    perror("connect to repeater");
Packit 9c64f8
    return 1;
Packit 9c64f8
  }
Packit 9c64f8
  if (write(sock, id, sizeof(id)) != sizeof(id)) {
Packit 9c64f8
    perror("writing id");
Packit 9c64f8
    return 1;
Packit 9c64f8
  }
Packit 9c64f8
  cl = rfbNewClient(server, sock);
Packit 9c64f8
  if (!cl) {
Packit 9c64f8
    perror("new client");
Packit 9c64f8
    return 1;
Packit 9c64f8
  }
Packit 9c64f8
  cl->reverseConnection = 0;
Packit 9c64f8
  cl->clientGoneHook = clientGone;
Packit 9c64f8
Packit 9c64f8
  /* Run the server */
Packit 9c64f8
  rfbInitServer(server);
Packit 9c64f8
  rfbRunEventLoop(server,-1,FALSE);
Packit 9c64f8
Packit 9c64f8
  return 0;
Packit 9c64f8
}