PseudoCIFSDiskDriver.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. package de.tudarmstadt.informatik.hostage.protocol.cifs;
  2. //import org.alfresco.config.ConfigElement;
  3. import org.alfresco.jlan.server.NetworkServer;
  4. import org.alfresco.jlan.server.SrvSession;
  5. import org.alfresco.jlan.server.core.DeviceContext;
  6. import org.alfresco.jlan.server.core.DeviceContextException;
  7. import org.alfresco.jlan.server.filesys.DiskDeviceContext;
  8. import org.alfresco.jlan.server.filesys.DiskInterface;
  9. import org.alfresco.jlan.server.filesys.FileAttribute;
  10. import org.alfresco.jlan.server.filesys.FileExistsException;
  11. import org.alfresco.jlan.server.filesys.FileInfo;
  12. import org.alfresco.jlan.server.filesys.FileName;
  13. import org.alfresco.jlan.server.filesys.FileOpenParams;
  14. import org.alfresco.jlan.server.filesys.FileStatus;
  15. import org.alfresco.jlan.server.filesys.FileSystem;
  16. import org.alfresco.jlan.server.filesys.NetworkFile;
  17. import org.alfresco.jlan.server.filesys.SearchContext;
  18. import org.alfresco.jlan.server.filesys.TreeConnection;
  19. import org.alfresco.jlan.smb.server.disk.JavaNetworkFile;
  20. import org.springframework.extensions.config.ConfigElement;
  21. import java.io.File;
  22. import java.io.FileNotFoundException;
  23. import java.io.IOException;
  24. public class PseudoCIFSDiskDriver implements DiskInterface {
  25. private TreeConnection SMBTree;
  26. private static class FileNode {
  27. public String name;
  28. public int type;
  29. public int parent;
  30. public FileNode(String name, int type, int parent){
  31. this.name = name;
  32. this.type = type;
  33. this.parent = parent;
  34. }
  35. }
  36. private FileNode[] filesystem = new FileNode[]{
  37. new FileNode("/", FileAttribute.Directory, 0),
  38. new FileNode("/testDir", FileAttribute.Directory, "/".hashCode()),
  39. new FileNode("/testDir2", FileAttribute.Directory, "/".hashCode()),
  40. new FileNode("/muhahaha.txt", 0, "/".hashCode())
  41. };
  42. private static class PseudoNetworkFile extends NetworkFile {
  43. public PseudoNetworkFile(String name){
  44. super(name);
  45. setFileSize(12);
  46. setModifyDate(System.currentTimeMillis());
  47. setCreationDate(System.currentTimeMillis());
  48. }
  49. @Override
  50. public void openFile(boolean createFlag) throws IOException {
  51. setClosed(false);
  52. }
  53. @Override
  54. public int readFile(byte[] buf, int len, int pos, long fileOff) throws IOException {
  55. return 0;
  56. }
  57. @Override
  58. public void writeFile(byte[] buf, int len, int pos, long fileOff) throws IOException {
  59. }
  60. @Override
  61. public long seekFile(long pos, int typ) throws IOException {
  62. return 0;
  63. }
  64. @Override
  65. public void flushFile() throws IOException {
  66. }
  67. @Override
  68. public void truncateFile(long siz) throws IOException {
  69. }
  70. @Override
  71. public void closeFile() throws IOException {
  72. setClosed(true);
  73. }
  74. }
  75. @Override
  76. public void closeFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException {
  77. networkFile.closeFile();
  78. }
  79. @Override
  80. public void createDirectory(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException {
  81. }
  82. @Override
  83. public NetworkFile createFile(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException {
  84. throw new FileExistsException();
  85. }
  86. @Override
  87. public void deleteDirectory(SrvSession srvSession, TreeConnection treeConnection, String s) throws IOException {
  88. }
  89. @Override
  90. public void deleteFile(SrvSession srvSession, TreeConnection treeConnection, String s) throws IOException {
  91. }
  92. @Override
  93. public int fileExists(SrvSession srvSession, TreeConnection treeConnection, String s) {
  94. DeviceContext ctx = treeConnection.getContext();
  95. String filename = FileName.buildPath(ctx.getDeviceName(), s, null, File.separatorChar);
  96. FileNode fileNode = getFileNode(filename);
  97. if(fileNode == null) return FileStatus.NotExist;
  98. if(fileNode.type == FileAttribute.Directory){
  99. return FileStatus.DirectoryExists;
  100. } else {
  101. return FileStatus.FileExists;
  102. }
  103. }
  104. @Override
  105. public void flushFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException {
  106. }
  107. private FileNode getFileNode(String name){
  108. for(FileNode node: this.filesystem){
  109. if(node.name.equals(name)) return node;
  110. }
  111. return null;
  112. }
  113. @Override
  114. public FileInfo getFileInformation(SrvSession srvSession, TreeConnection treeConnection, String name) throws IOException {
  115. //String path = FileName.buildPath(treeConnection.getContext().getDeviceName(), "/", "jlan", java.io.File.separatorChar);
  116. //File file = new File(treeConnection.getContext().getDeviceName(), "jlan");
  117. //int fattr = FileAttribute.ReadOnly;
  118. String path = FileName.buildPath(treeConnection.getContext().getDeviceName(), name, null, java.io.File.separatorChar);
  119. FileNode fileNode = getFileNode(path);
  120. if(fileNode == null){
  121. return null;
  122. }
  123. System.out.println("PATH::::"+path);
  124. int fattr = fileNode.type + FileAttribute.ReadOnly;
  125. FileInfo finfo = new FileInfo(path, 0, fattr);
  126. long fdate = System.currentTimeMillis();
  127. finfo.setModifyDateTime(fdate);
  128. finfo.setCreationDateTime(fdate - 1000);
  129. finfo.setChangeDateTime(fdate);
  130. finfo.setDirectoryId(fileNode.parent);
  131. finfo.setFileId(fileNode.name.hashCode());
  132. return finfo;
  133. }
  134. @Override
  135. public boolean isReadOnly(SrvSession srvSession, DeviceContext deviceContext) throws IOException {
  136. return true;
  137. }
  138. @Override
  139. public NetworkFile openFile(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException {
  140. System.out.println("openFile method::::"+srvSession + " - " + treeConnection + " - " + fileOpenParams);
  141. String fname = FileName.buildPath(treeConnection.getContext().getDeviceName(), fileOpenParams.getPath(), null, java.io.File.separatorChar);
  142. FileNode fileNode = getFileNode(fname);
  143. if(fileNode == null) return null;
  144. String[] path = fileNode.name.split("" + java.io.File.separatorChar);
  145. NetworkFile netFile = new PseudoNetworkFile(path.length == 0 ? "/" : path[path.length - 1]);
  146. netFile.setFullName(fileNode.name);
  147. netFile.setDirectoryId(fileNode.parent);
  148. netFile.setFileId(fileNode.name.hashCode());
  149. netFile.setAttributes(fileNode.type);
  150. netFile.setGrantedAccess(NetworkFile.READONLY);
  151. netFile.setAttributes(FileAttribute.ReadOnly);
  152. return netFile;
  153. }
  154. @Override
  155. public int readFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, byte[] bytes, int i, int i2, long l) throws IOException {
  156. System.out.println("readFile method::::"+srvSession + " - " + treeConnection + " - "+networkFile);
  157. return 0;
  158. }
  159. @Override
  160. public void renameFile(SrvSession srvSession, TreeConnection treeConnection, String s, String s2) throws IOException {
  161. }
  162. @Override
  163. public long seekFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, long l, int i) throws IOException {
  164. System.out.println("seekFile method::::"+srvSession + " - " + treeConnection + " - "+networkFile);
  165. return 0;
  166. }
  167. @Override
  168. public void setFileInformation(SrvSession srvSession, TreeConnection treeConnection, String s, FileInfo fileInfo) throws IOException {
  169. }
  170. @Override
  171. public SearchContext startSearch(SrvSession srvSession, TreeConnection treeConnection, String s, int i) throws FileNotFoundException {
  172. System.out.println("Start search!!!");
  173. throw new FileNotFoundException();
  174. }
  175. @Override
  176. public void truncateFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, long l) throws IOException {
  177. }
  178. @Override
  179. public int writeFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, byte[] bytes, int i, int i2, long l) throws IOException {
  180. return 0;
  181. }
  182. @Override
  183. public DeviceContext createContext(String s, ConfigElement configElement) throws DeviceContextException {
  184. DiskDeviceContext ctx = new DiskDeviceContext("/");
  185. ctx.setFilesystemAttributes(FileSystem.CasePreservedNames + FileSystem.UnicodeOnDisk);
  186. ctx.setAvailable(true);
  187. return ctx;
  188. }
  189. @Override
  190. public void treeOpened(SrvSession srvSession, TreeConnection treeConnection) {
  191. System.out.println("treeOpened method::::"+srvSession + " - " + treeConnection);
  192. System.out.println("treeOpened method::::"+treeConnection.getContext().getDeviceName());
  193. }
  194. @Override
  195. public void treeClosed(SrvSession srvSession, TreeConnection treeConnection) {
  196. }
  197. }