qpid_proton 0.9.0 → 0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/lib/codec/data.rb +912 -0
  3. data/lib/codec/mapping.rb +169 -0
  4. data/lib/{qpid_proton/tracker.rb → core/base_handler.rb} +4 -15
  5. data/lib/core/connection.rb +328 -0
  6. data/lib/core/delivery.rb +271 -0
  7. data/lib/core/disposition.rb +158 -0
  8. data/lib/core/endpoint.rb +140 -0
  9. data/lib/{qpid_proton → core}/exceptions.rb +43 -2
  10. data/lib/core/link.rb +387 -0
  11. data/lib/core/message.rb +633 -0
  12. data/lib/core/receiver.rb +95 -0
  13. data/lib/core/sasl.rb +94 -0
  14. data/lib/core/selectable.rb +130 -0
  15. data/lib/core/sender.rb +76 -0
  16. data/lib/core/session.rb +163 -0
  17. data/lib/core/ssl.rb +164 -0
  18. data/lib/{qpid_proton/version.rb → core/ssl_details.rb} +7 -6
  19. data/lib/core/ssl_domain.rb +156 -0
  20. data/lib/core/terminus.rb +218 -0
  21. data/lib/core/transport.rb +411 -0
  22. data/lib/core/url.rb +77 -0
  23. data/lib/event/collector.rb +148 -0
  24. data/lib/event/event.rb +318 -0
  25. data/lib/event/event_base.rb +91 -0
  26. data/lib/event/event_type.rb +71 -0
  27. data/lib/handler/acking.rb +70 -0
  28. data/lib/handler/c_adaptor.rb +47 -0
  29. data/lib/handler/c_flow_controller.rb +33 -0
  30. data/lib/handler/endpoint_state_handler.rb +217 -0
  31. data/lib/handler/incoming_message_handler.rb +74 -0
  32. data/lib/handler/messaging_handler.rb +218 -0
  33. data/lib/handler/outgoing_message_handler.rb +98 -0
  34. data/lib/handler/wrapped_handler.rb +76 -0
  35. data/lib/messenger/messenger.rb +702 -0
  36. data/lib/messenger/subscription.rb +37 -0
  37. data/lib/messenger/tracker.rb +38 -0
  38. data/lib/messenger/tracker_status.rb +69 -0
  39. data/lib/qpid_proton.rb +106 -16
  40. data/lib/reactor/acceptor.rb +41 -0
  41. data/lib/reactor/backoff.rb +41 -0
  42. data/lib/reactor/connector.rb +98 -0
  43. data/lib/reactor/container.rb +272 -0
  44. data/lib/reactor/global_overrides.rb +44 -0
  45. data/lib/reactor/link_option.rb +90 -0
  46. data/lib/reactor/reactor.rb +198 -0
  47. data/lib/reactor/session_per_connection.rb +45 -0
  48. data/lib/reactor/ssl_config.rb +41 -0
  49. data/lib/reactor/task.rb +39 -0
  50. data/lib/{qpid_proton/subscription.rb → reactor/urls.rb} +12 -13
  51. data/lib/{qpid_proton → types}/array.rb +28 -29
  52. data/lib/types/described.rb +63 -0
  53. data/lib/{qpid_proton → types}/hash.rb +4 -3
  54. data/lib/types/strings.rb +62 -0
  55. data/lib/util/class_wrapper.rb +54 -0
  56. data/lib/util/condition.rb +45 -0
  57. data/lib/util/constants.rb +85 -0
  58. data/lib/util/engine.rb +82 -0
  59. data/lib/util/error_handler.rb +127 -0
  60. data/lib/util/handler.rb +41 -0
  61. data/lib/util/reactor.rb +32 -0
  62. data/lib/util/swig_helper.rb +114 -0
  63. data/lib/util/timeout.rb +50 -0
  64. data/lib/util/uuid.rb +32 -0
  65. data/lib/util/version.rb +30 -0
  66. data/lib/util/wrapper.rb +124 -0
  67. metadata +67 -21
  68. data/ext/cproton/cproton.c +0 -22196
  69. data/lib/qpid_proton/data.rb +0 -788
  70. data/lib/qpid_proton/described.rb +0 -66
  71. data/lib/qpid_proton/exception_handling.rb +0 -127
  72. data/lib/qpid_proton/filters.rb +0 -67
  73. data/lib/qpid_proton/mapping.rb +0 -170
  74. data/lib/qpid_proton/message.rb +0 -621
  75. data/lib/qpid_proton/messenger.rb +0 -702
  76. data/lib/qpid_proton/selectable.rb +0 -126
  77. data/lib/qpid_proton/strings.rb +0 -65
  78. data/lib/qpid_proton/tracker_status.rb +0 -73
