onstomp 1.0.0pre1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +1 -1
- data/Rakefile +8 -0
- data/examples/openuri.rb +36 -0
- data/lib/onstomp.rb +4 -0
- data/lib/onstomp/client.rb +6 -5
- data/lib/onstomp/components.rb +0 -1
- data/lib/onstomp/components/frame_headers.rb +35 -38
- data/lib/onstomp/components/threaded_processor.rb +13 -0
- data/lib/onstomp/connections/base.rb +15 -8
- data/lib/onstomp/connections/stomp_1.rb +0 -6
- data/lib/onstomp/connections/stomp_1_0.rb +8 -0
- data/lib/onstomp/connections/stomp_1_1.rb +8 -0
- data/lib/onstomp/failover.rb +16 -0
- data/lib/onstomp/failover/buffers.rb +8 -0
- data/lib/onstomp/failover/buffers/written.rb +91 -0
- data/lib/onstomp/failover/client.rb +127 -0
- data/lib/onstomp/failover/failover_configurable.rb +63 -0
- data/lib/onstomp/failover/failover_events.rb +96 -0
- data/lib/onstomp/failover/new_with_failover.rb +20 -0
- data/lib/onstomp/failover/pools.rb +8 -0
- data/lib/onstomp/failover/pools/base.rb +39 -0
- data/lib/onstomp/failover/pools/round_robin.rb +17 -0
- data/lib/onstomp/failover/uri.rb +34 -0
- data/lib/onstomp/interfaces/client_configurable.rb +2 -6
- data/lib/onstomp/interfaces/client_events.rb +4 -0
- data/lib/onstomp/interfaces/connection_events.rb +3 -3
- data/lib/onstomp/interfaces/event_manager.rb +8 -0
- data/lib/onstomp/interfaces/uri_configurable.rb +7 -7
- data/lib/onstomp/open-uri.rb +37 -0
- data/lib/onstomp/open-uri/client_extensions.rb +88 -0
- data/lib/onstomp/open-uri/message_queue.rb +38 -0
- data/lib/onstomp/version.rb +1 -1
- data/spec/onstomp/client_spec.rb +1 -4
- data/spec/onstomp/components/frame_headers_spec.rb +2 -5
- data/spec/onstomp/connections/stomp_1_0_spec.rb +22 -0
- data/spec/onstomp/connections/stomp_1_1_spec.rb +22 -0
- data/spec/onstomp/connections/stomp_1_spec.rb +2 -19
- data/spec/onstomp/connections_spec.rb +4 -0
- data/spec/onstomp/failover/buffers/written_spec.rb +8 -0
- data/spec/onstomp/failover/client_spec.rb +38 -0
- data/spec/onstomp/failover/failover_events_spec.rb +75 -0
- data/spec/onstomp/failover/new_with_failover_spec.rb +16 -0
- data/spec/onstomp/failover/pools/base_spec.rb +54 -0
- data/spec/onstomp/failover/pools/round_robin_spec.rb +27 -0
- data/spec/onstomp/failover/uri_spec.rb +21 -0
- data/spec/onstomp/full_stacks/failover_spec.rb +55 -0
- data/spec/onstomp/full_stacks/onstomp_spec.rb +15 -0
- data/spec/onstomp/full_stacks/open-uri_spec.rb +40 -0
- data/spec/onstomp/full_stacks/ssl/README +6 -0
- data/spec/onstomp/full_stacks/ssl/broker_cert.csr +17 -0
- data/spec/onstomp/full_stacks/ssl/broker_cert.pem +72 -0
- data/spec/onstomp/full_stacks/ssl/broker_key.pem +27 -0
- data/spec/onstomp/full_stacks/ssl/client_cert.csr +17 -0
- data/spec/onstomp/full_stacks/ssl/client_cert.pem +72 -0
- data/spec/onstomp/full_stacks/ssl/client_key.pem +27 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/cacert.pem +17 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/index.txt +2 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/index.txt.attr +1 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/index.txt.attr.old +1 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/index.txt.old +1 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/newcerts/01.pem +72 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/newcerts/02.pem +72 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/private/cakey.pem +17 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/serial +1 -0
- data/spec/onstomp/full_stacks/ssl/demoCA/serial.old +1 -0
- data/spec/onstomp/full_stacks/test_broker.rb +251 -0
- data/spec/onstomp/interfaces/connection_events_spec.rb +3 -1
- data/spec/onstomp/open-uri/client_extensions_spec.rb +113 -0
- data/spec/onstomp/open-uri/message_queue_spec.rb +29 -0
- data/spec/onstomp/open-uri_spec.rb +43 -0
- data/spec/spec_helper.rb +2 -0
- data/yard_extensions.rb +5 -1
- metadata +82 -8
- data/lib/onstomp/components/nil_processor.rb +0 -20
- data/spec/onstomp/components/nil_processor_spec.rb +0 -32
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEogIBAAKCAQEAr2Kt6gsrPaYO40qytboypatf8vBagyJM/wWdviW7aGH1Vi4i
|
3
|
+
nCv5O6KXN6o3F0DNEpd2cxkkxVl4RUVdK5zf6dJW11y5ylNzoWJw31Kv+31rt2h6
|
4
|
+
CGjoSqta6eakzTidLlVREUg8K1eoVTdCEQzpLOd500zILp6SStyLZnm/YuB1Sdc3
|
5
|
+
Yk46R3rAL3WMKHBQiCSueusvpndgZHcN4sJO5WIF+icgXFNygBbmr/U1WqlqX2AF
|
6
|
+
Ktj+qaQtqsSBNfxRinyfDEDqQGGH7ApgOUQusPZ3eQG2vxXSZc1q5CEFWVPZauc3
|
7
|
+
6s6jsc/DcPwsQD0Sv/mEMsqDxuU9qij/eJ0DFwIDAQABAoIBAGSLes541rJB97kA
|
8
|
+
AtHBy/VD+P6qIgmZaXCuBI+UzAp8Vgyw6DCF2R0CChTkZS7UfHxTDpnPaVAmCZgU
|
9
|
+
uuQczBUc+6H9S5mdG+YCLFkq6y6O6Wi84XDey4S7FaSQEByCf0GnsZDpy2zBlQQ9
|
10
|
+
aIej0i1nCmVDWGO5jn6STuxRkZGZz0+BPEe0kdZIGDl1NvBVy55Vpy4x2ccYa80D
|
11
|
+
yZycWtkO65x0RKAZhnaVdDD1vbdvEGPlEmCsoGXn2ahx4AcuZPOIxSz9izksL9zy
|
12
|
+
kraOBz5p5UX8MIOyx8xpKk3hYQRLaRTrpWtwJNJsLiNWozbCLcFvVuukyxYE6zRG
|
13
|
+
NEc8/+kCgYEA1MmdocWY4nrUC1l4dv9rPwh5Z2/zt7N2CeafaJ4YSh69SUKzeBHC
|
14
|
+
J79xvHA0b8cmEQyJ4BUJgLMm85ofi3f6pws8pPA6fLlwg+SeqLo9bjDNqIwEHvf/
|
15
|
+
EVSmvJLQ11lUFauKziMyGPF1gYIbFUO/yXWGjEnRkEHQ/BRbZO/SmWMCgYEA0wCb
|
16
|
+
L693uqzMHErXeYswAk9YDrbnsCSKOiSxoJdc8C6TUQ56YA5YsWovlNc8s+gs9Vhw
|
17
|
+
6u5yhkdhaMA9AYJbHcCdw33w2p/PFTuau+ydKs5VMf+ruNo7yliWPON4e9s3KHIm
|
18
|
+
NRabQJ7c5qAIKbiwk6prm2uL7s5Ved2VWG5Ut70CgYAGytjJTTFwKVOTeSurQMP/
|
19
|
+
oxmc/6nb91KRRldYU5Oa6hhIumRYNNjpw+axiTNjTgwdBzVvfbxr60wXAph3L0FF
|
20
|
+
C8rHyRNU3+aDj0yxPiCv38bw1mdbRbdSqk0YP+eCuEtC1dL8eYsj2LFTjP+oUh1R
|
21
|
+
JPtChyi1XiR5p3yzYCRs2QKBgFYtxjRIt18AGnFnw+/5gEdBPtbrr19K3UX4HLBZ
|
22
|
+
gfT7IOIXRrYaxfDYTMy+yCU2q74dPClH8HCVkNxmv8PxCOPy+ryQoKG6aarjaERe
|
23
|
+
1KZaFYPRR8K9J3RykBIYWepEU5fqX16JeCmBePmc3RilPUFidobI+yMzFMgsT0YJ
|
24
|
+
8gIFAoGAJFIE2FM3VyO4NGwcz4HDYRs/v+vFIw3uzm41YEU4NgTch5YM9dPveXrg
|
25
|
+
q+pvPHaFQNpA3y/MgKKsvjO02NiiDvpZsH0s7y+Im5rnpa4kxEilgT5mkkZl0YOO
|
26
|
+
nqjkRbifWeSOYh5MnGGdMGlcmqjoJHidFJ1LD6867FqpEvgSGek=
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,17 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICujCCAiOgAwIBAgIJAPxr+ytdcmk7MA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
|
3
|
+
BAYTAlVTMREwDwYDVQQIDAhOb3doZXJlczEQMA4GA1UEBwwHU3RvbXBlcjEYMBYG
|
4
|
+
A1UECgwPU3RvbXBlciBUZXN0aW5nMRMwEQYDVQQLDApDQSBUZXN0aW5nMRMwEQYD
|
5
|
+
VQQDDApTdG9tcGVyIENBMB4XDTExMDIyMTE2NDk0OVoXDTIxMDIxODE2NDk0OVow
|
6
|
+
djELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5vd2hlcmVzMRAwDgYDVQQHDAdTdG9t
|
7
|
+
cGVyMRgwFgYDVQQKDA9TdG9tcGVyIFRlc3RpbmcxEzARBgNVBAsMCkNBIFRlc3Rp
|
8
|
+
bmcxEzARBgNVBAMMClN0b21wZXIgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
|
9
|
+
AoGBAKU9pySr+X6uFFTV3SMP4BV31u9PiU17UATEIIEj7jRmDWR9i9oxf7+k1+L0
|
10
|
+
OzORjug10Bt27teD2JcWKTCSpO5uHJ3/uRpcqViECzdJtWXcG+s253Jj2xJRcBi4
|
11
|
+
TBXP/VFsKYbHGYmA57GQzcaaXqptvQq7fuqsfgxqr82w83K7AgMBAAGjUDBOMB0G
|
12
|
+
A1UdDgQWBBR8T1C/xleXa9kc8ZLvtWZHlHkVdDAfBgNVHSMEGDAWgBR8T1C/xleX
|
13
|
+
a9kc8ZLvtWZHlHkVdDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAArO
|
14
|
+
OvHvpbafdbxqVv6R9vch06hbPdtVh5pcM2AsNGfn3MhD9VmIAkrPgbVHHN8d9lFS
|
15
|
+
MVZbnyGtkiJoZTlJV9tPD4Nq/aGSePu+U4gtFNRmD+wvh5VREcrOloqN4lX8/h2N
|
16
|
+
aFMdwQa7qRZ40L/4RLslb5ZsiiFihbk9pY+AOD+d
|
17
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1 @@
|
|
1
|
+
unique_subject = yes
|
@@ -0,0 +1 @@
|
|
1
|
+
unique_subject = yes
|
@@ -0,0 +1 @@
|
|
1
|
+
V 210218165001Z 01 unknown /C=US/ST=Nowheres/O=Stomper Testing/OU=SSL Testing/CN=My Broker
|
@@ -0,0 +1,72 @@
|
|
1
|
+
Certificate:
|
2
|
+
Data:
|
3
|
+
Version: 3 (0x2)
|
4
|
+
Serial Number: 1 (0x1)
|
5
|
+
Signature Algorithm: sha1WithRSAEncryption
|
6
|
+
Issuer: C=US, ST=Nowheres, L=Stomper, O=Stomper Testing, OU=CA Testing, CN=Stomper CA
|
7
|
+
Validity
|
8
|
+
Not Before: Feb 21 16:50:01 2011 GMT
|
9
|
+
Not After : Feb 18 16:50:01 2021 GMT
|
10
|
+
Subject: C=US, ST=Nowheres, O=Stomper Testing, OU=SSL Testing, CN=My Broker
|
11
|
+
Subject Public Key Info:
|
12
|
+
Public Key Algorithm: rsaEncryption
|
13
|
+
Public-Key: (2048 bit)
|
14
|
+
Modulus:
|
15
|
+
00:eb:dd:be:2d:87:54:13:ce:4c:e1:bd:c9:c8:e0:
|
16
|
+
18:b0:50:f1:30:c8:6e:22:7a:bc:c6:ea:3f:e2:c4:
|
17
|
+
24:d9:8c:41:94:54:d4:e0:7b:5c:6c:dd:bd:41:8f:
|
18
|
+
bd:aa:98:c2:f0:e9:13:7e:36:5a:97:57:e4:6a:04:
|
19
|
+
08:aa:12:2b:68:4b:9d:5a:40:92:41:57:5b:2e:d2:
|
20
|
+
e1:f4:f8:c4:31:dd:6c:2d:4c:12:ab:80:72:71:39:
|
21
|
+
4e:aa:14:b8:f6:35:e8:07:9f:a2:a3:b8:a6:08:8d:
|
22
|
+
60:d5:53:01:38:8c:aa:17:e9:b0:b3:8c:e3:d9:4d:
|
23
|
+
14:02:da:9a:ff:6f:5b:65:ba:c3:56:80:b0:de:8e:
|
24
|
+
c8:25:3f:1b:a0:ac:80:1c:38:e0:77:4e:c6:5d:92:
|
25
|
+
44:97:c3:f8:ba:9a:02:83:a8:1b:57:3b:38:d6:7d:
|
26
|
+
7f:95:86:f4:c2:de:51:d0:ee:a1:30:b4:39:9a:f6:
|
27
|
+
58:03:62:93:94:a5:72:72:a2:5c:7e:cf:54:7f:57:
|
28
|
+
92:46:f8:f7:b1:79:56:20:bd:95:25:d5:11:5d:c0:
|
29
|
+
5c:c7:cd:cf:44:8f:88:68:e1:6f:c0:ca:2e:db:fc:
|
30
|
+
d0:19:82:36:b1:3f:20:82:df:ce:a6:55:44:02:51:
|
31
|
+
8b:6c:4f:a1:26:b3:41:e8:0b:a8:0c:8f:67:65:92:
|
32
|
+
ee:df
|
33
|
+
Exponent: 65537 (0x10001)
|
34
|
+
X509v3 extensions:
|
35
|
+
X509v3 Basic Constraints:
|
36
|
+
CA:FALSE
|
37
|
+
Netscape Comment:
|
38
|
+
OpenSSL Generated Certificate
|
39
|
+
X509v3 Subject Key Identifier:
|
40
|
+
5C:28:4D:B8:A3:D7:CB:43:2C:1C:DB:0F:7B:75:99:85:44:4E:D8:A1
|
41
|
+
X509v3 Authority Key Identifier:
|
42
|
+
keyid:7C:4F:50:BF:C6:57:97:6B:D9:1C:F1:92:EF:B5:66:47:94:79:15:74
|
43
|
+
|
44
|
+
Signature Algorithm: sha1WithRSAEncryption
|
45
|
+
51:2f:da:d1:a4:9f:97:77:00:69:bb:04:85:34:75:bd:2e:ad:
|
46
|
+
45:83:a7:95:f1:83:5d:52:1e:65:79:ee:5b:a0:f5:7b:82:53:
|
47
|
+
88:c3:fc:89:c8:4f:68:4e:80:8a:cb:53:4f:44:a8:6d:8c:be:
|
48
|
+
be:74:19:ff:75:52:14:3b:70:42:87:cf:fc:90:58:7e:c9:cd:
|
49
|
+
d4:a2:b8:15:74:e8:51:ce:9c:73:ca:a5:29:76:4a:f3:a4:26:
|
50
|
+
f3:70:c5:8e:5f:cf:fe:7d:81:de:43:9e:36:c0:87:7b:66:02:
|
51
|
+
7f:02:2d:64:48:19:be:74:4a:27:cd:c5:56:c5:ff:96:1a:02:
|
52
|
+
3a:2f
|
53
|
+
-----BEGIN CERTIFICATE-----
|
54
|
+
MIIDTzCCArigAwIBAgIBATANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJVUzER
|
55
|
+
MA8GA1UECAwITm93aGVyZXMxEDAOBgNVBAcMB1N0b21wZXIxGDAWBgNVBAoMD1N0
|
56
|
+
b21wZXIgVGVzdGluZzETMBEGA1UECwwKQ0EgVGVzdGluZzETMBEGA1UEAwwKU3Rv
|
57
|
+
bXBlciBDQTAeFw0xMTAyMjExNjUwMDFaFw0yMTAyMTgxNjUwMDFaMGQxCzAJBgNV
|
58
|
+
BAYTAlVTMREwDwYDVQQIDAhOb3doZXJlczEYMBYGA1UECgwPU3RvbXBlciBUZXN0
|
59
|
+
aW5nMRQwEgYDVQQLDAtTU0wgVGVzdGluZzESMBAGA1UEAwwJTXkgQnJva2VyMIIB
|
60
|
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA692+LYdUE85M4b3JyOAYsFDx
|
61
|
+
MMhuInq8xuo/4sQk2YxBlFTU4HtcbN29QY+9qpjC8OkTfjZal1fkagQIqhIraEud
|
62
|
+
WkCSQVdbLtLh9PjEMd1sLUwSq4BycTlOqhS49jXoB5+io7imCI1g1VMBOIyqF+mw
|
63
|
+
s4zj2U0UAtqa/29bZbrDVoCw3o7IJT8boKyAHDjgd07GXZJEl8P4upoCg6gbVzs4
|
64
|
+
1n1/lYb0wt5R0O6hMLQ5mvZYA2KTlKVycqJcfs9Uf1eSRvj3sXlWIL2VJdURXcBc
|
65
|
+
x83PRI+IaOFvwMou2/zQGYI2sT8ggt/OplVEAlGLbE+hJrNB6AuoDI9nZZLu3wID
|
66
|
+
AQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy
|
67
|
+
YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUXChNuKPXy0MsHNsPe3WZhURO2KEw
|
68
|
+
HwYDVR0jBBgwFoAUfE9Qv8ZXl2vZHPGS77VmR5R5FXQwDQYJKoZIhvcNAQEFBQAD
|
69
|
+
gYEAUS/a0aSfl3cAabsEhTR1vS6tRYOnlfGDXVIeZXnuW6D1e4JTiMP8ichPaE6A
|
70
|
+
istTT0SobYy+vnQZ/3VSFDtwQofP/JBYfsnN1KK4FXToUc6cc8qlKXZK86Qm83DF
|
71
|
+
jl/P/n2B3kOeNsCHe2YCfwItZEgZvnRKJ83FVsX/lhoCOi8=
|
72
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,72 @@
|
|
1
|
+
Certificate:
|
2
|
+
Data:
|
3
|
+
Version: 3 (0x2)
|
4
|
+
Serial Number: 2 (0x2)
|
5
|
+
Signature Algorithm: sha1WithRSAEncryption
|
6
|
+
Issuer: C=US, ST=Nowheres, L=Stomper, O=Stomper Testing, OU=CA Testing, CN=Stomper CA
|
7
|
+
Validity
|
8
|
+
Not Before: Feb 21 16:57:25 2011 GMT
|
9
|
+
Not After : Feb 18 16:57:25 2021 GMT
|
10
|
+
Subject: C=US, ST=Nowheres, O=Stomper Testing, OU=SSL Testing, CN=My Client
|
11
|
+
Subject Public Key Info:
|
12
|
+
Public Key Algorithm: rsaEncryption
|
13
|
+
Public-Key: (2048 bit)
|
14
|
+
Modulus:
|
15
|
+
00:af:62:ad:ea:0b:2b:3d:a6:0e:e3:4a:b2:b5:ba:
|
16
|
+
32:a5:ab:5f:f2:f0:5a:83:22:4c:ff:05:9d:be:25:
|
17
|
+
bb:68:61:f5:56:2e:22:9c:2b:f9:3b:a2:97:37:aa:
|
18
|
+
37:17:40:cd:12:97:76:73:19:24:c5:59:78:45:45:
|
19
|
+
5d:2b:9c:df:e9:d2:56:d7:5c:b9:ca:53:73:a1:62:
|
20
|
+
70:df:52:af:fb:7d:6b:b7:68:7a:08:68:e8:4a:ab:
|
21
|
+
5a:e9:e6:a4:cd:38:9d:2e:55:51:11:48:3c:2b:57:
|
22
|
+
a8:55:37:42:11:0c:e9:2c:e7:79:d3:4c:c8:2e:9e:
|
23
|
+
92:4a:dc:8b:66:79:bf:62:e0:75:49:d7:37:62:4e:
|
24
|
+
3a:47:7a:c0:2f:75:8c:28:70:50:88:24:ae:7a:eb:
|
25
|
+
2f:a6:77:60:64:77:0d:e2:c2:4e:e5:62:05:fa:27:
|
26
|
+
20:5c:53:72:80:16:e6:af:f5:35:5a:a9:6a:5f:60:
|
27
|
+
05:2a:d8:fe:a9:a4:2d:aa:c4:81:35:fc:51:8a:7c:
|
28
|
+
9f:0c:40:ea:40:61:87:ec:0a:60:39:44:2e:b0:f6:
|
29
|
+
77:79:01:b6:bf:15:d2:65:cd:6a:e4:21:05:59:53:
|
30
|
+
d9:6a:e7:37:ea:ce:a3:b1:cf:c3:70:fc:2c:40:3d:
|
31
|
+
12:bf:f9:84:32:ca:83:c6:e5:3d:aa:28:ff:78:9d:
|
32
|
+
03:17
|
33
|
+
Exponent: 65537 (0x10001)
|
34
|
+
X509v3 extensions:
|
35
|
+
X509v3 Basic Constraints:
|
36
|
+
CA:FALSE
|
37
|
+
Netscape Comment:
|
38
|
+
OpenSSL Generated Certificate
|
39
|
+
X509v3 Subject Key Identifier:
|
40
|
+
7A:FC:5D:4F:48:8F:41:43:EA:E5:A6:14:2D:30:19:E5:63:70:43:5C
|
41
|
+
X509v3 Authority Key Identifier:
|
42
|
+
keyid:7C:4F:50:BF:C6:57:97:6B:D9:1C:F1:92:EF:B5:66:47:94:79:15:74
|
43
|
+
|
44
|
+
Signature Algorithm: sha1WithRSAEncryption
|
45
|
+
75:80:be:12:d8:7d:64:78:1f:62:97:a9:cd:0a:84:89:15:43:
|
46
|
+
ca:5b:a3:72:77:73:f1:aa:06:59:15:75:0b:1b:7d:79:c3:9f:
|
47
|
+
d5:3d:e5:70:df:64:ec:a4:27:d9:a3:49:02:b0:75:89:bd:dc:
|
48
|
+
9b:c4:79:33:14:38:93:2b:d8:3c:01:e6:d0:2a:56:06:6a:ba:
|
49
|
+
49:56:5a:f7:6c:49:dd:b0:5c:49:be:68:09:7d:75:2e:9f:49:
|
50
|
+
ed:e1:1e:49:6b:f1:cc:1c:1c:be:1e:ac:a9:ee:44:7b:15:32:
|
51
|
+
e0:b1:a6:9c:48:a4:1c:5a:55:66:0f:86:95:c0:02:e8:b7:a8:
|
52
|
+
b9:9d
|
53
|
+
-----BEGIN CERTIFICATE-----
|
54
|
+
MIIDTzCCArigAwIBAgIBAjANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJVUzER
|
55
|
+
MA8GA1UECAwITm93aGVyZXMxEDAOBgNVBAcMB1N0b21wZXIxGDAWBgNVBAoMD1N0
|
56
|
+
b21wZXIgVGVzdGluZzETMBEGA1UECwwKQ0EgVGVzdGluZzETMBEGA1UEAwwKU3Rv
|
57
|
+
bXBlciBDQTAeFw0xMTAyMjExNjU3MjVaFw0yMTAyMTgxNjU3MjVaMGQxCzAJBgNV
|
58
|
+
BAYTAlVTMREwDwYDVQQIDAhOb3doZXJlczEYMBYGA1UECgwPU3RvbXBlciBUZXN0
|
59
|
+
aW5nMRQwEgYDVQQLDAtTU0wgVGVzdGluZzESMBAGA1UEAwwJTXkgQ2xpZW50MIIB
|
60
|
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr2Kt6gsrPaYO40qytboypatf
|
61
|
+
8vBagyJM/wWdviW7aGH1Vi4inCv5O6KXN6o3F0DNEpd2cxkkxVl4RUVdK5zf6dJW
|
62
|
+
11y5ylNzoWJw31Kv+31rt2h6CGjoSqta6eakzTidLlVREUg8K1eoVTdCEQzpLOd5
|
63
|
+
00zILp6SStyLZnm/YuB1Sdc3Yk46R3rAL3WMKHBQiCSueusvpndgZHcN4sJO5WIF
|
64
|
+
+icgXFNygBbmr/U1WqlqX2AFKtj+qaQtqsSBNfxRinyfDEDqQGGH7ApgOUQusPZ3
|
65
|
+
eQG2vxXSZc1q5CEFWVPZauc36s6jsc/DcPwsQD0Sv/mEMsqDxuU9qij/eJ0DFwID
|
66
|
+
AQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy
|
67
|
+
YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUevxdT0iPQUPq5aYULTAZ5WNwQ1ww
|
68
|
+
HwYDVR0jBBgwFoAUfE9Qv8ZXl2vZHPGS77VmR5R5FXQwDQYJKoZIhvcNAQEFBQAD
|
69
|
+
gYEAdYC+Eth9ZHgfYpepzQqEiRVDylujcndz8aoGWRV1Cxt9ecOf1T3lcN9k7KQn
|
70
|
+
2aNJArB1ib3cm8R5MxQ4kyvYPAHm0CpWBmq6SVZa92xJ3bBcSb5oCX11Lp9J7eEe
|
71
|
+
SWvxzBwcvh6sqe5EexUy4LGmnEikHFpVZg+GlcAC6LeouZ0=
|
72
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,17 @@
|
|
1
|
+
-----BEGIN ENCRYPTED PRIVATE KEY-----
|
2
|
+
MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIfpo+T6ZjqGYCAggA
|
3
|
+
MBQGCCqGSIb3DQMHBAgAjGO3xvusBASCAoBsphz6kWs5lU85No2RFHrsOmPE6Hbz
|
4
|
+
JwUoc24za/Fxf+/ZkBS/E4ENSuCEBrhbUD2OkTRljG6XsyxFm2Do+SjrAAqy79yk
|
5
|
+
teuuhwDr32hLlfLBU9QW1Y4tlyZq9APBjAjuklKC5Tbjyjgf3pwN0SGfGyzCZ4jY
|
6
|
+
0dBseBq1E4p4Q14oFAsHWzw3HBBB8p5yhtjSGrchr6+fvjc+DcO69iXPoLH4erJc
|
7
|
+
t49UFARdyTXJYVfuGDAUf05YewymlSFPiH9GvQeWiSTk3AESfOD3D+3UPW+30OT7
|
8
|
+
XYrBLLrd+JPcLWFfwB2Y3a3dl9RBEGdxd7epSPb6TKsCz5RZZT1mf/EWt8JGOTWx
|
9
|
+
SZ0i3QtKW0aiNXBEQHjCoxmyKNz0Hw0YtpsjabWloIKCq9Xbz3wUuIhYqDtKxm9c
|
10
|
+
sHx6+kDl/fFubYwhw6VkfGL4ytTscoQ7m5bddE2+s04ZLZmZLFyQcAyPE9Ftlvez
|
11
|
+
L2/LjloZQ3kgbgrO+bypmk9D6nx2vA4q6GbzXojKBYrUmfJ7zsF1MSSiF6HDzcY8
|
12
|
+
rNYWghYo5ToDDdapPQYXCwh5q4J2f+n/86ynyykMyPcuQIs7bXiNfcCzn0DuG6/1
|
13
|
+
XzAY8c27pGo1bpPWtIoFamdMWgpubUHWYydIgx+SP+CGqE2zuCEoUT5m8dC4RMKT
|
14
|
+
r4mOqtrAIaYHU09nMIQ2oKqvO3sbv2K6rIesR5HwczoIMgcEzaS0IUpzE8x1BXZn
|
15
|
+
cANiYnWlqTatOAJOuFCnSsMPd4XgP4rBEFqdvBho0pkSgrQ2eSEfCM5HBHt5JpAB
|
16
|
+
JFgv/dEE+/ufP0jWSovRlfEeohQALlR8MNCPy+IN3NVBhF045y6kowE0
|
17
|
+
-----END ENCRYPTED PRIVATE KEY-----
|
@@ -0,0 +1 @@
|
|
1
|
+
03
|
@@ -0,0 +1 @@
|
|
1
|
+
02
|
@@ -0,0 +1,251 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
# This is meant to provide basic testing of the full IO of an OnStomp client.
|
4
|
+
# It is not designed to handle more than one client at a time.
|
5
|
+
class TestBroker
|
6
|
+
class StopThread < StandardError; end
|
7
|
+
|
8
|
+
attr_reader :messages, :sessions
|
9
|
+
|
10
|
+
def initialize(port=61613)
|
11
|
+
@sessions = []
|
12
|
+
@messages = Hash.new { |h,k| h[k] = [] }
|
13
|
+
@subscribes = Hash.new { |h,k| h[k] = [] }
|
14
|
+
@sub_mutex = Mutex.new
|
15
|
+
@session_mutex = Mutex.new
|
16
|
+
@port = port
|
17
|
+
begin
|
18
|
+
@socket = TCPServer.new @port
|
19
|
+
rescue Exception => ex
|
20
|
+
$stdout.puts "Could not bind: #{ex}"
|
21
|
+
end
|
22
|
+
@session_class = Session10
|
23
|
+
end
|
24
|
+
|
25
|
+
def kill_sessions
|
26
|
+
@session_mutex.synchronize do
|
27
|
+
@sessions.each do |s|
|
28
|
+
s.kill
|
29
|
+
end
|
30
|
+
@sessions.clear
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def enqueue_message s
|
35
|
+
@sub_mutex.synchronize do
|
36
|
+
msg = OnStomp::Components::Frame.new 'MESSAGE', {}, s.body
|
37
|
+
s.headers.each do |k,v|
|
38
|
+
msg.headers.append k, v
|
39
|
+
end
|
40
|
+
msg[:'message-id'] = "msg-#{Time.now.to_f}"
|
41
|
+
dest = msg[:destination]
|
42
|
+
#$stdout.puts "Enqueuing on #{dest}"
|
43
|
+
if !@subscribes[dest].empty?
|
44
|
+
session, subid = @subscribes[dest].first
|
45
|
+
deliver_message msg, session, subid
|
46
|
+
else
|
47
|
+
@messages[dest] << msg
|
48
|
+
end
|
49
|
+
end
|
50
|
+
#$stdout.puts "Done enqueueing!"
|
51
|
+
end
|
52
|
+
|
53
|
+
def deliver_message msg, sess, subid
|
54
|
+
msg[:subscription] = subid
|
55
|
+
sess.transmit msg
|
56
|
+
end
|
57
|
+
|
58
|
+
def messages_for dest
|
59
|
+
@messages[dest]
|
60
|
+
end
|
61
|
+
|
62
|
+
def bodies_for dest
|
63
|
+
messages_for(dest).map { |m| m.body }
|
64
|
+
end
|
65
|
+
|
66
|
+
def subscribe f, session
|
67
|
+
@sub_mutex.synchronize do
|
68
|
+
#$stdout.puts "Subscribing?"
|
69
|
+
dest = f[:destination]
|
70
|
+
@subscribes[dest] << [session, f[:id]]
|
71
|
+
#$stdout.puts "Any messages? #{@messages[dest].inspect}"
|
72
|
+
until @messages[dest].empty?
|
73
|
+
msg = @messages[dest].shift
|
74
|
+
deliver_message msg, session, f[:id]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def unsubscribe f, session
|
80
|
+
@sub_mutex.synchronize do
|
81
|
+
@subscribes[f[:destination]].reject! do |pair|
|
82
|
+
pair.first == session && pair.last == f[:id]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def start
|
88
|
+
@listener = Thread.new do
|
89
|
+
begin
|
90
|
+
loop do
|
91
|
+
sess = @session_class.new(self, @socket.accept)
|
92
|
+
@session_mutex.synchronize do
|
93
|
+
@sessions << sess
|
94
|
+
end
|
95
|
+
end
|
96
|
+
rescue StopThread
|
97
|
+
rescue Exception
|
98
|
+
$stdout.puts "Listener failed: #{$!}"
|
99
|
+
stop
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def stop
|
105
|
+
@session.stop if @session
|
106
|
+
@listener.raise(StopThread.new) rescue nil
|
107
|
+
@listener.join rescue nil
|
108
|
+
@socket.close rescue nil
|
109
|
+
end
|
110
|
+
|
111
|
+
def join
|
112
|
+
@sessions.each do |s|
|
113
|
+
s.join
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
class Session10
|
118
|
+
include OnStomp::Interfaces::ClientEvents
|
119
|
+
|
120
|
+
attr_reader :connection, :socket
|
121
|
+
def initialize server, sock
|
122
|
+
@server = server
|
123
|
+
@socket = sock
|
124
|
+
init_events
|
125
|
+
init_connection
|
126
|
+
# CONNECT/CONNECTED handshake
|
127
|
+
connect_frame = connected_frame = nil
|
128
|
+
@connection.io_process_read do |f|
|
129
|
+
connect_frame ||= f
|
130
|
+
end until connect_frame
|
131
|
+
|
132
|
+
transmit OnStomp::Components::Frame.new('CONNECTED')
|
133
|
+
@connection.io_process_write do |f|
|
134
|
+
connected_frame ||= f
|
135
|
+
end until connected_frame
|
136
|
+
@processor.start
|
137
|
+
end
|
138
|
+
|
139
|
+
def init_connection
|
140
|
+
@connection = OnStomp::Connections::Stomp_1_0.new(socket, self)
|
141
|
+
@processor = OnStomp::Components::ThreadedProcessor.new self
|
142
|
+
end
|
143
|
+
|
144
|
+
def connected?
|
145
|
+
@connection.connected?
|
146
|
+
end
|
147
|
+
|
148
|
+
def init_events
|
149
|
+
on_subscribe do |s,_|
|
150
|
+
#$stdout.puts "Got SUBSCRIBE: #{s.headers.to_hash.inspect}"
|
151
|
+
@server.subscribe s, self
|
152
|
+
end
|
153
|
+
|
154
|
+
on_unsubscribe do |u, _|
|
155
|
+
#$stdout.puts "Got UNSUBSCRIBE: #{u.headers.to_hash.inspect}"
|
156
|
+
@server.unsubscribe u, self
|
157
|
+
end
|
158
|
+
|
159
|
+
on_send do |s,_|
|
160
|
+
#$stdout.puts "Got a SEND frame! #{s.body.inspect}"
|
161
|
+
@server.enqueue_message s
|
162
|
+
end
|
163
|
+
|
164
|
+
on_disconnect do |d,_|
|
165
|
+
@connection.close
|
166
|
+
end
|
167
|
+
|
168
|
+
before_receiving do |f,_|
|
169
|
+
if f.header? :receipt
|
170
|
+
transmit OnStomp::Components::Frame.new('RECEIPT',
|
171
|
+
:'receipt-id' => f[:receipt])
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def dispatch_transmitted f
|
177
|
+
trigger_after_transmitting f
|
178
|
+
end
|
179
|
+
|
180
|
+
def dispatch_received f
|
181
|
+
trigger_before_receiving f
|
182
|
+
trigger_after_receiving f
|
183
|
+
end
|
184
|
+
|
185
|
+
def transmit frame
|
186
|
+
frame.tap do
|
187
|
+
trigger_before_transmitting frame
|
188
|
+
connection.write_frame_nonblock(frame)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def join
|
193
|
+
if @connection.connected?
|
194
|
+
#@connection.close
|
195
|
+
@processor.join
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def kill
|
200
|
+
@socket.close
|
201
|
+
@processor.stop
|
202
|
+
end
|
203
|
+
|
204
|
+
def stop
|
205
|
+
if @connection.connected?
|
206
|
+
@connection.close
|
207
|
+
@processor.stop
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
class Session11 < Session10
|
213
|
+
def init_events
|
214
|
+
super
|
215
|
+
end
|
216
|
+
|
217
|
+
def init_connection
|
218
|
+
@connection = OnStomp::Connections::Stomp_1_1.new(socket, self)
|
219
|
+
@processor = OnStomp::Components::ThreadedProcessor.new self
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
class StompErrorOnConnectSession < Session10
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
class TestSSLBroker < TestBroker
|
228
|
+
SSL_CERT_FILES = {
|
229
|
+
:default => {
|
230
|
+
:c => File.expand_path('../ssl/broker_cert.pem', __FILE__),
|
231
|
+
:k => File.expand_path('../ssl/broker_key.pem', __FILE__)
|
232
|
+
}
|
233
|
+
}
|
234
|
+
|
235
|
+
def initialize(port=61612, certs=:default)
|
236
|
+
@port = port
|
237
|
+
@tcp_socket = TCPServer.new(@port)
|
238
|
+
@ssl_context = OpenSSL::SSL::SSLContext.new
|
239
|
+
@ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
240
|
+
cert_files = SSL_CERT_FILES[certs]
|
241
|
+
@ssl_context.key = OpenSSL::PKey::RSA.new(File.read(cert_files[:k]))
|
242
|
+
@ssl_context.cert = OpenSSL::X509::Certificate.new(File.read(cert_files[:c]))
|
243
|
+
@socket = OpenSSL::SSL::SSLServer.new(@tcp_socket, @ssl_context)
|
244
|
+
@socket.start_immediately = true
|
245
|
+
@session = nil
|
246
|
+
@version = '1.1'
|
247
|
+
@session_class = StompSession
|
248
|
+
@sent_frames = []
|
249
|
+
@received_frames = []
|
250
|
+
end
|
251
|
+
end
|