Skip to content

Commit 57cc257

Browse files
author
Emile Joubert
committed
Further 0.9.1 updates
1 parent 6305c85 commit 57cc257

File tree

8 files changed

+49
-17
lines changed

8 files changed

+49
-17
lines changed

projects/client/Apigen/src/apigen/AmqpMethod.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,7 @@ public AmqpMethod(XmlNode n)
6868
{
6969
m_Fields = new ArrayList();
7070
foreach (XmlNode f in n.SelectNodes("field")) {
71-
72-
AmqpField field = new AmqpField(f);
73-
if (!field.Reserved)
74-
{
75-
m_Fields.Add(field);
76-
}
71+
m_Fields.Add(new AmqpField(f));
7772
}
7873
m_ResponseMethods = new ArrayList();
7974
foreach (XmlNode r in n.SelectNodes("response")) {

projects/client/Apigen/src/apigen/Apigen.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ public static string MangleMethodClass(AmqpClass c, AmqpMethod m) {
168168
public int? m_revision;
169169
public string m_apiName;
170170
public bool m_emitComments = false;
171+
public bool m_supportsRedirect;
171172

172173
public Type m_modelType = typeof(RabbitMQ.Client.Impl.IFullModel);
173174
public ArrayList m_modelTypes = new ArrayList();
@@ -296,7 +297,10 @@ public void ParseSpec() {
296297
}
297298
foreach (XmlNode n in m_spec.SelectNodes("/amqp/domain")) {
298299
m_domains[GetString(n, "@name")] = GetString(n, "@type");
299-
}
300+
}
301+
m_supportsRedirect =
302+
m_spec.SelectSingleNode(
303+
"/amqp/class[@name='connection']/method[@name='redirect']") != null;
300304
}
301305

302306
public void ReflectModel() {
@@ -431,6 +435,9 @@ public void EmitPublic() {
431435
int port = GetInt(m_spec, "/amqp/@port");
432436
EmitLine(" ///<summary>Default TCP port (= "+port+")</summary>");
433437
EmitLine(" public override int DefaultPort { get { return " + port + "; } }");
438+
EmitLine(" ///<summary>Whether redirect is supported</summary>");
439+
EmitLine(" public override bool SupportsRedirect { get { return "
440+
+ m_supportsRedirect.ToString().ToLower() + "; } }");
434441
EmitLine("");
435442
EmitMethodArgumentReader();
436443
EmitLine("");

projects/client/RabbitMQ.Client/src/client/api/ConnectionFactory.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,14 @@ public virtual IConnection CreateConnection(int maxRedirects)
324324
///No broker-originated redirects are permitted.</summary>
325325
public virtual IConnection CreateConnection()
326326
{
327-
return CreateConnection(0);
327+
if (Protocol.SupportsRedirect)
328+
{
329+
return CreateConnection(0);
330+
}
331+
else
332+
{
333+
return Protocol.CreateConnection(this, false, Protocol.CreateFrameHandler(Endpoint));
334+
}
328335
}
329336
}
330337
}

projects/client/RabbitMQ.Client/src/client/api/IModel.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,8 @@ void _Private_BasicCancel(string consumerTag,
561561
///<summary>Used to send a Channel.Open. Called during session
562562
///initialisation.</summary>
563563
[AmqpMethodMapping(null, "channel", "open")]
564-
void _Private_ChannelOpen([AmqpUnsupported("RabbitMQ.Client.Framing.v0_9_1")]
564+
void _Private_ChannelOpen([AmqpFieldMapping("RabbitMQ.Client.Framing.v0_9_1",
565+
"reserved1")]
565566
string outOfBand);
566567

567568
///<summary>Used to send a Channel.CloseOk. Called during
@@ -684,9 +685,9 @@ void ConnectionTuneOk(ushort channelMax,
684685
[AmqpForceOneWay]
685686
[AmqpMethodMapping(null, "connection", "open")]
686687
void _Private_ConnectionOpen(string virtualHost,
687-
[AmqpUnsupported("RabbitMQ.Client.Framing.v0_9_1")]
688-
string capabilities,
689-
[AmqpUnsupported("RabbitMQ.Client.Framing.v0_9_1")]
688+
[AmqpFieldMapping("RabbitMQ.Client.Framing.v0_9_1", "reserved1")]
689+
string capabilities,
690+
[AmqpFieldMapping("RabbitMQ.Client.Framing.v0_9_1", "reserved2")]
690691
bool insist);
691692

692693
///<summary>Handle an incoming Connection.OpenOk.</summary>

projects/client/RabbitMQ.Client/src/client/api/IProtocol.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ public interface IProtocol
7474
string ApiName { get; }
7575
///<summary>Retrieve the protocol's default TCP port</summary>
7676
int DefaultPort { get; }
77+
///<summary>Whether redirect is supported</summary>
78+
bool SupportsRedirect { get; }
7779

7880
///<summary>Construct a frame handler for a given endpoint.</summary>
7981
IFrameHandler CreateFrameHandler(AmqpTcpEndpoint endpoint);

projects/client/RabbitMQ.Client/src/client/impl/AbstractProtocolBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public abstract class AbstractProtocolBase: IProtocol {
6565
public abstract int? Revision { get; }
6666
public abstract string ApiName { get; }
6767
public abstract int DefaultPort { get; }
68+
public abstract bool SupportsRedirect { get; }
6869

6970
public abstract IFrameHandler CreateFrameHandler(AmqpTcpEndpoint endpoint);
7071
public abstract IConnection CreateConnection(ConnectionFactory factory,

projects/client/RabbitMQ.Client/src/client/impl/ConnectionBase.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,10 +1010,17 @@ public void Open(bool insist)
10101010
frameMax,
10111011
heartbeat);
10121012

1013-
string knownHosts = m_model0.ConnectionOpen(m_factory.VirtualHost,
1014-
"", // FIXME: make configurable?
1015-
insist);
1016-
KnownHosts = AmqpTcpEndpoint.ParseMultiple(Protocol, knownHosts);
1013+
if (Protocol.SupportsRedirect)
1014+
{
1015+
string knownHosts = m_model0.ConnectionOpen(m_factory.VirtualHost,
1016+
"", // FIXME: make configurable?
1017+
insist);
1018+
KnownHosts = AmqpTcpEndpoint.ParseMultiple(Protocol, knownHosts);
1019+
}
1020+
else
1021+
{
1022+
m_model0.ConnectionOpen(m_factory.VirtualHost, String.Empty, false);
1023+
}
10171024
}
10181025

10191026
public override string ToString()

projects/client/RabbitMQ.Client/src/client/impl/ModelBase.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ public void TransmitAndEnqueue(Command cmd, IRpcContinuation k)
303303
}
304304
catch (AlreadyClosedException)
305305
{
306+
int i = 1;
306307
// Ignored, since the continuation will be told about
307308
// the closure via an OperationInterruptedException because
308309
// of the shutdown event propagation.
@@ -410,6 +411,18 @@ public void HandleConnectionStart(byte versionMajor,
410411
IDictionary serverProperties,
411412
byte[] mechanisms,
412413
byte[] locales)
414+
{
415+
HandleConnectionStart(versionMajor,
416+
versionMinor,
417+
serverProperties,
418+
locales);
419+
details.m_mechanisms = mechanisms;
420+
}
421+
422+
public void HandleConnectionStart(byte versionMajor,
423+
byte versionMinor,
424+
IDictionary serverProperties,
425+
byte[] locales)
413426
{
414427
if (m_connectionStartCell == null)
415428
{
@@ -423,7 +436,6 @@ public void HandleConnectionStart(byte versionMajor,
423436
details.m_versionMajor = versionMajor;
424437
details.m_versionMinor = versionMinor;
425438
details.m_serverProperties = serverProperties;
426-
details.m_mechanisms = mechanisms;
427439
details.m_locales = locales;
428440
m_connectionStartCell.Value = details;
429441
m_connectionStartCell = null;

0 commit comments

Comments
 (0)