data/lib/core/ssl.rb ADDED
@@ -0,0 +1,164 @@
1
+ #--
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #++
19
+
20
+ module Qpid::Proton
21
+
22
+ # The SSL support for Transport.
23
+ #
24
+ # A Transport may be configured ot use SLL for encryption and/or
25
+ # authentication. A Transport can be configured as either the SSL
26
+ # client or the server. An SSL client is the party that proctively
27
+ # establishes a connection to an SSL server. An SSL server is the
28
+ # party that accepts a connection request from the remote SSL client.
29
+ #
30
+ # If either the client or the server needs to identify itself with the
31
+ # remote node, it must have its SSL certificate configured.
32
+ #
33
+ # @see SSLDomain#credentials For setting the SSL certificate.
34
+ #
35
+ # If either the client or the server needs to verify the identify of the
36
+ # remote node, it must have its database of trusted CAs configured.
37
+ #
38
+ # @see SSLDomain#trusted_ca_db Setting the CA database.
39
+ #
40
+ # An SSL server connection may allow the remote client to connect without
41
+ # SS (i.e., "in the clear").
42
+ #
43
+ # @see SSLDomain#allow_unsecured_client Allowing unsecured clients.
44
+ #
45
+ # The level of verification required of the remote may be configured.
46
+ #
47
+ # @see SSLDomain#peer_authentication Setting peer authentication.
48
+ #
49
+ # Support for SSL client session resume is provided as well.
50
+ #
51
+ # @see SSLDomain
52
+ # @see #resume_status
53
+ #
54
+ class SSL
55
+
56
+ # Session resume state is unkonnwn or not supported.
57
+ RESUME_UNKNOWN = Cproton::PN_SSL_RESUME_UNKNOWN
58
+ # Session renegotiated and not resumed.
59
+ RESUME_NEW = Cproton::PN_SSL_RESUME_NEW
60
+ # Session resumed from the previous session.
61
+ RESUME_REUSED = Cproton::PN_SSL_RESUME_REUSED
62
+
63
+ # @private
64
+ include Util::SwigHelper
65
+
66
+ # @private
67
+ PROTON_METHOD_PREFIX = "pn_ssl"
68
+
69
+ # @private
70
+ include Util::ErrorHandler
71
+
72
+ can_raise_error :peer_hostname=, :error_class => SSLError
73
+
74
+ # Returns whether SSL is supported.
75
+ #
76
+ # @return [Boolean] True if SSL support is available.
77
+ #
78
+ def self.present?
79
+ Cproton.pn_ssl_present
80
+ end
81
+
82
+ # @private
83
+ def self.create(transport, domain, session_details = nil)
84
+ result = nil
85
+ # like python, make sure we're not creating a different SSL
86
+ # object for a transport with an existing SSL object
87
+ if transport.ssl?
88
+ transport.instance_eval { result = @ssl }
89
+ if ((!domain.nil? && (result.domain != domain)) ||
90
+ (!session_details.nil? && (result.session_details != session_details)))
91
+ raise SSLException.new("cannot re-configure existing SSL object")
92
+ end
93
+ else
94
+ impl = Cproton.pn_ssl(transport.impl)
95
+ session_id = nil
96
+ session_id = session_details.session_id unless session_details.nil?
97
+ result = SSL.new(impl, domain, session_details, session_id)
98
+ end
99
+ return result
100
+ end
101
+
102
+ private
103
+
104
+ def initialize(impl, domain, session_details, session_id)
105
+ @impl = impl
106
+ @domain = domain.impl unless domain.nil?
107
+ @session_details = session_details
108
+ @session_id = session_id
109
+ Cproton.pn_ssl_init(@impl, @domain, @session_id)
110
+ end
111
+
112
+ public
113
+
114
+ # Returns the cipher name that is currently in used.
115
+ #
116
+ # Gets the text description of the cipher that is currently active, or
117
+ # returns nil if SSL is not active. Note that the cipher in use my change
118
+ # over time due to renegotiation or other changes to the SSL layer.
119
+ #
120
+ # @return [String, nil] The cipher name.
121
+ #
122
+ def cipher_name
123
+ rc, name = Cproton.pn_ssl_get_cipher_name(@impl, 128)
124
+ return name if rc
125
+ nil
126
+ end
127
+
128
+ # Returns the name of the SSL protocol that is currently active, or
129
+ # returns nil if SSL is nota ctive. Not that the protocol may change over
130
+ # time due to renegotation.
131
+ #
132
+ # @return [String, nil] The protocol name.
133
+ #
134
+ def protocol_name
135
+ rc, name = Cproton.pn_ssl_get_protocol_name(@impl, 128)
136
+ retur name if rc
137
+ nil
138
+ end
139
+
140
+ # Checks whether or not the state has resumed.
141
+ #
142
+ # Used for client session resume. When called on an active session, it
143
+ # indicates wehther the state has been resumed from a previous session.
144
+ #
145
+ # *NOTE:* This is a best-effort service - there is no guarantee that the
146
+ # remote server will accept the resumed parameters. The remote server may
147
+ # choose to ignore these parameters, and request a renegotation instead.
148
+ #
149
+ def resume_status
150
+ Cproton.pn_ssl_resume_status(@impl)
151
+ end
152
+
153
+ # Gets the peer hostname.
154
+ #
155
+ # @return [String] The peer hostname.
156
+ def peer_hostname
157
+ (error, name) = Cproton.pn_ssl_get_peer_hostname(@impl, 1024)
158
+ raise SSLError.new if error < 0
159
+ return name
160
+ end
161
+
162
+ end
163
+
164
+ end
@@ -17,15 +17,16 @@
17
17
  # under the License.
