/*******************************************************************************
* Copyright (c) 2009 MATERNA Information & Communications. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html. For further
* project-related information visit http://www.ws4d.org. The most recent
* version of the JMEDS framework can be obtained from
* http://sourceforge.net/projects/ws4d-javame.
******************************************************************************/
package org.ws4d.java.communication;
import org.ws4d.java.types.URI;
/**
*
*/
public class DPWSProtocolData extends ProtocolData {
private static final Object INSTANCE_ID_LOCK = new Object();
private static long instanceIdInc = 0L;
private final Long instanceId;
private final boolean connectionOriented;
private final String iFace;
private final String sourceHost;
private int sourcePort;
private final String destinationHost;
private final int destinationPort;
private volatile ContextID currentMIMEContext;
private URI transportAddress = null;
public DPWSProtocolData(String iFace, boolean direction, String sourceHost, int sourcePort, String destinationHost, int destinationPort, boolean connectionOriented) {
super(direction);
synchronized (INSTANCE_ID_LOCK) {
this.instanceId = new Long(instanceIdInc++);
}
this.iFace = iFace;
this.sourceHost = sourceHost;
this.sourcePort = sourcePort;
this.destinationHost = destinationHost;
this.destinationPort = destinationPort;
this.connectionOriented = connectionOriented;
}
private DPWSProtocolData(String iFace, boolean direction, String sourceHost, int sourcePort, String destinationHost, int destinationPort, boolean connectionOriented, Long instanceId) {
super(direction);
this.instanceId = instanceId;
this.iFace = iFace;
this.sourceHost = sourceHost;
this.sourcePort = sourcePort;
this.destinationHost = destinationHost;
this.destinationPort = destinationPort;
this.connectionOriented = connectionOriented;
}
public ProtocolData createSwappedProtocolData() {
return (ProtocolData) new DPWSProtocolData(this.iFace, !direction, this.destinationHost, this.destinationPort, this.sourceHost, this.sourcePort, this.connectionOriented, this.instanceId);
}
/*
* (non-Javadoc)
* @see org.ws4d.java.communication.ProtocolData#getProtocolId()
*/
public String getCommunicationManagerId() {
return DPWSCommunicationManager.COMMUNICATION_MANAGER_ID;
}
/*
* (non-Javadoc)
* @see org.ws4d.java.communication.ProtocolData#getiFace()
*/
public String getIFace() {
return iFace;
}
/*
* (non-Javadoc)
* @see org.ws4d.java.communication.ProtocolData#getSourceAddress()
*/
public String getSourceAddress() {
return getSourceHost() + '@' + getSourcePort();
}
/*
* (non-Javadoc)
* @see org.ws4d.java.communication.ProtocolData#getDestinationAddress()
*/
public String getDestinationAddress() {
return getDestinationHost() + '@' + getDestinationPort();
}
/**
* @return the instanceId
*/
public Long getInstanceId() {
return instanceId;
}
/**
* @return
*/
public String getSourceHost() {
return sourceHost;
}
/**
* @return
*/
public int getSourcePort() {
return sourcePort;
}
/**
* @return
*/
public String getDestinationHost() {
return destinationHost;
}
/**
* @return
*/
public int getDestinationPort() {
return destinationPort;
}
/**
* @return
*/
public boolean isConnectionOriented() {
return connectionOriented;
}
/**
* @return the currentMIMEContext
*/
public ContextID getCurrentMIMEContext() {
return currentMIMEContext;
}
/**
* @param currentMIMEContext the currentMIMEContext to set
*/
public void setCurrentMIMEContext(ContextID currentMIMEContext) {
this.currentMIMEContext = currentMIMEContext;
}
/**
* @param sourcePort the sourcePort to set
*/
public void setSourcePort(int sourcePort) {
if (this.sourcePort == 0) {
this.sourcePort = sourcePort;
} else if (this.sourcePort != sourcePort) {
throw new RuntimeException("Attempt to overwrite a non-zero source port.");
}
}
public String toString() {
return "DPWSProtocolData [ id=" + getInstanceId() + ", from=" + getSourceAddress() + ", to=" + getDestinationAddress() + " ]";
}
public URI getTransportAddress() {
return transportAddress;
}
public void setTransportAddress(URI transportAddress) {
this.transportAddress = transportAddress;
}
}