You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2016/05/25 15:54:53 UTC

svn commit: r1745513 - in /qpid/java/trunk: broker-core/src/main/java/org/apache/qpid/server/consumer/ broker-core/src/test/java/org/apache/qpid/server/consumer/ broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ bro...

Author: rgodfrey
Date: Wed May 25 15:54:53 2016
New Revision: 1745513

URL: http://svn.apache.org/viewvc?rev=1745513&view=rev
Log:
QPID-7000 : Use the address of the target of the consumer for route matching in preference to the consumer tag/name

Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/consumer/MockConsumer.java
    qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java
    qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ConsumerTarget_0_8.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java
    qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
    qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java
    qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQDestination.java
    qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java
    qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/AddressHelper.java
    qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/Link.java
    qpid/java/trunk/common/src/main/java/org/apache/qpid/url/BindingURL.java

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/consumer/ConsumerTarget.java Wed May 25 15:54:53 2016
@@ -37,6 +37,8 @@ public interface ConsumerTarget
 
     boolean hasPendingWork();
 
+    String getTargetAddress();
+
     enum State
     {
         ACTIVE, SUSPENDED, CLOSED

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/consumer/MockConsumer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/consumer/MockConsumer.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/consumer/MockConsumer.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/consumer/MockConsumer.java Wed May 25 15:54:53 2016
@@ -176,6 +176,12 @@ public class MockConsumer implements Con
     }
 
     @Override
+    public String getTargetAddress()
+    {
+        return getName();
+    }
+
+    @Override
     public void consumerAdded(final ConsumerImpl sub)
     {
     }

Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ConsumerTarget_0_10.java Wed May 25 15:54:53 2016
@@ -71,6 +71,7 @@ public class ConsumerTarget_0_10 extends
 
     private final AtomicBoolean _deleted = new AtomicBoolean(false);
     private final String _name;
+    private final String _targetAddress;
 
 
     private FlowCreditManager_0_10 _creditManager;
@@ -84,7 +85,6 @@ public class ConsumerTarget_0_10 extends
     private final AtomicLong _unacknowledgedCount = new AtomicLong(0);
     private final AtomicLong _unacknowledgedBytes = new AtomicLong(0);
 
-    private final Map<String, Object> _arguments;
     private int _deferredMessageCredit;
     private long _deferredSizeCredit;
     private final List<ConsumerImpl> _consumers = new CopyOnWriteArrayList<>();
@@ -118,9 +118,15 @@ public class ConsumerTarget_0_10 extends
         _creditManager = creditManager;
         _flowMode = flowMode;
         _creditManager.addStateListener(this);
-        _arguments = arguments == null ? Collections.<String, Object> emptyMap() :
-                                         Collections.<String, Object> unmodifiableMap(arguments);
         _name = name;
+        if(arguments != null && arguments.containsKey("local-address"))
+        {
+            _targetAddress = String.valueOf(arguments.get("local-address"));
+        }
+        else
+        {
+            _targetAddress = name;
+        }
     }
 
     @Override
@@ -626,11 +632,6 @@ public class ConsumerTarget_0_10 extends
         return false;
     }
 
-    public Map<String, Object> getArguments()
-    {
-        return _arguments;
-    }
-
     public void queueEmpty()
     {
     }
@@ -639,6 +640,11 @@ public class ConsumerTarget_0_10 extends
     {
     }
 
+    @Override
+    public String getTargetAddress()
+    {
+        return _targetAddress;
+    }
 
     @Override
     public void consumerAdded(final ConsumerImpl sub)

Modified: qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ConsumerTarget_0_8.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ConsumerTarget_0_8.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ConsumerTarget_0_8.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ConsumerTarget_0_8.java Wed May 25 15:54:53 2016
@@ -57,6 +57,7 @@ public abstract class ConsumerTarget_0_8
     private final AtomicLong _unacknowledgedBytes = new AtomicLong(0);
     private final List<ConsumerImpl> _consumers = new CopyOnWriteArrayList<>();
     private final AtomicBoolean _needToClose = new AtomicBoolean();
+    private final String _targetAddress;
 
 
     public static ConsumerTarget_0_8 createBrowserTarget(AMQChannel channel,
@@ -327,10 +328,20 @@ public abstract class ConsumerTarget_0_8
             {
                 _autoClose = false;
             }
+            if(arguments.containsKey("local-address"))
+            {
+                _targetAddress = String.valueOf(arguments.get("local-address"));
+            }
+            else
+            {
+                _targetAddress = consumerTag.toString();
+            }
         }
         else
         {
             _autoClose = false;
+            _targetAddress = consumerTag.toString();
+
         }
     }
 
