Search in sources :

Example 1 with X11ServerData

use of com.trilead.ssh2.channel.X11ServerData in project intellij-community by JetBrains.

the class Session method requestX11Forwarding.

/**
	 * Request X11 forwarding for the current session.
	 * <p>
	 * You have to supply the name and port of your X-server.
	 * <p>
	 * This method may only be called before a program or shell is started in
	 * this session.
	 * 
	 * @param hostname the hostname of the real (target) X11 server (e.g., 127.0.0.1)
	 * @param port the port of the real (target) X11 server (e.g., 6010)
	 * @param cookie if non-null, then present this cookie to the real X11 server
	 * @param singleConnection if true, then the server is instructed to only forward one single
	 *        connection, no more connections shall be forwarded after first, or after the session
	 *        channel has been closed
	 * @throws IOException
	 */
public void requestX11Forwarding(String hostname, int port, byte[] cookie, boolean singleConnection) throws IOException {
    if (hostname == null)
        throw new IllegalArgumentException("hostname argument may not be null");
    synchronized (this) {
        /* The following is just a nicer error, we would catch it anyway later in the channel code */
        if (flag_closed)
            throw new IOException("This session is closed.");
        if (flag_x11_requested)
            throw new IOException("X11 forwarding was already requested.");
        if (flag_execution_started)
            throw new IOException("Cannot request X11 forwarding at this stage anymore, a remote execution has already started.");
        flag_x11_requested = true;
    }
    /* X11ServerData - used to store data about the target X11 server */
    X11ServerData x11data = new X11ServerData();
    x11data.hostname = hostname;
    x11data.port = port;
    x11data.x11_magic_cookie = cookie;
    /* if non-null, then present this cookie to the real X11 server */
    /* Generate fake cookie - this one is used between remote clients and our proxy */
    byte[] fakeCookie = new byte[16];
    String hexEncodedFakeCookie;
    while (true) {
        rnd.nextBytes(fakeCookie);
        /* Generate also hex representation of fake cookie */
        StringBuffer tmp = new StringBuffer(32);
        for (int i = 0; i < fakeCookie.length; i++) {
            String digit2 = Integer.toHexString(fakeCookie[i] & 0xff);
            tmp.append((digit2.length() == 2) ? digit2 : "0" + digit2);
        }
        hexEncodedFakeCookie = tmp.toString();
        if (cm.checkX11Cookie(hexEncodedFakeCookie) == null)
            break;
    }
    /* Ask for X11 forwarding */
    cm.requestX11(cn, singleConnection, "MIT-MAGIC-COOKIE-1", hexEncodedFakeCookie, 0);
    synchronized (this) {
        if (flag_closed == false) {
            this.x11FakeCookie = hexEncodedFakeCookie;
            cm.registerX11Cookie(hexEncodedFakeCookie, x11data);
        }
    }
/* Now it is safe to start remote X11 programs */
}
Also used : X11ServerData(com.trilead.ssh2.channel.X11ServerData) IOException(java.io.IOException)

Aggregations

X11ServerData (com.trilead.ssh2.channel.X11ServerData)1 IOException (java.io.IOException)1