void rfbUsage(void) { rfbProtocolExtension* extension; fprintf(stderr, "-unix path Path for the unix socket file to be created\n"); fprintf(stderr, "-rfbport port TCP port for RFB protocol\n"); #ifdef LIBVNCSERVER_IPv6 fprintf(stderr, "-rfbportv6 port TCP6 port for RFB protocol\n"); #endif fprintf(stderr, "-rfbwait time max time in ms to wait for RFB client\n"); fprintf(stderr, "-rfbauth passwd-file use authentication on RFB protocol\n" " (use 'storepasswd' to create a password file)\n"); fprintf(stderr, "-rfbversion 3.x Set the version of the RFB we choose to advertise\n"); fprintf(stderr, "-permitfiletransfer permit file transfer support\n"); fprintf(stderr, "-passwd plain-password use authentication \n" " (use plain-password as password, USE AT YOUR RISK)\n"); fprintf(stderr, "-deferupdate time time in ms to defer updates " "(default 40)\n"); fprintf(stderr, "-deferptrupdate time time in ms to defer pointer updates" " (default none)\n"); fprintf(stderr, "-desktop name VNC desktop name (default \"LibVNCServer\")\n"); fprintf(stderr, "-alwaysshared always treat new clients as shared\n"); fprintf(stderr, "-nevershared never treat new clients as shared\n"); fprintf(stderr, "-dontdisconnect don't disconnect existing clients when a " "new non-shared\n" " connection comes in (refuse new connection " "instead)\n"); fprintf(stderr, "-httpdir dir-path enable http server using dir-path home\n"); fprintf(stderr, "-httpport portnum use portnum for http connection\n"); #ifdef LIBVNCSERVER_IPv6 fprintf(stderr, "-httpportv6 portnum use portnum for IPv6 http connection\n"); #endif fprintf(stderr, "-enablehttpproxy enable http proxy support\n"); fprintf(stderr, "-progressive height enable progressive updating for slow links\n"); fprintf(stderr, "-listen ipaddr listen for connections only on network interface with\n"); fprintf(stderr, " addr ipaddr. '-listen localhost' and hostname work too.\n"); #ifdef LIBVNCSERVER_IPv6 fprintf(stderr, "-listenv6 ipv6addr listen for IPv6 connections only on network interface with\n"); fprintf(stderr, " addr ipv6addr. '-listen localhost' and hostname work too.\n"); #endif for(extension=rfbGetExtensionIterator(); extension; extension=extension->next) if(extension->usage) extension->usage(); rfbReleaseExtensionIterator(); }
int VNCServer::Client::Connect(WebSocket *ws) { Debug(">VNCServer::Client::Connect [ws:%p,this:%p]\n",ws,this); //Store websocekt this->ws = ws; rfbProtocolVersionMsg pv; sprintf(pv,rfbProtocolVersionFormat,cl->screen->protocolMajorVersion,cl->screen->protocolMinorVersion); //Write protocol version if (rfbWriteExact(cl, pv, sz_rfbProtocolVersionMsg) < 0) { rfbLogPerror("rfbNewClient: write"); rfbCloseClient(cl); rfbClientConnectionGone(cl); return Error("-Could not write protocol version"); } //Enable extension for(rfbProtocolExtension* extension = rfbGetExtensionIterator(); extension; extension=extension->next) { void* data = NULL; /* if the extension does not have a newClient method, it wants * to be initialized later. */ if(extension->newClient && extension->newClient(cl, &data)) rfbEnableExtension(cl, extension, data); } rfbReleaseExtensionIterator(); cl->onHold = FALSE; //Start thread createPriorityThread(&thread,run,this,0); Debug("<VNCServer::Client::Connect [ws:%p,this:%p]\n",ws,this); //OK return 1; }
rfbBool rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[]) { int i,i1; if(!argc) return TRUE; for (i = i1 = 1; i < *argc;) { if (strcmp(argv[i], "-help") == 0) { rfbUsage(); return FALSE; } else if (strcmp(argv[i], "-rfbport") == 0) { /* -rfbport port */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->port = atoi(argv[++i]); #ifdef LIBVNCSERVER_IPv6 } else if (strcmp(argv[i], "-unix") == 0) { /* -unix port */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->unixSockPath = argv[++i]; } else if (strcmp(argv[i], "-rfbportv6") == 0) { /* -rfbportv6 port */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->ipv6port = atoi(argv[++i]); #endif } else if (strcmp(argv[i], "-rfbwait") == 0) { /* -rfbwait ms */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->maxClientWait = atoi(argv[++i]); } else if (strcmp(argv[i], "-rfbauth") == 0) { /* -rfbauth passwd-file */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->authPasswdData = argv[++i]; } else if (strcmp(argv[i], "-permitfiletransfer") == 0) { /* -permitfiletransfer */ rfbScreen->permitFileTransfer = TRUE; } else if (strcmp(argv[i], "-rfbversion") == 0) { /* -rfbversion 3.6 */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } sscanf(argv[++i],"%d.%d", &rfbScreen->protocolMajorVersion, &rfbScreen->protocolMinorVersion); } else if (strcmp(argv[i], "-passwd") == 0) { /* -passwd password */ char **passwds = malloc(sizeof(char**)*2); if (i + 1 >= *argc) { rfbUsage(); return FALSE; } passwds[0] = argv[++i]; passwds[1] = NULL; rfbScreen->authPasswdData = (void*)passwds; rfbScreen->passwordCheck = rfbCheckPasswordByList; } else if (strcmp(argv[i], "-deferupdate") == 0) { /* -deferupdate milliseconds */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->deferUpdateTime = atoi(argv[++i]); } else if (strcmp(argv[i], "-deferptrupdate") == 0) { /* -deferptrupdate milliseconds */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->deferPtrUpdateTime = atoi(argv[++i]); } else if (strcmp(argv[i], "-desktop") == 0) { /* -desktop desktop-name */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->desktopName = argv[++i]; } else if (strcmp(argv[i], "-alwaysshared") == 0) { rfbScreen->alwaysShared = TRUE; } else if (strcmp(argv[i], "-nevershared") == 0) { rfbScreen->neverShared = TRUE; } else if (strcmp(argv[i], "-dontdisconnect") == 0) { rfbScreen->dontDisconnect = TRUE; } else if (strcmp(argv[i], "-httpdir") == 0) { /* -httpdir directory-path */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->httpDir = argv[++i]; } else if (strcmp(argv[i], "-httpport") == 0) { /* -httpport portnum */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->httpPort = atoi(argv[++i]); #ifdef LIBVNCSERVER_IPv6 } else if (strcmp(argv[i], "-httpportv6") == 0) { /* -httpportv6 portnum */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->http6Port = atoi(argv[++i]); #endif } else if (strcmp(argv[i], "-enablehttpproxy") == 0) { rfbScreen->httpEnableProxyConnect = TRUE; } else if (strcmp(argv[i], "-progressive") == 0) { /* -httpport portnum */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->progressiveSliceHeight = atoi(argv[++i]); } else if (strcmp(argv[i], "-listen") == 0) { /* -listen ipaddr */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } if (! rfbStringToAddr(argv[++i], &(rfbScreen->listenInterface))) { return FALSE; } #ifdef LIBVNCSERVER_IPv6 } else if (strcmp(argv[i], "-listenv6") == 0) { /* -listenv6 ipv6addr */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->listen6Interface = argv[++i]; #endif #ifdef LIBVNCSERVER_WITH_WEBSOCKETS } else if (strcmp(argv[i], "-sslkeyfile") == 0) { /* -sslkeyfile sslkeyfile */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->sslkeyfile = argv[++i]; } else if (strcmp(argv[i], "-sslcertfile") == 0) { /* -sslcertfile sslcertfile */ if (i + 1 >= *argc) { rfbUsage(); return FALSE; } rfbScreen->sslcertfile = argv[++i]; #endif } else { rfbProtocolExtension* extension; int handled=0; for(extension=rfbGetExtensionIterator(); handled==0 && extension; extension=extension->next) if(extension->processArgument) handled = extension->processArgument(*argc - i, argv + i); rfbReleaseExtensionIterator(); if(handled==0) { i++; i1=i; continue; } i+=handled-1; } /* we just remove the processed arguments from the list */ rfbPurgeArguments(argc,&i1,i-i1+1,argv); i=i1; } return TRUE; }