@Override public long write(SSHPacket payload) throws TransportException { writeLock.lock(); try { if (kexer.isKexOngoing()) { // Only transport layer packets (1 to 49) allowed except SERVICE_REQUEST final Message m = Message.fromByte(payload.array()[payload.rpos()]); if (!m.in(1, 49) || m == Message.SERVICE_REQUEST) { assert m != Message.KEXINIT; kexer.waitForDone(); } } else if (encoder.getSequenceNumber() == 0) // We get here every 2**32th packet kexer.startKex(true); final long seq = encoder.encode(payload); try { connInfo.out.write(payload.array(), payload.rpos(), payload.available()); connInfo.out.flush(); } catch (IOException ioe) { throw new TransportException(ioe); } return seq; } finally { writeLock.unlock(); } }
/** * Writes a byte indicating the SSH message identifier * * @param msg the identifier as a {@link Message} type * * @return this */ public SSHPacket putMessageID(Message msg) { return putByte(msg.toByte()); }
@Override public void handle(Message msg, SSHPacket buf) throws SSHException { if (msg.in(91, 100)) { getChannel(buf).handle(msg, buf); } else if (msg.in(80, 90)) { switch (msg) { case GLOBAL_REQUEST: gotGlobalRequest(buf); break; case REQUEST_SUCCESS: gotGlobalReqResponse(buf); break; case REQUEST_FAILURE: gotGlobalReqResponse(null); break; case CHANNEL_OPEN: gotChannelOpen(buf); break; default: super.handle(msg, buf); break; } } else { super.handle(msg, buf); } }
/** * Reads an SSH byte and returns it as {@link Message} * * @return the message identifier */ public Message readMessageID() throws BufferException { return Message.fromByte(readByte()); }
@Override public void handle(Message msg, SSHPacket buf) throws SSHException { if (!msg.in(50, 80)) // ssh-userauth packets have message numbers between 50-80 throw new TransportException(DisconnectReason.PROTOCOL_ERROR);
/** * Reads an SSH byte and returns it as {@link Message} * * @return the message identifier */ public Message readMessageID() throws BufferException { return Message.fromByte(readByte()); }
@Override public long write(SSHPacket payload) throws TransportException { writeLock.lock(); try { if (kexer.isKexOngoing()) { // Only transport layer packets (1 to 49) allowed except SERVICE_REQUEST final Message m = Message.fromByte(payload.array()[payload.rpos()]); if (!m.in(1, 49) || m == Message.SERVICE_REQUEST) { assert m != Message.KEXINIT; kexer.waitForDone(); } } else if (encoder.getSequenceNumber() == 0) // We get here every 2**32th packet kexer.startKex(true); final long seq = encoder.encode(payload); try { connInfo.out.write(payload.array(), payload.rpos(), payload.available()); connInfo.out.flush(); } catch (IOException ioe) { throw new TransportException(ioe); } return seq; } finally { writeLock.unlock(); } }
@Override public void handle(Message msg, SSHPacket buf) throws SSHException { if (msg.in(91, 100)) getChannel(buf).handle(msg, buf); else if (msg.in(80, 90)) switch (msg) { case REQUEST_SUCCESS: gotGlobalReqResponse(buf); break; case REQUEST_FAILURE: gotGlobalReqResponse(null); break; case CHANNEL_OPEN: gotChannelOpen(buf); break; default: super.handle(msg, buf); } else super.handle(msg, buf); }
private byte[] generateMIC() throws UserAuthException { byte[] msg = new PlainBuffer().putString(params.getTransport().getSessionID()) .putByte(Message.USERAUTH_REQUEST.toByte()) .putString(params.getUsername()) .putString(params.getNextServiceName()) .putString(getName()) .getCompactData(); try { return secContext.getMIC(msg, 0, msg.length, null); } catch (GSSException e) { throw new UserAuthException("Exception getting message integrity code", e); } }
/** * Reads an SSH byte and returns it as {@link Message} * * @return the message identifier */ public Message readMessageID() throws BufferException { return Message.fromByte(readByte()); }
@Override public long write(SSHPacket payload) throws TransportException { writeLock.lock(); try { if (kexer.isKexOngoing()) { // Only transport layer packets (1 to 49) allowed except SERVICE_REQUEST final Message m = Message.fromByte(payload.array()[payload.rpos()]); if (!m.in(1, 49) || m == Message.SERVICE_REQUEST) { assert m != Message.KEXINIT; kexer.waitForDone(); } } else if (encoder.getSequenceNumber() == 0) // We get here every 2**32th packet kexer.startKex(true); final long seq = encoder.encode(payload); try { connInfo.out.write(payload.array(), payload.rpos(), payload.available()); connInfo.out.flush(); } catch (IOException ioe) { throw new TransportException(ioe); } return seq; } finally { writeLock.unlock(); } }
@Override public void handle(Message msg, SSHPacket buf) throws SSHException { if (msg.in(91, 100)) { getChannel(buf).handle(msg, buf); } else if (msg.in(80, 90)) { switch (msg) { case GLOBAL_REQUEST: gotGlobalRequest(buf); break; case REQUEST_SUCCESS: gotGlobalReqResponse(buf); break; case REQUEST_FAILURE: gotGlobalReqResponse(null); break; case CHANNEL_OPEN: gotChannelOpen(buf); break; default: super.handle(msg, buf); break; } } else { super.handle(msg, buf); } }
/** * Writes a byte indicating the SSH message identifier * * @param msg the identifier as a {@link Message} type * * @return this */ public SSHPacket putMessageID(Message msg) { return putByte(msg.toByte()); }
@Override public void handle(Message msg, SSHPacket buf) throws SSHException { if (!msg.in(50, 80)) // ssh-userauth packets have message numbers between 50-80 throw new TransportException(DisconnectReason.PROTOCOL_ERROR);
/** * Writes a byte indicating the SSH message identifier * * @param msg the identifier as a {@link Message} type * * @return this */ public SSHPacket putMessageID(Message msg) { return putByte(msg.toByte()); }
@Override public void handle(Message msg, SSHPacket buf) throws SSHException { if (!msg.in(50, 80)) // ssh-userauth packets have message numbers between 50-80 throw new TransportException(DisconnectReason.PROTOCOL_ERROR);
private byte[] generateMIC() throws UserAuthException { byte[] msg = new PlainBuffer().putString(params.getTransport().getSessionID()) .putByte(Message.USERAUTH_REQUEST.toByte()) .putString(params.getUsername()) .putString(params.getNextServiceName()) .putString(getName()) .getCompactData(); try { return secContext.getMIC(msg, 0, msg.length, null); } catch (GSSException e) { throw new UserAuthException("Exception getting message integrity code", e); } }