package de.tudarmstadt.informatik.hostage.protocol.cifs; //import org.alfresco.config.ConfigElement; import org.alfresco.jlan.server.NetworkServer; import org.alfresco.jlan.server.SrvSession; import org.alfresco.jlan.server.core.DeviceContext; import org.alfresco.jlan.server.core.DeviceContextException; import org.alfresco.jlan.server.filesys.DiskDeviceContext; import org.alfresco.jlan.server.filesys.DiskInterface; import org.alfresco.jlan.server.filesys.FileAttribute; import org.alfresco.jlan.server.filesys.FileExistsException; import org.alfresco.jlan.server.filesys.FileInfo; import org.alfresco.jlan.server.filesys.FileName; import org.alfresco.jlan.server.filesys.FileOpenParams; import org.alfresco.jlan.server.filesys.FileStatus; import org.alfresco.jlan.server.filesys.FileSystem; import org.alfresco.jlan.server.filesys.NetworkFile; import org.alfresco.jlan.server.filesys.SearchContext; import org.alfresco.jlan.server.filesys.TreeConnection; import org.alfresco.jlan.smb.server.disk.JavaNetworkFile; import org.springframework.extensions.config.ConfigElement; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class PseudoCIFSDiskDriver implements DiskInterface { private TreeConnection SMBTree; private static class PseudoNetworkFile extends NetworkFile { public PseudoNetworkFile(String name){ super(name); setFileSize(12); setModifyDate(System.currentTimeMillis()); setCreationDate(System.currentTimeMillis()); } @Override public void openFile(boolean createFlag) throws IOException { setClosed(false); } @Override public int readFile(byte[] buf, int len, int pos, long fileOff) throws IOException { return 0; } @Override public void writeFile(byte[] buf, int len, int pos, long fileOff) throws IOException { } @Override public long seekFile(long pos, int typ) throws IOException { return 0; } @Override public void flushFile() throws IOException { } @Override public void truncateFile(long siz) throws IOException { } @Override public void closeFile() throws IOException { setClosed(true); } } @Override public void closeFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException { networkFile.closeFile(); } @Override public void createDirectory(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException { } @Override public NetworkFile createFile(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException { throw new FileExistsException(); } @Override public void deleteDirectory(SrvSession srvSession, TreeConnection treeConnection, String s) throws IOException { } @Override public void deleteFile(SrvSession srvSession, TreeConnection treeConnection, String s) throws IOException { } @Override public int fileExists(SrvSession srvSession, TreeConnection treeConnection, String s) { DeviceContext ctx = treeConnection.getContext(); String filename = FileName.buildPath(ctx.getDeviceName(), s, null, File.separatorChar); File chkFile = new File(filename); if(chkFile.isFile()){ return FileStatus.FileExists; } else { return FileStatus.DirectoryExists; } } @Override public void flushFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException { } @Override public FileInfo getFileInformation(SrvSession srvSession, TreeConnection treeConnection, String name) throws IOException { //String path = FileName.buildPath(treeConnection.getContext().getDeviceName(), "/", "jlan", java.io.File.separatorChar); //File file = new File(treeConnection.getContext().getDeviceName(), "jlan"); //int fattr = FileAttribute.ReadOnly; String path = FileName.buildPath(treeConnection.getContext().getDeviceName(), name, null, java.io.File.separatorChar); System.out.println("PATH::::"+path); int fattr = FileAttribute.Directory; FileInfo finfo = new FileInfo(path, 0, fattr); long fdate = System.currentTimeMillis(); finfo.setModifyDateTime(fdate); finfo.setFileId(path.hashCode()); finfo.setCreationDateTime(fdate - 1000); finfo.setChangeDateTime(fdate); return finfo; } @Override public boolean isReadOnly(SrvSession srvSession, DeviceContext deviceContext) throws IOException { return true; } @Override public NetworkFile openFile(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException { System.out.println("openFile method::::"+srvSession + " - " + treeConnection + " - " + fileOpenParams); String fname = FileName.buildPath(treeConnection.getContext().getDeviceName(), fileOpenParams.getPath(), null, java.io.File.separatorChar); File file = new File(fname); File subFile = new File("/test.txt"); NetworkFile netFile = new JavaNetworkFile(file,fname); netFile.setGrantedAccess(fileOpenParams.getAttributes()); netFile.setAttributes(FileAttribute.Directory); netFile.setDirectoryId(5); NetworkFile subNetFile = new JavaNetworkFile(subFile, "/test.txt"); subNetFile.setGrantedAccess(NetworkFile.READONLY); subNetFile.setAttributes(FileAttribute.ReadOnly); subNetFile.setDirectoryId(netFile.getDirectoryId()); return netFile; } @Override public int readFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, byte[] bytes, int i, int i2, long l) throws IOException { System.out.println("readFile method::::"+srvSession + " - " + treeConnection + " - "+networkFile); return 0; } @Override public void renameFile(SrvSession srvSession, TreeConnection treeConnection, String s, String s2) throws IOException { } @Override public long seekFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, long l, int i) throws IOException { System.out.println("seekFile method::::"+srvSession + " - " + treeConnection + " - "+networkFile); return 0; } @Override public void setFileInformation(SrvSession srvSession, TreeConnection treeConnection, String s, FileInfo fileInfo) throws IOException { } @Override public SearchContext startSearch(SrvSession srvSession, TreeConnection treeConnection, String s, int i) throws FileNotFoundException { throw new FileNotFoundException(); } @Override public void truncateFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, long l) throws IOException { } @Override public int writeFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, byte[] bytes, int i, int i2, long l) throws IOException { return 0; } @Override public DeviceContext createContext(String s, ConfigElement configElement) throws DeviceContextException { DiskDeviceContext ctx = new DiskDeviceContext("/"); ctx.setFilesystemAttributes(FileSystem.CasePreservedNames + FileSystem.UnicodeOnDisk); ctx.setAvailable(true); return ctx; } @Override public void treeOpened(SrvSession srvSession, TreeConnection treeConnection) { System.out.println("treeOpened method::::"+srvSession + " - " + treeConnection); System.out.println("treeOpened method::::"+treeConnection.getContext().getDeviceName()); } @Override public void treeClosed(SrvSession srvSession, TreeConnection treeConnection) { } }