Bug fixes and other stuff
This commit is contained in:
parent
a7e6324a10
commit
e822a4b35c
7 changed files with 80 additions and 63 deletions
|
|
@ -104,7 +104,7 @@ public class HttpHeaderParser {
|
|||
httpCode = Integer.parseInt( line.substring( 9, 12 ));
|
||||
}
|
||||
// Client Request
|
||||
else{
|
||||
else if(line.contains("HTTP/")){
|
||||
type = (line.substring(0, line.indexOf(" "))).trim();
|
||||
version = Float.parseFloat( line.substring(line.lastIndexOf("HTTP/")+5 , line.length()).trim() );
|
||||
line = (line.substring(type.length()+1, line.lastIndexOf("HTTP/"))).trim();
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ public class SSDPClient extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
// Contains all the received services
|
||||
private HashMap<String, LinkedList<SSDPServiceInfo>> services_st;
|
||||
private HashMap<String, SSDPServiceInfo> services_usn;
|
||||
|
||||
private SSDPServiceListener listener;
|
||||
|
||||
|
||||
public static void main(String[] args) throws IOException{
|
||||
|
|
@ -104,8 +106,8 @@ public class SSDPClient extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
http.setHeader("ST", st );
|
||||
http.setHeader("Man", "\"ssdp:discover\"" );
|
||||
http.setHeader("MX", "3" );
|
||||
http.flush();
|
||||
|
||||
http.close();
|
||||
logger.log(Level.FINEST, "***** REQUEST: \n"+msg);
|
||||
byte[] data = msg.toString().getBytes();
|
||||
DatagramPacket packet = new DatagramPacket(
|
||||
|
|
@ -113,6 +115,7 @@ public class SSDPClient extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
InetAddress.getByName( SSDPServer.SSDP_MULTICAST_ADDR ),
|
||||
SSDPServer.SSDP_PORT );
|
||||
super.send( packet );
|
||||
http.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
|
@ -173,10 +176,11 @@ public class SSDPClient extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
*/
|
||||
public void receivedPacket(DatagramPacket packet, ThreadedUDPNetwork network) {
|
||||
HttpHeaderParser header = new HttpHeaderParser( new String( packet.getData() ) );
|
||||
logger.log(Level.FINEST, "*********** Recived\n"+header);
|
||||
logger.log(Level.FINEST, "Recived: \n"+header);
|
||||
|
||||
String usn = header.getHeader("USN");
|
||||
String st = header.getHeader("ST");
|
||||
boolean newService = false;
|
||||
StandardSSDPInfo service;
|
||||
// Get existing service
|
||||
if( services_usn.containsKey( usn )){
|
||||
|
|
@ -184,6 +188,7 @@ public class SSDPClient extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
}
|
||||
// Add new service
|
||||
else{
|
||||
newService = true;
|
||||
service = new StandardSSDPInfo();
|
||||
services_usn.put( usn, service);
|
||||
if( !services_st.containsKey(st) )
|
||||
|
|
@ -197,7 +202,10 @@ public class SSDPClient extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
service.setExpirationTime(
|
||||
System.currentTimeMillis() +
|
||||
1000 * getCacheTime(header.getHeader("Cache-Control")) );
|
||||
logger.log(Level.FINEST, "*********** Recived\n"+service);
|
||||
|
||||
logger.log(Level.FINEST, "Recived:\n"+service);
|
||||
if(listener != null && newService)
|
||||
listener.newService(service);
|
||||
}
|
||||
|
||||
private long getCacheTime(String cache_control){
|
||||
|
|
@ -212,4 +220,7 @@ public class SSDPClient extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
return ret;
|
||||
}
|
||||
|
||||
public interface SSDPServiceListener{
|
||||
public void newService(StandardSSDPInfo service);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ public class SSDPServer extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
|
||||
|
||||
public static void main(String[] args) throws IOException{
|
||||
LogUtil.setGlobalLevel(Level.FINEST);
|
||||
SSDPServer ssdp = new SSDPServer();
|
||||
StandardSSDPInfo service = new StandardSSDPInfo();
|
||||
service.setLocation("nowhere");
|
||||
|
|
@ -101,8 +102,7 @@ public class SSDPServer extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
/**
|
||||
* Adds an service that will be announced.
|
||||
*
|
||||
* @param searchTarget is the ST value in SSDP
|
||||
* @param location is the location of the service
|
||||
* @param service add a new service to be announced
|
||||
*/
|
||||
public void addService(SSDPServiceInfo service){
|
||||
services.put( service.getSearchTarget(), service );
|
||||
|
|
@ -178,11 +178,11 @@ public class SSDPServer extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
String msg = new String( packet.getData() );
|
||||
|
||||
HttpHeaderParser header = new HttpHeaderParser( msg );
|
||||
logger.log(Level.FINEST, "**** Received:\n"+header);
|
||||
logger.log(Level.FINEST, "#### Received:\n"+header);
|
||||
|
||||
// ******* Respond
|
||||
// Check that the message is an ssdp discovery message
|
||||
if( header.getRequestType().equalsIgnoreCase("M-SEARCH") ){
|
||||
if( header.getRequestType() != null && header.getRequestType().equalsIgnoreCase("M-SEARCH") ){
|
||||
String man = header.getHeader("Man").replace("\"", "");
|
||||
String st = header.getHeader("ST");
|
||||
// Check that its the correct URL and that its an ssdp:discover message
|
||||
|
|
@ -199,15 +199,17 @@ public class SSDPServer extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
http.setHeader("EXT", "" );
|
||||
http.setHeader("Cache-Control", "max-age = "+cache_time );
|
||||
http.setHeader("USN", services.get(st).getUSN() );
|
||||
http.flush();
|
||||
|
||||
http.close();
|
||||
logger.log(Level.FINEST, "********** Response:\n"+response);
|
||||
byte[] data = response.toString().getBytes();
|
||||
String strData = response.toString();
|
||||
logger.log(Level.FINEST, "#### Response:\n"+strData);
|
||||
byte[] data = strData.getBytes();
|
||||
packet = new DatagramPacket(
|
||||
data, data.length,
|
||||
packet.getAddress(),
|
||||
packet.getPort());
|
||||
network.send( packet );
|
||||
http.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -267,7 +269,7 @@ public class SSDPServer extends ThreadedUDPNetwork implements ThreadedUDPNetwork
|
|||
http.setHeader("USN", services.get(searchTarget).getUSN() );
|
||||
|
||||
http.close();
|
||||
logger.log(Level.FINEST, "******** Notification:\n"+msg);
|
||||
logger.log(Level.FINEST, "#### Notification:\n"+msg);
|
||||
byte[] data = msg.toString().getBytes();
|
||||
DatagramPacket packet = new DatagramPacket(
|
||||
data, data.length,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue