CifsServer.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package de.tudarmstadt.informatik.hostage.protocol.cifs;
  2. import android.content.Context;
  3. import android.net.DhcpInfo;
  4. import android.net.wifi.WifiManager;
  5. import org.alfresco.jlan.app.JLANCifsServer;
  6. import org.alfresco.jlan.app.XMLServerConfiguration;
  7. import org.alfresco.jlan.netbios.NetworkSettings;
  8. import org.alfresco.jlan.server.NetworkServer;
  9. import org.alfresco.jlan.smb.server.CIFSConfigSection;
  10. import java.io.IOException;
  11. import java.net.InetAddress;
  12. import java.net.UnknownHostException;
  13. import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
  14. /**
  15. * HostageV3
  16. * ================
  17. * Created by abrakowski on 19.03.15.
  18. */
  19. public class CifsServer extends JLANCifsServer {
  20. private final XMLServerConfiguration serverConfiguration;
  21. public CifsServer(XMLServerConfiguration serverConfiguration){
  22. super();
  23. this.serverConfiguration = serverConfiguration;
  24. }
  25. public void run() throws Exception {
  26. CIFSConfigSection cifsConfigSection = (CIFSConfigSection) serverConfiguration.getConfigSection(CIFSConfigSection.SectionName);
  27. cifsConfigSection.setBroadcastMask(getBroadcastAddress());
  28. cifsConfigSection.setHostAnnouncer(true);
  29. cifsConfigSection.setDisableNIOCode(true);
  30. WifiManager wifi = (WifiManager) MainActivity.context.getSystemService(Context.WIFI_SERVICE);
  31. DhcpInfo dhcp = wifi.getDhcpInfo();
  32. int ip = dhcp.ipAddress;
  33. cifsConfigSection.setSMBBindAddress(intToInetAddress(ip));
  34. cifsConfigSection.setNetBIOSBindAddress(intToInetAddress(ip));
  35. NetworkSettings.setBroadcastMask(getBroadcastAddress());
  36. if(cifsConfigSection.hasNetBIOSSMB()){
  37. serverConfiguration.addServer(createNetBIOSServer(serverConfiguration));
  38. }
  39. serverConfiguration.addServer(createSMBServer(serverConfiguration));
  40. for(int i=0; i<serverConfiguration.numberOfServers(); i++){
  41. NetworkServer server = serverConfiguration.getServer(i);
  42. server.startServer();
  43. }
  44. }
  45. public void stop(){
  46. for(int i=0; i<serverConfiguration.numberOfServers(); i++){
  47. NetworkServer server = serverConfiguration.getServer(i);
  48. server.shutdownServer(true);
  49. }
  50. }
  51. private String getBroadcastAddress() throws IOException {
  52. WifiManager wifi = (WifiManager) MainActivity.context.getSystemService(Context.WIFI_SERVICE);
  53. DhcpInfo dhcp = wifi.getDhcpInfo();
  54. // handle null somehow
  55. System.out.println("DEBUG:::::IP::::"+dhcp.ipAddress);
  56. int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
  57. byte[] quads = new byte[4];
  58. for (int k = 0; k < 4; k++)
  59. quads[k] = (byte) (broadcast >> (k * 8));
  60. return InetAddress.getByAddress(quads).toString().substring(1);
  61. }
  62. public static InetAddress intToInetAddress(int hostAddress) {
  63. byte[] addressBytes = { (byte)(0xff & hostAddress),
  64. (byte)(0xff & (hostAddress >> 8)),
  65. (byte)(0xff & (hostAddress >> 16)),
  66. (byte)(0xff & (hostAddress >> 24)) };
  67. try {
  68. return InetAddress.getByAddress(addressBytes);
  69. } catch (UnknownHostException e) {
  70. throw new AssertionError();
  71. }
  72. }
  73. }