view src/com/trilead/ssh2/transport/ClientServerHello.java @ 194:1b3f25b6117f
read deployment.connections on startup for global preferences also
author
Carl Byington <carl@five-ten-sg.com>
date
Wed, 02 Jul 2014 18:09:55 -0700 (2014-07-03)
parents
0ce5cc452d02
children
line source
+ −
+ − package com.trilead.ssh2.transport;
+ −
+ − import java.io.IOException;
+ − import java.io.InputStream;
+ − import java.io.OutputStream;
+ − import java.io.UnsupportedEncodingException;
+ −
+ − import com.trilead.ssh2.Connection;
+ −
+ − /**
+ − * ClientServerHello.
+ − *
+ − * @author Christian Plattner, plattner@trilead.com
+ − * @version $Id: ClientServerHello.java,v 1.2 2008/04/01 12:38:09 cplattne Exp $
+ − */
+ − public class ClientServerHello {
+ − String server_line;
+ − String client_line;
+ −
+ − String server_versioncomment;
+ −
+ − public final static int readLineRN(InputStream is, byte[] buffer) throws IOException {
+ − int pos = 0;
+ − boolean need10 = false;
+ − int len = 0;
+ −
+ − while (true) {
+ − int c = is.read();
+ −
+ − if (c == -1)
+ − throw new IOException("Premature connection close");
+ −
+ − buffer[pos++] = (byte) c;
+ −
+ − if (c == 13) {
+ − need10 = true;
+ − continue;
+ − }
+ −
+ − if (c == 10)
+ − break;
+ −
+ − if (need10 == true)
+ − throw new IOException("Malformed line sent by the server, the line does not end correctly.");
+ −
+ − len++;
+ −
+ − if (pos >= buffer.length)
+ − throw new IOException("The server sent a too long line.");
+ − }
+ −
+ − return len;
+ − }
+ −
+ − public ClientServerHello(InputStream bi, OutputStream bo) throws IOException {
+ − client_line = "SSH-2.0-" + Connection.identification;
+ − bo.write((client_line + "\r\n").getBytes("ISO-8859-1"));
+ − bo.flush();
+ − byte[] serverVersion = new byte[512];
+ −
+ − for (int i = 0; i < 50; i++) {
+ − int len = readLineRN(bi, serverVersion);
+ − server_line = new String(serverVersion, 0, len, "ISO-8859-1");
+ −
+ − if (server_line.startsWith("SSH-"))
+ − break;
+ − }
+ −
+ − if (server_line.startsWith("SSH-") == false)
+ − throw new IOException(
+ − "Malformed server identification string. There was no line starting with 'SSH-' amongst the first 50 lines.");
+ −
+ − if (server_line.startsWith("SSH-1.99-"))
+ − server_versioncomment = server_line.substring(9);
+ − else if (server_line.startsWith("SSH-2.0-"))
+ − server_versioncomment = server_line.substring(8);
+ − else
+ − throw new IOException("Server uses incompatible protocol, it is not SSH-2 compatible.");
+ − }
+ −
+ − /**
+ − * @return Returns the client_versioncomment.
+ − */
+ − public byte[] getClientString() {
+ − byte[] result;
+ −
+ − try {
+ − result = client_line.getBytes("ISO-8859-1");
+ − }
+ − catch (UnsupportedEncodingException ign) {
+ − result = client_line.getBytes();
+ − }
+ −
+ − return result;
+ − }
+ −
+ − /**
+ − * @return Returns the server_versioncomment.
+ − */
+ − public byte[] getServerString() {
+ − byte[] result;
+ −
+ − try {
+ − result = server_line.getBytes("ISO-8859-1");
+ − }
+ − catch (UnsupportedEncodingException ign) {
+ − result = server_line.getBytes();
+ − }
+ −
+ − return result;
+ − }
+ − }