// This source code is dual-licensed under the Mozilla Public License ("MPL"), // version 1.1 and the Apache License ("ASL"), version 2.0. // // The ASL v2.0: // // --------------------------------------------------------------------------- // Copyright 2016 Pivotal Software, Inc. // // 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 // // http://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 v1.1: // // --------------------------------------------------------------------------- // The contents of this file are subject to the Mozilla Public License // Version 1.1 (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.mozilla.org/MPL/ // // Software distributed under the License is distributed on an "AS IS" // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the // License for the specific language governing rights and limitations // under the License. // // The Original Code is RabbitMQ // // The Initial Developer of the Original Code is Pivotal Software, Inc. // 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 #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" extern NSInteger const RMQChannelLimit; /// @brief Public API: Interface to an AMQ connection. See the see the spec for details. @interface RMQConnection : NSObject @property (nonnull, copy, nonatomic, readonly) NSString *vhost; /// @brief Designated initializer: do not use. - (nonnull instancetype)initWithTransport:(nonnull id)transport config:(nonnull RMQConnectionConfig *)config handshakeTimeout:(nonnull NSNumber *)handshakeTimeout channelAllocator:(nonnull id)channelAllocator frameHandler:(nonnull id)frameHandler delegate:(nullable id)delegate commandQueue:(nonnull id)commandQueue waiterFactory:(nonnull id)waiterFactory heartbeatSender:(nonnull id)heartbeatSender; /// @brief Connection tuning, customisable TLS, all recovery options. - (nonnull instancetype)initWithUri:(nonnull NSString *)uri tlsOptions:(nonnull RMQTLSOptions *)tlsOptions channelMax:(nonnull NSNumber *)channelMax frameMax:(nonnull NSNumber *)frameMax heartbeat:(nonnull NSNumber *)heartbeat syncTimeout:(nonnull NSNumber *)syncTimeout delegate:(nullable id)delegate delegateQueue:(nonnull dispatch_queue_t)delegateQueue recoverAfter:(nonnull NSNumber *)recoveryInterval recoveryAttempts:(nonnull NSNumber *)recoveryAttempts recoverFromConnectionClose:(BOOL)shouldRecoverFromConnectionClose; /// @brief Allows setting of recovery interval - (nonnull instancetype)initWithUri:(nonnull NSString *)uri delegate:(nullable id)delegate recoverAfter:(nonnull NSNumber *)recoveryInterval; /// @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 syncTimeout:(nonnull NSNumber *)syncTimeout delegate:(nullable id)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 syncTimeout:(nonnull NSNumber *)syncTimeout delegate:(nullable id)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.
For example, "amqps://user:pass@hostname:1234/myvhost".
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)delegate; /*! * @brief Parses URI to obtain credentials and TLS, customisable peer verification. * @param uri The URI contains all connection information, including credentials.
For example, "amqps://user:pass@hostname:1234/myvhost".
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)delegate; /*! * @brief Parses URI to obtain credentials and TLS enablement (which implies verifyPeer). * @param uri The URI contains all connection information, including credentials.
For example, "amqps://user:pass@hostname:1234/myvhost".
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)delegate; /// @brief Assumes amqp://guest:guest@localhost URI. - (nonnull instancetype)initWithDelegate:(nullable id)delegate; /// @brief Close the AMQP connection with a handshake. - (void)close; /// @brief Close the AMQP connection with a handshake, 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)createChannel; @end