public UPnPPluginService[] getServices(UPnPDevice device) { String target_usn = device.getRootDevice().getUSN(); List<UPnPPluginService> res = new ArrayList<UPnPPluginService>(); try { this_mon.enter(); for (UPnPPluginService service : services) { String this_usn = service.getService().getGenericService().getDevice().getRootDevice().getUSN(); if (this_usn.equals(target_usn)) { res.add(service); } } } finally { this_mon.exit(); } return (res.toArray(new UPnPPluginService[res.size()])); }
public String[] getExternalIPAddresses() { List res = new ArrayList(); try { this_mon.enter(); for (int j = 0; j < services.size(); j++) { UPnPPluginService service = (UPnPPluginService) services.get(j); try { String address = service.getService().getExternalIPAddress(); if (address != null) { res.add(address); } } catch (Throwable e) { Debug.printStackTrace(e); } } } finally { this_mon.exit(); } return ((String[]) res.toArray(new String[res.size()])); }
public void generate(IndentWriter writer) { List<UPnPMapping> mappings_copy; List<UPnPPluginService> services_copy; try { this_mon.enter(); mappings_copy = new ArrayList<UPnPMapping>(mappings); services_copy = new ArrayList<UPnPPluginService>(services); } finally { this_mon.exit(); } writer.println("Mappings"); try { writer.indent(); for (UPnPMapping mapping : mappings_copy) { if (mapping.isEnabled()) { writer.println(mapping.getString()); } } } finally { writer.exdent(); } writer.println("Services"); try { writer.indent(); for (UPnPPluginService service : services_copy) { writer.println(service.getString()); } } finally { writer.exdent(); } }
public void mappingDestroyed(UPnPMapping mapping) { try { this_mon.enter(); mappings.remove(mapping); log.log("Mapping request removed: " + mapping.getString()); for (int j = 0; j < services.size(); j++) { UPnPPluginService service = (UPnPPluginService) services.get(j); service.removeMapping(log, mapping, false); } } finally { this_mon.exit(); } }
protected void checkState() { try { this_mon.enter(); for (int i = 0; i < mappings.size(); i++) { UPnPMapping mapping = (UPnPMapping) mappings.get(i); for (int j = 0; j < services.size(); j++) { UPnPPluginService service = (UPnPPluginService) services.get(j); service.checkMapping(log, mapping); } } } finally { this_mon.exit(); } }
protected void removeService(UPnPWANConnection wan_service, boolean replaced) { try { this_mon.enter(); String name = wan_service.getGenericService().getServiceType().indexOf("PPP") == -1 ? "WANIPConnection" : "WANPPPConnection"; String text = MessageText.getString( "upnp.alert.lostdevice", new String[] { name, wan_service.getGenericService().getDevice().getRootDevice().getLocation().getHost() }); log.log(text); if ((!replaced) && alert_device_probs_param.getValue()) { log.logAlertRepeatable(LoggerChannel.LT_WARNING, text); } for (int i = 0; i < services.size(); i++) { UPnPPluginService ps = (UPnPPluginService) services.get(i); if (ps.getService() == wan_service) { services.remove(i); break; } } } finally { this_mon.exit(); } }
protected void addService(UPnPWANConnection wan_service) throws UPnPException { wan_service.addListener(this); mapping_manager.serviceFound(wan_service); try { this_mon.enter(); log.log( " Found " + (wan_service.getGenericService().getServiceType().indexOf("PPP") == -1 ? "WANIPConnection" : "WANPPPConnection")); UPnPWANConnectionPortMapping[] ports; String usn = wan_service.getGenericService().getDevice().getRootDevice().getUSN(); if (getDeviceStats(usn, STATS_READ_OK) == 0 && getDeviceStats(usn, STATS_READ_BAD) > 2) { ports = new UPnPWANConnectionPortMapping[0]; wan_service.periodicallyRecheckMappings(false); log.log(" Not reading port mappings from device due to previous failures"); } else { ports = wan_service.getPortMappings(); } for (int j = 0; j < ports.length; j++) { log.log( " mapping [" + j + "] " + ports[j].getExternalPort() + "/" + (ports[j].isTCP() ? "TCP" : "UDP") + " [" + ports[j].getDescription() + "] -> " + ports[j].getInternalHost()); } services.add( new UPnPPluginService( wan_service, ports, alert_success_param, grab_ports_param, alert_other_port_param, release_mappings_param)); if (services.size() > 1) { // check this isn't a single device with multiple services String new_usn = wan_service.getGenericService().getDevice().getRootDevice().getUSN(); boolean multiple_found = false; for (int i = 0; i < services.size() - 1; i++) { UPnPPluginService service = (UPnPPluginService) services.get(i); String existing_usn = service.getService().getGenericService().getDevice().getRootDevice().getUSN(); if (!new_usn.equals(existing_usn)) { multiple_found = true; break; } } if (multiple_found) { PluginConfig pc = plugin_interface.getPluginconfig(); if (!pc.getPluginBooleanParameter("upnp.device.multipledevices.warned", false)) { pc.setPluginParameter("upnp.device.multipledevices.warned", true); String text = MessageText.getString("upnp.alert.multipledevice.warning"); log.logAlertRepeatable(LoggerChannel.LT_WARNING, text); } } } checkState(); } finally { this_mon.exit(); } }