CifsServer.java 7.0 KB

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