protected DeviceTivo foundTiVo( InetAddress address, String uid, String classification, String machine) { uid = "tivo:" + uid; DeviceImpl[] devices = device_manager.getDevices(); String server_name = device_manager.getLocalServiceName(); for (DeviceImpl device : devices) { if (device instanceof DeviceTivo) { DeviceTivo tivo = (DeviceTivo) device; if (device.getID().equals(uid)) { if (classification != null) { String existing_classification = device.getClassification(); if (!classification.equals(existing_classification)) { device.setPersistentStringProperty(DeviceImpl.PP_REND_CLASSIFICATION, classification); } } tivo.found(this, address, server_name, machine); return (tivo); } } } // unfortunately we can't deduce the series from the browse request so start off with a series 3 // this will be corrected later if we receive a beacon which *does* contain the series details if (classification == null) { classification = "tivo.series3"; } DeviceTivo new_device = new DeviceTivo(device_manager, uid, classification); DeviceTivo result = (DeviceTivo) device_manager.addDevice(new_device); // possible race here so handle case where device already present if (result == new_device) { new_device.found(this, address, server_name, machine); } return (result); }
protected byte[] encodeBeacon(boolean is_broadcast, int my_port) throws IOException { String beacon = "tivoconnect=1" + LF + "swversion=1" + LF + "method=" + (is_broadcast ? "broadcast" : "connected") + LF + "identity=" + uid + LF + "machine=" + device_manager.getLocalServiceName() + LF + "platform=pc" + LF + "services=TiVoMediaServer:" + my_port + "/http"; return (beacon.getBytes("ISO-8859-1")); }