package autoDiscovery;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.Vector;
import org.cybergarage.upnp.ControlPoint;
import org.cybergarage.upnp.Device;
import org.cybergarage.upnp.DeviceList;
import org.cybergarage.upnp.device.NotifyListener;
import org.cybergarage.upnp.device.SearchResponseListener;
import org.cybergarage.upnp.event.EventListener;
import org.cybergarage.upnp.ssdp.SSDPPacket;
import org.cybergarage.util.Debug;
import protocolManager.IFObserver;
/**
* @author
*
*/
public class UPnPController extends ControlPoint implements NotifyListener, EventListener , SearchResponseListener, IFSubject{
/**
* @param args
*/
private final static String DESCRIPTION_FILE_NAME = "description/description.xml";
private final static String PRESENTATION_URI = "discovery/presentation";
private Vector <IFObserver>abonomenten;
private InetAddress inet, neu;
private URL deviceDefLoc;
private String deviceDescription;
/**
* @param args
*/
public void test(){
debug("*********************************************************************************************");
DeviceList rootDevList = this.getDeviceList();
int nRootDevs = rootDevList.size();
debug("UpnpC:: So groß ist device list: "+nRootDevs);
for (int i=0; i<nRootDevs; i++){
Device dev=rootDevList.getDevice(i);
String devName=dev.getFriendlyName();
File devFile=dev.getDescriptionFile();
debug("UpnpC:: Das ist der DescriptionFilePath"+dev.getDescriptionFilePath().toString());
// dev.getDescriptionFile();
int devPort=dev.getHTTPPort();
String devInter=dev.getInterfaceAddress();
System.out.println("UpnpC:: Name:"+i+devName+ "Port:"+devPort +"Interface Adresse!:"+devInter );
}
debug("*********************************************************************************************");
}
public void deviceNotifyReceived(SSDPPacket packet)
{
debug(packet.toString());
debug("UpnpC:: Upnp hat "+ +abonomenten.size()+" abonomenten");
if (packet.isDiscover() == true) {
String st = packet.getST();
System.out.println("UpnpC:: ssdp:discover : ST = " + st);
if(packet.getRemoteInetAddress()instanceof InetAddress) {
notifyObserver(packet.getRemoteInetAddress());
getDescription(packet.getLocation());
}
test();
}
else if (packet.isAlive() == true) {
String usn = packet.getUSN();
String nt = packet.getNT();
String url = packet.getLocation();
System.out.println("ssdp:alive : uuid = " + usn + ", NT = " + nt + ", location = " + url);
System.out.println("UpnpC:: Das ist die URL: "+url);
debug("UpnpC:: Das ist Server:" +packet.getServer());
debug("UpnpC:: Hier kommt alles "+packet.toString());
inet = packet.getRemoteInetAddress();
getDescription(url);
if(inet instanceof InetAddress) {
notifyObserver(inet);
}
test();
}
else if (packet.isByeBye() == true) {
String usn = packet.getUSN();
String nt = packet.getNT();
String url = packet.getLocation();
notifyObserver(packet.getRemoteInetAddress());
}
System.out.println(new java.sql.Timestamp(new java.util.Date().getTime()));
}
public void eventNotifyReceived(String uuid, long seq, String name, String value)
{
System.out.println("UpnpC:: Event Notify erhalten...");
}
public void getDescription(String inet){
if(inet.isEmpty()==false){
debug("GetDiscription:" + inet.toString()+"Ausgabe...");
// java.io.inputStream in = inet.
return;
}
debug("GetDescription ohne Ausgabe!");
}
public void deviceSearchResponseReceived(SSDPPacket packet)
{
String uuid = packet.getUSN();
String st = packet.getST();
String url = packet.getLocation();
notifyObserver(packet.getRemoteInetAddress());
}
public UPnPController()
{
debug("UpnpC:: new UPnP ControlPoint");
abonomenten = new Vector<IFObserver>();
addNotifyListener(this);
addSearchResponseListener(this);
addEventListener(this);
Debug.on();
}
public static void debug( String arg )
{
System.out.println("UpnpC:: "+arg);
}
public void addObserver(IFObserver obs) {
debug("UpnpC:: UPnP addBeobachter ");
abonomenten.add(obs);
}
public void removeObserver(IFObserver obs) {
debug("UpnpC:: UPnP removeBeobachter");
try {
abonomenten.remove(abonomenten.indexOf(obs));
} catch (RuntimeException e) {
debug("UPnPC: Fehler beim entfernen des Observers: " + obs.toString());
// TODO: handle exception
}
debug("UpnpC:: UPnP es sind noch: "+abonomenten.size()+" vorhanden");
}
public void tryEverything (SSDPPacket packet) throws UnknownHostException{
debug("UpnpC:: IP des UPnP Geräts: "+packet.getLocalAddress());
debug("UpnpC:: 1"+InetAddress.getByName(packet.getLocalAddress()));
debug("UpnpC:: 2"+InetAddress.getByName(packet.getHost()));
debug("UpnpC:: 3"+InetAddress.getByName(packet.getRemoteAddress()));
debug("UpnpC:: 4"+InetAddress.getByName(packet.toString().trim()));
}
public void notifyObserver(InetAddress inet) {
debug("UPnP:: remove:" + inet.toString());
for(int i=0; i<abonomenten.size(); i++){
IFObserver obs = abonomenten.get(i);
try {
obs.remove(inet);
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
debug("Entfernen der IP: "+ inet.toString()+" schlug Fehl");
}
}
}
}