Author: rgodfrey
Date: Wed Feb 13 11:06:22 2013
New Revision: 1445552
URL: http://svn.apache.org/r1445552
Log:
PROTON-61 : allow setting of connection capabilities
Modified:
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java
qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
Modified:
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
---
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
(original)
+++
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
Wed Feb 13 11:06:22 2013
@@ -103,7 +103,7 @@ public class JNIData implements Data
}
}
- public JNIData(long capacity)
+ public JNIData(long capacity)
{
_impl = Proton.pn_data(capacity);
}
Modified:
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
---
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java
(original)
+++
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java
Wed Feb 13 11:06:22 2013
@@ -20,9 +20,14 @@
*/
package org.apache.qpid.proton.engine.jni;
+import java.util.ArrayList;
import java.util.EnumSet;
+import java.util.List;
import org.apache.qpid.proton.ProtonCEquivalent;
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.codec.Data;
+import org.apache.qpid.proton.codec.jni.JNIData;
import org.apache.qpid.proton.engine.Connection;
import org.apache.qpid.proton.engine.Delivery;
import org.apache.qpid.proton.engine.EndpointError;
@@ -37,6 +42,7 @@ import org.apache.qpid.proton.jni.SWIGTY
public class JNIConnection implements Connection
{
+ public static final Symbol[] EMPTY_CAPABILTIES = new Symbol[0];
private SWIGTYPE_p_pn_connection_t _impl;
private Object _context;
@@ -202,4 +208,50 @@ public class JNIConnection implements Co
}
return null;
}
+
+ @Override
+ public void setOfferedCapabilities(Symbol[] capabilities)
+ {
+ JNIData data = new
JNIData(Proton.pn_connection_offered_capabilities(_impl));
+ data.clear();
+ if(capabilities != null)
+ {
+ data.putJavaArray(capabilities);
+ }
+ }
+
+ @Override
+ public void setDesiredCapabilities(Symbol[] capabilities)
+ {
+ JNIData data = new
JNIData(Proton.pn_connection_desired_capabilities(_impl));
+ data.clear();
+ if(capabilities != null)
+ {
+ data.putJavaArray(capabilities);
+ }
+ }
+
+ @Override
+ public Symbol[] getRemoteOfferedCapabilities()
+ {
+ JNIData data = new
JNIData(Proton.pn_connection_remote_offered_capabilities(_impl));
+ data.rewind();
+ if(data.next() != null)
+ {
+ return (Symbol[]) data.getJavaArray();
+ }
+ return EMPTY_CAPABILTIES;
+ }
+
+ @Override
+ public Symbol[] getRemoteDesiredCapabilities()
+ {
+ JNIData data = new
JNIData(Proton.pn_connection_remote_desired_capabilities(_impl));
+ data.rewind();
+ if(data.next() != null)
+ {
+ return (Symbol[]) data.getJavaArray();
+ }
+ return EMPTY_CAPABILTIES;
+ }
}
Modified:
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
---
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java
(original)
+++
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java
Wed Feb 13 11:06:22 2013
@@ -21,6 +21,7 @@
package org.apache.qpid.proton.engine;
import java.util.EnumSet;
+import org.apache.qpid.proton.amqp.Symbol;
/**
@@ -53,4 +54,12 @@ public interface Connection extends Endp
public String getRemoteContainer();
public String getRemoteHostname();
+
+ void setOfferedCapabilities(Symbol[] capabilities);
+
+ void setDesiredCapabilities(Symbol[] capabilities);
+
+ Symbol[] getRemoteOfferedCapabilities();
+
+ Symbol[] getRemoteDesiredCapabilities();
}
Modified: qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py
(original)
+++ qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py Wed Feb
13 11:06:22 2013
@@ -163,6 +163,28 @@ class Condition:
self.description == o.description and \
self.info == o.info
+def convertToPyArray(t,a,f):
+ if a == None or len(a) == 0:
+ return None
+
+ return Array(UNDESCRIBED, t, *map(f,a))
+
+
+arrayElementMappings = {
+ JData.DataType.SYMBOL: lambda s: Symbol.valueOf(s)
+ }
+
+
+arrayTypeMappings = {
+ JData.DataType.SYMBOL: Symbol
+ }
+
+def convertFromPyArray(a):
+ if a == None:
+ return None
+
+ return array(map(arrayElementMappings[a.type],a.elements),
arrayTypeMappings[a.type])
+
def wrap_connection(impl):
if impl: return Connection(_impl = impl)
@@ -170,6 +192,8 @@ class Connection(Endpoint):
def __init__(self, _impl=None):
self.impl = _impl or engineFactory.createConnection()
+ self._desired_capabilities = None
+ self._offered_capabilities = None
@property
def writable(self):
@@ -214,9 +238,34 @@ class Connection(Endpoint):
self.impl.setRemoteHostname(hostname)
remote_hostname = property(_get_remote_hostname, _set_remote_hostname)
- @property
- def offered_capabilities(self):
- return DataDummy()
+ def _get_remote_offered_capabilities(self):
+ return convertToPyArray(Data.SYMBOL,
self.impl.getRemoteOfferedCapabilities(),symbol)
+ def _set_remote_offered_capabilities(self, capabilities):
+ self.impl.setRemoteOfferedCapabilities(convertFromPyArray(capabilities))
+ remote_offered_capabilities = property(_get_remote_offered_capabilities,
_set_remote_offered_capabilities)
+
+ def _get_remote_desired_capabilities(self):
+ return convertToPyArray(Data.SYMBOL,
self.impl.getRemoteDesiredCapabilities(),symbol)
+ def _set_remote_desired_capabilities(self, capabilities):
+ self.impl.setRemoteDesiredCapabilities(convertFromPyArray(capabilities))
+ remote_desired_capabilities = property(_get_remote_desired_capabilities,
_set_remote_desired_capabilities)
+
+
+ def _get_offered_capabilities(self):
+ return self._offered_capabilities
+ def _set_offered_capabilities(self, capabilities):
+ self._offered_capabilities = capabilities
+ self.impl.setOfferedCapabilities(convertFromPyArray(capabilities))
+ offered_capabilities = property(_get_offered_capabilities,
_set_offered_capabilities)
+
+ def _get_desired_capabilities(self):
+ return self._desired_capabilities
+ def _set_desired_capabilities(self, capabilities):
+ self._desired_capabilities = capabilities
+ self.impl.setDesiredCapabilities(convertFromPyArray(capabilities))
+ desired_capabilities = property(_get_desired_capabilities,
_set_desired_capabilities)
+
+
def wrap_session(impl):
Modified:
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
---
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
(original)
+++
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
Wed Feb 13 11:06:22 2013
@@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;
+import org.apache.qpid.proton.amqp.Symbol;
import org.apache.qpid.proton.engine.*;
import org.apache.qpid.proton.amqp.transport.Open;
@@ -54,6 +55,12 @@ public class ConnectionImpl extends Endp
private boolean _bound;
private String _remoteContainer;
private String _remoteHostname;
+ private Symbol[] _offeredCapabilities;
+ private Symbol[] _desiredCapabilities;
+ private Symbol[] _remoteOfferedCapabilities;
+ private Symbol[] _remoteDesiredCapabilities;
+
+ private static final Symbol[] EMPTY_SYMBOL_ARRAY = new Symbol[0];
/**
* @deprecated This constructor's visibility will be reduced to the
default scope in a future release.
@@ -185,6 +192,8 @@ public class ConnectionImpl extends Endp
setRemoteState(EndpointState.ACTIVE);
setRemoteHostname(open.getHostname());
setRemoteContainer(open.getContainerId());
+ setRemoteDesiredCapabilities(open.getDesiredCapabilities());
+ setRemoteOfferedCapabilities(open.getOfferedCapabilities());
}
@@ -281,6 +290,51 @@ public class ConnectionImpl extends Endp
return _remoteHostname;
}
+ @Override
+ public void setOfferedCapabilities(Symbol[] capabilities)
+ {
+ _offeredCapabilities = capabilities;
+ }
+
+ @Override
+ public void setDesiredCapabilities(Symbol[] capabilities)
+ {
+ _desiredCapabilities = capabilities;
+ }
+
+ @Override
+ public Symbol[] getRemoteOfferedCapabilities()
+ {
+ return _remoteOfferedCapabilities == null ? EMPTY_SYMBOL_ARRAY :
_remoteOfferedCapabilities;
+ }
+
+ @Override
+ public Symbol[] getRemoteDesiredCapabilities()
+ {
+ return _remoteDesiredCapabilities == null ? EMPTY_SYMBOL_ARRAY :
_remoteDesiredCapabilities;
+ }
+
+
+ Symbol[] getOfferedCapabilities()
+ {
+ return _offeredCapabilities;
+ }
+
+ Symbol[] getDesiredCapabilities()
+ {
+ return _desiredCapabilities;
+ }
+
+ void setRemoteOfferedCapabilities(Symbol[] remoteOfferedCapabilities)
+ {
+ _remoteOfferedCapabilities = remoteOfferedCapabilities;
+ }
+
+ void setRemoteDesiredCapabilities(Symbol[] remoteDesiredCapabilities)
+ {
+ _remoteDesiredCapabilities = remoteDesiredCapabilities;
+ }
+
public String getHostname()
{
return _localHostname;
Modified:
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
---
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
(original)
+++
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
Wed Feb 13 11:06:22 2013
@@ -738,6 +738,8 @@ public class TransportImpl extends Endpo
Open open = new Open();
open.setContainerId(_connectionEndpoint.getLocalContainerId());
open.setHostname(_connectionEndpoint.getHostname());
+
open.setDesiredCapabilities(_connectionEndpoint.getDesiredCapabilities());
+
open.setOfferedCapabilities(_connectionEndpoint.getOfferedCapabilities());
// TODO - populate;
_isOpenSent = true;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]