Browse Source

File access works through the cache folder

Daniel Lazar 9 years ago
parent
commit
58aea4b99e

+ 2 - 2
res/raw/jlan_config.xml

@@ -40,8 +40,8 @@
     <shares>
         <diskshare name="JLAN" comment="Test share">
             <driver>
-                <class>de.tudarmstadt.informatik.hostage.protocol.cifs.PseudoCIFSDiskDriver</class>
-                <LocalPath>/</LocalPath>
+                <class>org.alfresco.jlan.smb.server.disk.JavaFileDiskDriver</class>
+                <LocalPath>/Bla</LocalPath>
             </driver>
         </diskshare>
     </shares>

+ 1 - 49
src/de/tudarmstadt/informatik/hostage/protocol/CIFS.java

@@ -28,7 +28,7 @@ import de.tudarmstadt.informatik.hostage.protocol.cifs.CifsServer;
 import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
 import de.tudarmstadt.informatik.hostage.wrapper.Packet;
 
-public class CIFS implements Protocol, SessionListener, FileListener{
+public class CIFS implements Protocol {
     private Listener mListener;
     private Handler mHandler;
     private SMBServer mSmbServer;
@@ -44,24 +44,6 @@ public class CIFS implements Protocol, SessionListener, FileListener{
             smbConfig.loadConfiguration(new InputStreamReader(MainActivity.context.getResources().openRawResource(R.raw.jlan_config)));
             mCifsServer = new CifsServer(smbConfig);
             mCifsServer.run();
-
-            /*CIFSConfigSection cifsConfig = (CIFSConfigSection) smbConfig.getConfigSection(CIFSConfigSection.SectionName);
-            cifsConfig.setBroadcastMask(getBroadcastAddress());
-            cifsConfig.setSessionPort(28276);
-            cifsConfig.setTcpipSMBPort(28582);
-            cifsConfig.setDatagramPort(28274);
-            cifsConfig.setHostAnnouncerPort(28275);
-            cifsConfig.setNetBIOSSMB(true);
-            cifsConfig.setDisableNIOCode(true);
-
-            this.mNbNameServer = new NetBIOSNameServer(smbConfig);
-
-            this.mSmbServer = new SMBServer(smbConfig);
-            this.mSmbServer.addSessionListener(this);
-            this.mSmbServer.addFileListener(this);
-
-            this.mNbNameServer.startServer();
-            this.mSmbServer.startServer();*/
         } catch (IOException e) {
             e.printStackTrace();
         } catch (InvalidConfigurationException e) {
@@ -99,34 +81,4 @@ public class CIFS implements Protocol, SessionListener, FileListener{
     public String toString(){
         return "CIFS";
     }
-
-    @Override
-    public void sessionClosed(SrvSession srvSession) {
-        System.out.println("---------------------- [CIFS] Session closed!");
-    }
-
-    @Override
-    public void sessionCreated(SrvSession srvSession) {
-        mHandler.log(MessageRecord.TYPE.RECEIVE,"SESSION CREATED");
-        System.out.println("---------------------- [CIFS] Session created!");
-    }
-
-    @Override
-    public void sessionLoggedOn(SrvSession srvSession) {
-
-        mHandler.log(MessageRecord.TYPE.RECEIVE,"SESSION LOGGED ON");
-        System.out.println("---------------------- [CIFS] Session LoggedOn!");
-    }
-
-    @Override
-    public void fileClosed(SrvSession srvSession, NetworkFile networkFile) {
-        System.out.println("---------------------- [CIFS] File closed!");
-    }
-
-    @Override
-    public void fileOpened(SrvSession srvSession, NetworkFile networkFile) {
-        mHandler.log(MessageRecord.TYPE.RECEIVE,"FILE OPENED");
-        System.out.println("---------------------- [CIFS] File closed!");
-    }
-
 }

+ 81 - 0
src/de/tudarmstadt/informatik/hostage/protocol/cifs/CifsServer.java

@@ -8,11 +8,26 @@ import org.alfresco.jlan.app.JLANCifsServer;
 import org.alfresco.jlan.app.XMLServerConfiguration;
 import org.alfresco.jlan.netbios.NetworkSettings;
 import org.alfresco.jlan.server.NetworkServer;
+import org.alfresco.jlan.server.ServerListener;
+import org.alfresco.jlan.server.SessionListener;
+import org.alfresco.jlan.server.SrvSession;
+import org.alfresco.jlan.server.core.SharedDevice;
+import org.alfresco.jlan.server.filesys.DiskDeviceContext;
+import org.alfresco.jlan.server.filesys.DiskInterface;
+import org.alfresco.jlan.server.filesys.DiskSharedDevice;
+import org.alfresco.jlan.server.filesys.FileListener;
+import org.alfresco.jlan.server.filesys.FilesystemsConfigSection;
+import org.alfresco.jlan.server.filesys.NetworkFile;
+import org.alfresco.jlan.server.filesys.NetworkFileServer;
+import org.alfresco.jlan.server.filesys.SrvDiskInfo;
 import org.alfresco.jlan.smb.server.CIFSConfigSection;
+import org.springframework.extensions.config.element.GenericConfigElement;
 
+import java.io.File;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.Enumeration;
 
 import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
 
@@ -53,8 +68,74 @@ public class CifsServer extends JLANCifsServer {
 
         serverConfiguration.addServer(createSMBServer(serverConfiguration));
 
+        FilesystemsConfigSection filesysConfig = (FilesystemsConfigSection) serverConfiguration.getConfigSection(FilesystemsConfigSection.SectionName);
+
+        File cacheFolder = MainActivity.context.getExternalCacheDir();
+        File jlanFolder = new File(cacheFolder.getAbsolutePath() + "/jlan");
+        File anotherFolder = new File(jlanFolder.getAbsolutePath() + "/System32");
+        jlanFolder.mkdir();
+        anotherFolder.mkdir();
+
+        // SHARES
+        DiskInterface diskInterface = new PseudoJavaFileDiskDriver();
+        final GenericConfigElement driverConfig = new GenericConfigElement("driver");
+        final GenericConfigElement localPathConfig = new GenericConfigElement("LocalPath");
+        localPathConfig.setValue(jlanFolder.getAbsolutePath());
+        driverConfig.addChild(localPathConfig);
+        DiskDeviceContext diskDeviceContext = (DiskDeviceContext) diskInterface.createContext("JLANSHARE", driverConfig);
+        diskDeviceContext.setShareName("JLANSHARE");
+        diskDeviceContext.setConfigurationParameters(driverConfig);
+        diskDeviceContext.enableChangeHandler(false);
+        diskDeviceContext.setDiskInformation(new SrvDiskInfo(2560000, 64, 512, 2304000));// Default to a 80Gb sized disk with 90% free space
+        DiskSharedDevice diskDev = new DiskSharedDevice("JLANSHARE", diskInterface, diskDeviceContext);
+        diskDev.setConfiguration(serverConfiguration);
+        diskDeviceContext.startFilesystem(diskDev);
+        filesysConfig.addShare(diskDev);
+
         for(int i=0; i<serverConfiguration.numberOfServers(); i++){
             NetworkServer server = serverConfiguration.getServer(i);
+
+            if(server instanceof NetworkFileServer){
+                NetworkFileServer fileServer = (NetworkFileServer) server;
+                fileServer.addFileListener(new FileListener() {
+                    @Override
+                    public void fileClosed(SrvSession sess, NetworkFile file) {
+                        System.out.println("-----------> FILE CLOSED :(");
+                    }
+
+                    @Override
+                    public void fileOpened(SrvSession sess, NetworkFile file) {
+                        System.out.println("-----------> FILE OPEND xD");
+                    }
+                });
+            }
+
+            server.addServerListener(new ServerListener() {
+                @Override
+                public void serverStatusEvent(NetworkServer server, int event) {
+                    System.out.println("----------------> EVETN!!!!!: " + server + ", event: " + event);
+                }
+            });
+
+            server.addSessionListener(new SessionListener() {
+                @Override
+                public void sessionClosed(SrvSession sess) {
+                    System.out.println("-----------> SESSION CLOSED :(");
+                }
+
+                @Override
+                public void sessionCreated(SrvSession sess) {
+                    System.out.println("-----------> SESSION CREATED :)");
+
+                }
+
+                @Override
+                public void sessionLoggedOn(SrvSession sess) {
+                    System.out.println("-----------> SESSION LOGGED ON :D");
+
+                }
+            });
+            server.getShareMapper();
             server.startServer();
         }
     }

+ 58 - 22
src/de/tudarmstadt/informatik/hostage/protocol/cifs/PseudoCIFSDiskDriver.java

@@ -28,6 +28,25 @@ public class PseudoCIFSDiskDriver implements DiskInterface {
 
     private TreeConnection SMBTree;
 
+    private static class FileNode {
+        public String name;
+        public int type;
+        public int parent;
+
+        public FileNode(String name, int type, int parent){
+            this.name = name;
+            this.type = type;
+            this.parent = parent;
+        }
+    }
+
+    private FileNode[] filesystem = new FileNode[]{
+        new FileNode("/", FileAttribute.Directory, 0),
+            new FileNode("/testDir", FileAttribute.Directory, "/".hashCode()),
+            new FileNode("/testDir2", FileAttribute.Directory, "/".hashCode()),
+            new FileNode("/muhahaha.txt", 0, "/".hashCode())
+    };
+
     private static class PseudoNetworkFile extends NetworkFile {
         public PseudoNetworkFile(String name){
             super(name);
@@ -98,25 +117,33 @@ public class PseudoCIFSDiskDriver implements DiskInterface {
 
     @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);
+        FileNode fileNode = getFileNode(filename);
 
-            if(chkFile.isFile()){
-                return FileStatus.FileExists;
-            }
-            else {
-                return FileStatus.DirectoryExists;
-            }
-       }
+        if(fileNode == null) return FileStatus.NotExist;
+
+        if(fileNode.type == FileAttribute.Directory){
+            return FileStatus.DirectoryExists;
+        } else {
+            return FileStatus.FileExists;
+        }
+    }
 
     @Override
     public void flushFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException {
 
     }
 
+    private FileNode getFileNode(String name){
+        for(FileNode node: this.filesystem){
+            if(node.name.equals(name)) return node;
+        }
+
+        return null;
+    }
+
     @Override
     public FileInfo getFileInformation(SrvSession srvSession, TreeConnection treeConnection, String name) throws IOException {
         //String path = FileName.buildPath(treeConnection.getContext().getDeviceName(), "/", "jlan", java.io.File.separatorChar);
@@ -126,16 +153,23 @@ public class PseudoCIFSDiskDriver implements DiskInterface {
         //int fattr = FileAttribute.ReadOnly;
 
         String path = FileName.buildPath(treeConnection.getContext().getDeviceName(), name, null, java.io.File.separatorChar);
+        FileNode fileNode = getFileNode(path);
+
+        if(fileNode == null){
+            return null;
+        }
+
         System.out.println("PATH::::"+path);
-        int fattr = FileAttribute.Directory;
+        int fattr = fileNode.type + FileAttribute.ReadOnly;
 
         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);
+        finfo.setDirectoryId(fileNode.parent);
+        finfo.setFileId(fileNode.name.hashCode());
+
         return finfo;
     }
 
@@ -148,18 +182,19 @@ public class PseudoCIFSDiskDriver implements DiskInterface {
     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);
+        FileNode fileNode = getFileNode(fname);
+        if(fileNode == null) return null;
+
+        String[] path = fileNode.name.split("" + java.io.File.separatorChar);
 
-        NetworkFile subNetFile = new JavaNetworkFile(subFile, "/test.txt");
-        subNetFile.setGrantedAccess(NetworkFile.READONLY);
-        subNetFile.setAttributes(FileAttribute.ReadOnly);
-        subNetFile.setDirectoryId(netFile.getDirectoryId());
+        NetworkFile netFile = new PseudoNetworkFile(path.length == 0 ? "/" : path[path.length - 1]);
+        netFile.setFullName(fileNode.name);
+        netFile.setDirectoryId(fileNode.parent);
+        netFile.setFileId(fileNode.name.hashCode());
+        netFile.setAttributes(fileNode.type);
+        netFile.setGrantedAccess(NetworkFile.READONLY);
+        netFile.setAttributes(FileAttribute.ReadOnly);
 
         return netFile;
     }
@@ -188,6 +223,7 @@ public class PseudoCIFSDiskDriver implements DiskInterface {
 
     @Override
     public SearchContext startSearch(SrvSession srvSession, TreeConnection treeConnection, String s, int i) throws FileNotFoundException {
+        System.out.println("Start search!!!");
         throw new FileNotFoundException();
     }
 

+ 18 - 0
src/de/tudarmstadt/informatik/hostage/protocol/cifs/PseudoJavaFileDIskDriver.java

@@ -0,0 +1,18 @@
+package de.tudarmstadt.informatik.hostage.protocol.cifs;
+
+import org.alfresco.jlan.server.SrvSession;
+import org.alfresco.jlan.server.filesys.FileOpenParams;
+import org.alfresco.jlan.server.filesys.NetworkFile;
+import org.alfresco.jlan.server.filesys.TreeConnection;
+import org.alfresco.jlan.smb.server.disk.JavaFileDiskDriver;
+
+/**
+ * Created by Daniel on 26.03.2015.
+ */
+public class PseudoJavaFileDiskDriver extends JavaFileDiskDriver {
+    public NetworkFile createFile(SrvSession sess, TreeConnection tree, FileOpenParams params)
+            throws java.io.IOException {
+        System.out.println("--------------------> CREATE FILE");
+        return null;
+    }
+}