summaryrefslogtreecommitdiff
path: root/cpp/include/qmf/engine/ConnectionSettings.h
blob: 36312400b10b54e03fa2d1fb00978dc4bd15ff10 (plain)
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
#ifndef _QmfEngineConnectionSettings_
#define _QmfEngineConnectionSettings_

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

#include "qmf/engine/QmfEngineImportExport.h"
#include "qpid/sys/IntegerTypes.h"

namespace qmf {
namespace engine {

    class ConnectionSettingsImpl;
    class Value;

    /**
     * Settings for AMQP connections to the broker.
     *
     * \ingroup qmfapi
     */
    class ConnectionSettings {
    public:

        /**
         * Create a set of default connection settings.
         *
         * If no further attributes are set, the settings will cause a connection to be made to
         * the default broker (on localhost or at a host/port supplied by service discovery) and
         * authentication will be the best-available (GSSAPI/Kerberos, Anonymous, Plain with prompts
         * for username and password).
         */
        QMFE_EXTERN ConnectionSettings();

        /**
         * Create a set of connection settings by URL.
         *
         * @param url Universal resource locator describing the broker address and additional attributes.
         *
         * The URL is of the form:
         *    amqp[s]://host[:port][?key=value[&key=value]*]
         *
         * For example:
         *    amqp://localhost
         *    amqp://broker?transport=rdma&authmech=GSSAPI&authservice=qpidd
         *    amqps://broker?authmech=PLAIN&authuser=guest&authpass=guest
         */
        QMFE_EXTERN ConnectionSettings(const char* url);

        /**
         * Copy Constructor.
         */
        ConnectionSettings(const ConnectionSettings& from);

        /**
         * Destroy the connection settings object.
         */
        QMFE_EXTERN ~ConnectionSettings();

        /**
         * Set an attribute to control connection setup.
         *
         * @param key A null-terminated string that is an attribute name.
         *
         * @param value Reference to a value to be stored as the attribute.  The type of the value
         *              is specific to the key.
         *
         * @return True if success, False if invalid attribute
         */
        QMFE_EXTERN bool setAttr(const char* key, const Value& value);

        /**
         * Get the value of an attribute.
         *
         * @param key A null-terminated attribute name.
         *
         * @return The value associated with the attribute name.
         */
        QMFE_EXTERN Value getAttr(const char* key) const;

        /**
         * Get the attribute string (the portion of the URL following the '?') for the settings.
         *
         * @return A pointer to the attribute string.  If the content of this string needs to be
         *         available beyond the scope of the calling function, it should be copied.  The
         *         returned pointer may become invalid if the set of attributes is changed.
         */
        QMFE_EXTERN const char* getAttrString() const;

        /**
         * Shortcuts for setting the transport for the connection.
         *
         * @param port The port value for the connection address.
         */
        QMFE_EXTERN void transportTcp(uint16_t port = 5672);
        QMFE_EXTERN void transportSsl(uint16_t port = 5671);
        QMFE_EXTERN void transportRdma(uint16_t port = 5672);

        /**
         * Shortcuts for setting authentication mechanisms.
         *
         * @param username Null-terminated authentication user name.
         *
         * @param password Null-terminated authentication password.
         *
         * @param serviceName Null-terminated GSSAPI service name (Kerberos service principal)
         *
         * @param minSsf Minimum security factor for connections. 0 = encryption not required.
         *
         * @param maxSsf Maximum security factor for connections. 0 = encryption not permitted.
         */
        QMFE_EXTERN void authAnonymous(const char* username = 0);
        QMFE_EXTERN void authPlain(const char* username = 0, const char* password = 0);
        QMFE_EXTERN void authGssapi(const char* serviceName, uint32_t minSsf = 0, uint32_t maxSsf = 256);

        /**
         * Shortcut for setting connection retry attributes.
         *
         * @param delayMin Minimum delay (in seconds) between connection attempts.
         *
         * @param delaxMax Maximum delay (in seconds) between connection attempts.
         *
         * @param delayFactor Factor to multiply the delay by between failed connection attempts.
         */
        QMFE_EXTERN void setRetry(int delayMin = 1, int delayMax = 128, int delayFactor = 2);

    private:
        friend class ResilientConnectionImpl;
        ConnectionSettingsImpl* impl;
    };

}
}

#endif