/razpubs/src/org/cybergarage/upnp/ssdp/SSDPSearchResponseSocket.java

http://razpub.googlecode.com/ · Java · 111 lines · 56 code · 23 blank · 32 comment · 6 complexity · 1a3d358fcfe9baa7e9b71498e3a848db MD5 · raw file

  1. /******************************************************************
  2. *
  3. * CyberUPnP for Java
  4. *
  5. * Copyright (C) Satoshi Konno 2002
  6. *
  7. * File: SSDPSearchResponseSocket.java
  8. *
  9. * Revision;
  10. *
  11. * 11/20/02
  12. * - first revision.
  13. * 05/28/03
  14. * - Added post() to send a SSDPSearchRequest.
  15. *
  16. ******************************************************************/
  17. package org.cybergarage.upnp.ssdp;
  18. import org.cybergarage.upnp.*;
  19. public class SSDPSearchResponseSocket extends HTTPUSocket implements Runnable
  20. {
  21. ////////////////////////////////////////////////
  22. // Constructor
  23. ////////////////////////////////////////////////
  24. public SSDPSearchResponseSocket()
  25. {
  26. setControlPoint(null);
  27. }
  28. public SSDPSearchResponseSocket(String bindAddr, int port)
  29. {
  30. super(bindAddr, port);
  31. setControlPoint(null);
  32. }
  33. ////////////////////////////////////////////////
  34. // ControlPoint
  35. ////////////////////////////////////////////////
  36. private ControlPoint controlPoint = null;
  37. public void setControlPoint(ControlPoint ctrlp)
  38. {
  39. this.controlPoint = ctrlp;
  40. }
  41. public ControlPoint getControlPoint()
  42. {
  43. return controlPoint;
  44. }
  45. ////////////////////////////////////////////////
  46. // run
  47. ////////////////////////////////////////////////
  48. private Thread deviceSearchResponseThread = null;
  49. public void run()
  50. {
  51. Thread thisThread = Thread.currentThread();
  52. ControlPoint ctrlPoint = getControlPoint();
  53. while (deviceSearchResponseThread == thisThread) {
  54. Thread.yield();
  55. SSDPPacket packet = receive();
  56. if (packet == null)
  57. break;
  58. if (ctrlPoint != null)
  59. ctrlPoint.searchResponseReceived(packet);
  60. }
  61. }
  62. public void start()
  63. {
  64. deviceSearchResponseThread = new Thread(this);
  65. /* Razvan 2008-03: name the thread for debugging*/
  66. deviceSearchResponseThread.setName("CyberSSDPResponse"+deviceSearchResponseThread.getName());
  67. deviceSearchResponseThread.setDaemon(true);
  68. deviceSearchResponseThread.start();
  69. }
  70. public void stop()
  71. {
  72. deviceSearchResponseThread = null;
  73. }
  74. ////////////////////////////////////////////////
  75. // post
  76. ////////////////////////////////////////////////
  77. public boolean post(String addr, int port, SSDPSearchResponse res)
  78. {
  79. return post(addr, port, res.getHeader());
  80. }
  81. ////////////////////////////////////////////////
  82. // post
  83. ////////////////////////////////////////////////
  84. public boolean post(String addr, int port, SSDPSearchRequest req)
  85. {
  86. return post(addr, port, req.toString());
  87. }
  88. }