@@ -350,6 +361,12 @@ public abstract class ConsumerTarget_0_8
         _consumers.add( sub );
     }
 
+    @Override
+    public String getTargetAddress()
+    {
+        return _targetAddress;
+    }
+
     public AMQSessionModel getSessionModel()
     {
         return _channel;

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java Wed May 25 15:54:53 2016
@@ -33,6 +33,8 @@ import org.apache.qpid.server.protocol.v
 import org.apache.qpid.server.protocol.v1_0.type.Binary;
 import org.apache.qpid.server.protocol.v1_0.type.DeliveryState;
 import org.apache.qpid.server.protocol.v1_0.type.Outcome;
+import org.apache.qpid.server.protocol.v1_0.type.Source;
+import org.apache.qpid.server.protocol.v1_0.type.Target;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 import org.apache.qpid.server.protocol.v1_0.type.codec.AMQPDescribedTypeRegistry;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted;
@@ -507,6 +509,14 @@ class ConsumerTarget_1_0 extends Abstrac
     }
 
     @Override
+    public String getTargetAddress()
+    {
+        Target target = _link.getEndpoint().getTarget();
+
+        return target instanceof org.apache.qpid.server.protocol.v1_0.type.messaging.Target ? ((org.apache.qpid.server.protocol.v1_0.type.messaging.Target) target).getAddress() : _link.getEndpoint().getName();
+    }
+
+    @Override
     public void consumerAdded(final ConsumerImpl sub)
     {
         _consumer = sub;

Modified: qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java (original)
+++ qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java Wed May 25 15:54:53 2016
@@ -22,6 +22,7 @@ package org.apache.qpid.server.managemen
 
 import java.nio.charset.Charset;
 import java.security.AccessControlException;
+import java.security.AccessController;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -35,8 +36,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 
+import javax.security.auth.Subject;
+
+import org.apache.qpid.server.connection.SessionPrincipal;
 import org.apache.qpid.server.consumer.ConsumerImpl;
 import org.apache.qpid.server.consumer.ConsumerTarget;
 import org.apache.qpid.server.filter.FilterManager;
@@ -55,7 +59,6 @@ import org.apache.qpid.server.model.Mana
 import org.apache.qpid.server.model.NamedAddressSpace;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.plugin.MessageConverter;
-import org.apache.qpid.server.plugin.SystemNodeCreator;
 import org.apache.qpid.server.protocol.AMQSessionModel;
 import org.apache.qpid.server.protocol.MessageConverterRegistry;
 import org.apache.qpid.server.store.MessageDurability;
@@ -108,7 +111,7 @@ class ManagementNode implements MessageS
 
     private final Action<ManagementNode> _onDelete;
     private final ConfiguredObject<?> _managedObject;
-    private Map<String, ManagementNodeConsumer> _consumers = new ConcurrentHashMap<String, ManagementNodeConsumer>();
+    private List<ManagementNodeConsumer> _consumers = new CopyOnWriteArrayList<>();
 
     private Map<String,ManagedEntityType> _entityTypes = Collections.synchronizedMap(new LinkedHashMap<String, ManagedEntityType>());
 
@@ -356,22 +359,42 @@ class ManagementNode implements MessageS
         }
 
 
-        ManagementNodeConsumer consumer = _consumers.get(message.getMessageHeader().getReplyTo());
-        response.setInitialRoutingAddress(message.getMessageHeader().getReplyTo());
-        if(consumer != null)
-        {
-            // TODO - check same owner
-            consumer.send(response);
-        }
-        else
+        sendResponse(message, response);
+
+    }
+
+    private void sendResponse(final InternalMessage message, final InternalMessage response)
+    {
+        String replyTo = message.getMessageHeader().getReplyTo();
+        response.setInitialRoutingAddress(replyTo);
+
+
+        getResponseDestination(replyTo).send(response,
+                                             replyTo, InstanceProperties.EMPTY,
+                                             new AutoCommitTransaction(_addressSpace.getMessageStore()),
+                                             null);
+
+    }
+
+    private MessageDestination getResponseDestination(String replyTo)
+    {
+        ManagementNodeConsumer consumer = null;
+        Subject currentSubject = Subject.getSubject(AccessController.getContext());
+        Set<SessionPrincipal> sessionPrincipals = currentSubject.getPrincipals(SessionPrincipal.class);
+        if (!sessionPrincipals.isEmpty())
         {
-            _addressSpace.getDefaultDestination().send(response,
-                                                       message.getMessageHeader().getReplyTo(), InstanceProperties.EMPTY,
-                                                       new AutoCommitTransaction(_addressSpace.getMessageStore()),
-                                                       null);
+            AMQSessionModel publishingSession = sessionPrincipals.iterator().next().getSession();
+            for (ManagementNodeConsumer candidate : _consumers)
+            {
+                if (candidate.getTarget().getTargetAddress().equals(replyTo) && candidate.getSessionModel() == publishingSession)
+                {
+                    consumer = candidate;
+                    break;
+                }
+            }
         }
-        // TODO - route to a queue
 
+        return consumer == null ? _addressSpace.getDefaultDestination() : consumer;
     }
 
     private InternalMessage performCreateOperation(final InternalMessage message, final String type)
