Packet.java
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 package com.jcraft.jsch;
00031
00038 public class Packet{
00039
00040 private static Random random=null;
00041 static void setRandom(Random foo){ random=foo;}
00042
00043 Buffer buffer;
00044 byte[] ba4=new byte[4];
00045
00050 public Packet(Buffer buffer){
00051 this.buffer=buffer;
00052 }
00053
00057 public void reset(){
00058 buffer.index=5;
00059 }
00060 void padding(int bsize){
00061 int len=buffer.index;
00062 int pad=(-len)&(bsize-1);
00063 if(pad<bsize){
00064 pad+=bsize;
00065 }
00066 len=len+pad-4;
00067 ba4[0]=(byte)(len>>>24);
00068 ba4[1]=(byte)(len>>>16);
00069 ba4[2]=(byte)(len>>>8);
00070 ba4[3]=(byte)(len);
00071 System.arraycopy(ba4, 0, buffer.buffer, 0, 4);
00072 buffer.buffer[4]=(byte)pad;
00073 synchronized(random){
00074 random.fill(buffer.buffer, buffer.index, pad);
00075 }
00076 buffer.skip(pad);
00077
00078
00079
00080
00081
00082
00083
00084 }
00085
00086 int shift(int len, int bsize, int mac){
00087 int s=len+5+9;
00088 int pad=(-s)&(bsize-1);
00089 if(pad<bsize)pad+=bsize;
00090 s+=pad;
00091 s+=mac;
00092 s+=32;
00093
00094
00095 if(buffer.buffer.length<s+buffer.index-5-9-len){
00096 byte[] foo=new byte[s+buffer.index-5-9-len];
00097 System.arraycopy(buffer.buffer, 0, foo, 0, buffer.buffer.length);
00098 buffer.buffer=foo;
00099 }
00100
00101
00102
00103
00104
00105
00106
00107
00108 System.arraycopy(buffer.buffer,
00109 len+5+9,
00110 buffer.buffer, s, buffer.index-5-9-len);
00111
00112 buffer.index=10;
00113 buffer.putInt(len);
00114 buffer.index=len+5+9;
00115 return s;
00116 }
00117 void unshift(byte command, int recipient, int s, int len){
00118 System.arraycopy(buffer.buffer,
00119 s,
00120 buffer.buffer, 5+9, len);
00121 buffer.buffer[5]=command;
00122 buffer.index=6;
00123 buffer.putInt(recipient);
00124 buffer.putInt(len);
00125 buffer.index=len+5+9;
00126 }
00127 Buffer getBuffer(){
00128 return buffer;
00129 }
00130 }