qpid_proton 0.9.0 → 0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/codec/data.rb +912 -0
- data/lib/codec/mapping.rb +169 -0
- data/lib/{qpid_proton/tracker.rb → core/base_handler.rb} +4 -15
- data/lib/core/connection.rb +328 -0
- data/lib/core/delivery.rb +271 -0
- data/lib/core/disposition.rb +158 -0
- data/lib/core/endpoint.rb +140 -0
- data/lib/{qpid_proton → core}/exceptions.rb +43 -2
- data/lib/core/link.rb +387 -0
- data/lib/core/message.rb +633 -0
- data/lib/core/receiver.rb +95 -0
- data/lib/core/sasl.rb +94 -0
- data/lib/core/selectable.rb +130 -0
- data/lib/core/sender.rb +76 -0
- data/lib/core/session.rb +163 -0
- data/lib/core/ssl.rb +164 -0
- data/lib/{qpid_proton/version.rb → core/ssl_details.rb} +7 -6
- data/lib/core/ssl_domain.rb +156 -0
- data/lib/core/terminus.rb +218 -0
- data/lib/core/transport.rb +411 -0
- data/lib/core/url.rb +77 -0
- data/lib/event/collector.rb +148 -0
- data/lib/event/event.rb +318 -0
- data/lib/event/event_base.rb +91 -0
- data/lib/event/event_type.rb +71 -0
- data/lib/handler/acking.rb +70 -0
- data/lib/handler/c_adaptor.rb +47 -0
- data/lib/handler/c_flow_controller.rb +33 -0
- data/lib/handler/endpoint_state_handler.rb +217 -0
- data/lib/handler/incoming_message_handler.rb +74 -0
- data/lib/handler/messaging_handler.rb +218 -0
- data/lib/handler/outgoing_message_handler.rb +98 -0
- data/lib/handler/wrapped_handler.rb +76 -0
- data/lib/messenger/messenger.rb +702 -0
- data/lib/messenger/subscription.rb +37 -0
- data/lib/messenger/tracker.rb +38 -0
- data/lib/messenger/tracker_status.rb +69 -0
- data/lib/qpid_proton.rb +106 -16
- data/lib/reactor/acceptor.rb +41 -0
- data/lib/reactor/backoff.rb +41 -0
- data/lib/reactor/connector.rb +98 -0
- data/lib/reactor/container.rb +272 -0
- data/lib/reactor/global_overrides.rb +44 -0
- data/lib/reactor/link_option.rb +90 -0
- data/lib/reactor/reactor.rb +198 -0
- data/lib/reactor/session_per_connection.rb +45 -0
- data/lib/reactor/ssl_config.rb +41 -0
- data/lib/reactor/task.rb +39 -0
- data/lib/{qpid_proton/subscription.rb → reactor/urls.rb} +12 -13
- data/lib/{qpid_proton → types}/array.rb +28 -29
- data/lib/types/described.rb +63 -0
- data/lib/{qpid_proton → types}/hash.rb +4 -3
- data/lib/types/strings.rb +62 -0
- data/lib/util/class_wrapper.rb +54 -0
- data/lib/util/condition.rb +45 -0
- data/lib/util/constants.rb +85 -0
- data/lib/util/engine.rb +82 -0
- data/lib/util/error_handler.rb +127 -0
- data/lib/util/handler.rb +41 -0
- data/lib/util/reactor.rb +32 -0
- data/lib/util/swig_helper.rb +114 -0
- data/lib/util/timeout.rb +50 -0
- data/lib/util/uuid.rb +32 -0
- data/lib/util/version.rb +30 -0
- data/lib/util/wrapper.rb +124 -0
- metadata +67 -21
- data/ext/cproton/cproton.c +0 -22196
- data/lib/qpid_proton/data.rb +0 -788
- data/lib/qpid_proton/described.rb +0 -66
- data/lib/qpid_proton/exception_handling.rb +0 -127
- data/lib/qpid_proton/filters.rb +0 -67
- data/lib/qpid_proton/mapping.rb +0 -170
- data/lib/qpid_proton/message.rb +0 -621
- data/lib/qpid_proton/messenger.rb +0 -702
- data/lib/qpid_proton/selectable.rb +0 -126
- data/lib/qpid_proton/strings.rb +0 -65
- data/lib/qpid_proton/tracker_status.rb +0 -73
@@ -0,0 +1,169 @@
|
|
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::Codec
|
21
|
+
|
22
|
+
# Maps between Proton types and their Ruby native language counterparts.
|
23
|
+
#
|
24
|
+
# @private
|
25
|
+
class Mapping
|
26
|
+
|
27
|
+
attr_reader :code
|
28
|
+
attr_reader :put_method
|
29
|
+
attr_reader :get_method
|
30
|
+
|
31
|
+
# Creates a new mapping.
|
32
|
+
#
|
33
|
+
# ==== Arguments
|
34
|
+
#
|
35
|
+
# * code - the AMQP code for this type
|
36
|
+
# * name - the AMQP name for this type
|
37
|
+
# * klasses - the Ruby classes for this type
|
38
|
+
# * getter - overrides the get method for the type
|
39
|
+
def initialize(code, name, klasses = nil, getter = nil)
|
40
|
+
|
41
|
+
@debug = (name == "bool")
|
42
|
+
|
43
|
+
@code = code
|
44
|
+
@name = name
|
45
|
+
|
46
|
+
@@by_preferred ||= {}
|
47
|
+
@@by_code ||= {}
|
48
|
+
@@by_code["#{code}"] = self
|
49
|
+
@@by_name ||= {}
|
50
|
+
@@by_name[name] = self
|
51
|
+
@@by_class ||= {}
|
52
|
+
|
53
|
+
unless klasses.nil?
|
54
|
+
klasses.each do |klass|
|
55
|
+
raise "entry exists for #{klass}" if @@by_class.keys.include? klass
|
56
|
+
@@by_class[klass] = self unless klass.nil?
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
@put_method = (name + "=").intern
|
61
|
+
|
62
|
+
if getter.nil?
|
63
|
+
@get_method = name.intern
|
64
|
+
else
|
65
|
+
@get_method = getter.intern
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def to_s; @name; end
|
70
|
+
|
71
|
+
def put(data, value)
|
72
|
+
data.__send__(@put_method, value)
|
73
|
+
end
|
74
|
+
|
75
|
+
def get(data)
|
76
|
+
data.__send__(@get_method)
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.for_class(klass) # :nodoc:
|
80
|
+
@@by_class[klass]
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.for_code(code)
|
84
|
+
@@by_code["#{code}"]
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
NULL = Mapping.new(Cproton::PN_NULL, "null", [NilClass], "nil?")
|
90
|
+
BOOL = Mapping.new(Cproton::PN_BOOL, "bool", [TrueClass, FalseClass], "bool")
|
91
|
+
UBYTE = Mapping.new(Cproton::PN_UBYTE, "ubyte")
|
92
|
+
BYTE = Mapping.new(Cproton::PN_BYTE, "byte")
|
93
|
+
USHORT = Mapping.new(Cproton::PN_USHORT, "ushort")
|
94
|
+
SHORT = Mapping.new(Cproton::PN_SHORT, "short")
|
95
|
+
UINT = Mapping.new(Cproton::PN_UINT, "uint")
|
96
|
+
INT = Mapping.new(Cproton::PN_INT, "int")
|
97
|
+
CHAR = Mapping.new(Cproton::PN_CHAR, "char")
|
98
|
+
ULONG = Mapping.new(Cproton::PN_ULONG, "ulong")
|
99
|
+
LONG = Mapping.new(Cproton::PN_LONG, "long", [Fixnum, Bignum])
|
100
|
+
TIMESTAMP = Mapping.new(Cproton::PN_TIMESTAMP, "timestamp", [Date, Time])
|
101
|
+
FLOAT = Mapping.new(Cproton::PN_FLOAT, "float")
|
102
|
+
DOUBLE = Mapping.new(Cproton::PN_DOUBLE, "double", [Float])
|
103
|
+
DECIMAL32 = Mapping.new(Cproton::PN_DECIMAL32, "decimal32")
|
104
|
+
DECIMAL64 = Mapping.new(Cproton::PN_DECIMAL64, "decimal64")
|
105
|
+
DECIMAL128 = Mapping.new(Cproton::PN_DECIMAL128, "decimal128")
|
106
|
+
UUID = Mapping.new(Cproton::PN_UUID, "uuid")
|
107
|
+
BINARY = Mapping.new(Cproton::PN_BINARY, "binary")
|
108
|
+
STRING = Mapping.new(Cproton::PN_STRING, "string", [String, Symbol,
|
109
|
+
Qpid::Proton::Types::UTFString,
|
110
|
+
Qpid::Proton::Types::BinaryString])
|
111
|
+
|
112
|
+
# @private
|
113
|
+
class << STRING
|
114
|
+
def put(data, value)
|
115
|
+
# if we have a symbol then convert it to a string
|
116
|
+
value = value.to_s if value.is_a?(Symbol)
|
117
|
+
|
118
|
+
isutf = false
|
119
|
+
|
120
|
+
if value.is_a?(Qpid::Proton::Types::UTFString)
|
121
|
+
isutf = true
|
122
|
+
else
|
123
|
+
# For Ruby 1.8 we will just treat all strings as binary.
|
124
|
+
# For Ruby 1.9+ we can check the encoding first to see what it is
|
125
|
+
if RUBY_VERSION >= "1.9"
|
126
|
+
# If the string is ASCII-8BIT then treat is as binary. Otherwise,
|
127
|
+
# try to convert it to UTF-8 and, if successful, send as that.
|
128
|
+
if value.encoding != Encoding::ASCII_8BIT &&
|
129
|
+
value.encode(Encoding::UTF_8).valid_encoding?
|
130
|
+
isutf = true
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
data.string = value if isutf
|
136
|
+
data.binary = value if !isutf
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
SYMBOL = Mapping.new(Cproton::PN_SYMBOL, "symbol")
|
142
|
+
DESCRIBED = Mapping.new(Cproton::PN_DESCRIBED, "described", [Qpid::Proton::Types::Described], "get_described")
|
143
|
+
ARRAY = Mapping.new(Cproton::PN_ARRAY, "array", nil, "get_array")
|
144
|
+
LIST = Mapping.new(Cproton::PN_LIST, "list", [::Array], "get_array")
|
145
|
+
MAP = Mapping.new(Cproton::PN_MAP, "map", [::Hash], "get_map")
|
146
|
+
|
147
|
+
# @private
|
148
|
+
class << MAP
|
149
|
+
def put(data, map, options = {})
|
150
|
+
data.put_map
|
151
|
+
data.enter
|
152
|
+
map.each_pair do |key, value|
|
153
|
+
if options[:keys] == :SYMBOL
|
154
|
+
SYMBOL.put(data, key)
|
155
|
+
else
|
156
|
+
Mapping.for_class(key.class).put(data, key)
|
157
|
+
end
|
158
|
+
|
159
|
+
if value.nil?
|
160
|
+
data.null
|
161
|
+
else
|
162
|
+
Mapping.for_class(value.class).put(data, value)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
data.exit
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
@@ -17,24 +17,13 @@
|
|
17
17
|
# under the License.
|
18
18
|
#++
|
19
19
|
|
20
|
-
module Qpid
|
20
|
+
module Qpid::Proton
|
21
21
|
|
22
|
-
|
22
|
+
class BaseHandler
|
23
23
|
|
24
|
-
#
|
24
|
+
# Override to process unhandled events.
|
25
25
|
#
|
26
|
-
|
27
|
-
|
28
|
-
CUMULATIVE = Cproton::PN_CUMULATIVE
|
29
|
-
|
30
|
-
def initialize(impl) # :nodoc:
|
31
|
-
@impl = impl
|
32
|
-
end
|
33
|
-
|
34
|
-
def impl # :nodoc:
|
35
|
-
@impl
|
36
|
-
end
|
37
|
-
|
26
|
+
def on_unhandled(method, *args)
|
38
27
|
end
|
39
28
|
|
40
29
|
end
|
@@ -0,0 +1,328 @@
|
|
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
|
+
# A Connection option has at most one Qpid::Proton::Transport instance.
|
23
|
+
#
|
24
|
+
class Connection < Endpoint
|
25
|
+
|
26
|
+
# @private
|
27
|
+
include Util::SwigHelper
|
28
|
+
|
29
|
+
# @private
|
30
|
+
PROTON_METHOD_PREFIX = "pn_connection"
|
31
|
+
|
32
|
+
# @!attribute hostname
|
33
|
+
#
|
34
|
+
# @return [String] The AMQP hostname for the connection.
|
35
|
+
#
|
36
|
+
proton_accessor :hostname
|
37
|
+
|
38
|
+
# @private
|
39
|
+
proton_reader :attachments
|
40
|
+
|
41
|
+
attr_accessor :overrides
|
42
|
+
attr_accessor :session_policy
|
43
|
+
|
44
|
+
# @private
|
45
|
+
include Util::Wrapper
|
46
|
+
|
47
|
+
# @private
|
48
|
+
def self.wrap(impl)
|
49
|
+
return nil if impl.nil?
|
50
|
+
|
51
|
+
self.fetch_instance(impl, :pn_connection_attachments) || Connection.new(impl)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Constructs a new instance of Connection.
|
55
|
+
#
|
56
|
+
# You do *not* need to provide the underlying C struct, as this is
|
57
|
+
# automatically generated as needed. The argument is a convenience
|
58
|
+
# for returning existing Connection objects.
|
59
|
+
#
|
60
|
+
# @param impl [pn_connection_t] The pn_connection_t struct.
|
61
|
+
#
|
62
|
+
def initialize(impl = Cproton.pn_connection)
|
63
|
+
super()
|
64
|
+
@impl = impl
|
65
|
+
@offered_capabilities = nil
|
66
|
+
@desired_capabilities = nil
|
67
|
+
@properties = nil
|
68
|
+
@overrides = nil
|
69
|
+
@collector = nil
|
70
|
+
@session_policy = nil
|
71
|
+
self.class.store_instance(self, :pn_connection_attachments)
|
72
|
+
end
|
73
|
+
|
74
|
+
def overrides?
|
75
|
+
!@overrides.nil?
|
76
|
+
end
|
77
|
+
|
78
|
+
def session_policy?
|
79
|
+
!@session_policy.nil?
|
80
|
+
end
|
81
|
+
|
82
|
+
# This method is used when working within the context of an event.
|
83
|
+
#
|
84
|
+
# @return [Connection] The connection itself.
|
85
|
+
#
|
86
|
+
def connection
|
87
|
+
self
|
88
|
+
end
|
89
|
+
|
90
|
+
# The Transport to which this connection is bound.
|
91
|
+
#
|
92
|
+
# @return [Transport] The transport, or nil if the Connection is unbound.
|
93
|
+
#
|
94
|
+
def transport
|
95
|
+
Transport.wrap(Cproton.pn_connection_transport(@impl))
|
96
|
+
end
|
97
|
+
|
98
|
+
# Associates the connection with an event collector.
|
99
|
+
#
|
100
|
+
# By doing this, key changes in the endpoint's state are reported to
|
101
|
+
# the connector via Event objects that can be inspected and processed.
|
102
|
+
#
|
103
|
+
# Note that, by registering a collector, the user is requesting that an
|
104
|
+
# indefinite number of events be queued up on its behalf. This means
|
105
|
+
# that, unless the application eventual processes these events, the
|
106
|
+
# storage requirements for keeping them will grow without bound. So be
|
107
|
+
# careful and do not register a collector with a connection unless the
|
108
|
+
# application will process the events.
|
109
|
+
#
|
110
|
+
# @param collector [Event::Collector] The event collector.
|
111
|
+
#
|
112
|
+
def collect(collector)
|
113
|
+
if collector.nil?
|
114
|
+
Cproton.pn_connection_collect(@impl, nil)
|
115
|
+
else
|
116
|
+
Cproton.pn_connection_collect(@impl, collector.impl)
|
117
|
+
end
|
118
|
+
@collector = collector
|
119
|
+
end
|
120
|
+
|
121
|
+
# Get the AMQP container name advertised by the remote connection
|
122
|
+
# endpoint.
|
123
|
+
#
|
124
|
+
# This will return nil until the REMOTE_ACTIVE state is reached.
|
125
|
+
#
|
126
|
+
# Any non-nil container returned by this operation will be valid
|
127
|
+
# until the connection is unbound from a transport, or freed,
|
128
|
+
# whichever happens sooner.
|
129
|
+
#
|
130
|
+
# @return [String] The remote connection's AMQP container name.
|
131
|
+
#
|
132
|
+
# @see #container
|
133
|
+
#
|
134
|
+
def remote_container
|
135
|
+
Cproton.pn_connection_remote_container(@impl)
|
136
|
+
end
|
137
|
+
|
138
|
+
def container=(name)
|
139
|
+
Cproton.pn_connection_set_container(@impl, name)
|
140
|
+
end
|
141
|
+
|
142
|
+
def container
|
143
|
+
Cproton.pn_connection_get_container(@impl)
|
144
|
+
end
|
145
|
+
|
146
|
+
# Get the AMQP hostname set by the remote connection endpoint.
|
147
|
+
#
|
148
|
+
# This will return nil until the #REMOTE_ACTIVE state is
|
149
|
+
# reached.
|
150
|
+
#
|
151
|
+
# @return [String] The remote connection's AMQP hostname.
|
152
|
+
#
|
153
|
+
# @see #hostname
|
154
|
+
#
|
155
|
+
def remote_hostname
|
156
|
+
Cproton.pn_connection_remote_hostname(@impl)
|
157
|
+
end
|
158
|
+
|
159
|
+
# Get the AMQP offered capabilities suppolied by the remote connection
|
160
|
+
# endpoint.
|
161
|
+
#
|
162
|
+
# This object returned is valid until the connection is freed. The Data
|
163
|
+
# object will be empty until the remote connection is opened, as
|
164
|
+
# indicated by the #REMOTE_ACTIVE flag.
|
165
|
+
#
|
166
|
+
# @return [Data] The offered capabilities.
|
167
|
+
#
|
168
|
+
def remote_offered_capabilities
|
169
|
+
data_to_object(Cproton.pn_connection_remote_offered_capabilities(@impl))
|
170
|
+
end
|
171
|
+
|
172
|
+
# Get the AMQP desired capabilities supplied by the remote connection
|
173
|
+
# endpoint.
|
174
|
+
#
|
175
|
+
# The object returned is valid until the connection is freed. The Data
|
176
|
+
# object will be empty until the remote connection is opened, as
|
177
|
+
# indicated by the #REMOTE_ACTIVE flag.
|
178
|
+
#
|
179
|
+
# @return [Data] The desired capabilities.
|
180
|
+
#
|
181
|
+
def remote_desired_capabilities
|
182
|
+
data_to_object(Cproton.pn_connection_remote_desired_capabilities(@impl))
|
183
|
+
end
|
184
|
+
|
185
|
+
# Get the AMQP connection properties supplie by the remote connection
|
186
|
+
# endpoint.
|
187
|
+
#
|
188
|
+
# The object returned is valid until the connection is freed. The Data
|
189
|
+
# object will be empty until the remote connection is opened, as
|
190
|
+
# indicated by the #REMOTE_ACTIVE flag.
|
191
|
+
#
|
192
|
+
# @return [Data] The remote properties.
|
193
|
+
#
|
194
|
+
def remote_properties
|
195
|
+
data_to_object(Cproton.pn_connection_remote_properites(@impl))
|
196
|
+
end
|
197
|
+
|
198
|
+
# Opens the connection.
|
199
|
+
#
|
200
|
+
def open
|
201
|
+
object_to_data(@offered_capabilities,
|
202
|
+
Cproton.pn_connection_offered_capabilities(@impl))
|
203
|
+
object_to_data(@desired_capabilities,
|
204
|
+
Cproton.pn_connection_desired_capabilities(@impl))
|
205
|
+
object_to_data(@properties,
|
206
|
+
Cproton.pn_connection_properties(@impl))
|
207
|
+
Cproton.pn_connection_open(@impl)
|
208
|
+
end
|
209
|
+
|
210
|
+
# Closes the connection.
|
211
|
+
#
|
212
|
+
# Once this operation has completed, the #LOCAL_CLOSED state flag will be
|
213
|
+
# set.
|
214
|
+
#
|
215
|
+
def close
|
216
|
+
self._update_condition
|
217
|
+
Cproton.pn_connection_close(@impl)
|
218
|
+
end
|
219
|
+
|
220
|
+
# Gets the endpoint current state flags
|
221
|
+
#
|
222
|
+
# @see Endpoint#LOCAL_UNINIT
|
223
|
+
# @see Endpoint#LOCAL_ACTIVE
|
224
|
+
# @see Endpoint#LOCAL_CLOSED
|
225
|
+
# @see Endpoint#LOCAL_MASK
|
226
|
+
#
|
227
|
+
# @return [Fixnum] The state flags.
|
228
|
+
#
|
229
|
+
def state
|
230
|
+
Cproton.pn_connection_state(@impl)
|
231
|
+
end
|
232
|
+
|
233
|
+
# Returns the session for this connection.
|
234
|
+
#
|
235
|
+
# @return [Session] The session.
|
236
|
+
#
|
237
|
+
def session
|
238
|
+
@session ||= Session.wrap(Cproton.pn_session(@impl))
|
239
|
+
end
|
240
|
+
|
241
|
+
# Returns the first session from the connection that matches the specified
|
242
|
+
# state mask.
|
243
|
+
#
|
244
|
+
# Examines the state of each session owned by the connection, and returns
|
245
|
+
# the first session that matches the given state mask. If the state mask
|
246
|
+
# contains *both* local and remote flags, then an exact match against
|
247
|
+
# those flags is performed. If the state mask contains only local *or*
|
248
|
+
# remote flags, then a match occurs if a*any* of the local or remote flags
|
249
|
+
# are set, respectively.
|
250
|
+
#
|
251
|
+
# @param mask [Fixnum] The state mask to be matched.
|
252
|
+
#
|
253
|
+
# @return [Session] The first matching session, or nil if none matched.
|
254
|
+
#
|
255
|
+
# @see Endpoint#LOCAL_UNINIT
|
256
|
+
# @see Endpoint#LOCAL_ACTIVE
|
257
|
+
# @see Endpoint#LOCAL_CLOSED
|
258
|
+
# @see Endpoint#REMOTE_UNINIT
|
259
|
+
# @see Endpoint#REMOTE_ACTIVE
|
260
|
+
# @see Endpoint#REMOTE_CLOSED
|
261
|
+
#
|
262
|
+
def session_head(mask)
|
263
|
+
Session.wrap(Cproton.pn_session_header(@impl, mask))
|
264
|
+
end
|
265
|
+
|
266
|
+
# Returns the first link that matches the given state mask.
|
267
|
+
#
|
268
|
+
# Examines the state of each link owned by the connection and returns the
|
269
|
+
# first that matches the given state mask. If the state mask contains
|
270
|
+
# *both* local and remote flags, then an exact match against those flags
|
271
|
+
# is performed. If the state mask contains *only* local or remote flags,
|
272
|
+
# then a match occurs if *any* of the local ore remote flags are set,
|
273
|
+
# respectively.
|
274
|
+
#
|
275
|
+
# @param mask [Fixnum] The state mask to be matched.
|
276
|
+
#
|
277
|
+
# @return [Link] The first matching link, or nil if none matched.
|
278
|
+
#
|
279
|
+
# @see Endpoint#LOCAL_UNINIT
|
280
|
+
# @see Endpoint#LOCAL_ACTIVE
|
281
|
+
# @see Endpoint#LOCAL_CLOSED
|
282
|
+
# @see Endpoint#REMOTE_UNINIT
|
283
|
+
# @see Endpoint#REMOTE_ACTIVE
|
284
|
+
# @see Endpoint#REMOTE_CLOSED
|
285
|
+
#
|
286
|
+
def link_head(mask)
|
287
|
+
Link.wrap(Cproton.pn_link_head(@impl, mask))
|
288
|
+
end
|
289
|
+
|
290
|
+
# Extracts the first delivery on the connection that has pending
|
291
|
+
# operations.
|
292
|
+
#
|
293
|
+
# A readable delivery indicates message data is waiting to be read. A
|
294
|
+
# A writable delivery indcates that message data may be sent. An updated
|
295
|
+
# delivery indicates that the delivery's disposition has changed.
|
296
|
+
#
|
297
|
+
# A delivery will never be *both* readable and writable, but it may be
|
298
|
+
# both readable or writable and updated.
|
299
|
+
#
|
300
|
+
# @return [Delivery] The delivery, or nil if none are available.
|
301
|
+
#
|
302
|
+
# @see Delivery#next
|
303
|
+
#
|
304
|
+
def work_head
|
305
|
+
Delivery.wrap(Cproton.pn_work_head(@impl))
|
306
|
+
end
|
307
|
+
|
308
|
+
# Returns the code for a connection error.
|
309
|
+
#
|
310
|
+
# @return [Fixnum] The error code.
|
311
|
+
#
|
312
|
+
def error
|
313
|
+
Cproton.pn_error_code(Cproton.pn_connection_error(@impl))
|
314
|
+
end
|
315
|
+
|
316
|
+
# @private
|
317
|
+
def _local_condition
|
318
|
+
Cproton.pn_connection_condition(@impl)
|
319
|
+
end
|
320
|
+
|
321
|
+
# @private
|
322
|
+
def _remote_condition
|
323
|
+
Cproton.pn_connection_remote_condition(@impl)
|
324
|
+
end
|
325
|
+
|
326
|
+
end
|
327
|
+
|
328
|
+
end
|