kontena-websocket-client 0.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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.rspec +3 -0
- data/.travis.yml +21 -0
- data/Gemfile +4 -0
- data/LICENSE +190 -0
- data/README.md +136 -0
- data/Rakefile +6 -0
- data/examples/websocket-echo-client.rb +80 -0
- data/kontena-websocket-client.gemspec +24 -0
- data/lib/kontena/websocket/client/connection.rb +119 -0
- data/lib/kontena/websocket/client/version.rb +13 -0
- data/lib/kontena/websocket/client.rb +848 -0
- data/lib/kontena/websocket/error.rb +81 -0
- data/lib/kontena/websocket/logging.rb +55 -0
- data/lib/kontena/websocket/openssl_patch.rb +10 -0
- data/lib/kontena-websocket-client.rb +15 -0
- metadata +116 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require 'openssl'
|
|
2
|
+
|
|
3
|
+
module Kontena::Websocket
|
|
4
|
+
class Error < StandardError
|
|
5
|
+
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Unable to establish connection to server
|
|
9
|
+
class ConnectError < Error
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# The server sent something invalid, may not be a http/ws server
|
|
14
|
+
class ProtocolError < Error
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Unable to establish SSL connection to server
|
|
19
|
+
class SSLConnectError < ConnectError
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Unable to establish SSL connection to server when using ssl_verify: true
|
|
24
|
+
class SSLVerifyError < SSLConnectError
|
|
25
|
+
attr_reader :cert, :cert_chain
|
|
26
|
+
|
|
27
|
+
# @param verify_result [Integer] @see OpenSSL::SSL::SSLSocket#verify_result
|
|
28
|
+
# @param cert [OpenSSL::X509::Certificate]
|
|
29
|
+
# @param cert_chain [Array<OpenSSL::X509::Certificate>]
|
|
30
|
+
# @param message [String]
|
|
31
|
+
def initialize(verify_result, cert = nil, cert_chain = nil, message = nil)
|
|
32
|
+
super(message)
|
|
33
|
+
@verify_result = verify_result
|
|
34
|
+
@cert = cert
|
|
35
|
+
@cert_chain = cert_chain
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def subject
|
|
39
|
+
@cert.subject
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def issuer
|
|
43
|
+
@cert.issuer
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def to_s
|
|
47
|
+
"certificate verify failed: #{super}"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class SocketError < Error
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# connect/read/write timed out
|
|
56
|
+
class TimeoutError < Error
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# server closed connection
|
|
61
|
+
class CloseError < Error
|
|
62
|
+
attr_reader :code, :reason
|
|
63
|
+
|
|
64
|
+
def initialize(code, reason = nil)
|
|
65
|
+
super(reason)
|
|
66
|
+
@code = code
|
|
67
|
+
@reason = reason
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def to_s
|
|
71
|
+
"connection closed with code #{@code}: #{super}"
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Server closed connection without sending close frame
|
|
76
|
+
class EOFError < CloseError
|
|
77
|
+
def initialize(message = nil)
|
|
78
|
+
super(1006, message)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'logger'
|
|
2
|
+
|
|
3
|
+
module Kontena::Websocket
|
|
4
|
+
module Logging
|
|
5
|
+
def self.initialize_logger(log_target = STDOUT, log_level = Logger::INFO)
|
|
6
|
+
@logger = Logger.new(log_target)
|
|
7
|
+
@logger.level = log_level
|
|
8
|
+
@logger
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.logger
|
|
12
|
+
defined?(@logger) ? @logger : initialize_logger
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.logger=(log)
|
|
16
|
+
@logger = (log ? log : Logger.new('/dev/null'))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# @return [Logger]
|
|
20
|
+
def logger
|
|
21
|
+
Kontena::Websocket::Logging.logger
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Prefix for log messages, defaults to class name
|
|
25
|
+
#
|
|
26
|
+
# @return [String]
|
|
27
|
+
def logging_prefix
|
|
28
|
+
self.class.name
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Send a debug message
|
|
32
|
+
# @param message [String]
|
|
33
|
+
def debug(message = nil, &block)
|
|
34
|
+
logger.add(Logger::DEBUG, message, logging_prefix, &block)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Send a info message
|
|
38
|
+
# @param message [String]
|
|
39
|
+
def info(message = nil, &block)
|
|
40
|
+
logger.add(Logger::INFO, message, logging_prefix, &block)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Send a warning message
|
|
44
|
+
# @param message [String]
|
|
45
|
+
def warn(message = nil, &block)
|
|
46
|
+
logger.add(Logger::WARN, message, logging_prefix, &block)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Send an error message
|
|
50
|
+
# @param message [String]
|
|
51
|
+
def error(message = nil, &block)
|
|
52
|
+
logger.add(Logger::ERROR, message, logging_prefix, &block)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'openssl'
|
|
2
|
+
require 'socket'
|
|
3
|
+
require 'websocket/driver'
|
|
4
|
+
|
|
5
|
+
# OpenSSL::SSL::SSLSocket#wait_readable, #wait_writable
|
|
6
|
+
require_relative './kontena/websocket/openssl_patch'
|
|
7
|
+
|
|
8
|
+
module Kontena
|
|
9
|
+
module Websocket
|
|
10
|
+
require_relative './kontena/websocket/client/version'
|
|
11
|
+
require_relative './kontena/websocket/logging'
|
|
12
|
+
require_relative './kontena/websocket/error'
|
|
13
|
+
require_relative './kontena/websocket/client'
|
|
14
|
+
end
|
|
15
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: kontena-websocket-client
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Kontena, Inc
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-07-21 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: websocket-driver
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.6.5
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.6.5
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: bundler
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.15'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '1.15'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '10.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '10.0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '3.0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '3.0'
|
|
69
|
+
description:
|
|
70
|
+
email:
|
|
71
|
+
- info@kontena.io
|
|
72
|
+
executables: []
|
|
73
|
+
extensions: []
|
|
74
|
+
extra_rdoc_files: []
|
|
75
|
+
files:
|
|
76
|
+
- ".gitignore"
|
|
77
|
+
- ".rspec"
|
|
78
|
+
- ".travis.yml"
|
|
79
|
+
- Gemfile
|
|
80
|
+
- LICENSE
|
|
81
|
+
- README.md
|
|
82
|
+
- Rakefile
|
|
83
|
+
- examples/websocket-echo-client.rb
|
|
84
|
+
- kontena-websocket-client.gemspec
|
|
85
|
+
- lib/kontena-websocket-client.rb
|
|
86
|
+
- lib/kontena/websocket/client.rb
|
|
87
|
+
- lib/kontena/websocket/client/connection.rb
|
|
88
|
+
- lib/kontena/websocket/client/version.rb
|
|
89
|
+
- lib/kontena/websocket/error.rb
|
|
90
|
+
- lib/kontena/websocket/logging.rb
|
|
91
|
+
- lib/kontena/websocket/openssl_patch.rb
|
|
92
|
+
homepage: https://github.com/kontena/kontena-websocket-client
|
|
93
|
+
licenses:
|
|
94
|
+
- Apache-2.0
|
|
95
|
+
metadata: {}
|
|
96
|
+
post_install_message:
|
|
97
|
+
rdoc_options: []
|
|
98
|
+
require_paths:
|
|
99
|
+
- lib
|
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - ">="
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: '0'
|
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
requirements: []
|
|
111
|
+
rubyforge_project:
|
|
112
|
+
rubygems_version: 2.5.1
|
|
113
|
+
signing_key:
|
|
114
|
+
specification_version: 4
|
|
115
|
+
summary: Websocket client library
|
|
116
|
+
test_files: []
|