qpid_proton 0.19.0 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/README.md +76 -0
- data/examples/broker.rb +167 -0
- data/examples/client.rb +79 -0
- data/examples/direct_recv.rb +61 -0
- data/examples/direct_send.rb +67 -0
- data/examples/example_test.rb +109 -0
- data/examples/helloworld.rb +57 -0
- data/examples/server.rb +70 -0
- data/examples/simple_recv.rb +57 -0
- data/examples/simple_send.rb +63 -0
- data/examples/ssl_certs/README.txt +24 -0
- data/examples/ssl_certs/tclient-certificate.p12 +0 -0
- data/examples/ssl_certs/tclient-certificate.pem +19 -0
- data/examples/ssl_certs/tclient-full.p12 +0 -0
- data/examples/ssl_certs/tclient-private-key.pem +30 -0
- data/examples/ssl_certs/tserver-certificate.p12 +0 -0
- data/examples/ssl_certs/tserver-certificate.pem +19 -0
- data/examples/ssl_certs/tserver-full.p12 +0 -0
- data/examples/ssl_certs/tserver-private-key.pem +30 -0
- data/examples/ssl_send.rb +70 -0
- data/ext/cproton/cproton.c +105 -74
- data/lib/core/container.rb +2 -1
- data/lib/core/ssl_domain.rb +1 -1
- data/lib/core/uri.rb +15 -9
- data/lib/handler/messaging_adapter.rb +20 -5
- data/tests/old_examples/broker.rb +200 -0
- data/tests/old_examples/client.rb +81 -0
- data/tests/old_examples/direct_recv.rb +64 -0
- data/tests/old_examples/direct_send.rb +63 -0
- data/tests/old_examples/helloworld.rb +72 -0
- data/tests/old_examples/helloworld_direct.rb +73 -0
- data/tests/old_examples/lib/debugging.rb +25 -0
- data/tests/old_examples/lib/driver.rb +68 -0
- data/tests/old_examples/lib/qpid_examples.rb +26 -0
- data/tests/old_examples/lib/selectable.rb +119 -0
- data/tests/old_examples/lib/send_and_receive.rb +89 -0
- data/tests/old_examples/old_example_test.rb +107 -0
- data/tests/old_examples/recv.rb +23 -0
- data/tests/old_examples/send.rb +21 -0
- data/tests/old_examples/server.rb +75 -0
- data/tests/old_examples/simple_recv.rb +57 -0
- data/tests/old_examples/simple_send.rb +54 -0
- data/tests/test_connection_driver.rb +134 -0
- data/tests/test_container.rb +319 -0
- data/tests/test_data.rb +66 -0
- data/tests/test_delivery.rb +110 -0
- data/tests/test_interop.rb +131 -0
- data/tests/test_messaging_adapter.rb +223 -0
- data/tests/test_old_adapter.rb +228 -0
- data/tests/test_tools.rb +147 -0
- data/tests/test_uri.rb +83 -0
- metadata +49 -3
@@ -0,0 +1,57 @@
|
|
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
|
+
require 'qpid_proton'
|
21
|
+
require 'optparse'
|
22
|
+
|
23
|
+
class SimpleReceive < Qpid::Proton::MessagingHandler
|
24
|
+
|
25
|
+
def initialize(url, address, count)
|
26
|
+
super()
|
27
|
+
@url = url
|
28
|
+
@address = address
|
29
|
+
@expected = count
|
30
|
+
@received = 0
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_container_start(container)
|
34
|
+
c = container.connect(@url)
|
35
|
+
c.open_receiver(@address)
|
36
|
+
end
|
37
|
+
|
38
|
+
def on_message(delivery, message)
|
39
|
+
if @expected.zero? || (@received < @expected)
|
40
|
+
puts "Received: #{message.body}"
|
41
|
+
@received = @received + 1
|
42
|
+
if @received == @expected
|
43
|
+
delivery.connection.close
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
unless (2..3).include? ARGV.size
|
50
|
+
STDERR.puts "Usage: #{__FILE__} URL ADDRESS [COUNT]}
|
51
|
+
Connect to URL and receive COUNT messages from ADDRESS"
|
52
|
+
return 1
|
53
|
+
end
|
54
|
+
url, address, count = ARGV
|
55
|
+
count = Integer(count || 10)
|
56
|
+
Qpid::Proton::Container.new(SimpleReceive.new(url, address, count)).run
|
57
|
+
|
@@ -0,0 +1,63 @@
|
|
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
|
+
require 'qpid_proton'
|
21
|
+
require 'optparse'
|
22
|
+
|
23
|
+
class SimpleSend < Qpid::Proton::MessagingHandler
|
24
|
+
|
25
|
+
def initialize(url, address, expected)
|
26
|
+
super()
|
27
|
+
@url = url
|
28
|
+
@address = address
|
29
|
+
@sent = 0
|
30
|
+
@confirmed = 0
|
31
|
+
@expected = expected
|
32
|
+
end
|
33
|
+
|
34
|
+
def on_container_start(container)
|
35
|
+
c = container.connect(@url)
|
36
|
+
c.open_sender(@address)
|
37
|
+
end
|
38
|
+
|
39
|
+
def on_sendable(sender)
|
40
|
+
while sender.credit > 0 && @sent < @expected
|
41
|
+
msg = Qpid::Proton::Message.new("sequence #{@sent}", { :id => @sent } )
|
42
|
+
sender.send(msg)
|
43
|
+
@sent = @sent + 1
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def on_tracker_accept(tracker)
|
48
|
+
@confirmed = @confirmed + 1
|
49
|
+
if @confirmed == @expected
|
50
|
+
puts "All #{@expected} messages confirmed!"
|
51
|
+
tracker.connection.close
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
unless (2..3).include? ARGV.size
|
57
|
+
STDERR.puts "Usage: #{__FILE__} URL ADDRESS [COUNT]}
|
58
|
+
Connect to URL and send COUNT messages to ADDRESS"
|
59
|
+
return 1
|
60
|
+
end
|
61
|
+
url, address, count = ARGV
|
62
|
+
count = Integer(count || 10)
|
63
|
+
Qpid::Proton::Container.new(SimpleSend.new(url, address, count)).run
|
@@ -0,0 +1,24 @@
|
|
1
|
+
This directory contains basic self signed test certificates for use by
|
2
|
+
proton examples.
|
3
|
+
|
4
|
+
The ".pem" files are in the format expected by proton implementations
|
5
|
+
using OpenSSL. The ".p12" file are for Windows implementations using
|
6
|
+
SChannel.
|
7
|
+
|
8
|
+
The commands used to generate the certificates follow.
|
9
|
+
|
10
|
+
|
11
|
+
make_pn_cert()
|
12
|
+
{
|
13
|
+
name=$1
|
14
|
+
subject=$2
|
15
|
+
passwd=$3
|
16
|
+
# create the pem files
|
17
|
+
openssl req -newkey rsa:2048 -keyout $name-private-key.pem -out $name-certificate.pem -subj $subject -passout pass:$passwd -x509 -days 3650
|
18
|
+
# create the p12 files
|
19
|
+
openssl pkcs12 -export -out $name-full.p12 -passin pass:$passwd -passout pass:$passwd -inkey $name-private-key.pem -in $name-certificate.pem -name $name
|
20
|
+
openssl pkcs12 -export -out $name-certificate.p12 -in $name-certificate.pem -name $name -nokeys -passout pass:
|
21
|
+
}
|
22
|
+
|
23
|
+
make_pn_cert tserver /CN=test_server/OU=proton_test tserverpw
|
24
|
+
make_pn_cert tclient /CN=test_client/OU=proton_test tclientpw
|
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDKzCCAhOgAwIBAgIJAIV7frIjftgcMA0GCSqGSIb3DQEBCwUAMCwxFDASBgNV
|
3
|
+
BAMMC3Rlc3RfY2xpZW50MRQwEgYDVQQLDAtwcm90b25fdGVzdDAeFw0xNTExMjcx
|
4
|
+
ODEwMzlaFw0yNTExMjQxODEwMzlaMCwxFDASBgNVBAMMC3Rlc3RfY2xpZW50MRQw
|
5
|
+
EgYDVQQLDAtwcm90b25fdGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
6
|
+
ggEBAPCIS4qUdOtQplUxZ6WW0LXcvosqFP6qOiCARLSEWpR3B8bq213rzefwwfcM
|
7
|
+
4TtMr88bP+huLKmlyMfwpl8yB88eXkscPgaAce2zk24urWkFXKSQ6GPitWBLGqBa
|
8
|
+
V+W0wJ4mfW7MwefVslWfGXI381QEUlBHjkFG30AtzMMTRj2GK2JqUlRXZPljGyB7
|
9
|
+
WcXwxcoS+HkKV7FtHWSkLAzyXwQ9vsCUEYdWTUaGXfCUNRSRV7h1LIANbu03NxV0
|
10
|
+
XdEl7WXcr7tuTw3axeUGhRFVhLegrxKLuZTTno4aAJnEr8uaDzjxvXnv3Ne2igvy
|
11
|
+
gRfZgOMx+XrZEob9OpAoRghQt4cCAwEAAaNQME4wHQYDVR0OBBYEFE4vbyiM0RjG
|
12
|
+
TLMLLGGhMZE/5x1GMB8GA1UdIwQYMBaAFE4vbyiM0RjGTLMLLGGhMZE/5x1GMAwG
|
13
|
+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAErr/rvLS9Ig0UCMwh1J1lA9
|
14
|
+
/gvXf93iIK/SjrFIAqYRmfZxg4husfoes8t2hFUeuqoH05TuSOoXG8p8DpgTSGmF
|
15
|
+
jAFe+T90vJZTm0oqZkkkI/hdzjGQoHURRp9/O2Z/lm39KSKGVAN5pUWCUDi/G5iS
|
16
|
+
P9LZPJN6a5syXMrR6x62IPxAXowlpXkRghKClF3zPOaOBTzT1V27EkI8IEgC+p45
|
17
|
+
246EooLnw8ibB+ucNc3KHNzpgKGVd/622+I+Q5eg9AT9PLFttP+R2ECsrVDDPYuA
|
18
|
+
p0qaSnwgeozj/d6K3FOgKKEKbzBmpWgkv0jdcVk18aPMHypI/RDtZ/+3ET2Ksi8=
|
19
|
+
-----END CERTIFICATE-----
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
-----BEGIN ENCRYPTED PRIVATE KEY-----
|
2
|
+
MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQICy6ghWp45z4CAggA
|
3
|
+
MBQGCCqGSIb3DQMHBAiVdDoo4NIghQSCBMixGm1bm/omMxsaKnIPO7zm5dyLexJ+
|
4
|
+
yTFpmh2KV7kQqmpzCyIOdoG6K8YqFnie2XdFWm3S8faRHoMq54bDmyEWIxfQPq5f
|
5
|
+
I1iYFbIZkbnhUvK53RActsEUMf0locS4xylU7VQK3XTAwp0TVip3Lp3ehEMEdcXL
|
6
|
+
iUWibGsoTPKcY9MIWGXZAJXsEXoeHt6k2hHo1G4E0/Bi6mLW1LY/cxZCjHTGD6qI
|
7
|
+
Kt54SCCDvinqVa+rixw6yX9F14EA6bhALami8e+Ccd3lqHOyYlXcBaSS1ezCg6ig
|
8
|
+
oNK97mC+gEGy1KlkZDKWXclFoOCBXRBe4DByre6Rlq3yeI9L42bvAuSBSmf5QT5g
|
9
|
+
73Yl8vjEAKR65awBT09dPuKu7t+Fb6vkwF8/t+uyj9IuL+42UuXhMLK3ohf+6DbU
|
10
|
+
8/zB4y3GXI80QmWM0+Wx4n6khFhPFLHt2q0Sn6V9PG1vtHyiq50oSCoyrPQLaecp
|
11
|
+
hefnMCFBYTcT3JUwmoVGGy0boIAwL7T4aGsMt7QhwOx5tU35tKFxyY7m4fX14AKo
|
12
|
+
2EIy+TPQwCGkGf3Puy/Pc9VA8IAxB5+WwSrjk+NeCv88eIX7gy43k4rCr+OmD9FF
|
13
|
+
wknr3xoP3KYhNXjdZ4Ep/1UHSK+JAtzzbNLQjDcqN+gQPg/yUX6ih0j5K3Wvh9bK
|
14
|
+
E/DvzbpJroUZPgzR+8z5O68CfsD+OIdpHBFTKqAFmzvUuqpADpr998LdCjD+lW+V
|
15
|
+
xZZgZa8KEblwgiH3fdGbYl46Ho1zrZisf439DbqyybAuBIQB4NSZcL/MAgVGO17k
|
16
|
+
QDpVElWZWYrFm4CFTcvS2HvIzRmbefF5m5oJedsN7Q6WQCp+3gnwYx1xIOknd7pW
|
17
|
+
N4AHNnqjscSj9yACj/EiBVKAKNnC5H7ZGZTsaAjMETZyjLXfI2AZ3Fviz4zFR+oz
|
18
|
+
NkAfFB6WUpRpl7H02FzrzYT7XkkLcXd6H6g+mv2iDa9uKWk/PS2QlqnJt8/dHEHD
|
19
|
+
JKTG331yDK5GHlKAVGF3nP5BwFGgTQMuSoeiOervMXPUwDpQ8OaYkuaRej0cZLgT
|
20
|
+
kAF9sUjqdsoYNcXDFHALp6y5g8qYkfrxrlIbKs82zIsmB5I+dtZbUaD3a0zAUrmW
|
21
|
+
5Xm3Pc9dVP0EXKwfHz6zqPReEw2yYLisB5IoHd4M2wa3GzHBdra1ij4QTmvd3o7e
|
22
|
+
buGFoX8KJQAcig0zpbYkoDP2gPhIh9rY4unVPQNX1Q8/wRsiJAZZsYvZY+A+SmuZ
|
23
|
+
bwSwk+8ZJRsFzdYYYhQeRytD5cDAIQiClcI5Yj4T9dWQV/gf0N/wIBDNTMp0jJAy
|
24
|
+
1l7PuXTfGZodNJWZH0oqsrNoWbn/k67NildvvofIKX+h09Nxszr670Pvj0qoHd5/
|
25
|
+
CWq30lnxoJBUgbikFOz6ZuuHi/ZiCXL+haH+v8hJKN5ptRKnyYJQHchRB/IOGRoT
|
26
|
+
5lmWxo8a7K+yXhp0VBDHJfw3685ms0xQX8Xj4X3MEuN64zd0fB1JmhtP12ydK85J
|
27
|
+
ABawNKlRQPw5weckwtCviXQX+vX25S/xu3xA6IuqlHyqL/1t3DICzuxeOyT2mZxD
|
28
|
+
tKQxEgNihPvu32vn9m74qA3adEaxuWPRkPZuTeITHOkMTZolvqYX/5olBsSgYwka
|
29
|
+
7/g=
|
30
|
+
-----END ENCRYPTED PRIVATE KEY-----
|
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDKzCCAhOgAwIBAgIJAPnYOOQCJ3kDMA0GCSqGSIb3DQEBCwUAMCwxFDASBgNV
|
3
|
+
BAMMC3Rlc3Rfc2VydmVyMRQwEgYDVQQLDAtwcm90b25fdGVzdDAeFw0xNTExMjcx
|
4
|
+
ODEwMzlaFw0yNTExMjQxODEwMzlaMCwxFDASBgNVBAMMC3Rlc3Rfc2VydmVyMRQw
|
5
|
+
EgYDVQQLDAtwcm90b25fdGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
6
|
+
ggEBAKJNB78lgw4KtXDAvXocTLud6mbn6zgfB6ETIF+kcrukOH9DnPxjLBBM4Lig
|
7
|
+
sp1+kmeudFK5/X8riDrvIW52b/rlEBLgLB+oDtI74m6OTbBs9L+FUFYOuxApetQF
|
8
|
+
qoJy2vf9pWfy4uku24vCpeo7eVLi6ypu4lXE3LR+Km3FruHI1NKonHBMhwXSOWqF
|
9
|
+
pYM6/4IZJ4fbV0+eU0Jrx+05s6XHg5vone2BVJKxeSIBje+zWnNnh8+qG0Z70Jgp
|
10
|
+
aMetME5KGnLNgD1okpH0vb3lwjvuqkkx4WswGVZGbLLkSqqBpXPyM9fCFVy5aKSL
|
11
|
+
DBq7IABQtO67O2nBzK3OyigHrUUCAwEAAaNQME4wHQYDVR0OBBYEFGV1PY0FCFbJ
|
12
|
+
gpcDVKI6JGiRTt3kMB8GA1UdIwQYMBaAFGV1PY0FCFbJgpcDVKI6JGiRTt3kMAwG
|
13
|
+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAIx1TOTGWnnbpan4bse7wuvH
|
14
|
+
GYSNDJhoTVS+X1TC63xukJD1JBAsCNTqg/ZV6lN3XEl7vvOXfGoCiyXM6a9XOKUo
|
15
|
+
gSDtMrIr+wTh6Ss1yRO8QcCJmxH5JDXNu1ojtwsjFW/vneI4IL9kwpDsSlMQEX/E
|
16
|
+
EkkQwtAx/Cvfe7pecZL4qSeykJOUMTts9H8fCAZqEiRZBA3ugJxqF8jwLP3DoFVQ
|
17
|
+
6QZzKDY6CSPqfMnVb5i0MAIYVDpau+e3N9dgQpZD22F/zbua0OVbfAPdiRMnYxML
|
18
|
+
FT4sxLnh+5YVqwpVWbEKp4onHe2Fq6YIvAxUYAJ3SBA2C8O2RAVKWxf1jko3jYI=
|
19
|
+
-----END CERTIFICATE-----
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
-----BEGIN ENCRYPTED PRIVATE KEY-----
|
2
|
+
MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI1cT0c2J3GcQCAggA
|
3
|
+
MBQGCCqGSIb3DQMHBAi1hxSX2LJ+EgSCBMheHJ0iXr5A36Natjk/LcAEeKUMT9s+
|
4
|
+
sMzoQceCWe8qMlQluWksr9iDdZ4JRIE8cpK8dbmx4dLY/SShUzdlhJHCSa4zZBHq
|
5
|
+
8cZ/jGUF/RF1rqdgjK589eUq+uOl3/gXKzG/SxBqayy6PSn12kX3qnvmlkXCmtwU
|
6
|
+
lg+iBm5wRcJ0MyVHaJkyA8sW8gr186C/VAau6Yu0crQXN7NRo9snrd4ewuYMIEhZ
|
7
|
+
hgaG9XsYQWB1bPhAaKj80CZGxsQbJyTwcbKKkB3IY4WXx8mmhuiNl+vKT3HBJ9Ju
|
8
|
+
YB6tgIjs8CJ4X2P4aU3yNJwG1QldgHSqmFGQ19bcZAw3s3kzwjdzRf4H2V16XOBd
|
9
|
+
zQ5AEs/ffVMzMIAfkb1gYwgunZ2CVwwDJ2mi1RcgkX+Og2aFQc+fxXcVOnDcGLxV
|
10
|
+
6fuCuZ2lsXfoiIyRh9kj3L75N12GtVUvgBdnMuOc1wPw6XnGQtDwt0acJpdexLMG
|
11
|
+
k0j57r/gcgzTcmF3qNM+y9L/HLssgrJkvVJw2Np5gmtIyfDocsDUWUbClS4dTpYf
|
12
|
+
oTngUTU+vWtHBuaUnb+f5/WJaRS/S7mmR8usbVG3i9WnEr/vlPJpbJFSjW2S6u/H
|
13
|
+
7cFxKUmmBZsSuEv/EKt9a+Sh62kprOChm4myqfCI1/gvNKfUZC6m0Vp8zf+2LgAq
|
14
|
+
2RgbMuqysMjWUtV4kDRZT7oCYckUDwsCHdbLES3nmVrtBk2ShMKHBpDp8/GoRuiV
|
15
|
+
jdV7/EjKM/M1kXtFYYe3z7Mxv++lKYIJ7bNwVrQ8nrhce/VwHw6D5emWXNCJXhKZ
|
16
|
+
FW7EM2ZOZ9eaKOlCsIi8sbjV6Yie9IY6HJKKmi3CpO0Tv5kLBdHkru8vGCSFm3O1
|
17
|
+
n7wz7Ys5FBSlZ19X0NwQSCQX1Q4w+tido6i1SCRX0qJEdTNGuGwVXMHCf4/1zyHV
|
18
|
+
hj8vnxh8fzo79LFrwlTTgwLg1Mr8sEUFFDJ/raJ1AhFXi8n24trtNR8EHxRW8wtD
|
19
|
+
CLCKaqkEqfBiFXK/Yq3RrefCayPHiD+DaNsI8BwefMGpED3vD8YYCjAzXNPh/CSF
|
20
|
+
sc1i1jWMzbJhzOoFSPNXhlfusbUFMFQ/6olatmH47SY6HBBOL3DDP5uQ0jw8P454
|
21
|
+
QBjlMOpEZmZxO6TcEtJwu0vzgog4rQ5g3NWy6SIpjWehNwTynLt7yM3R5WTI6cZs
|
22
|
+
0GTv/rqo2/SUoNsFmnGIUwj/DrBe4XOAq1nS2ZlEctxKhBsKH0hMFp6D1rXOzrgl
|
23
|
+
bwcq+oistoB0TLcThShyNgSqzW1znQ1n5SVUk9b5rRhSttJxn3yOMewH0i3v8bPo
|
24
|
+
HOhP5kaGjblPsCYyhlL/SNVF0OXEGTwLNey7FQdWFOwVwTRRXe7k+uGZ2d5hg+Jn
|
25
|
+
It/trDZ1RDYbVmB7/Qy73c16J4mvhOUJ2de5ZciFBjkidbiiUKLj9xnjK9k9Sauo
|
26
|
+
MKhNnDMAEU5VDQM3xNe5BRdX8dFLwfF5H64sU3nROF83aUnDgvfFEowYPnCuPYfm
|
27
|
+
m4aQHfoBSg4j3v1OeOwktcl+Q2TjxPHfWhbWeRBfxOTqQ/suYhnQChuFSK/qyo9K
|
28
|
+
ccgotqghhunRsWMoZT25H7AZM6yKb1sMz/0oyMRIKeGqoYh+ULM5XLY0xNYd4/xU
|
29
|
+
WtQ=
|
30
|
+
-----END ENCRYPTED PRIVATE KEY-----
|
@@ -0,0 +1,70 @@
|
|
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
|
+
require 'qpid_proton'
|
21
|
+
require 'optparse'
|
22
|
+
|
23
|
+
class SimpleSend < Qpid::Proton::MessagingHandler
|
24
|
+
|
25
|
+
def initialize(url, address, expected)
|
26
|
+
super()
|
27
|
+
@url = url
|
28
|
+
@address = address
|
29
|
+
@sent = 0
|
30
|
+
@confirmed = 0
|
31
|
+
@expected = expected
|
32
|
+
end
|
33
|
+
|
34
|
+
def on_container_start(container)
|
35
|
+
# Use a default client SSL domain
|
36
|
+
ssl_domain = Qpid::Proton::SSLDomain.new(Qpid::Proton::SSLDomain::MODE_CLIENT)
|
37
|
+
c = container.connect(@url, { :ssl_domain => ssl_domain })
|
38
|
+
c.open_sender(@address)
|
39
|
+
end
|
40
|
+
|
41
|
+
def on_connection_open(c)
|
42
|
+
raise "No security!" unless c.transport.ssl?
|
43
|
+
STDOUT.puts "Connection secured with #{c.transport.ssl.protocol_name.inspect}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def on_sendable(sender)
|
47
|
+
while sender.credit > 0 && @sent < @expected
|
48
|
+
msg = Qpid::Proton::Message.new("sequence #{@sent}", { :id => @sent } )
|
49
|
+
sender.send(msg)
|
50
|
+
@sent = @sent + 1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def on_tracker_accept(tracker)
|
55
|
+
@confirmed = @confirmed + 1
|
56
|
+
if @confirmed == @expected
|
57
|
+
puts "All #{@expected} messages confirmed!"
|
58
|
+
tracker.connection.close
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
unless (2..3).include? ARGV.size
|
64
|
+
STDERR.puts "Usage: #{__FILE__} URL ADDRESS [COUNT]}
|
65
|
+
Connect to URL and send COUNT messages to ADDRESS"
|
66
|
+
return 1
|
67
|
+
end
|
68
|
+
url, address, count = ARGV
|
69
|
+
count = Integer(count || 10)
|
70
|
+
Qpid::Proton::Container.new(SimpleSend.new(url, address, count)).run
|
data/ext/cproton/cproton.c
CHANGED
@@ -1813,73 +1813,74 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
|
|
1813
1813
|
#define SWIGTYPE_p_long swig_types[10]
|
1814
1814
|
#define SWIGTYPE_p_long_long swig_types[11]
|
1815
1815
|
#define SWIGTYPE_p_p_char swig_types[12]
|
1816
|
-
#define
|
1817
|
-
#define
|
1818
|
-
#define
|
1819
|
-
#define
|
1820
|
-
#define
|
1821
|
-
#define
|
1822
|
-
#define
|
1823
|
-
#define
|
1824
|
-
#define
|
1825
|
-
#define
|
1826
|
-
#define
|
1827
|
-
#define
|
1828
|
-
#define
|
1829
|
-
#define
|
1830
|
-
#define
|
1831
|
-
#define
|
1832
|
-
#define
|
1833
|
-
#define
|
1834
|
-
#define
|
1835
|
-
#define
|
1836
|
-
#define
|
1837
|
-
#define
|
1838
|
-
#define
|
1839
|
-
#define
|
1840
|
-
#define
|
1841
|
-
#define
|
1842
|
-
#define
|
1843
|
-
#define
|
1844
|
-
#define
|
1845
|
-
#define
|
1846
|
-
#define
|
1847
|
-
#define
|
1848
|
-
#define
|
1849
|
-
#define
|
1850
|
-
#define
|
1851
|
-
#define
|
1852
|
-
#define
|
1853
|
-
#define
|
1854
|
-
#define
|
1855
|
-
#define
|
1856
|
-
#define
|
1857
|
-
#define
|
1858
|
-
#define
|
1859
|
-
#define
|
1860
|
-
#define
|
1861
|
-
#define
|
1862
|
-
#define
|
1863
|
-
#define
|
1864
|
-
#define
|
1865
|
-
#define
|
1866
|
-
#define
|
1867
|
-
#define
|
1868
|
-
#define
|
1869
|
-
#define
|
1870
|
-
#define
|
1871
|
-
#define
|
1872
|
-
#define
|
1873
|
-
#define
|
1874
|
-
#define
|
1875
|
-
#define
|
1876
|
-
#define
|
1877
|
-
#define
|
1878
|
-
#define
|
1879
|
-
#define
|
1880
|
-
#define
|
1881
|
-
|
1882
|
-
static
|
1816
|
+
#define SWIGTYPE_p_p_pn_connection_driver_t swig_types[13]
|
1817
|
+
#define SWIGTYPE_p_pn_acceptor_t swig_types[14]
|
1818
|
+
#define SWIGTYPE_p_pn_atom_t swig_types[15]
|
1819
|
+
#define SWIGTYPE_p_pn_bytes_t swig_types[16]
|
1820
|
+
#define SWIGTYPE_p_pn_cid_t swig_types[17]
|
1821
|
+
#define SWIGTYPE_p_pn_class_t swig_types[18]
|
1822
|
+
#define SWIGTYPE_p_pn_collector_t swig_types[19]
|
1823
|
+
#define SWIGTYPE_p_pn_condition_t swig_types[20]
|
1824
|
+
#define SWIGTYPE_p_pn_connection_driver_t swig_types[21]
|
1825
|
+
#define SWIGTYPE_p_pn_connection_t swig_types[22]
|
1826
|
+
#define SWIGTYPE_p_pn_data_t swig_types[23]
|
1827
|
+
#define SWIGTYPE_p_pn_decimal128_t swig_types[24]
|
1828
|
+
#define SWIGTYPE_p_pn_delivery_t swig_types[25]
|
1829
|
+
#define SWIGTYPE_p_pn_disposition_t swig_types[26]
|
1830
|
+
#define SWIGTYPE_p_pn_distribution_mode_t swig_types[27]
|
1831
|
+
#define SWIGTYPE_p_pn_durability_t swig_types[28]
|
1832
|
+
#define SWIGTYPE_p_pn_error_t swig_types[29]
|
1833
|
+
#define SWIGTYPE_p_pn_event_batch_t swig_types[30]
|
1834
|
+
#define SWIGTYPE_p_pn_event_t swig_types[31]
|
1835
|
+
#define SWIGTYPE_p_pn_event_type_t swig_types[32]
|
1836
|
+
#define SWIGTYPE_p_pn_expiry_policy_t swig_types[33]
|
1837
|
+
#define SWIGTYPE_p_pn_handler_t swig_types[34]
|
1838
|
+
#define SWIGTYPE_p_pn_hash_t swig_types[35]
|
1839
|
+
#define SWIGTYPE_p_pn_iterator_t swig_types[36]
|
1840
|
+
#define SWIGTYPE_p_pn_link_t swig_types[37]
|
1841
|
+
#define SWIGTYPE_p_pn_list_t swig_types[38]
|
1842
|
+
#define SWIGTYPE_p_pn_listener_t swig_types[39]
|
1843
|
+
#define SWIGTYPE_p_pn_map_t swig_types[40]
|
1844
|
+
#define SWIGTYPE_p_pn_message_t swig_types[41]
|
1845
|
+
#define SWIGTYPE_p_pn_messenger_t swig_types[42]
|
1846
|
+
#define SWIGTYPE_p_pn_proactor_t swig_types[43]
|
1847
|
+
#define SWIGTYPE_p_pn_rcv_settle_mode_t swig_types[44]
|
1848
|
+
#define SWIGTYPE_p_pn_reactor_t swig_types[45]
|
1849
|
+
#define SWIGTYPE_p_pn_record_t swig_types[46]
|
1850
|
+
#define SWIGTYPE_p_pn_rwbytes_t swig_types[47]
|
1851
|
+
#define SWIGTYPE_p_pn_sasl_outcome_t swig_types[48]
|
1852
|
+
#define SWIGTYPE_p_pn_sasl_t swig_types[49]
|
1853
|
+
#define SWIGTYPE_p_pn_selectable_t swig_types[50]
|
1854
|
+
#define SWIGTYPE_p_pn_session_t swig_types[51]
|
1855
|
+
#define SWIGTYPE_p_pn_snd_settle_mode_t swig_types[52]
|
1856
|
+
#define SWIGTYPE_p_pn_ssl_cert_subject_subfield swig_types[53]
|
1857
|
+
#define SWIGTYPE_p_pn_ssl_domain_t swig_types[54]
|
1858
|
+
#define SWIGTYPE_p_pn_ssl_hash_alg swig_types[55]
|
1859
|
+
#define SWIGTYPE_p_pn_ssl_mode_t swig_types[56]
|
1860
|
+
#define SWIGTYPE_p_pn_ssl_resume_status_t swig_types[57]
|
1861
|
+
#define SWIGTYPE_p_pn_ssl_t swig_types[58]
|
1862
|
+
#define SWIGTYPE_p_pn_ssl_verify_mode_t swig_types[59]
|
1863
|
+
#define SWIGTYPE_p_pn_status_t swig_types[60]
|
1864
|
+
#define SWIGTYPE_p_pn_string_t swig_types[61]
|
1865
|
+
#define SWIGTYPE_p_pn_subscription_t swig_types[62]
|
1866
|
+
#define SWIGTYPE_p_pn_task_t swig_types[63]
|
1867
|
+
#define SWIGTYPE_p_pn_terminus_t swig_types[64]
|
1868
|
+
#define SWIGTYPE_p_pn_terminus_type_t swig_types[65]
|
1869
|
+
#define SWIGTYPE_p_pn_timer_t swig_types[66]
|
1870
|
+
#define SWIGTYPE_p_pn_transport_t swig_types[67]
|
1871
|
+
#define SWIGTYPE_p_pn_type_t swig_types[68]
|
1872
|
+
#define SWIGTYPE_p_pn_url_t swig_types[69]
|
1873
|
+
#define SWIGTYPE_p_pn_uuid_t swig_types[70]
|
1874
|
+
#define SWIGTYPE_p_short swig_types[71]
|
1875
|
+
#define SWIGTYPE_p_signed_char swig_types[72]
|
1876
|
+
#define SWIGTYPE_p_unsigned_char swig_types[73]
|
1877
|
+
#define SWIGTYPE_p_unsigned_int swig_types[74]
|
1878
|
+
#define SWIGTYPE_p_unsigned_long swig_types[75]
|
1879
|
+
#define SWIGTYPE_p_unsigned_long_long swig_types[76]
|
1880
|
+
#define SWIGTYPE_p_unsigned_short swig_types[77]
|
1881
|
+
#define SWIGTYPE_p_void swig_types[78]
|
1882
|
+
static swig_type_info *swig_types[80];
|
1883
|
+
static swig_module_info swig_module = {swig_types, 79, 0, 0, 0, 0};
|
1883
1884
|
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
|
1884
1885
|
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
|
1885
1886
|
|
@@ -2160,18 +2161,19 @@ SWIG_From_bool (bool value)
|
|
2160
2161
|
}
|
2161
2162
|
|
2162
2163
|
|
2163
|
-
#if defined(
|
2164
|
+
#if defined(RUBY_USE_rb_thread_call_without_gvl)
|
2164
2165
|
|
2166
|
+
#include <ruby/thread.h>
|
2165
2167
|
typedef void *non_blocking_return_t;
|
2166
|
-
#define RB_BLOCKING_CALL rb_thread_call_without_gvl
|
2168
|
+
#define RB_BLOCKING_CALL (VALUE)rb_thread_call_without_gvl
|
2167
2169
|
|
2168
|
-
#elif defined(
|
2170
|
+
#elif defined(RUBY_USE_rb_thread_blocking_region)
|
2169
2171
|
|
2170
|
-
|
2171
|
-
#define RB_BLOCKING_CALL rb_thread_blocking_region
|
2172
|
+
typedef VALUE non_blocking_return_t;
|
2173
|
+
#define RB_BLOCKING_CALL rb_thread_blocking_region
|
2172
2174
|
|
2173
2175
|
#endif
|
2174
|
-
|
2176
|
+
|
2175
2177
|
|
2176
2178
|
|
2177
2179
|
#if defined(RB_BLOCKING_CALL)
|
@@ -21143,6 +21145,30 @@ fail:
|
|
21143
21145
|
}
|
21144
21146
|
|
21145
21147
|
|
21148
|
+
SWIGINTERN VALUE
|
21149
|
+
_wrap_pn_connection_driver_ptr(int argc, VALUE *argv, VALUE self) {
|
21150
|
+
pn_connection_t *arg1 = (pn_connection_t *) 0 ;
|
21151
|
+
void *argp1 = 0 ;
|
21152
|
+
int res1 = 0 ;
|
21153
|
+
pn_connection_driver_t **result = 0 ;
|
21154
|
+
VALUE vresult = Qnil;
|
21155
|
+
|
21156
|
+
if ((argc < 1) || (argc > 1)) {
|
21157
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
|
21158
|
+
}
|
21159
|
+
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_pn_connection_t, 0 | 0 );
|
21160
|
+
if (!SWIG_IsOK(res1)) {
|
21161
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "pn_connection_t *","pn_connection_driver_ptr", 1, argv[0] ));
|
21162
|
+
}
|
21163
|
+
arg1 = (pn_connection_t *)(argp1);
|
21164
|
+
result = (pn_connection_driver_t **)pn_connection_driver_ptr(arg1);
|
21165
|
+
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_pn_connection_driver_t, 0 | 0 );
|
21166
|
+
return vresult;
|
21167
|
+
fail:
|
21168
|
+
return Qnil;
|
21169
|
+
}
|
21170
|
+
|
21171
|
+
|
21146
21172
|
SWIGINTERN VALUE
|
21147
21173
|
_wrap_pn_url(int argc, VALUE *argv, VALUE self) {
|
21148
21174
|
pn_url_t *result = 0 ;
|
@@ -23070,6 +23096,7 @@ static swig_type_info _swigt__p_intptr_t = {"_p_intptr_t", "intptr_t *|pn_shandl
|
|
23070
23096
|
static swig_type_info _swigt__p_long = {"_p_long", "int32_t *|long *|pn_sequence_t *", 0, 0, (void*)0, 0};
|
23071
23097
|
static swig_type_info _swigt__p_long_long = {"_p_long_long", "int64_t *|long long *|pn_tracker_t *|pn_timestamp_t *", 0, 0, (void*)0, 0};
|
23072
23098
|
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
|
23099
|
+
static swig_type_info _swigt__p_p_pn_connection_driver_t = {"_p_p_pn_connection_driver_t", "struct pn_connection_driver_t **|pn_connection_driver_t **", 0, 0, (void*)0, 0};
|
23073
23100
|
static swig_type_info _swigt__p_pn_acceptor_t = {"_p_pn_acceptor_t", "struct pn_acceptor_t *|pn_acceptor_t *", 0, 0, (void*)0, 0};
|
23074
23101
|
static swig_type_info _swigt__p_pn_atom_t = {"_p_pn_atom_t", "pn_atom_t *", 0, 0, (void*)0, 0};
|
23075
23102
|
static swig_type_info _swigt__p_pn_bytes_t = {"_p_pn_bytes_t", "struct pn_bytes_t *|pn_bytes_t *", 0, 0, (void*)0, 0};
|
@@ -23150,6 +23177,7 @@ static swig_type_info *swig_type_initial[] = {
|
|
23150
23177
|
&_swigt__p_long,
|
23151
23178
|
&_swigt__p_long_long,
|
23152
23179
|
&_swigt__p_p_char,
|
23180
|
+
&_swigt__p_p_pn_connection_driver_t,
|
23153
23181
|
&_swigt__p_pn_acceptor_t,
|
23154
23182
|
&_swigt__p_pn_atom_t,
|
23155
23183
|
&_swigt__p_pn_bytes_t,
|
@@ -23230,6 +23258,7 @@ static swig_cast_info _swigc__p_intptr_t[] = { {&_swigt__p_intptr_t, 0, 0, 0},{
|
|
23230
23258
|
static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}};
|
23231
23259
|
static swig_cast_info _swigc__p_long_long[] = { {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}};
|
23232
23260
|
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
|
23261
|
+
static swig_cast_info _swigc__p_p_pn_connection_driver_t[] = { {&_swigt__p_p_pn_connection_driver_t, 0, 0, 0},{0, 0, 0, 0}};
|
23233
23262
|
static swig_cast_info _swigc__p_pn_acceptor_t[] = { {&_swigt__p_pn_acceptor_t, 0, 0, 0},{0, 0, 0, 0}};
|
23234
23263
|
static swig_cast_info _swigc__p_pn_atom_t[] = { {&_swigt__p_pn_atom_t, 0, 0, 0},{0, 0, 0, 0}};
|
23235
23264
|
static swig_cast_info _swigc__p_pn_bytes_t[] = { {&_swigt__p_pn_bytes_t, 0, 0, 0},{0, 0, 0, 0}};
|
@@ -23310,6 +23339,7 @@ static swig_cast_info *swig_cast_initial[] = {
|
|
23310
23339
|
_swigc__p_long,
|
23311
23340
|
_swigc__p_long_long,
|
23312
23341
|
_swigc__p_p_char,
|
23342
|
+
_swigc__p_p_pn_connection_driver_t,
|
23313
23343
|
_swigc__p_pn_acceptor_t,
|
23314
23344
|
_swigc__p_pn_atom_t,
|
23315
23345
|
_swigc__p_pn_bytes_t,
|
@@ -23681,7 +23711,7 @@ SWIGEXPORT void Init_cproton(void) {
|
|
23681
23711
|
rb_define_module_function(mCproton, "pni_connection_driver", _wrap_pni_connection_driver, -1);
|
23682
23712
|
rb_define_const(mCproton, "PROTON_IMPORT_EXPORT_H", SWIG_From_int((int)(1)));
|
23683
23713
|
rb_define_const(mCproton, "PN_VERSION_MAJOR", SWIG_From_int((int)(0)));
|
23684
|
-
rb_define_const(mCproton, "PN_VERSION_MINOR", SWIG_From_int((int)(
|
23714
|
+
rb_define_const(mCproton, "PN_VERSION_MINOR", SWIG_From_int((int)(21)));
|
23685
23715
|
rb_define_const(mCproton, "PN_VERSION_POINT", SWIG_From_int((int)(0)));
|
23686
23716
|
rb_define_const(mCproton, "PROTON_TYPES_H", SWIG_From_int((int)(1)));
|
23687
23717
|
rb_define_const(mCproton, "PN_MILLIS_MAX", SWIG_From_unsigned_SS_int((unsigned int)((~0U))));
|
@@ -24487,6 +24517,7 @@ SWIGEXPORT void Init_cproton(void) {
|
|
24487
24517
|
rb_define_module_function(mCproton, "pn_connection_driver_errorf", _wrap_pn_connection_driver_errorf, -1);
|
24488
24518
|
rb_define_module_function(mCproton, "pn_event_batch_connection_driver", _wrap_pn_event_batch_connection_driver, -1);
|
24489
24519
|
rb_define_module_function(mCproton, "pn_connection_driver_log", _wrap_pn_connection_driver_log, -1);
|
24520
|
+
rb_define_module_function(mCproton, "pn_connection_driver_ptr", _wrap_pn_connection_driver_ptr, -1);
|
24490
24521
|
rb_define_const(mCproton, "PROTON_URL_H", SWIG_From_int((int)(1)));
|
24491
24522
|
rb_define_module_function(mCproton, "pn_url", _wrap_pn_url, -1);
|
24492
24523
|
rb_define_module_function(mCproton, "pn_url_parse", _wrap_pn_url_parse, -1);
|
data/lib/core/container.rb
CHANGED
@@ -125,7 +125,8 @@ module Qpid::Proton
|
|
125
125
|
# - nil on the @work queue makes a #run thread exit
|
126
126
|
|
127
127
|
@work = Queue.new
|
128
|
-
@work << :start
|
128
|
+
@work << :start
|
129
|
+
@work << self # Issue start and start start selecting
|
129
130
|
@wake = IO.pipe # Wakes #run thread in IO.select
|
130
131
|
@auto_stop = true # Stop when @active drops to 0
|
131
132
|
|
data/lib/core/ssl_domain.rb
CHANGED
@@ -48,7 +48,7 @@ module Qpid::Proton
|
|
48
48
|
# @private
|
49
49
|
def initialize(mode)
|
50
50
|
@impl = Cproton.pn_ssl_domain(mode)
|
51
|
-
raise
|
51
|
+
raise Qpid::Proton::SSLError, "SSL Unavailable" if @impl.nil?
|
52
52
|
end
|
53
53
|
|
54
54
|
# Set the certificate that identifies the local node to the remote.
|
data/lib/core/uri.rb
CHANGED
@@ -37,9 +37,15 @@ module URI
|
|
37
37
|
end
|
38
38
|
|
39
39
|
module Qpid::Proton
|
40
|
-
|
40
|
+
private
|
41
|
+
# Make sure to allow empty hostnames, Ruby 2.0.0 does not.
|
42
|
+
DEFAULT_URI_PARSER = URI::Parser.new(:HOSTNAME => /(?:#{URI::PATTERN::HOSTNAME})|/)
|
43
|
+
|
44
|
+
public
|
45
|
+
|
46
|
+
# Convert +s+ to a {URI::AMQP} or {URI::AMQPS} object
|
41
47
|
#
|
42
|
-
# Shortcut strings are allowed: an "amqp://" prefix is added if +s+ does
|
48
|
+
# Shortcut strings like "host:port" are allowed: an "amqp://" prefix is added if +s+ does
|
43
49
|
# not already look like an 'amqp:', 'amqps:' URI.
|
44
50
|
#
|
45
51
|
# @note this does not give the same result as a standard URI parser in all cases.
|
@@ -54,19 +60,19 @@ module Qpid::Proton
|
|
54
60
|
#
|
55
61
|
def self.uri(s)
|
56
62
|
case s
|
57
|
-
|
58
|
-
when URI::Generic
|
59
|
-
s.scheme ||= 'amqp'
|
60
|
-
u =
|
63
|
+
when URI::AMQP then s # This is already an AMQP or AMQPS URL.
|
64
|
+
when URI::Generic # Re-parse a generic URI that was not parsed as AMQP/AMQPS class
|
65
|
+
s.scheme ||= 'amqp' # Default to amqp: scheme
|
66
|
+
u = DEFAULT_URI_PARSER.parse(s.to_s)
|
61
67
|
raise URI::BadURIError, "Not an AMQP URI: '#{u}'" unless u.is_a? URI::AMQP
|
62
68
|
u
|
63
69
|
else
|
64
70
|
s = String.try_convert s
|
65
71
|
raise ::ArgumentError, "bad argument (expected URI object or URI string)" unless s
|
66
72
|
case s
|
67
|
-
when %r{^amqps?:} then
|
68
|
-
when %r{^//} then
|
69
|
-
else
|
73
|
+
when %r{^amqps?:} then DEFAULT_URI_PARSER.parse(s) # Looks like an AMQP URI
|
74
|
+
when %r{^//} then DEFAULT_URI_PARSER.parse("amqp:#{s}") # Looks like an authority with no scheme
|
75
|
+
else DEFAULT_URI_PARSER.parse("amqp://#{s}") # Treat as a bare host:port/path string
|
70
76
|
end
|
71
77
|
end
|
72
78
|
end
|