forked from rabbitmq/rabbitmq-objc-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RMQConnection.h
255 lines (225 loc) · 13.5 KB
/
RMQConnection.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
// This source code is dual-licensed under the Mozilla Public License ("MPL"),
// version 2.0 and the Apache License ("ASL"), version 2.0.
//
// The ASL v2.0:
//
// ---------------------------------------------------------------------------
// Copyright 2017-2022 VMware, Inc. or its affiliates.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ---------------------------------------------------------------------------
//
// The MPL v2.0:
//
// ---------------------------------------------------------------------------
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
//
// Alternatively, the contents of this file may be used under the terms
// of the Apache Standard license (the "ASL License"), in which case the
// provisions of the ASL License are applicable instead of those
// above. If you wish to allow use of your version of this file only
// under the terms of the ASL License and not to allow others to use
// your version of this file under the MPL, indicate your decision by
// deleting the provisions above and replace them with the notice and
// other provisions required by the ASL License. If you do not delete
// the provisions above, a recipient may use your version of this file
// under either the MPL or the ASL License.
// ---------------------------------------------------------------------------
#import <Foundation/Foundation.h>
#import "RMQValues.h"
#import "RMQChannel.h"
#import "RMQChannelAllocator.h"
#import "RMQConnectionDelegate.h"
#import "RMQFrameHandler.h"
#import "RMQHeartbeatSender.h"
#import "RMQSender.h"
#import "RMQTransport.h"
#import "RMQLocalSerialQueue.h"
#import "RMQWaiterFactory.h"
#import "RMQTLSOptions.h"
#import "RMQStarter.h"
/// @brief Public API: Interface to an AMQP 0-9-1 connection. See the <a href="https://www.rabbitmq.com/specification.html">spec</a> for details.
@interface RMQConnection : NSObject<RMQFrameHandler, RMQSender, RMQStarter, RMQTransportDelegate>
@property (nonnull, copy, nonatomic, readonly) NSString *vhost;
@property (nonnull, copy, nonatomic, readwrite) RMQTable *serverProperties;
/// @brief Returns a GCD dispatch queue used for newly created connections by default.
+(nonnull dispatch_queue_t) defaultDispatchQueue;
/// @brief Designated initializer: do not use.
- (nonnull instancetype)initWithTransport:(nonnull id<RMQTransport>)transport
config:(nonnull RMQConnectionConfig *)config
handshakeTimeout:(nonnull NSNumber *)handshakeTimeout
channelAllocator:(nonnull id<RMQChannelAllocator>)channelAllocator
frameHandler:(nonnull id<RMQFrameHandler>)frameHandler
delegate:(nullable id<RMQConnectionDelegate>)delegate
commandQueue:(nonnull id<RMQLocalSerialQueue>)commandQueue
waiterFactory:(nonnull id<RMQWaiterFactory>)waiterFactory
heartbeatSender:(nonnull id<RMQHeartbeatSender>)heartbeatSender;
/// @brief Connection tuning, customisable config, all recovery options.
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
userProvidedConnectionName:(nonnull NSString *)connectionName
channelMax:(nonnull NSNumber *)channelMax
frameMax:(nonnull NSNumber *)frameMax
heartbeat:(nonnull NSNumber *)heartbeat
connectTimeout:(nonnull NSNumber*)connectTimeout
readTimeout:(nonnull NSNumber*)readTimeout
writeTimeout:(nonnull NSNumber*)writeTimeout
syncTimeout:(nonnull NSNumber *)syncTimeout
delegate:(nullable id<RMQConnectionDelegate>)delegate
delegateQueue:(nonnull dispatch_queue_t)delegateQueue
recoverAfter:(nonnull NSNumber *)recoveryInterval
recoveryAttempts:(nonnull NSNumber *)recoveryAttempts
recoverFromConnectionClose:(BOOL)shouldRecoverFromConnectionClose;
/// @brief Connection tuning, customisable TLS, key recovery options.
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
tlsOptions:(nonnull RMQTLSOptions *)tlsOptions
delegate:(nullable id<RMQConnectionDelegate>)delegate
recoverAfter:(nonnull NSNumber *)recoveryInterval
recoveryAttempts:(nonnull NSNumber *)recoveryAttempts
recoverFromConnectionClose:(BOOL)shouldRecoverFromConnectionClose;
/// @brief Connection tuning, customisable TLS and connection name, key recovery options.
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
tlsOptions:(nonnull RMQTLSOptions *)tlsOptions
userProvidedConnectionName:(nullable NSString *)connectionName
delegate:(nullable id<RMQConnectionDelegate>)delegate
recoverAfter:(nonnull NSNumber *)recoveryInterval
recoveryAttempts:(nonnull NSNumber *)recoveryAttempts
recoverFromConnectionClose:(BOOL)shouldRecoverFromConnectionClose;
/// @brief Connection tuning, customisable TLS, all recovery options.
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
userProvidedConnectionName:(nullable NSString *)connectionName
delegate:(nullable id<RMQConnectionDelegate>)delegate
recoverAfter:(nonnull NSNumber *)recoveryInterval
recoveryAttempts:(nonnull NSNumber *)recoveryAttempts
recoverFromConnectionClose:(BOOL)shouldRecoverFromConnectionClose;
/// @brief Connection URI, custom name and delegate..
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
userProvidedConnectionName:(nonnull NSString *)connectionName
delegate:(nullable id<RMQConnectionDelegate>)delegate;
/// @brief Connection URI, custom name, delegate object and delegate GCD queue.
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
userProvidedConnectionName:(nonnull NSString *)connectionName
delegate:(nullable id<RMQConnectionDelegate>)delegate
delegateQueue:(nonnull dispatch_queue_t)delegateQueue;
/// @brief TLS, connection configuration and delegate.
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
tlsOptions:(nonnull RMQTLSOptions *)tlsOptions
userProvidedConnectionName:(nonnull NSString *)connectionName
delegate:(nullable id<RMQConnectionDelegate>)delegate;
/// @brief Allows setting of timeouts
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
connectTimeout:(nonnull NSNumber*)connectTimeout
readTimeout:(nonnull NSNumber*)readTimeout
writeTimeout:(nonnull NSNumber*)writeTimeout
delegate:(nullable id<RMQConnectionDelegate>)delegate;
/// @brief Allows setting of recovery interval
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
delegate:(nullable id<RMQConnectionDelegate>)delegate
recoverAfter:(nonnull NSNumber *)recoveryInterval;
/// @brief Allows setting of GCD queue
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
delegate:(nullable id<RMQConnectionDelegate>)delegate
delegateQueue:(nonnull dispatch_queue_t)delegateQueue;
/// @brief Connection tuning options with customisable TLS
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
tlsOptions:(nonnull RMQTLSOptions *)tlsOptions
channelMax:(nonnull NSNumber *)channelMax
frameMax:(nonnull NSNumber *)frameMax
heartbeat:(nonnull NSNumber *)heartbeat
connectTimeout:(nonnull NSNumber*)connectTimeout
readTimeout:(nonnull NSNumber*)readTimeout
writeTimeout:(nonnull NSNumber*)writeTimeout
syncTimeout:(nonnull NSNumber *)syncTimeout
delegate:(nullable id<RMQConnectionDelegate>)delegate
delegateQueue:(nonnull dispatch_queue_t)delegateQueue;
/// @brief Connection tuning options.
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
channelMax:(nonnull NSNumber *)channelMax
frameMax:(nonnull NSNumber *)frameMax
heartbeat:(nonnull NSNumber *)heartbeat
connectTimeout:(nonnull NSNumber*)connectTimeout
readTimeout:(nonnull NSNumber*)readTimeout
writeTimeout:(nonnull NSNumber*)writeTimeout
syncTimeout:(nonnull NSNumber *)syncTimeout
delegate:(nullable id<RMQConnectionDelegate>)delegate
delegateQueue:(nonnull dispatch_queue_t)delegateQueue;
/*!
* @brief Configurable TLS options. Use this if you wants TLS on a port other than 443.
* @param uri The URI contains all connection information, including credentials.<br/>
For example, "amqps://user:pass@hostname:1234/myvhost".<br/>
Note: to use the default "/" vhost, omit the trailing slash (or else you must encode it as %2F).
* @param tlsOptions The RMQTLSOptions to use
* @param delegate Any object that conforms to the RMQConnectionDelegate protocol.
Use this to handle connection- and channel-level errors.
RMQConnectionDelegateLogger is useful for development purposes.
*/
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
tlsOptions:(nonnull RMQTLSOptions *)tlsOptions
delegate:(nullable id<RMQConnectionDelegate>)delegate;
/*!
* @brief Parses URI to obtain credentials and TLS, customisable peer verification.
* @param uri The URI contains all connection information, including credentials.<br/>
For example, "amqps://user:pass@hostname:1234/myvhost".<br/>
Note: to use the default "/" vhost, omit the trailing slash (or else you must encode it as %2F).
* @param verifyPeer Set to NO / false when developing against servers without valid certificates.
Never set this to NO / false in production.
* @param delegate Any object that conforms to the RMQConnectionDelegate protocol.
Use this to handle connection- and channel-level errors.
RMQConnectionDelegateLogger is useful for development purposes.
*/
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
verifyPeer:(BOOL)verifyPeer
delegate:(nullable id<RMQConnectionDelegate>)delegate;
/*!
* @brief Parses URI to obtain credentials and TLS enablement (which implies verifyPeer).
* @param uri The URI contains all connection information, including credentials.<br/>
For example, "amqps://user:pass@hostname:1234/myvhost".<br/>
Note: to use the default "/" vhost, omit the trailing slash (or else you must encode it as %2F).
* @param delegate Any object that conforms to the RMQConnectionDelegate protocol.
Use this to handle connection- and channel-level errors.
RMQConnectionDelegateLogger is useful for development purposes.
*/
- (nonnull instancetype)initWithUri:(nonnull NSString *)uri
delegate:(nullable id<RMQConnectionDelegate>)delegate;
/// @brief Assumes amqp://guest:guest@localhost URI.
- (nonnull instancetype)initWithDelegate:(nullable id<RMQConnectionDelegate>)delegate;
/// @brief Returns the transport used by this connection, if any
-(nonnull id<RMQTransport>)transport;
/// @brief Returns true if the connection has successfully completed protocol handshake
- (BOOL)hasCompletedHandshake;
/// @brief Returns true if the connection is currently open
- (BOOL)isOpen;
/// @brief Returns true if the connection is currently closed
- (BOOL)isClosed;
/// @brief Close the connection.
- (void)close;
/// @brief Close the connection, blocking the calling thread until done.
- (void)blockingClose;
/*!
* @brief Create a new channel, using an internally allocated channel number.
* @return An RMQAllocatedChannel or RMQUnallocatedChannel. The latter sends errors to the RMQConnectionDelegate.
*/
- (nonnull id<RMQChannel>)createChannel;
/*!
* @brief Update secret.
* This method updates the secret used to authenticate this connection.
* It is used when secrets have an expiration date and need to be renewed, like OAuth 2 tokens.
* @param secret The new secret.
* @param reason The reason for the secret update.
*/
- (void)updateSecret:(nonnull NSString *)secret
reason:(nonnull NSString *)reason;
@end