public void run() { Thread thisThread = Thread.currentThread(); ControlPoint ctrlPoint = getControlPoint(); while (deviceNotifyThread == thisThread) { Thread.yield(); // Thanks for Kazuyuki Shudo (08/23/07) SSDPPacket packet = null; try { packet = receive(); } catch (IOException e) { break; } // Thanks for Mikael Hakman (04/20/05) if (packet == null) continue; // Thanks for Inma (02/20/04) InetAddress maddr = getMulticastInetAddress(); InetAddress pmaddr = packet.getHostInetAddress(); if (maddr.equals(pmaddr) == false) { Debug.warning("Invalidate Multicast Recieved from IP " + maddr + " on " + pmaddr); continue; } // TODO Must be performed on a different Thread in order to prevent UDP packet losses. if (ctrlPoint != null) ctrlPoint.notifyReceived(packet); } }
public void run() { Thread thread = Thread.currentThread(); ControlPoint controlpoint = getControlPoint(); do { SSDPPacket ssdppacket; do { if (deviceNotifyThread != thread) { return; } Thread.yield(); InetAddress inetaddress; InetAddress inetaddress1; try { ssdppacket = receive(); } catch (IOException ioexception) { return; } } while (ssdppacket == null); inetaddress = getMulticastInetAddress(); inetaddress1 = ssdppacket.getHostInetAddress(); if (!inetaddress.equals(inetaddress1)) { Debug.warning( (new StringBuilder("Invalidate Multicast Recieved from IP ")) .append(inetaddress) .append(" on ") .append(inetaddress1) .toString()); } else if (controlpoint != null) { controlpoint.notifyReceived(ssdppacket); } } while (true); }
public SSDPPacket receive() { byte ssdvRecvBuf[] = new byte[SSDP.RECV_MESSAGE_BUFSIZE]; SSDPPacket recvPacket = new SSDPPacket(ssdvRecvBuf, ssdvRecvBuf.length); recvPacket.setLocalAddress(getLocalAddress()); try { ssdpMultiSock.receive(recvPacket.getDatagramPacket()); recvPacket.setTimeStamp(System.currentTimeMillis()); } catch (Exception e) { // Debug.warning(e); } return recvPacket; }