@@ -963,14 +986,27 @@ class ManagementNode implements MessageS
 
         final ManagementNodeConsumer managementNodeConsumer = new ManagementNodeConsumer(consumerName,this, target);
         target.consumerAdded(managementNodeConsumer);
-        _consumers.put(consumerName, managementNodeConsumer);
+        _consumers.add(managementNodeConsumer);
+        target.addStateListener(new StateChangeListener<ConsumerTarget, ConsumerTarget.State>()
+        {
+            @Override
+            public void stateChanged(final ConsumerTarget object,
+                                     final ConsumerTarget.State oldState,
+                                     final ConsumerTarget.State newState)
+            {
+                if(newState == ConsumerTarget.State.CLOSED)
+                {
+                    _consumers.remove(managementNodeConsumer);
+                }
+            }
+        });
         return managementNodeConsumer;
     }
 
     @Override
     public synchronized Collection<ManagementNodeConsumer> getConsumers()
     {
-        return new ArrayList<ManagementNodeConsumer>(_consumers.values());
+        return Collections.unmodifiableCollection(_consumers);
     }
 
     @Override

Modified: qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java (original)
+++ qpid/java/trunk/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNodeConsumer.java Wed May 25 15:54:53 2016
@@ -26,12 +26,19 @@ import java.util.List;
 
 import org.apache.qpid.server.consumer.ConsumerImpl;
 import org.apache.qpid.server.consumer.ConsumerTarget;
+import org.apache.qpid.server.message.InstanceProperties;
+import org.apache.qpid.server.message.MessageDestination;
+import org.apache.qpid.server.message.MessageInstance;
 import org.apache.qpid.server.message.MessageSource;
+import org.apache.qpid.server.message.ServerMessage;
 import org.apache.qpid.server.message.internal.InternalMessage;
 import org.apache.qpid.server.protocol.AMQSessionModel;
+import org.apache.qpid.server.store.StorableMessageMetaData;
+import org.apache.qpid.server.txn.ServerTransaction;
+import org.apache.qpid.server.util.Action;
 import org.apache.qpid.server.util.StateChangeListener;
 
-class ManagementNodeConsumer implements ConsumerImpl
+class ManagementNodeConsumer implements ConsumerImpl, MessageDestination
 {
     private final long _id = ConsumerImpl.CONSUMER_NUMBER_GENERATOR.getAndIncrement();
     private final ManagementNode _managementNode;
@@ -158,6 +165,17 @@ class ManagementNodeConsumer implements
     }
 
     @Override
+    public <M extends ServerMessage<? extends StorableMessageMetaData>> int send(final M message,
+                                                                                 final String routingAddress,
+                                                                                 final InstanceProperties instanceProperties,
+                                                                                 final ServerTransaction txn,
+                                                                                 final Action<? super MessageInstance> postEnqueueAction)
+    {
+        send((InternalMessage)message);
+        return 1;
+    }
+
+    @Override
     public void flush()
     {
 

Modified: qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQDestination.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQDestination.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQDestination.java (original)
+++ qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQDestination.java Wed May 25 15:54:53 2016
@@ -100,6 +100,7 @@ public abstract class AMQDestination imp
     private boolean _sendEncrypted;
     private String _encryptedRecipients;
     private long _deliveryDelay;
+    private String _localAddress;
 
     protected void setExclusive(boolean exclusive)
     {
@@ -136,6 +137,11 @@ public abstract class AMQDestination imp
         return _deliveryDelay;
     }
 
+    public String getLocalAddress()
+    {
+        return _localAddress;
+    }
+
     // ----- Fields required to support new address syntax -------
 
     public enum DestSyntax {
@@ -322,6 +328,7 @@ public abstract class AMQDestination imp
         _encryptedRecipients = binding.getOption(BindingURL.OPTION_ENCRYPTED_RECIPIENTS);
         String deliveryDelayVal = binding.getOption(BindingURL.OPTION_DELIVERY_DELAY);
         _deliveryDelay = deliveryDelayVal == null ? 0L : Long.parseLong(deliveryDelayVal);
+        _localAddress = binding.getOption(BindingURL.OPTION_LOCAL_ADDRESS);
     }
 
     protected AMQDestination(String exchangeName, String exchangeClass, String routingKey, String queueName)
@@ -966,6 +973,7 @@ public abstract class AMQDestination imp
         _node =  _addrHelper.getNode();
         _link = _addrHelper.getLink();
         _deliveryDelay = _link.getDelay();
+        _localAddress = _link.getLocalAddress();
         _sendEncrypted = _addrHelper.getSendEncrypted();
         _encryptedRecipients = _addrHelper.getEncryptedRecipients();
     }

