HttpServer.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package com.example.smshook;
  2. import java.util.List;
  3. import java.util.Map;
  4. import fi.iki.elonen.NanoHTTPD;
  5. public class HttpServer extends NanoHTTPD {
  6. public interface OnRequestListener {
  7. void onSmsRequest(String sender, String message);
  8. }
  9. private OnRequestListener listener;
  10. public void setOnRequestListener(OnRequestListener listener) {
  11. this.listener = listener;
  12. }
  13. private HttpServer(int port) {
  14. super(port);
  15. }
  16. private HttpServer(String hostname, int port) {
  17. super(hostname, port);
  18. }
  19. private static volatile HttpServer instance;
  20. //double check locking
  21. public static HttpServer getInstance(int port) {
  22. if (instance == null) {
  23. synchronized (HttpServer.class) {
  24. if (instance == null) {
  25. instance = new HttpServer("0.0.0.0", port);
  26. }
  27. }
  28. }
  29. return instance;
  30. }
  31. @Override
  32. public Response serve(IHTTPSession session) {
  33. Map<String, List<String>> params = session.getParameters();
  34. List<String> senders = params.get("sender");
  35. if (senders == null || senders.isEmpty()) {
  36. return newFixedLengthResponse("sender is required");
  37. }
  38. List<String> messages = params.get("message");
  39. if (messages == null || messages.isEmpty()) {
  40. return newFixedLengthResponse("message is required");
  41. }
  42. String sender = senders.get(0);
  43. String message = messages.get(0);
  44. if (listener != null) {
  45. listener.onSmsRequest(sender, message);
  46. }
  47. return newFixedLengthResponse("ok");
  48. }
  49. }