1 // This source code is dual-licensed under the Apache License, version
2 // 2.0, and the Mozilla Public License, version 1.1.
6 //---------------------------------------------------------------------------
7 // Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial
8 // Technologies LLC., and Rabbit Technologies Ltd.
10 // Licensed under the Apache License, Version 2.0 (the "License");
11 // you may not use this file except in compliance with the License.
12 // You may obtain a copy of the License at
14 // http://www.apache.org/licenses/LICENSE-2.0
16 // Unless required by applicable law or agreed to in writing, software
17 // distributed under the License is distributed on an "AS IS" BASIS,
18 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 // See the License for the specific language governing permissions and
20 // limitations under the License.
21 //---------------------------------------------------------------------------
25 //---------------------------------------------------------------------------
26 // The contents of this file are subject to the Mozilla Public License
27 // Version 1.1 (the "License"); you may not use this file except in
28 // compliance with the License. You may obtain a copy of the License at
29 // http://www.rabbitmq.com/mpl.html
31 // Software distributed under the License is distributed on an "AS IS"
32 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
33 // License for the specific language governing rights and limitations
36 // The Original Code is The RabbitMQ .NET Client.
38 // The Initial Developers of the Original Code are LShift Ltd,
39 // Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd.
41 // Portions created before 22-Nov-2008 00:00:00 GMT by LShift Ltd,
42 // Cohesive Financial Technologies LLC, or Rabbit Technologies Ltd
43 // are Copyright (C) 2007-2008 LShift Ltd, Cohesive Financial
44 // Technologies LLC, and Rabbit Technologies Ltd.
46 // Portions created by LShift Ltd are Copyright (C) 2007-2010 LShift
47 // Ltd. Portions created by Cohesive Financial Technologies LLC are
48 // Copyright (C) 2007-2010 Cohesive Financial Technologies
49 // LLC. Portions created by Rabbit Technologies Ltd are Copyright
50 // (C) 2007-2010 Rabbit Technologies Ltd.
52 // All Rights Reserved.
54 // Contributor(s): ______________________________________.
56 //---------------------------------------------------------------------------
58 using System.Text.RegularExpressions;
60 namespace RabbitMQ.Client
62 ///<summary>Container for an exchange name, exchange type and
63 ///routing key, usable as the target address of a message to be
64 ///published.</summary>
67 /// The syntax used for the external representation of instances
68 /// of this class is compatible with QPid's "Reply-To" field
69 /// pseudo-URI format. The pseudo-URI format is
70 /// (exchange-type)://(exchange-name)/(routing-key), where
71 /// exchange-type is one of the permitted exchange type names (see
72 /// class ExchangeType), exchange-name must be present but may be
73 /// empty, and routing-key must be present but may be empty.
76 /// The syntax is as it is solely for compatibility with QPid's
77 /// existing usage of the ReplyTo field; the AMQP specifications
78 /// 0-8 and 0-9 do not define the format of the field, and do not
79 /// define any format for the triple (exchange name, exchange
80 /// type, routing key) that could be used instead. Please see also
81 /// the way class RabbitMQ.Client.MessagePatterns.SimpleRpcServer
82 /// uses the ReplyTo field.
85 public class PublicationAddress
87 ///<summary>Regular expression used to extract the
88 ///exchange-type, exchange-name and routing-key from a
90 public readonly static Regex PSEUDO_URI_PARSER = new Regex("^([^:]+)://([^/]*)/(.*)$");
92 private string m_exchangeType;
93 private string m_exchangeName;
94 private string m_routingKey;
96 ///<summary>Construct a PublicationAddress with the given exchange
97 ///type, exchange name and routing key.</summary>
98 public PublicationAddress(string exchangeType,
102 m_exchangeType = exchangeType;
103 m_exchangeName = exchangeName;
104 m_routingKey = routingKey;
107 ///<summary>Parse a PublicationAddress out of the given string,
108 ///using the PSEUDO_URI_PARSER regex.</summary>
109 public static PublicationAddress Parse(string uriLikeString)
111 Match m = PSEUDO_URI_PARSER.Match(uriLikeString);
114 return new PublicationAddress(m.Groups[1].Value,
124 ///<summary>Retrieve the exchange type string.</summary>
125 public string ExchangeType { get { return m_exchangeType; } }
127 ///<summary>Retrieve the exchange name.</summary>
128 public string ExchangeName { get { return m_exchangeName; } }
130 ///<summary>Retrieve the routing key.</summary>
131 public string RoutingKey { get { return m_routingKey; } }
133 ///<summary>Reconstruct the "uri" from its constituents.</summary>
134 public override string ToString()
136 return ExchangeType + "://" + ExchangeName + "/" + RoutingKey;