Browse Source

added the new FileDiskDriver

Daniel Lazar 9 years ago
parent
commit
f137b5eaa5

+ 0 - 1
res/values-de/protocols.xml

@@ -9,7 +9,6 @@
         <item>HTTPS</item>
         <item>MySQL</item>
         <item>SIP</item>
-        <item>SMB</item>
         <item>CIFS</item>
         <item>SSH</item>
         <item>TELNET</item>

+ 0 - 1
res/values/protocols.xml

@@ -9,7 +9,6 @@
         <item>HTTPS</item>
         <item>MySQL</item>
         <item>SIP</item>
-        <item>SMB</item>
         <item>CIFS</item>
         <item>SSH</item>
         <item>TELNET</item>

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

@@ -103,12 +103,10 @@ public class CifsServer extends JLANCifsServer {
                 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");
                     }
                 });
             }
@@ -116,7 +114,6 @@ public class CifsServer extends JLANCifsServer {
             server.addServerListener(new ServerListener() {
                 @Override
                 public void serverStatusEvent(NetworkServer server, int event) {
-                    System.out.println("----------------> EVETN!!!!!: " + server + ", event: " + event);
                 }
             });
 
@@ -126,7 +123,6 @@ public class CifsServer extends JLANCifsServer {
 
 
                     cifs.log(MessageRecord.TYPE.RECEIVE, "SESSION CLOSED", 139, sess.getRemoteAddress(), 139);
-                    System.out.println("-----------> SESSION CLOSED :(");
                 }
 
                 @Override
@@ -140,7 +136,6 @@ public class CifsServer extends JLANCifsServer {
                     );
 
                     cifs.log(MessageRecord.TYPE.RECEIVE, "SESSION CREATED", 139, sess.getRemoteAddress(), 139);
-                    System.out.println("-----------> SESSION CREATED :)");
 
                 }
 
@@ -148,7 +143,6 @@ public class CifsServer extends JLANCifsServer {
                 public void sessionLoggedOn(SrvSession sess) {
 
                     cifs.log(MessageRecord.TYPE.RECEIVE, "SESSION LOGGED ON", 139, sess.getRemoteAddress(), 139);
-                    System.out.println("-----------> SESSION LOGGED ON :D");
 
                 }
             });

+ 111 - 0
src/de/tudarmstadt/informatik/hostage/protocol/cifs/PseudoJavaFileDiskDriver.java

@@ -0,0 +1,111 @@
+package de.tudarmstadt.informatik.hostage.protocol.cifs;
+
+import org.alfresco.jlan.server.SrvSession;
+import org.alfresco.jlan.server.core.DeviceContext;
+import org.alfresco.jlan.server.filesys.FileExistsException;
+import org.alfresco.jlan.server.filesys.FileName;
+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;
+import org.alfresco.jlan.smb.server.disk.JavaNetworkFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import de.tudarmstadt.informatik.hostage.logging.MessageRecord;
+import de.tudarmstadt.informatik.hostage.protocol.CIFS;
+
+/**
+ * Created by Daniel on 26.03.2015.
+ */
+public class PseudoJavaFileDiskDriver extends JavaFileDiskDriver {
+    private static class PseudoJavaNetworkFile extends JavaNetworkFile {
+        protected final CIFS cifs;
+        private final SrvSession sess;
+        boolean wasWrittenTo = false;
+
+        public PseudoJavaNetworkFile(File file, String netPath, CIFS cifs, SrvSession sess) {
+            super(file, netPath);
+            this.cifs = cifs;
+            this.sess = sess;
+        }
+
+        public void closeFile() throws java.io.IOException {
+            super.closeFile();
+            if(wasWrittenTo){
+                try {
+                    MessageDigest digest = MessageDigest.getInstance("MD5");
+                    FileInputStream fis = new FileInputStream(m_file);
+
+                    byte[] buffer = new byte[8192];
+                    int numOfBytesRead;
+                    while( (numOfBytesRead = fis.read(buffer)) > 0){
+                        digest.update(buffer, 0, numOfBytesRead);
+                    }
+
+                    byte[] hash = digest.digest();
+                    String checksum = new BigInteger(1, hash).toString(16);
+
+                    String message = "File received: " + m_file.getName() + "\n\nCHECKSUM:\n" + checksum;
+
+                    cifs.log(MessageRecord.TYPE.RECEIVE, message, 445, sess.getRemoteAddress(), 445);
+                } catch (NoSuchAlgorithmException e) {
+                    e.printStackTrace();
+                }
+
+                m_file.delete();
+            }
+        }
+
+        public void writeFile(byte[] buf, int len, int pos)
+                throws java.io.IOException {
+            super.writeFile(buf, len, pos);
+            wasWrittenTo = true;
+        }
+
+        public void writeFile(byte[] buf, int len, int pos, long offset)
+                throws java.io.IOException {
+            super.writeFile(buf, len, pos, offset);
+            wasWrittenTo = true;
+        }
+    }
+
+    private final CIFS cifs;
+
+    public PseudoJavaFileDiskDriver(CIFS cifs) {
+        this.cifs = cifs;
+    }
+
+    public NetworkFile createFile(SrvSession sess, TreeConnection tree, FileOpenParams params)
+            throws java.io.IOException {
+        DeviceContext ctx = tree.getContext();
+        String fname = FileName.buildPath(ctx.getDeviceName(), params.getPath(), null, java.io.File.separatorChar);
+
+        //  Check if the file already exists
+
+        File file = new File(fname);
+        if (file.exists())
+            throw new FileExistsException();
+
+        //  Create the new file
+
+        FileWriter newFile = new FileWriter(fname, false);
+        newFile.close();
+
+        //  Create a Java network file
+
+        file = new File(fname);
+        PseudoJavaNetworkFile netFile = new PseudoJavaNetworkFile(file, params.getPath(), cifs, sess);
+        netFile.setGrantedAccess(NetworkFile.READWRITE);
+        netFile.setFullName(params.getPath());
+
+        //  Return the network file
+
+        return netFile;
+    }
+}