Module: WebSocket::HTTP::Headers
Constant Summary collapse
- MAX_LINE_LENGTH =
4096
- CR =
0x0D
- LF =
0x0A
- HEADER_LINE =
RFC 2616 grammar rules:
CHAR = <any US-ASCII character (octets 0 - 127)> CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)> SP = <US-ASCII SP, space (32)> HT = <US-ASCII HT, horizontal-tab (9)> token = 1*<any CHAR except CTLs or separators> separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
Or, as redefined in RFC 7230:
token = 1*tchar tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA ; any VCHAR, except delimiters
/^([!#\$%&'\*\+\-\.\^_`\|~0-9a-z]+):\s*([\x20-\x7e]*?)\s*$/i
Instance Attribute Summary collapse
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
Instance Method Summary collapse
Instance Attribute Details
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
38 39 40 |
# File 'lib/websocket/http/headers.rb', line 38 def headers @headers end |
Instance Method Details
#complete? ⇒ Boolean
47 48 49 |
# File 'lib/websocket/http/headers.rb', line 47 def complete? @stage == 2 end |
#error? ⇒ Boolean
51 52 53 |
# File 'lib/websocket/http/headers.rb', line 51 def error? @stage == -1 end |
#initialize ⇒ Object
40 41 42 43 44 45 |
# File 'lib/websocket/http/headers.rb', line 40 def initialize @buffer = [] @env = {} @headers = {} @stage = 0 end |
#parse(chunk) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/websocket/http/headers.rb', line 55 def parse(chunk) chunk.each_byte do |octet| if octet == LF and @stage < 2 @buffer.pop if @buffer.last == CR if @buffer.empty? complete if @stage == 1 else result = case @stage when 0 then start_line(string_buffer) when 1 then header_line(string_buffer) end if result @stage = 1 else error end end @buffer = [] else @buffer << octet if @stage >= 0 error if @stage < 2 and @buffer.size > MAX_LINE_LENGTH end end @env['rack.input'] = StringIO.new(string_buffer) end |