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
00047 public class Buffer{
00048 final byte[] tmp=new byte[4];
00049 byte[] buffer;
00050 int index;
00051 int s;
00052
00056 public Buffer(int size){
00057 buffer=new byte[size];
00058 index=0;
00059 s=0;
00060 }
00061
00065 public Buffer(byte[] buffer){
00066 this.buffer=buffer;
00067 index=0;
00068 s=0;
00069 }
00070
00074 public Buffer(){ this(1024*10*2); }
00075
00079 public void putByte(byte foo){
00080 buffer[index++]=foo;
00081 }
00082
00088 public void putByte(byte[] foo) {
00089 putByte(foo, 0, foo.length);
00090 }
00091
00097 public void putByte(byte[] foo, int begin, int length) {
00098 System.arraycopy(foo, begin, buffer, index, length);
00099 index+=length;
00100 }
00101
00106 public void putString(byte[] foo){
00107 putString(foo, 0, foo.length);
00108 }
00119 public void putString(byte[] foo, int begin, int length) {
00120 putInt(length);
00121 putByte(foo, begin, length);
00122 }
00123
00127 public void putInt(int val) {
00128 tmp[0]=(byte)(val >>> 24);
00129 tmp[1]=(byte)(val >>> 16);
00130 tmp[2]=(byte)(val >>> 8);
00131 tmp[3]=(byte)(val);
00132 System.arraycopy(tmp, 0, buffer, index, 4);
00133 index+=4;
00134 }
00135
00139 public void putLong(long val) {
00140 tmp[0]=(byte)(val >>> 56);
00141 tmp[1]=(byte)(val >>> 48);
00142 tmp[2]=(byte)(val >>> 40);
00143 tmp[3]=(byte)(val >>> 32);
00144 System.arraycopy(tmp, 0, buffer, index, 4);
00145 tmp[0]=(byte)(val >>> 24);
00146 tmp[1]=(byte)(val >>> 16);
00147 tmp[2]=(byte)(val >>> 8);
00148 tmp[3]=(byte)(val);
00149 System.arraycopy(tmp, 0, buffer, index+4, 4);
00150 index+=8;
00151 }
00152
00156 void skip(int n) {
00157 index+=n;
00158 }
00159
00164 void putPad(int n) {
00165 while(n>0){
00166 buffer[index++]=(byte)0;
00167 n--;
00168 }
00169 }
00170
00177 public void putMPInt(byte[] foo){
00178
00179
00180 int i=foo.length;
00181 if((foo[0]&0x80)!=0){
00182 i++;
00183 putInt(i);
00184 putByte((byte)0);
00185 }
00186 else{
00187 putInt(i);
00188 }
00189 putByte(foo);
00190 }
00191
00196 public int getLength(){
00197 return index-s;
00198 }
00199
00203 public int getOffSet(){
00204 return s;
00205 }
00213 public void setOffSet(int s){
00214 this.s=s;
00215 }
00216
00221 public long getLong(){
00222 long foo = getInt()&0xffffffffL;
00223 foo = ((foo<<32)) | (getInt()&0xffffffffL);
00224 return foo;
00225 }
00226
00230 public int getInt(){
00231 int foo = getShort();
00232 foo = ((foo<<16)&0xffff0000) | (getShort()&0xffff);
00233 return foo;
00234 }
00235
00239 public long getUInt(){
00240 long foo = 0L;
00241 long bar = 0L;
00242 foo = getByte();
00243 foo = ((foo<<8)&0xff00)|(getByte()&0xff);
00244 bar = getByte();
00245 bar = ((bar<<8)&0xff00)|(getByte()&0xff);
00246 foo = ((foo<<16)&0xffff0000) | (bar&0xffff);
00247 return foo;
00248 }
00249
00253 int getShort() {
00254 int foo = getByte();
00255 foo = ((foo<<8)&0xff00)|(getByte()&0xff);
00256 return foo;
00257 }
00258
00262 public int getByte() {
00263 return (buffer[s++]&0xff);
00264 }
00265
00271 public void getByte(byte[] foo) {
00272 getByte(foo, 0, foo.length);
00273 }
00274
00281 void getByte(byte[] foo, int start, int len) {
00282 System.arraycopy(buffer, s, foo, start, len);
00283 s+=len;
00284 }
00285
00297 public int getByte(int len) {
00298 int foo=s;
00299 s+=len;
00300 return foo;
00301 }
00302
00307 public byte[] getMPInt() {
00308 int i=getInt();
00309 if(i<0 ||
00310 i>8*1024){
00311
00312 i = 8*1024;
00313 }
00314 byte[] foo=new byte[i];
00315 getByte(foo, 0, i);
00316 return foo;
00317 }
00318
00324 public byte[] getMPIntBits() {
00325 int bits=getInt();
00326 int bytes=(bits+7)/8;
00327 byte[] foo=new byte[bytes];
00328 getByte(foo, 0, bytes);
00329 if((foo[0]&0x80)!=0){
00330 byte[] bar=new byte[foo.length+1];
00331 bar[0]=0;
00332 System.arraycopy(foo, 0, bar, 1, foo.length);
00333 foo=bar;
00334 }
00335 return foo;
00336 }
00337
00343 public byte[] getString() {
00344 int i = getInt();
00345 if(i<0 ||
00346 i>256*1024){
00347
00348 i = 256*1024;
00349 }
00350 byte[] foo=new byte[i];
00351 getByte(foo, 0, i);
00352 return foo;
00353 }
00354
00366 byte[] getString(int[]start, int[]len) {
00367 int i=getInt();
00368 start[0]=getByte(i);
00369 len[0]=i;
00370 return buffer;
00371 }
00372
00376 public void reset(){
00377 index=0;
00378 s=0;
00379 }
00380
00386 public void shift(){
00387 if(s==0)return;
00388 System.arraycopy(buffer, s, buffer, 0, index-s);
00389 index=index-s;
00390 s=0;
00391 }
00392
00396 void rewind(){
00397 s=0;
00398 }
00399
00407 byte getCommand(){
00408 return buffer[5];
00409 }
00410
00411
00420 void checkFreeSize(int n){
00421 if(buffer.length<index+n){
00422 byte[] tmp = new byte[buffer.length*2];
00423 System.arraycopy(buffer, 0, tmp, 0, index);
00424 buffer = tmp;
00425 }
00426 }
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459 }