Browse Source

now the host announcement uses the correct bcast address

Daniel Lazar 9 years ago
parent
commit
89570db919

BIN
libs/alfresco-jlan.jar


+ 1 - 1
res/raw/jlan_config.xml

@@ -14,7 +14,7 @@
             <smbdialects>LanMan,NT</smbdialects>
             <comment>Alfresco JLAN Server</comment>
             <!-- To run the server using a non-root account on linux, Mac OS X, Solaris -->
-            <netBIOSSMB sessionPort="28276" namingPort="28274" datagramPort="28275" bindto="192.168.3.106"/>
+            <netBIOSSMB sessionPort="28276" namingPort="28274" datagramPort="28275"/>
             <tcpipSMB port="28582" ipv6="disabled"/>
             <HostAnouncerPort>28275</HostAnouncerPort>
             <hostAnounce interval='1'/>

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

@@ -6,11 +6,13 @@ import android.net.wifi.WifiManager;
 
 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.smb.server.CIFSConfigSection;
 
 import java.io.IOException;
 import java.net.InetAddress;
+import java.net.UnknownHostException;
 
 import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
 
@@ -36,6 +38,15 @@ public class CifsServer extends JLANCifsServer {
         cifsConfigSection.setHostAnnouncer(true);
         cifsConfigSection.setDisableNIOCode(true);
 
+        WifiManager wifi = (WifiManager) MainActivity.context.getSystemService(Context.WIFI_SERVICE);
+        DhcpInfo dhcp = wifi.getDhcpInfo();
+
+        int ip = dhcp.ipAddress;
+
+        cifsConfigSection.setSMBBindAddress(intToInetAddress(ip));
+        cifsConfigSection.setNetBIOSBindAddress(intToInetAddress(ip));
+        NetworkSettings.setBroadcastMask(getBroadcastAddress());
+
         if(cifsConfigSection.hasNetBIOSSMB()){
             serverConfiguration.addServer(createNetBIOSServer(serverConfiguration));
         }
@@ -66,4 +77,17 @@ public class CifsServer extends JLANCifsServer {
             quads[k] = (byte) (broadcast >> (k * 8));
         return InetAddress.getByAddress(quads).toString().substring(1);
     }
+
+    public static InetAddress intToInetAddress(int hostAddress) {
+        byte[] addressBytes = { (byte)(0xff & hostAddress),
+                (byte)(0xff & (hostAddress >> 8)),
+                (byte)(0xff & (hostAddress >> 16)),
+                (byte)(0xff & (hostAddress >> 24)) };
+
+        try {
+            return InetAddress.getByAddress(addressBytes);
+        } catch (UnknownHostException e) {
+            throw new AssertionError();
+        }
+    }
 }

+ 4 - 2
src/de/tudarmstadt/informatik/hostage/protocol/cifs/PseudoCIFSDiskDriver.java

@@ -149,15 +149,17 @@ public class PseudoCIFSDiskDriver implements DiskInterface {
         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("/jlan/test.txt");
+        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, "/jlan/test.txt");
+        NetworkFile subNetFile = new JavaNetworkFile(subFile, "/test.txt");
         subNetFile.setGrantedAccess(NetworkFile.READONLY);
         subNetFile.setAttributes(FileAttribute.ReadOnly);
+        subNetFile.setDirectoryId(netFile.getDirectoryId());
 
         return netFile;
     }