1 // This source code is dual-licensed under the Apache License, version
2 // 2.0, and the Mozilla Public License, version 1.1.
3 //
4 // The APL v2.0:
5 //
6 //---------------------------------------------------------------------------
7 //   Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial
8 //   Technologies LLC., and Rabbit Technologies Ltd.
9 //
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
13 //
14 //       http://www.apache.org/licenses/LICENSE-2.0
15 //
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 //---------------------------------------------------------------------------
22 //
23 // The MPL v1.1:
24 //
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
30 //
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
34 //   under the License.
35 //
36 //   The Original Code is The RabbitMQ .NET Client.
37 //
38 //   The Initial Developers of the Original Code are LShift Ltd,
39 //   Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd.
40 //
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.
45 //
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.
51 //
52 //   All Rights Reserved.
53 //
54 //   Contributor(s): ______________________________________.
55 //
56 //---------------------------------------------------------------------------
57 using RabbitMQ.Client;
58 using RabbitMQ.Client.Impl;
59 using RabbitMQ.Util;
60 
61 namespace RabbitMQ.Client.Framing.Impl.v0_9 {
62     public abstract class ProtocolBase: AbstractProtocolBase {
63 
CreateFrameHandler(AmqpTcpEndpoint endpoint)64         public override IFrameHandler CreateFrameHandler(AmqpTcpEndpoint endpoint) {
65             return new SocketFrameHandler_0_9(endpoint);
66         }
67 
CreateModel(ISession session)68         public override IModel CreateModel(ISession session) {
69             return new Model(session);
70         }
71 
CreateConnection(ConnectionFactory factory, bool insist, IFrameHandler frameHandler)72         public override IConnection CreateConnection(ConnectionFactory factory,
73                                                      bool insist,
74                                                      IFrameHandler frameHandler)
75         {
76             return new Connection(factory, insist, frameHandler);
77         }
78 
CreateConnectionClose(ushort reasonCode, string reasonText, out Command request, out int replyClassId, out int replyMethodId)79         public override void CreateConnectionClose(ushort reasonCode,
80                                                    string reasonText,
81                                                    out Command request,
82                                                    out int replyClassId,
83                                                    out int replyMethodId)
84         {
85             request = new Command(new RabbitMQ.Client.Framing.Impl.v0_9.ConnectionClose(reasonCode,
86                                                                                         reasonText,
87                                                                                         0, 0));
88             replyClassId = RabbitMQ.Client.Framing.Impl.v0_9.ConnectionCloseOk.ClassId;
89             replyMethodId = RabbitMQ.Client.Framing.Impl.v0_9.ConnectionCloseOk.MethodId;
90         }
91 
CreateChannelClose(ushort reasonCode, string reasonText, out Command request, out int replyClassId, out int replyMethodId)92         public override void CreateChannelClose(ushort reasonCode,
93                                                 string reasonText,
94                                                 out Command request,
95                                                 out int replyClassId,
96                                                 out int replyMethodId)
97         {
98             request = new Command(new RabbitMQ.Client.Framing.Impl.v0_9.ChannelClose(reasonCode,
99                                                                                      reasonText,
100                                                                                      0, 0));
101             replyClassId = RabbitMQ.Client.Framing.Impl.v0_9.ChannelCloseOk.ClassId;
102             replyMethodId = RabbitMQ.Client.Framing.Impl.v0_9.ChannelCloseOk.MethodId;
103         }
104 
CanSendWhileClosed(Command cmd)105         public override bool CanSendWhileClosed(Command cmd)
106         {
107             return cmd.m_method is RabbitMQ.Client.Framing.Impl.v0_9.ChannelCloseOk;
108         }
109     }
110 }
111