package com.wireme.mediaserver; import java.io.IOException; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; import org.teleal.cling.binding.annotations.AnnotationLocalServiceBinder; import org.teleal.cling.model.DefaultServiceManager; import org.teleal.cling.model.ValidationException; import org.teleal.cling.model.meta.DeviceDetails; import org.teleal.cling.model.meta.DeviceIdentity; import org.teleal.cling.model.meta.LocalDevice; import org.teleal.cling.model.meta.LocalService; import org.teleal.cling.model.meta.ManufacturerDetails; import org.teleal.cling.model.meta.ModelDetails; import org.teleal.cling.model.types.DeviceType; import org.teleal.cling.model.types.UDADeviceType; import org.teleal.cling.model.types.UDN; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.util.Log; public class MediaServer { private UDN udn = UDN.uniqueSystemIdentifier("GNaP-MediaServer"); private LocalDevice localDevice; private final static String deviceType = "MediaServer"; private final static int version = 1; private final static String LOGTAG = "GNaP-MediaServer"; private final static int port = 8192; private static InetAddress localAddress; private HttpServer mHttpServer; public MediaServer(InetAddress localAddress, String devname) throws ValidationException { DeviceType type = new UDADeviceType(deviceType, version); DeviceDetails details = new DeviceDetails(devname, new ManufacturerDetails(android.os.Build.MANUFACTURER), new ModelDetails("GNaP", "GNaP MediaServer for Android", "v1")); LocalService service = new AnnotationLocalServiceBinder() .read(ContentDirectoryService.class); service.setManager(new DefaultServiceManager<ContentDirectoryService>( service, ContentDirectoryService.class)); localDevice = new LocalDevice(new DeviceIdentity(udn), type, details, service); this.localAddress = localAddress; Log.v(LOGTAG, "MediaServer device created: "); Log.v(LOGTAG, "friendly name: " + details.getFriendlyName()); Log.v(LOGTAG, "manufacturer: " + details.getManufacturerDetails().getManufacturer()); Log.v(LOGTAG, "model: " + details.getModelDetails().getModelName()); //start http server try { mHttpServer=new HttpServer(port); } catch (IOException ioe ) { System.err.println( "Couldn't start server:\n" + ioe ); System.exit( -1 ); } Log.v(LOGTAG, "Started Http Server on port " + port); } public LocalDevice getDevice() { return localDevice; } public String getAddress() { return localAddress.getHostAddress() + ":" + port; } public void stopHttpServer() { //start http server try { mHttpServer.stop(); } catch (Exception ioe ) { System.err.println( "Couldn't stop server:\n" + ioe ); System.exit( -1 ); } } }