46: def receive_line line
47: case @hc_mode
48: when :discard_blanks
49: unless line == ""
50: @hc_mode = :headers
51: receive_line line
52: end
53: when :headers
54: if line == ""
55: raise "unrecognized state" unless @hc_headers.length > 0
56: if respond_to?(:receive_headers)
57: receive_headers @hc_headers
58: end
59:
60: if @hc_content_length.to_i > 0
61: set_binary_mode @hc_content_length
62: else
63: dispatch_request
64: end
65: else
66: @hc_headers << line
67: if ContentLengthPattern =~ line
68:
69:
70: raise "extraneous content-length header" if @hc_content_length
71: @hc_content_length = $1.to_i
72: end
73: if @hc_headers.length == 1 and respond_to?(:receive_first_header_line)
74: receive_first_header_line line
75: end
76: end
77: else
78: raise "internal error, unsupported mode"
79: end
80: end