webrick 1.8.2 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/README.md +2 -0
- data/lib/webrick/version.rb +1 -1
- data/sig/accesslog.rbs +24 -0
- data/sig/cgi.rbs +92 -0
- data/sig/compat.rbs +18 -0
- data/sig/config.rbs +17 -0
- data/sig/cookie.rbs +37 -0
- data/sig/htmlutils.rbs +5 -0
- data/sig/httpauth/authenticator.rbs +55 -0
- data/sig/httpauth/basicauth.rbs +29 -0
- data/sig/httpauth/digestauth.rbs +85 -0
- data/sig/httpauth/htdigest.rbs +31 -0
- data/sig/httpauth/htgroup.rbs +21 -0
- data/sig/httpauth/htpasswd.rbs +31 -0
- data/sig/httpauth/userdb.rbs +13 -0
- data/sig/httpauth.rbs +13 -0
- data/sig/httpproxy.rbs +61 -0
- data/sig/httprequest.rbs +169 -0
- data/sig/httpresponse.rbs +117 -0
- data/sig/https.rbs +49 -0
- data/sig/httpserver.rbs +71 -0
- data/sig/httpservlet/abstract.rbs +36 -0
- data/sig/httpservlet/cgi_runner.rbs +3 -0
- data/sig/httpservlet/cgihandler.rbs +23 -0
- data/sig/httpservlet/erbhandler.rbs +17 -0
- data/sig/httpservlet/filehandler.rbs +76 -0
- data/sig/httpservlet/prochandler.rbs +21 -0
- data/sig/httpservlet.rbs +4 -0
- data/sig/httpstatus.rbs +255 -0
- data/sig/httputils.rbs +116 -0
- data/sig/httpversion.rbs +17 -0
- data/sig/log.rbs +93 -0
- data/sig/manifest.yaml +8 -0
- data/sig/server.rbs +57 -0
- data/sig/ssl.rbs +19 -0
- data/sig/utils.rbs +122 -0
- data/sig/version.rbs +3 -0
- data/webrick.gemspec +35 -0
- metadata +43 -5
data/sig/httpstatus.rbs
ADDED
@@ -0,0 +1,255 @@
|
|
1
|
+
module WEBrick
|
2
|
+
#
|
3
|
+
# This module is used to manager HTTP status codes.
|
4
|
+
#
|
5
|
+
# See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for more
|
6
|
+
# information.
|
7
|
+
module HTTPStatus
|
8
|
+
#
|
9
|
+
# Root of the HTTP status class hierarchy
|
10
|
+
class Status < StandardError
|
11
|
+
attr_reader self.code: Integer
|
12
|
+
|
13
|
+
attr_reader self.reason_phrase: String
|
14
|
+
|
15
|
+
# Returns the HTTP status code
|
16
|
+
def code: () -> Integer
|
17
|
+
|
18
|
+
# Returns the HTTP status description
|
19
|
+
def reason_phrase: () -> String
|
20
|
+
|
21
|
+
alias to_i code
|
22
|
+
end
|
23
|
+
|
24
|
+
# Root of the HTTP info statuses
|
25
|
+
class Info < Status
|
26
|
+
end
|
27
|
+
|
28
|
+
# Root of the HTTP success statuses
|
29
|
+
class Success < Status
|
30
|
+
end
|
31
|
+
|
32
|
+
# Root of the HTTP redirect statuses
|
33
|
+
class Redirect < Status
|
34
|
+
end
|
35
|
+
|
36
|
+
# Root of the HTTP error statuses
|
37
|
+
class Error < Status
|
38
|
+
end
|
39
|
+
|
40
|
+
# Root of the HTTP client error statuses
|
41
|
+
class ClientError < Error
|
42
|
+
end
|
43
|
+
|
44
|
+
# Root of the HTTP server error statuses
|
45
|
+
class ServerError < Error
|
46
|
+
end
|
47
|
+
|
48
|
+
class EOFError < StandardError
|
49
|
+
end
|
50
|
+
|
51
|
+
# HTTP status codes and descriptions
|
52
|
+
StatusMessage: Hash[Integer, String]
|
53
|
+
|
54
|
+
# Maps a status code to the corresponding Status class
|
55
|
+
CodeToError: Hash[Integer, singleton(Status)]
|
56
|
+
|
57
|
+
# WEBrick::HTTPStatus::constants.grep(/\ARC_/).map{"#{_1}: #{WEBrick::HTTPStatus.const_get(_1)}"}
|
58
|
+
|
59
|
+
RC_CONTINUE: 100
|
60
|
+
RC_SWITCHING_PROTOCOLS: 101
|
61
|
+
RC_OK: 200
|
62
|
+
RC_CREATED: 201
|
63
|
+
RC_ACCEPTED: 202
|
64
|
+
RC_NON_AUTHORITATIVE_INFORMATION: 203
|
65
|
+
RC_NO_CONTENT: 204
|
66
|
+
RC_RESET_CONTENT: 205
|
67
|
+
RC_PARTIAL_CONTENT: 206
|
68
|
+
RC_MULTI_STATUS: 207
|
69
|
+
RC_MULTIPLE_CHOICES: 300
|
70
|
+
RC_MOVED_PERMANENTLY: 301
|
71
|
+
RC_FOUND: 302
|
72
|
+
RC_SEE_OTHER: 303
|
73
|
+
RC_NOT_MODIFIED: 304
|
74
|
+
RC_USE_PROXY: 305
|
75
|
+
RC_TEMPORARY_REDIRECT: 307
|
76
|
+
RC_BAD_REQUEST: 400
|
77
|
+
RC_UNAUTHORIZED: 401
|
78
|
+
RC_PAYMENT_REQUIRED: 402
|
79
|
+
RC_FORBIDDEN: 403
|
80
|
+
RC_NOT_FOUND: 404
|
81
|
+
RC_METHOD_NOT_ALLOWED: 405
|
82
|
+
RC_NOT_ACCEPTABLE: 406
|
83
|
+
RC_PROXY_AUTHENTICATION_REQUIRED: 407
|
84
|
+
RC_REQUEST_TIMEOUT: 408
|
85
|
+
RC_CONFLICT: 409
|
86
|
+
RC_GONE: 410
|
87
|
+
RC_PRECONDITION_FAILED: 412
|
88
|
+
RC_LENGTH_REQUIRED: 411
|
89
|
+
RC_REQUEST_ENTITY_TOO_LARGE: 413
|
90
|
+
RC_REQUEST_URI_TOO_LARGE: 414
|
91
|
+
RC_UNSUPPORTED_MEDIA_TYPE: 415
|
92
|
+
RC_EXPECTATION_FAILED: 417
|
93
|
+
RC_UNPROCESSABLE_ENTITY: 422
|
94
|
+
RC_LOCKED: 423
|
95
|
+
RC_FAILED_DEPENDENCY: 424
|
96
|
+
RC_REQUEST_RANGE_NOT_SATISFIABLE: 416
|
97
|
+
RC_UPGRADE_REQUIRED: 426
|
98
|
+
RC_PRECONDITION_REQUIRED: 428
|
99
|
+
RC_TOO_MANY_REQUESTS: 429
|
100
|
+
RC_REQUEST_HEADER_FIELDS_TOO_LARGE: 431
|
101
|
+
RC_UNAVAILABLE_FOR_LEGAL_REASONS: 451
|
102
|
+
RC_INTERNAL_SERVER_ERROR: 500
|
103
|
+
RC_NOT_IMPLEMENTED: 501
|
104
|
+
RC_BAD_GATEWAY: 502
|
105
|
+
RC_SERVICE_UNAVAILABLE: 503
|
106
|
+
RC_GATEWAY_TIMEOUT: 504
|
107
|
+
RC_HTTP_VERSION_NOT_SUPPORTED: 505
|
108
|
+
RC_INSUFFICIENT_STORAGE: 507
|
109
|
+
RC_NETWORK_AUTHENTICATION_REQUIRED: 511
|
110
|
+
|
111
|
+
# WEBrick::HTTPStatus::CodeToError.each_value.map{"class #{_1.name.split(/::/).last} < #{_1.superclass.name.split(/::/).last}\nend"}
|
112
|
+
|
113
|
+
class Continue < Info
|
114
|
+
end
|
115
|
+
class SwitchingProtocols < Info
|
116
|
+
end
|
117
|
+
class OK < Success
|
118
|
+
end
|
119
|
+
class Created < Success
|
120
|
+
end
|
121
|
+
class Accepted < Success
|
122
|
+
end
|
123
|
+
class NonAuthoritativeInformation < Success
|
124
|
+
end
|
125
|
+
class NoContent < Success
|
126
|
+
end
|
127
|
+
class ResetContent < Success
|
128
|
+
end
|
129
|
+
class PartialContent < Success
|
130
|
+
end
|
131
|
+
class MultiStatus < Success
|
132
|
+
end
|
133
|
+
class MultipleChoices < Redirect
|
134
|
+
end
|
135
|
+
class MovedPermanently < Redirect
|
136
|
+
end
|
137
|
+
class Found < Redirect
|
138
|
+
end
|
139
|
+
class SeeOther < Redirect
|
140
|
+
end
|
141
|
+
class NotModified < Redirect
|
142
|
+
end
|
143
|
+
class UseProxy < Redirect
|
144
|
+
end
|
145
|
+
class TemporaryRedirect < Redirect
|
146
|
+
end
|
147
|
+
class BadRequest < ClientError
|
148
|
+
end
|
149
|
+
class Unauthorized < ClientError
|
150
|
+
end
|
151
|
+
class PaymentRequired < ClientError
|
152
|
+
end
|
153
|
+
class Forbidden < ClientError
|
154
|
+
end
|
155
|
+
class NotFound < ClientError
|
156
|
+
end
|
157
|
+
class MethodNotAllowed < ClientError
|
158
|
+
end
|
159
|
+
class NotAcceptable < ClientError
|
160
|
+
end
|
161
|
+
class ProxyAuthenticationRequired < ClientError
|
162
|
+
end
|
163
|
+
class RequestTimeout < ClientError
|
164
|
+
end
|
165
|
+
class Conflict < ClientError
|
166
|
+
end
|
167
|
+
class Gone < ClientError
|
168
|
+
end
|
169
|
+
class LengthRequired < ClientError
|
170
|
+
end
|
171
|
+
class PreconditionFailed < ClientError
|
172
|
+
end
|
173
|
+
class RequestEntityTooLarge < ClientError
|
174
|
+
end
|
175
|
+
class RequestURITooLarge < ClientError
|
176
|
+
end
|
177
|
+
class UnsupportedMediaType < ClientError
|
178
|
+
end
|
179
|
+
class RequestRangeNotSatisfiable < ClientError
|
180
|
+
end
|
181
|
+
class ExpectationFailed < ClientError
|
182
|
+
end
|
183
|
+
class UnprocessableEntity < ClientError
|
184
|
+
end
|
185
|
+
class Locked < ClientError
|
186
|
+
end
|
187
|
+
class FailedDependency < ClientError
|
188
|
+
end
|
189
|
+
class UpgradeRequired < ClientError
|
190
|
+
end
|
191
|
+
class PreconditionRequired < ClientError
|
192
|
+
end
|
193
|
+
class TooManyRequests < ClientError
|
194
|
+
end
|
195
|
+
class RequestHeaderFieldsTooLarge < ClientError
|
196
|
+
end
|
197
|
+
class UnavailableForLegalReasons < ClientError
|
198
|
+
end
|
199
|
+
class InternalServerError < ServerError
|
200
|
+
end
|
201
|
+
class NotImplemented < ServerError
|
202
|
+
end
|
203
|
+
class BadGateway < ServerError
|
204
|
+
end
|
205
|
+
class ServiceUnavailable < ServerError
|
206
|
+
end
|
207
|
+
class GatewayTimeout < ServerError
|
208
|
+
end
|
209
|
+
class HTTPVersionNotSupported < ServerError
|
210
|
+
end
|
211
|
+
class InsufficientStorage < ServerError
|
212
|
+
end
|
213
|
+
class NetworkAuthenticationRequired < ServerError
|
214
|
+
end
|
215
|
+
|
216
|
+
#
|
217
|
+
# Returns the description corresponding to the HTTP status +code+
|
218
|
+
#
|
219
|
+
# WEBrick::HTTPStatus.reason_phrase 404
|
220
|
+
# => "Not Found"
|
221
|
+
def self?.reason_phrase: (Integer code) -> String
|
222
|
+
|
223
|
+
#
|
224
|
+
# Is +code+ an informational status?
|
225
|
+
def self?.info?: (Integer code) -> bool
|
226
|
+
|
227
|
+
#
|
228
|
+
# Is +code+ a successful status?
|
229
|
+
def self?.success?: (Integer code) -> bool
|
230
|
+
|
231
|
+
#
|
232
|
+
# Is +code+ a redirection status?
|
233
|
+
def self?.redirect?: (Integer code) -> bool
|
234
|
+
|
235
|
+
#
|
236
|
+
# Is +code+ an error status?
|
237
|
+
def self?.error?: (Integer code) -> bool
|
238
|
+
|
239
|
+
#
|
240
|
+
# Is +code+ a client error status?
|
241
|
+
def self?.client_error?: (Integer code) -> bool
|
242
|
+
|
243
|
+
#
|
244
|
+
# Is +code+ a server error status?
|
245
|
+
def self?.server_error?: (Integer code) -> bool
|
246
|
+
|
247
|
+
#
|
248
|
+
# Returns the status class corresponding to +code+
|
249
|
+
#
|
250
|
+
# WEBrick::HTTPStatus[302]
|
251
|
+
# => WEBrick::HTTPStatus::NotFound
|
252
|
+
#
|
253
|
+
def self.[]: (Integer code) -> singleton(Status)
|
254
|
+
end
|
255
|
+
end
|
data/sig/httputils.rbs
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
module WEBrick
|
2
|
+
CR: String
|
3
|
+
|
4
|
+
LF: String
|
5
|
+
|
6
|
+
CRLF: String
|
7
|
+
|
8
|
+
module HTTPUtils
|
9
|
+
def self?.normalize_path: (String path) -> String
|
10
|
+
|
11
|
+
type mime_types = Hash[String, String]
|
12
|
+
|
13
|
+
DefaultMimeTypes: mime_types
|
14
|
+
|
15
|
+
def self?.load_mime_types: (string | _ToPath file) -> mime_types
|
16
|
+
|
17
|
+
def self?.mime_type: (String filename, mime_types mime_tab) -> String
|
18
|
+
|
19
|
+
class SplitHeader < Array[String]
|
20
|
+
def join: (?String separator) -> String
|
21
|
+
end
|
22
|
+
|
23
|
+
class CookieHeader < Array[String]
|
24
|
+
def join: (?String separator) -> String
|
25
|
+
end
|
26
|
+
|
27
|
+
HEADER_CLASSES: Hash[String, untyped]
|
28
|
+
|
29
|
+
def self?.parse_header: (String raw) -> Hash[String, Array[String]]
|
30
|
+
|
31
|
+
def self?.split_header_value: (String str) -> Array[String]
|
32
|
+
|
33
|
+
def self?.parse_range_header: (String? ranges_specifier) -> Array[Range[Integer]]?
|
34
|
+
|
35
|
+
def self?.parse_qvalues: (String? value) -> Array[String]
|
36
|
+
|
37
|
+
def self?.dequote: (String str) -> String
|
38
|
+
|
39
|
+
def self?.quote: (String str) -> String
|
40
|
+
|
41
|
+
class FormData < String
|
42
|
+
@raw_header: Array[String]
|
43
|
+
|
44
|
+
@header: Hash[String, Array[String]]
|
45
|
+
|
46
|
+
EmptyRawHeader: Array[String]
|
47
|
+
|
48
|
+
EmptyHeader: Hash[String, Array[String]]
|
49
|
+
|
50
|
+
attr_accessor name: String?
|
51
|
+
|
52
|
+
attr_accessor filename: String?
|
53
|
+
|
54
|
+
attr_accessor next_data: instance?
|
55
|
+
|
56
|
+
def initialize: (*String args) -> void
|
57
|
+
|
58
|
+
def []: (*String key) -> String
|
59
|
+
# following is as same as String#[]
|
60
|
+
| (int start, ?int length) -> String?
|
61
|
+
| (range[int?] range) -> String?
|
62
|
+
| (Regexp regexp, ?MatchData::capture backref) -> String?
|
63
|
+
| (String substring) -> String?
|
64
|
+
|
65
|
+
def <<: (String str) -> self
|
66
|
+
|
67
|
+
def append_data: (instance data) -> self
|
68
|
+
|
69
|
+
def each_data: () { (instance) -> void } -> void
|
70
|
+
|
71
|
+
def list: () -> Array[String]
|
72
|
+
|
73
|
+
alias to_ary list
|
74
|
+
|
75
|
+
def to_s: () -> String
|
76
|
+
end
|
77
|
+
|
78
|
+
def self?.parse_query: (String? str) -> Hash[String, FormData]
|
79
|
+
|
80
|
+
interface _EachLine
|
81
|
+
def each_line: () { (String) -> void } -> void
|
82
|
+
end
|
83
|
+
|
84
|
+
def self?.parse_form_data: (_EachLine? io, interned boundary) -> Hash[String, FormData]
|
85
|
+
|
86
|
+
def self?._make_regex: (String str) -> Regexp
|
87
|
+
|
88
|
+
def self?._make_regex!: (String str) -> Regexp
|
89
|
+
|
90
|
+
def self?._escape: (String str, Regexp regex) -> String
|
91
|
+
|
92
|
+
def self?._unescape: (String str, Regexp regex) -> String
|
93
|
+
|
94
|
+
UNESCAPED: Regexp
|
95
|
+
|
96
|
+
UNESCAPED_FORM: Regexp
|
97
|
+
|
98
|
+
NONASCII: Regexp
|
99
|
+
|
100
|
+
ESCAPED: Regexp
|
101
|
+
|
102
|
+
UNESCAPED_PCHAR: Regexp
|
103
|
+
|
104
|
+
def self?.escape: (String str) -> String
|
105
|
+
|
106
|
+
def self?.unescape: (String str) -> String
|
107
|
+
|
108
|
+
def self?.escape_form: (String str) -> String
|
109
|
+
|
110
|
+
def self?.unescape_form: (String str) -> String
|
111
|
+
|
112
|
+
def self?.escape_path: (String str) -> String
|
113
|
+
|
114
|
+
def self?.escape8bit: (String str) -> String
|
115
|
+
end
|
116
|
+
end
|
data/sig/httpversion.rbs
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module WEBrick
|
2
|
+
class HTTPVersion
|
3
|
+
include Comparable
|
4
|
+
|
5
|
+
attr_accessor major: Integer
|
6
|
+
|
7
|
+
attr_accessor minor: Integer
|
8
|
+
|
9
|
+
def self.convert: (HTTPVersion | String version) -> instance
|
10
|
+
|
11
|
+
def initialize: (HTTPVersion | String version) -> void
|
12
|
+
|
13
|
+
def <=>: (HTTPVersion | String other) -> Integer?
|
14
|
+
|
15
|
+
def to_s: () -> String
|
16
|
+
end
|
17
|
+
end
|
data/sig/log.rbs
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
module WEBrick
|
2
|
+
class BasicLog
|
3
|
+
@log: IO?
|
4
|
+
|
5
|
+
@opened: TrueClass?
|
6
|
+
|
7
|
+
FATAL: 1
|
8
|
+
|
9
|
+
ERROR: 2
|
10
|
+
|
11
|
+
WARN: 3
|
12
|
+
|
13
|
+
INFO: 4
|
14
|
+
|
15
|
+
DEBUG: 5
|
16
|
+
|
17
|
+
# log-level, messages above this level will be logged
|
18
|
+
attr_accessor level: Integer
|
19
|
+
|
20
|
+
type log_file = (IO | String)?
|
21
|
+
|
22
|
+
def initialize: (?log_file log_file, ?Integer? level) -> void
|
23
|
+
|
24
|
+
#
|
25
|
+
# Closes the logger (also closes the log device associated to the logger)
|
26
|
+
def close: () -> void
|
27
|
+
|
28
|
+
def log: (Integer level, String data) -> IO?
|
29
|
+
|
30
|
+
#
|
31
|
+
# Synonym for log(INFO, obj.to_s)
|
32
|
+
def <<: (_ToS obj) -> IO?
|
33
|
+
|
34
|
+
type message = Exception | _ToStr | Object
|
35
|
+
|
36
|
+
# Shortcut for logging a FATAL message
|
37
|
+
def fatal: (message msg) -> IO?
|
38
|
+
|
39
|
+
# Shortcut for logging an ERROR message
|
40
|
+
def error: (message msg) -> IO?
|
41
|
+
|
42
|
+
# Shortcut for logging a WARN message
|
43
|
+
def warn: (message msg) -> IO?
|
44
|
+
|
45
|
+
# Shortcut for logging an INFO message
|
46
|
+
def info: (message msg) -> IO?
|
47
|
+
|
48
|
+
# Shortcut for logging a DEBUG message
|
49
|
+
def debug: (message msg) -> IO?
|
50
|
+
|
51
|
+
# Will the logger output FATAL messages?
|
52
|
+
def fatal?: () -> bool
|
53
|
+
|
54
|
+
# Will the logger output ERROR messages?
|
55
|
+
def error?: () -> bool
|
56
|
+
|
57
|
+
# Will the logger output WARN messages?
|
58
|
+
def warn?: () -> bool
|
59
|
+
|
60
|
+
# Will the logger output INFO messages?
|
61
|
+
def info?: () -> bool
|
62
|
+
|
63
|
+
# Will the logger output DEBUG messages?
|
64
|
+
def debug?: () -> bool
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
#
|
69
|
+
# Formats +arg+ for the logger
|
70
|
+
#
|
71
|
+
# * If +arg+ is an Exception, it will format the error message and
|
72
|
+
# the back trace.
|
73
|
+
# * If +arg+ responds to #to_str, it will return it.
|
74
|
+
# * Otherwise it will return +arg+.inspect.
|
75
|
+
def format: (message arg) -> String
|
76
|
+
end
|
77
|
+
|
78
|
+
class Log < BasicLog
|
79
|
+
# Format of the timestamp which is applied to each logged line. The
|
80
|
+
# default is <tt>"[%Y-%m-%d %H:%M:%S]"</tt>
|
81
|
+
attr_accessor time_format: String
|
82
|
+
|
83
|
+
#
|
84
|
+
# Same as BasicLog#initialize
|
85
|
+
#
|
86
|
+
# You can set the timestamp format through #time_format
|
87
|
+
def initialize: (?BasicLog::log_file log_file, ?Integer? level) -> void
|
88
|
+
|
89
|
+
#
|
90
|
+
# Same as BasicLog#log
|
91
|
+
def log: (Integer level, String data) -> IO?
|
92
|
+
end
|
93
|
+
end
|
data/sig/manifest.yaml
ADDED
data/sig/server.rbs
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
module WEBrick
|
2
|
+
class ServerError < StandardError
|
3
|
+
end
|
4
|
+
|
5
|
+
class SimpleServer
|
6
|
+
def self.start: [T] () { () -> T } -> T
|
7
|
+
end
|
8
|
+
|
9
|
+
class Daemon
|
10
|
+
def self.start: () -> void
|
11
|
+
| [T] () { () -> T } -> T
|
12
|
+
end
|
13
|
+
|
14
|
+
class GenericServer
|
15
|
+
@shutdown_pipe: [IO, IO]?
|
16
|
+
|
17
|
+
attr_reader status: :Stop | :Running | :Shutdown
|
18
|
+
|
19
|
+
attr_reader config: Hash[Symbol, untyped]
|
20
|
+
|
21
|
+
attr_reader logger: BasicLog
|
22
|
+
|
23
|
+
attr_reader tokens: Thread::SizedQueue
|
24
|
+
|
25
|
+
attr_reader listeners: Array[TCPServer| OpenSSL::SSL::SSLServer]
|
26
|
+
|
27
|
+
def initialize: (?Hash[Symbol, untyped] config, ?Hash[Symbol, untyped] default) -> void
|
28
|
+
|
29
|
+
def []: (Symbol key) -> untyped
|
30
|
+
|
31
|
+
def listen: (String address, Integer port) -> void
|
32
|
+
|
33
|
+
def start: () { (TCPSocket) -> void } -> void
|
34
|
+
|
35
|
+
def stop: () -> void
|
36
|
+
|
37
|
+
def shutdown: () -> void
|
38
|
+
|
39
|
+
def run: (TCPSocket sock) -> void
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def accept_client: (TCPServer svr) -> TCPSocket?
|
44
|
+
|
45
|
+
def start_thread: (TCPSocket sock) { (TCPSocket) -> void } -> Thread
|
46
|
+
|
47
|
+
def call_callback: (Symbol callback_name, *untyped args) -> untyped
|
48
|
+
|
49
|
+
def setup_shutdown_pipe: () -> [IO, IO]
|
50
|
+
|
51
|
+
def cleanup_shutdown_pipe: ([IO, IO]? shutdown_pipe) -> void
|
52
|
+
|
53
|
+
def alarm_shutdown_pipe: [T] () { (IO) -> T } -> T?
|
54
|
+
|
55
|
+
def cleanup_listener: () -> void
|
56
|
+
end
|
57
|
+
end
|
data/sig/ssl.rbs
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module WEBrick
|
2
|
+
module Config
|
3
|
+
SSL: Hash[Symbol, untyped]
|
4
|
+
end
|
5
|
+
|
6
|
+
module Utils
|
7
|
+
def self?.create_self_signed_cert: (untyped bits, untyped cn, untyped comment) -> ::Array[untyped]
|
8
|
+
end
|
9
|
+
|
10
|
+
class GenericServer
|
11
|
+
@ssl_context: OpenSSL::SSL::SSLContext?
|
12
|
+
|
13
|
+
def ssl_context: () -> OpenSSL::SSL::SSLContext?
|
14
|
+
|
15
|
+
def setup_ssl_context: (Hash[Symbol, untyped] config) -> OpenSSL::SSL::SSLContext
|
16
|
+
|
17
|
+
def ssl_servername_callback: (untyped sslsocket, ?untyped? hostname) -> untyped
|
18
|
+
end
|
19
|
+
end
|
data/sig/utils.rbs
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
module WEBrick
|
2
|
+
module Utils
|
3
|
+
#
|
4
|
+
# Sets IO operations on +io+ to be non-blocking
|
5
|
+
def self?.set_non_blocking: (IO io) -> void
|
6
|
+
|
7
|
+
#
|
8
|
+
# Sets the close on exec flag for +io+
|
9
|
+
def self?.set_close_on_exec: (IO io) -> void
|
10
|
+
|
11
|
+
#
|
12
|
+
# Changes the process's uid and gid to the ones of +user+
|
13
|
+
def self?.su: (String user) -> void
|
14
|
+
|
15
|
+
#
|
16
|
+
# The server hostname
|
17
|
+
def self?.getservername: () -> String
|
18
|
+
|
19
|
+
#
|
20
|
+
# Creates TCP server sockets bound to +address+:+port+ and returns them.
|
21
|
+
#
|
22
|
+
# It will create IPV4 and IPV6 sockets on all interfaces.
|
23
|
+
def self?.create_listeners: (String host, Integer port) -> Array[TCPServer]
|
24
|
+
|
25
|
+
#
|
26
|
+
# Characters used to generate random strings
|
27
|
+
RAND_CHARS: String
|
28
|
+
|
29
|
+
#
|
30
|
+
# Generates a random string of length +len+
|
31
|
+
def self?.random_string: (Integer len) -> String
|
32
|
+
|
33
|
+
#
|
34
|
+
# Class used to manage timeout handlers across multiple threads.
|
35
|
+
#
|
36
|
+
# Timeout handlers should be managed by using the class methods which are
|
37
|
+
# synchronized.
|
38
|
+
#
|
39
|
+
# id = TimeoutHandler.register(10, Timeout::Error)
|
40
|
+
# begin
|
41
|
+
# sleep 20
|
42
|
+
# puts 'foo'
|
43
|
+
# ensure
|
44
|
+
# TimeoutHandler.cancel(id)
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# will raise Timeout::Error
|
48
|
+
#
|
49
|
+
# id = TimeoutHandler.register(10, Timeout::Error)
|
50
|
+
# begin
|
51
|
+
# sleep 5
|
52
|
+
# puts 'foo'
|
53
|
+
# ensure
|
54
|
+
# TimeoutHandler.cancel(id)
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# will print 'foo'
|
58
|
+
#
|
59
|
+
class TimeoutHandler
|
60
|
+
@queue: Thread::Queue
|
61
|
+
|
62
|
+
@watcher: Thread?
|
63
|
+
|
64
|
+
include Singleton
|
65
|
+
|
66
|
+
#
|
67
|
+
# Mutex used to synchronize access across threads
|
68
|
+
TimeoutMutex: Thread::Mutex
|
69
|
+
|
70
|
+
#
|
71
|
+
# Registers a new timeout handler
|
72
|
+
#
|
73
|
+
# +time+:: Timeout in seconds
|
74
|
+
# +exception+:: Exception to raise when timeout elapsed
|
75
|
+
def self.register: (Numeric seconds, singleton(Exception) exception) -> Integer
|
76
|
+
|
77
|
+
#
|
78
|
+
# Cancels the timeout handler +id+
|
79
|
+
def self.cancel: (Integer id) -> bool
|
80
|
+
|
81
|
+
def self.terminate: () -> Thread?
|
82
|
+
|
83
|
+
#
|
84
|
+
# Creates a new TimeoutHandler. You should use ::register and ::cancel
|
85
|
+
# instead of creating the timeout handler directly.
|
86
|
+
def initialize: () -> void
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def watch: () -> bot
|
91
|
+
|
92
|
+
def watcher: () -> Thread
|
93
|
+
|
94
|
+
public
|
95
|
+
|
96
|
+
#
|
97
|
+
# Interrupts the timeout handler +id+ and raises +exception+
|
98
|
+
def interrupt: (Thread thread, Integer id, singleton(Exception) exception) -> nil
|
99
|
+
|
100
|
+
#
|
101
|
+
# Registers a new timeout handler
|
102
|
+
#
|
103
|
+
# +time+:: Timeout in seconds
|
104
|
+
# +exception+:: Exception to raise when timeout elapsed
|
105
|
+
def register: (Thread thread, Numeric time, singleton(Exception) exception) -> Integer
|
106
|
+
|
107
|
+
#
|
108
|
+
# Cancels the timeout handler +id+
|
109
|
+
def cancel: (Thread thread, Integer id) -> bool
|
110
|
+
|
111
|
+
#
|
112
|
+
def terminate: () -> Thread?
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
# Executes the passed block and raises +exception+ if execution takes more
|
117
|
+
# than +seconds+.
|
118
|
+
#
|
119
|
+
# If +seconds+ is zero or nil, simply executes the block
|
120
|
+
def self?.timeout: [T] (Numeric? seconds, ?singleton(Exception) exception) { (?Numeric) -> T } -> T
|
121
|
+
end
|
122
|
+
end
|
data/sig/version.rbs
ADDED