Modified: qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java (original)
+++ qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java Wed May 25 15:54:53 2016
@@ -193,6 +193,10 @@ public abstract class BasicMessageConsum
         {
             ft.putAll(rawSelector);
         }
+        if(destination.getLocalAddress() != null)
+        {
+            ft.put("local-address", destination.getLocalAddress());
+        }
 
         // We must always send the selector argument even if empty, so that we can tell when a selector is removed from a
         // durable topic subscription that the broker arguments don't match any more. This is because it is not otherwise

Modified: qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/AddressHelper.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/AddressHelper.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/AddressHelper.java (original)
+++ qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/AddressHelper.java Wed May 25 15:54:53 2016
@@ -250,6 +250,11 @@ public class AddressHelper
             {
                 link.setDelay(delay);
             }
+            String localAddress = _linkPropAccess.getString("localAddress");
+            if(localAddress != null)
+            {
+                link.setLocalAddress(localAddress);
+            }
             if (((Map) _address.getOptions().get(LINK)).get(CAPACITY) instanceof Map)
             {
                 MapAccessor capacityProps = new MapAccessor((Map) ((Map) _address.getOptions().get(LINK)).get(CAPACITY));

Modified: qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/Link.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/Link.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/Link.java (original)
+++ qpid/java/trunk/client/src/main/java/org/apache/qpid/client/messaging/address/Link.java Wed May 25 15:54:53 2016
@@ -29,16 +29,19 @@ import org.apache.qpid.client.AMQDestina
 
 public class Link
 {
+
+
     public enum FilterType { SQL92, XQUERY, SUBJECT }
-    
+
     public enum Reliability { UNRELIABLE, AT_MOST_ONCE, AT_LEAST_ONCE, EXACTLY_ONCE }
-    
+
     private String name;
     private String _filter;
     private FilterType _filterType = FilterType.SUBJECT;
     private boolean _isNoLocal;
     private boolean _isDurable;
     private long _delay;
+    private String _localAddress;
     private int _consumerCapacity = -1;
     private int _producerCapacity = -1;
     private Subscription subscription;
@@ -156,6 +159,16 @@ public class Link
         _delay = delay;
     }
 
+    public void setLocalAddress(final String localAddress)
+    {
+        _localAddress = localAddress;
+    }
+
+    public String getLocalAddress()
+    {
+        return _localAddress;
+    }
+
     public SubscriptionQueue getSubscriptionQueue()
     {
         return _subscriptionQueue;

Modified: qpid/java/trunk/common/src/main/java/org/apache/qpid/url/BindingURL.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/url/BindingURL.java?rev=1745513&r1=1745512&r2=1745513&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/url/BindingURL.java (original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/url/BindingURL.java Wed May 25 15:54:53 2016
@@ -44,6 +44,7 @@ public interface BindingURL
     String OPTION_SEND_ENCRYPTED = "sendencrypted";
     String OPTION_ENCRYPTED_RECIPIENTS = "encryptedrecipients";
     String OPTION_DELIVERY_DELAY = "deliveryDelay";
+    String OPTION_LOCAL_ADDRESS = "localAddress";
 
 
     /**
@@ -68,7 +69,8 @@ public interface BindingURL
                                                                           OPTION_REJECT_BEHAVIOUR,
                                                                           OPTION_SEND_ENCRYPTED,
                                                                           OPTION_ENCRYPTED_RECIPIENTS,
-                                                                          OPTION_DELIVERY_DELAY)));
+                                                                          OPTION_DELIVERY_DELAY,
+                                                                          OPTION_LOCAL_ADDRESS)));
 
 
     String getURL();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org