18
18
  #++
19
19
 
20
- module Qpid # :nodoc:
20
+ module Qpid::Proton
21
21
 
22
- module Proton # :nodoc:
22
+ # @private
23
+ class SSLSessionDetails
23
24
 
24
- # The major version for the underlying Proton library.
25
- VERSION_MAJOR = Cproton::PN_VERSION_MAJOR
25
+ attr_reader :session_id
26
26
 
27
- # The minor version for the underlying Proton library.
28
- VERSION_MINOR = Cproton::PN_VERSION_MINOR
27
+ def initialize(session_id)
28
+ @session_id = session_id
29
+ end
29
30
 
30
31
  end
31
32
 
@@ -0,0 +1,156 @@
1
+ #--
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #++
19
+
20
+ module Qpid::Proton
21
+
22
+ # The top-level object that stores the configuration used by one or more
23
+ # SSL sessions.
24
+ #
25
+ # @see SSL
26
+ #
27
+ class SSLDomain
28
+
29
+ # The local connection endpoint is an SSL client.
30
+ # @private
31
+ MODE_CLIENT = Cproton::PN_SSL_MODE_CLIENT
32
+ # The local connection endpoint is an SSL server.
33
+ # @private
34
+ MODE_SERVER = Cproton::PN_SSL_MODE_SERVER
35
+
36
+ # Require the peer to provide a valid identifying certificate.
37
+ VERIFY_PEER = Cproton::PN_SSL_VERIFY_PEER
38
+ # Do no require a certificate nor a cipher authorization.
39
+ ANONYMOUS_PEER = Cproton::PN_SSL_ANONYMOUS_PEER
40
+ # Require a valid certficate and matching name.
41
+ VERIFY_PEER_NAME = Cproton::PN_SSL_VERIFY_PEER_NAME
42
+
43
+ # @private
44
+ include Util::ErrorHandler
45
+
46
+ can_raise_error :credentials, :error_class => Qpid::Proton::SSLError
47
+ can_raise_error :trusted_ca_db, :error_class => Qpid::Proton::SSLError
48
+ can_raise_error :peer_authentication, :error_class => Qpid::Proton::SSLError
49
+ can_raise_error :allow_unsecured_client, :error_class => Qpid::Proton::SSLError
50
+
51
+ # @private
52
+ attr_reader :impl
53
+
54
+ # @private
55
+ def initialize(mode)
56
+ @impl = Cproton.pn_ssl_domain(mode)
57
+ raise SSLUnavailable.new if @impl.nil?
58
+ end
59
+
60
+ # Set the certificate that identifies the local node to the remote.
61
+ #
62
+ # This certificate establishes the identity for thelocal node for all SSL
63
+ # sessions created from this domain. It will be sent to the remote if the
64
+ # remote needs to verify the dientify of this node. This may be used for
65
+ # both SSL servers and SSL clients (if client authentication is required by
66
+ # the server).
67
+ #
68
+ # *NOTE:* This setting affects only those instances of SSL created *after*
69
+ # this call returns. SSL objects created before invoking this method will
70
+ # use the domain's previous settings.
71
+ #
72
+ # @param cert_file [String] The filename containing the identify
73
+ # certificate. For OpenSSL users, this is a PEM file. For Windows SChannel
74
+ # users, this is the PKCS\#12 file or system store.
75
+ # @param key_file [String] An option key to access the identifying
76
+ # certificate. For OpenSSL users, this is an optional PEM file containing
77
+ # the private key used to sign the certificate. For Windows SChannel users,
78
+ # this is the friendly name of the self-identifying certficate if there are
79
+ # multiple certfificates in the store.
80
+ # @param password [String] The password used to sign the key, or *nil* if
81
+ # the key is not protected.
82
+ #
83
+ # @raise [SSLError] If an error occurs.
84
+ #
85
+ def credentials(cert_file, key_file, password)
86
+ Cproton.pn_ssl_domain_set_credentials(@impl,
87
+ cert_file, key_file, password)
88
+ end
89
+
90
+ # Configures the set of trusted CA certificates used by this domain to
91
+ # verify peers.
92
+ #
93
+ # If the local SSL client/server needs to verify the identify of the remote,
94
+ # it must validate the signature of the remote's certificate. This function
95
+ # sets the database of trusted CAs that will be used to verify the signature
96
+ # of the remote's certificate.
97
+ #
98
+ # *NOTE:# This setting affects only those SSL instances created *after* this
99
+ # call returns. SSL objects created before invoking this method will use the
100
+ # domain's previous setting.
101
+ #
102
+ # @param certificate_db [String] The filename for the databse of trusted
103
+ # CAs, used to authenticate the peer.
104
+ #
105
+ # @raise [SSLError] If an error occurs.
106
+ #
107
+ def trusted_ca_db(certificate_db)
108
+ Cproton.pn_ssl_domain_set_trusted_ca_db(@impl, certificate_db)
109
+ end
110
+
111
+ # Configures the level of verification used on the peer certificate.
112
+ #
113
+ # This method congtrols how the peer's certificate is validated, if at all.
114
+ # By default, neither servers nor clients attempt to verify their peers
115
+ # (*ANONYMOUS_PEER*). Once certficates and trusted CAs are configured, peer
116
+ # verification can be enabled.
117
+ #
118
+ # *NOTE:* In order to verify a peer, a trusted CA must be configured.
119
+ #
120
+ # *NOTE:* Servers must provide their own certficate when verifying a peer.
121
+ #
122
+ # *NOTE:* This setting affects only those SSL instances created after this
123
+ # call returns. SSL instances created before invoking this method will use
124
+ # the domain's previous setting.
125
+ #
126
+ # @param verify_mode [Fixnum] The level of validation to apply to the peer.
127
+ # @param trusted_CAs [String] The path to a database of trusted CAs that
128
+ # the server will advertise to the peer client if the server has been
129
+ # configured to verify its peer.
130
+ #
131
+ # @see VERIFY_PEER
132
+ # @see ANONYMOUS_PEER
133
+ # @see VERIFY_PEER_NAME
134
+ #
135
+ # @raise [SSLError] If an error occurs.
136
+ #
137
+ def peer_authentication(verify_mode, trusted_CAs = nil)
138
+ Cproton.pn_ssl_domain_set_peer_authentication(@impl,
139
+ verify_mode, trusted_CAs)
140
+ end
141
+
142
+ # Permit a server to accept connection requests from non-SSL clients.
143
+ #
144
+ # This configures the server to "sniff" the incomfing client data stream and
145
+ # dynamically determine whether SSL/TLS is being used. This option is
146
+ # disabled by default: only clients using SSL/TLS are accepted by default.
147
+ #
148
+ # @raise [SSLError] If an error occurs.
149
+ #
150
+ def allow_unsecured_client
151
+ Cproton.pn_ssl_domain_allow_unsecured_client(@impl);
152
+ end
153
+
154
+ end
155
+
156
+ end
@@ -0,0 +1,218 @@
1
+ #--
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #++
19
+
20
+ module Qpid::Proton
21
+
22
+ # Represents an endpoint for an AMQP connection..
23
+ #
24
+ # An AMQP terminus acts as either a source or a target for messages,
25
+ # but never as both. Every Link is associated iwth both a source and
26
+ # a target Terminus that is negotiated during link establishment.
27
+ #
28
+ # A terminus is composed of an AMQP address along with a number of
29
+ # other properties defining the quality of service and behavior of
30
+ # the Link.
31
+ #
32
+ class Terminus
33
+
34
+ # Indicates a non-existent source or target terminus.
35
+ UNSPECIFIED = Cproton::PN_UNSPECIFIED
36
+ # Indicates a source for messages.
37
+ SOURCE = Cproton::PN_SOURCE
38
+ # Indicates a target for messages.
39
+ TARGET = Cproton::PN_TARGET
40
+ # A special target identifying a transaction coordinator.
41
+ COORDINATOR = Cproton::PN_COORDINATOR
42
+
43
+ # The terminus is orphaned when the parent link is closed.
44
+ EXPIRE_WITH_LINK = Cproton::PN_EXPIRE_WITH_LINK
45
+ # The terminus is orphaned whent he parent sessio is closed.
46
+ EXPIRE_WITH_SESSION = Cproton::PN_EXPIRE_WITH_SESSION
47
+ # The terminus is orphaned when the parent connection is closed.
48
+ EXPIRE_WITH_CONNECTION = Cproton::PN_EXPIRE_WITH_CONNECTION
49
+ # The terminus is never considered orphaned.
50
+ EXPIRE_NEVER = Cproton::PN_EXPIRE_NEVER
51
+
52
+ # Indicates a non-durable Terminus.
53
+ NONDURABLE = Cproton::PN_NONDURABLE
54
+ # Indicates a Terminus with durably held configuration, but
55
+ # not the delivery state.
56
+ CONFIGURATION = Cproton::PN_CONFIGURATION
57
+ # Indicates a Terminus with both durably held configuration and
58
+ # durably held delivery states.
59
+ DELIVERIES = Cproton::PN_DELIVERIES
60
+
61
+ # The behavior is defined by the nod.e
62
+ DIST_MODE_UNSPECIFIED = Cproton::PN_DIST_MODE_UNSPECIFIED
63
+ # The receiver gets all messages.
64
+ DIST_MODE_COPY = Cproton::PN_DIST_MODE_COPY
65
+ # The receives compete for messages.
66
+ DIST_MODE_MOVE = Cproton::PN_DIST_MODE_MOVE
67
+
68
+ # @private
69
+ include Util::SwigHelper
70
+
71
+ # @private
72
+ PROTON_METHOD_PREFIX = "pn_terminus"
73
+
74
+ # @!attribute type
75
+ #
76
+ # @return [Fixnum] The terminus type.
77
+ #
78
+ # @see SOURCE
79
+ # @see TARGET
80
+ # @see COORDINATOR
81
+ #
82
+ proton_accessor :type
83
+
84
+ # @!attribute address
85
+ #
86
+ # @return [String] The terminus address.
87
+ #
88
+ proton_accessor :address
89
+
90
+ # @!attribute durability
91
+ #
92
+ # @return [Fixnum] The durability mode of the terminus.
93
+ #
94
+ # @see NONDURABLE
95
+ # @see CONFIGURATION
96
+ # @see DELIVERIES
97
+ #
98
+ proton_accessor :durability
99
+
100
+ # @!attribute expiry_policy
101
+ #
102
+ # @return [Fixnum] The expiry policy.
103
+ #
104
+ # @see EXPIRE_WITH_LINK
105
+ # @see EXPIRE_WITH_SESSION
106
+ # @see EXPIRE_WITH_CONNECTION
107
+ # @see EXPIRE_NEVER
108
+ #
109
+ proton_accessor :expiry_policy
110
+
111
+ # @!attribute timeout
112
+ #
113
+ # @return [Fixnum] The timeout period.
114
+ #
115
+ proton_accessor :timeout
116
+
117
+ # @!attribute dynamic?
118
+ #
119
+ # @return [Boolean] True if the terminus is dynamic.
120
+ #
121
+ proton_accessor :dynamic, :is_or_get => :is
122
+
123
+ # @!attribute distribution_mode
124
+ #
125
+ # @return [Fixnum] The distribution mode.
126
+ #
127
+ # @see DIST_MODE_UNSPECIFIED
128
+ # @see DIST_MODE_COPY
129
+ # @see DIST_MODE_MOVE
130
+ #
131
+ proton_accessor :distribution_mode
132
+
133
+ # @private
134
+ include Util::ErrorHandler
135
+
136
+ can_raise_error [:type=, :address=, :durability=, :expiry_policy=,
137
+ :timeout=, :dynamic=, :distribution_mode=, :copy],
138
+ :error_class => Qpid::Proton::LinkError
139
+
140
+ # @private
141
+ attr_reader :impl
142
+
143
+ # @private
144
+ def initialize(impl)
145
+ @impl = impl
146
+ end
147
+
148
+ # Access and modify the AMQP properties data for the Terminus.
149
+ #
150
+ # This operation will return an instance of Data that is valid until the
151
+ # Terminus is freed due to its parent being freed. Any data contained in
152
+ # the object will be sent as the AMQP properties for the parent Terminus
153
+ # instance.
154
+ #
155
+ # NOTE: this MUST take the form of a symbol keyed map to be valid.
156
+ #
157
+ # @return [Data] The terminus properties.
158
+ #
159
+ def properties
160
+ Data.new(Cproton.pn_terminus_properties(@impl))
161
+ end
162
+
163
+ # Access and modify the AMQP capabilities data for the Terminus.
164
+ #
165
+ # This operation will return an instance of Data that is valid until the
166
+ # Terminus is freed due to its parent being freed. Any data contained in
167
+ # the object will be sent as the AMQP properties for the parent Terminus
168
+ # instance.
169
+ #
170
+ # NOTE: this MUST take the form of a symbol keyed map to be valid.
171
+ #
172
+ # @return [Data] The terminus capabilities.
173
+ #
174
+ def capabilities
175
+ Data.new(Cproton.pn_terminus_capabilities(@impl))
176
+ end
177
+
178
+ # Access and modify the AMQP outcomes for the Terminus.
179
+ #
180
+ # This operaiton will return an instance of Data that is valid until the
181
+ # Terminus is freed due to its parent being freed. Any data contained in
182
+ # the object will be sent as the AMQP properties for the parent Terminus
183
+ # instance.
184
+ #
185
+ # NOTE: this MUST take the form of a symbol keyed map to be valid.
186
+ #
187
+ # @return [Data] The terminus outcomes.
188
+ #
189
+ def outcomes
190
+ Data.new(Cproton.pn_terminus_outcomes(@impl))
191
+ end
192
+
193
+ # Access and modify the AMQP filter set for the Terminus.
194
+ #
195
+ # This operation will return an instance of Data that is valid until the
196
+ # Terminus is freed due to its parent being freed. Any data contained in
197
+ # the object will be sent as the AMQP properties for the parent Terminus
198
+ # instance.
199
+ #
200
+ # NOTE: this MUST take the form of a symbol keyed map to be valid.
201
+ #
202
+ # @return [Data] The terminus filter.
203
+ #
204
+ def filter
205
+ Data.new(Cproton.pn_terminus_filter(@impl))
206
+ end
207
+
208
+ # Copy another Terminus into this instance.
209
+ #
210
+ # @param source [Terminus] The source instance.
211
+ #
212
+ def copy(source)
213
+ Cproton.pn_terminus_copy(@impl,source.impl)
214
+ end
215
+
216
+ end
217
+
218
+ end