00001 using System;
00002 using System.Text;
00003
00004 namespace Tamir.SharpSsh.jsch
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
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 public class SftpATTRS
00050 {
00051
00052 static int S_ISUID = 04000;
00053 static int S_ISGID = 02000;
00054 static int S_ISVTX = 01000;
00055
00056 static int S_IRUSR = 00400;
00057 static int S_IWUSR = 00200;
00058 static int S_IXUSR = 00100;
00059 static int S_IREAD = 00400;
00060 static int S_IWRITE= 00200;
00061 static int S_IEXEC = 00100;
00062
00063 static int S_IRGRP = 00040;
00064 static int S_IWGRP = 00020;
00065 static int S_IXGRP = 00010;
00066
00067 static int S_IROTH = 00004;
00068 static int S_IWOTH = 00002;
00069 static int S_IXOTH = 00001;
00070
00071 private static int pmask = 0xFFF;
00072
00073 public String getPermissionsString()
00074 {
00075 StringBuilder buf = new StringBuilder(10);
00076
00077 if(isDir()) buf.Append('d');
00078 else if(isLink()) buf.Append('l');
00079 else buf.Append('-');
00080
00081 if((permissions & S_IRUSR)!=0) buf.Append('r');
00082 else buf.Append('-');
00083
00084 if((permissions & S_IWUSR)!=0) buf.Append('w');
00085 else buf.Append('-');
00086
00087 if((permissions & S_ISUID)!=0) buf.Append('s');
00088 else if ((permissions & S_IXUSR)!=0) buf.Append('x');
00089 else buf.Append('-');
00090
00091 if((permissions & S_IRGRP)!=0) buf.Append('r');
00092 else buf.Append('-');
00093
00094 if((permissions & S_IWGRP)!=0) buf.Append('w');
00095 else buf.Append('-');
00096
00097 if((permissions & S_ISGID)!=0) buf.Append('s');
00098 else if((permissions & S_IXGRP)!=0) buf.Append('x');
00099 else buf.Append('-');
00100
00101 if((permissions & S_IROTH) != 0) buf.Append('r');
00102 else buf.Append('-');
00103
00104 if((permissions & S_IWOTH) != 0) buf.Append('w');
00105 else buf.Append('-');
00106
00107 if((permissions & S_IXOTH) != 0) buf.Append('x');
00108 else buf.Append('-');
00109 return (buf.ToString());
00110 }
00111
00112 public String getAtimeString()
00113 {
00114
00115
00116
00117 DateTime d = Util.Time_T2DateTime((uint)atime);
00118 return d.ToShortDateString();
00119
00120 }
00121
00122 public String getMtimeString()
00123 {
00124
00125 DateTime date= Util.Time_T2DateTime((uint)mtime);
00126 return (date.ToString());
00127 }
00128
00129 public static int SSH_FILEXFER_ATTR_SIZE= 0x00000001;
00130 public static int SSH_FILEXFER_ATTR_UIDGID= 0x00000002;
00131 public static int SSH_FILEXFER_ATTR_PERMISSIONS= 0x00000004;
00132 public static int SSH_FILEXFER_ATTR_ACMODTIME= 0x00000008;
00133 public static uint SSH_FILEXFER_ATTR_EXTENDED= 0x80000000;
00134
00135 static int S_IFDIR=0x4000;
00136 static int S_IFLNK=0xa000;
00137
00138 int flags=0;
00139 long size;
00140 internal int uid;
00141 internal int gid;
00142 int permissions;
00143 int atime;
00144 int mtime;
00145 String[] extended=null;
00146
00147 private SftpATTRS()
00148 {
00149 }
00150
00151 internal static SftpATTRS getATTR(Buffer buf)
00152 {
00153 SftpATTRS attr=new SftpATTRS();
00154 attr.flags=buf.getInt();
00155 if((attr.flags&SSH_FILEXFER_ATTR_SIZE)!=0){ attr.size=buf.getLong(); }
00156 if((attr.flags&SSH_FILEXFER_ATTR_UIDGID)!=0)
00157 {
00158 attr.uid=buf.getInt(); attr.gid=buf.getInt();
00159 }
00160 if((attr.flags&SSH_FILEXFER_ATTR_PERMISSIONS)!=0)
00161 {
00162 attr.permissions=buf.getInt();
00163 }
00164 if((attr.flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0)
00165 {
00166 attr.atime=buf.getInt();
00167 }
00168 if((attr.flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0)
00169 {
00170 attr.mtime=buf.getInt();
00171 }
00172 if((attr.flags&SSH_FILEXFER_ATTR_EXTENDED)!=0)
00173 {
00174 int count=buf.getInt();
00175 if(count>0)
00176 {
00177 attr.extended=new String[count*2];
00178 for(int i=0; i<count; i++)
00179 {
00180 attr.extended[i*2]=Util.getString(buf.getString());
00181 attr.extended[i*2+1]=Util.getString(buf.getString());
00182 }
00183 }
00184 }
00185 return attr;
00186 }
00187
00188 internal int Length()
00189 {
00190 return length();
00191 }
00192
00193 internal int length()
00194 {
00195 int len=4;
00196
00197 if((flags&SSH_FILEXFER_ATTR_SIZE)!=0){ len+=8; }
00198 if((flags&SSH_FILEXFER_ATTR_UIDGID)!=0){ len+=8; }
00199 if((flags&SSH_FILEXFER_ATTR_PERMISSIONS)!=0){ len+=4; }
00200 if((flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0){ len+=8; }
00201 if((flags&SSH_FILEXFER_ATTR_EXTENDED)!=0)
00202 {
00203 len+=4;
00204 int count=extended.Length/2;
00205 if(count>0)
00206 {
00207 for(int i=0; i<count; i++)
00208 {
00209 len+=4; len+=extended[i*2].Length;
00210 len+=4; len+=extended[i*2+1].Length;
00211 }
00212 }
00213 }
00214 return len;
00215 }
00216
00217 internal void dump(Buffer buf)
00218 {
00219 buf.putInt(flags);
00220 if((flags&SSH_FILEXFER_ATTR_SIZE)!=0){ buf.putLong(size); }
00221 if((flags&SSH_FILEXFER_ATTR_UIDGID)!=0)
00222 {
00223 buf.putInt(uid); buf.putInt(gid);
00224 }
00225 if((flags&SSH_FILEXFER_ATTR_PERMISSIONS)!=0)
00226 {
00227 buf.putInt(permissions);
00228 }
00229 if((flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0){ buf.putInt(atime); }
00230 if((flags&SSH_FILEXFER_ATTR_ACMODTIME)!=0){ buf.putInt(mtime); }
00231 if((flags&SSH_FILEXFER_ATTR_EXTENDED)!=0)
00232 {
00233 int count=extended.Length/2;
00234 if(count>0)
00235 {
00236 for(int i=0; i<count; i++)
00237 {
00238 buf.putString(Util.getBytes(extended[i*2]));
00239 buf.putString(Util.getBytes(extended[i*2+1]));
00240 }
00241 }
00242 }
00243 }
00244 internal void setFLAGS(int flags)
00245 {
00246 this.flags=flags;
00247 }
00248 public void setSIZE(long size)
00249 {
00250 flags|=SSH_FILEXFER_ATTR_SIZE;
00251 this.size=size;
00252 }
00253 public void setUIDGID(int uid, int gid)
00254 {
00255 flags|=SSH_FILEXFER_ATTR_UIDGID;
00256 this.uid=uid;
00257 this.gid=gid;
00258 }
00259 public void setACMODTIME(int atime, int mtime)
00260 {
00261 flags|=SSH_FILEXFER_ATTR_ACMODTIME;
00262 this.atime=atime;
00263 this.mtime=mtime;
00264 }
00265 public void setPERMISSIONS(int permissions)
00266 {
00267 flags|=SSH_FILEXFER_ATTR_PERMISSIONS;
00268 permissions=(this.permissions&~pmask)|(permissions&pmask);
00269 this.permissions=permissions;
00270 }
00271
00272 public bool isDir()
00273 {
00274 return ((flags&SSH_FILEXFER_ATTR_PERMISSIONS)!=0 &&
00275 ((permissions&S_IFDIR)==S_IFDIR));
00276 }
00277 public bool isLink()
00278 {
00279 return ((flags&SSH_FILEXFER_ATTR_PERMISSIONS)!=0 &&
00280 ((permissions&S_IFLNK)==S_IFLNK));
00281 }
00282 public int getFlags() { return flags; }
00283 public long getSize() { return size; }
00284 public int getUId() { return uid; }
00285 public int getGId() { return gid; }
00286 public int getPermissions() { return permissions; }
00287 public int getATime() { return atime; }
00288 public int getMTime() { return mtime; }
00289 public String[] getExtended() { return extended; }
00290
00291 public String toString()
00292 {
00293 return (getPermissionsString()+" "+getUId()+" "+getGId()+" "+getSize()+" "+getMtimeString());
00294 }
00295
00296 public override string ToString()
00297 {
00298 return toString();
00299 }
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309 }
00310
00311 }