/* * Copyright (C) 2010 Teleal GmbH, Switzerland * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.teleal.cling.support.model; import org.teleal.cling.model.action.ActionArgumentValue; import org.teleal.cling.model.meta.Service; import org.teleal.cling.model.types.UnsignedIntegerFourBytes; import org.teleal.cling.model.types.UnsignedIntegerTwoBytes; import java.util.Map; /** * @author Christian Bauer */ public class PortMapping { public enum Protocol { UDP, TCP } private boolean enabled; private UnsignedIntegerFourBytes leaseDurationSeconds; private String remoteHost; private UnsignedIntegerTwoBytes externalPort; private UnsignedIntegerTwoBytes internalPort; private String internalClient; private Protocol protocol; private String description; public PortMapping() { } public PortMapping(Map<String, ActionArgumentValue<Service>> map) { this( (Boolean) map.get("NewEnabled").getValue(), (UnsignedIntegerFourBytes) map.get("NewLeaseDuration").getValue(), (String) map.get("NewRemoteHost").getValue(), (UnsignedIntegerTwoBytes) map.get("NewExternalPort").getValue(), (UnsignedIntegerTwoBytes) map.get("NewInternalPort").getValue(), (String) map.get("NewInternalClient").getValue(), Protocol.valueOf(map.get("NewProtocol").toString()), (String) map.get("NewPortMappingDescription").getValue() ); } public PortMapping(int port, String internalClient, Protocol protocol) { this( true, new UnsignedIntegerFourBytes(0), null, new UnsignedIntegerTwoBytes(port), new UnsignedIntegerTwoBytes(port), internalClient, protocol, null ); } public PortMapping(int port, String internalClient, Protocol protocol, String description) { this( true, new UnsignedIntegerFourBytes(0), null, new UnsignedIntegerTwoBytes(port), new UnsignedIntegerTwoBytes(port), internalClient, protocol, description ); } public PortMapping(String remoteHost, UnsignedIntegerTwoBytes externalPort, Protocol protocol) { this( true, new UnsignedIntegerFourBytes(0), remoteHost, externalPort, null, null, protocol, null ); } public PortMapping(boolean enabled, UnsignedIntegerFourBytes leaseDurationSeconds, String remoteHost, UnsignedIntegerTwoBytes externalPort, UnsignedIntegerTwoBytes internalPort, String internalClient, Protocol protocol, String description) { this.enabled = enabled; this.leaseDurationSeconds = leaseDurationSeconds; this.remoteHost = remoteHost; this.externalPort = externalPort; this.internalPort = internalPort; this.internalClient = internalClient; this.protocol = protocol; this.description = description; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public UnsignedIntegerFourBytes getLeaseDurationSeconds() { return leaseDurationSeconds; } public void setLeaseDurationSeconds(UnsignedIntegerFourBytes leaseDurationSeconds) { this.leaseDurationSeconds = leaseDurationSeconds; } public boolean hasRemoteHost() { return remoteHost != null && remoteHost.length() > 0; } public String getRemoteHost() { return remoteHost == null ? "-" : remoteHost; } public void setRemoteHost(String remoteHost) { this.remoteHost = remoteHost == null || remoteHost.equals("-") || remoteHost.length() == 0 ? null : remoteHost; } public UnsignedIntegerTwoBytes getExternalPort() { return externalPort; } public void setExternalPort(UnsignedIntegerTwoBytes externalPort) { this.externalPort = externalPort; } public UnsignedIntegerTwoBytes getInternalPort() { return internalPort; } public void setInternalPort(UnsignedIntegerTwoBytes internalPort) { this.internalPort = internalPort; } public String getInternalClient() { return internalClient; } public void setInternalClient(String internalClient) { this.internalClient = internalClient; } public Protocol getProtocol() { return protocol; } public void setProtocol(Protocol protocol) { this.protocol = protocol; } public boolean hasDescription() { return description != null; } public String getDescription() { return description == null ? "-" : description; } public void setDescription(String description) { this.description = description == null || description.equals("-") || description.length() == 0 ? null : description; } @Override public String toString() { return "(" + getClass().getSimpleName() + ") Protocol: " + getProtocol() + ", " + getExternalPort() + " => " + getInternalClient(); } }