Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}