CifsServer.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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.server.ServerListener;
  10. import org.alfresco.jlan.server.SessionListener;
  11. import org.alfresco.jlan.server.SrvSession;
  12. import org.alfresco.jlan.server.core.SharedDevice;
  13. import org.alfresco.jlan.server.filesys.DiskDeviceContext;
  14. import org.alfresco.jlan.server.filesys.DiskInterface;
  15. import org.alfresco.jlan.server.filesys.DiskSharedDevice;
  16. import org.alfresco.jlan.server.filesys.FileListener;
  17. import org.alfresco.jlan.server.filesys.FilesystemsConfigSection;
  18. import org.alfresco.jlan.server.filesys.NetworkFile;
  19. import org.alfresco.jlan.server.filesys.NetworkFileServer;
  20. import org.alfresco.jlan.server.filesys.SrvDiskInfo;
  21. import org.alfresco.jlan.smb.server.CIFSConfigSection;
  22. import org.springframework.extensions.config.element.GenericConfigElement;
  23. import java.io.File;
  24. import java.io.IOException;
  25. import java.net.InetAddress;
  26. import java.net.UnknownHostException;
  27. import java.util.Enumeration;
  28. import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
  29. /**
  30. * HostageV3
  31. * ================
  32. * Created by abrakowski on 19.03.15.
  33. */
  34. public class CifsServer extends JLANCifsServer {
  35. private final XMLServerConfiguration serverConfiguration;
  36. public CifsServer(XMLServerConfiguration serverConfiguration){
  37. super();
  38. this.serverConfiguration = serverConfiguration;
  39. }
  40. public void run() throws Exception {
  41. CIFSConfigSection cifsConfigSection = (CIFSConfigSection) serverConfiguration.getConfigSection(CIFSConfigSection.SectionName);
  42. cifsConfigSection.setBroadcastMask(getBroadcastAddress());
  43. cifsConfigSection.setHostAnnouncer(true);
  44. cifsConfigSection.setDisableNIOCode(true);
  45. WifiManager wifi = (WifiManager) MainActivity.context.getSystemService(Context.WIFI_SERVICE);
  46. DhcpInfo dhcp = wifi.getDhcpInfo();
  47. int ip = dhcp.ipAddress;
  48. cifsConfigSection.setSMBBindAddress(intToInetAddress(ip));
  49. cifsConfigSection.setNetBIOSBindAddress(intToInetAddress(ip));
  50. NetworkSettings.setBroadcastMask(getBroadcastAddress());
  51. if(cifsConfigSection.hasNetBIOSSMB()){
  52. serverConfiguration.addServer(createNetBIOSServer(serverConfiguration));
  53. }
  54. serverConfiguration.addServer(createSMBServer(serverConfiguration));
  55. FilesystemsConfigSection filesysConfig = (FilesystemsConfigSection) serverConfiguration.getConfigSection(FilesystemsConfigSection.SectionName);
  56. File cacheFolder = MainActivity.context.getExternalCacheDir();
  57. File jlanFolder = new File(cacheFolder.getAbsolutePath() + "/jlan");
  58. File anotherFolder = new File(jlanFolder.getAbsolutePath() + "/System32");
  59. jlanFolder.mkdir();
  60. anotherFolder.mkdir();
  61. // SHARES
  62. DiskInterface diskInterface = new PseudoJavaFileDiskDriver();
  63. final GenericConfigElement driverConfig = new GenericConfigElement("driver");
  64. final GenericConfigElement localPathConfig = new GenericConfigElement("LocalPath");
  65. localPathConfig.setValue(jlanFolder.getAbsolutePath());
  66. driverConfig.addChild(localPathConfig);
  67. DiskDeviceContext diskDeviceContext = (DiskDeviceContext) diskInterface.createContext("JLANSHARE", driverConfig);
  68. diskDeviceContext.setShareName("JLANSHARE");
  69. diskDeviceContext.setConfigurationParameters(driverConfig);
  70. diskDeviceContext.enableChangeHandler(false);
  71. diskDeviceContext.setDiskInformation(new SrvDiskInfo(2560000, 64, 512, 2304000));// Default to a 80Gb sized disk with 90% free space
  72. DiskSharedDevice diskDev = new DiskSharedDevice("JLANSHARE", diskInterface, diskDeviceContext);
  73. diskDev.setConfiguration(serverConfiguration);
  74. diskDeviceContext.startFilesystem(diskDev);
  75. filesysConfig.addShare(diskDev);
  76. for(int i=0; i<serverConfiguration.numberOfServers(); i++){
  77. NetworkServer server = serverConfiguration.getServer(i);
  78. if(server instanceof NetworkFileServer){
  79. NetworkFileServer fileServer = (NetworkFileServer) server;
  80. fileServer.addFileListener(new FileListener() {
  81. @Override
  82. public void fileClosed(SrvSession sess, NetworkFile file) {
  83. System.out.println("-----------> FILE CLOSED :(");
  84. }
  85. @Override
  86. public void fileOpened(SrvSession sess, NetworkFile file) {
  87. System.out.println("-----------> FILE OPEND xD");
  88. }
  89. });
  90. }
  91. server.addServerListener(new ServerListener() {
  92. @Override
  93. public void serverStatusEvent(NetworkServer server, int event) {
  94. System.out.println("----------------> EVETN!!!!!: " + server + ", event: " + event);
  95. }
  96. });
  97. server.addSessionListener(new SessionListener() {
  98. @Override
  99. public void sessionClosed(SrvSession sess) {
  100. System.out.println("-----------> SESSION CLOSED :(");
  101. }
  102. @Override
  103. public void sessionCreated(SrvSession sess) {
  104. System.out.println("-----------> SESSION CREATED :)");
  105. }
  106. @Override
  107. public void sessionLoggedOn(SrvSession sess) {
  108. System.out.println("-----------> SESSION LOGGED ON :D");
  109. }
  110. });
  111. server.getShareMapper();
  112. server.startServer();
  113. }
  114. }
  115. public void stop(){
  116. for(int i=0; i<serverConfiguration.numberOfServers(); i++){
  117. NetworkServer server = serverConfiguration.getServer(i);
  118. server.shutdownServer(true);
  119. }
  120. }
  121. private String getBroadcastAddress() throws IOException {
  122. WifiManager wifi = (WifiManager) MainActivity.context.getSystemService(Context.WIFI_SERVICE);
  123. DhcpInfo dhcp = wifi.getDhcpInfo();
  124. // handle null somehow
  125. System.out.println("DEBUG:::::IP::::"+dhcp.ipAddress);
  126. int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
  127. byte[] quads = new byte[4];
  128. for (int k = 0; k < 4; k++)
  129. quads[k] = (byte) (broadcast >> (k * 8));
  130. return InetAddress.getByAddress(quads).toString().substring(1);
  131. }
  132. public static InetAddress intToInetAddress(int hostAddress) {
  133. byte[] addressBytes = { (byte)(0xff & hostAddress),
  134. (byte)(0xff & (hostAddress >> 8)),
  135. (byte)(0xff & (hostAddress >> 16)),
  136. (byte)(0xff & (hostAddress >> 24)) };
  137. try {
  138. return InetAddress.getByAddress(addressBytes);
  139. } catch (UnknownHostException e) {
  140. throw new AssertionError();
  141. }
  142. }
  143. }