43: def receive_data data
44: if @lbp_mode == :lines
45: begin
46: @lpb_buffer.extract(data).each do |line|
47: receive_line(line.chomp) if respond_to?(:receive_line)
48: end
49: rescue Exception
50: receive_error('overlength line') if respond_to?(:receive_error)
51: close_connection
52: return
53: end
54: else
55: if @lbp_binary_limit > 0
56: wanted = @lbp_binary_limit - @lbp_binary_bytes_received
57: chunk = nil
58: if data.length > wanted
59: chunk = data.slice!(0...wanted)
60: else
61: chunk = data
62: data = ""
63: end
64: @lbp_binary_buffer[@lbp_binary_bytes_received...(@lbp_binary_bytes_received+chunk.length)] = chunk
65: @lbp_binary_bytes_received += chunk.length
66: if @lbp_binary_bytes_received == @lbp_binary_limit
67: receive_binary_data(@lbp_binary_buffer) if respond_to?(:receive_binary_data)
68: lbp_init_line_state
69: end
70: receive_data(data) if data.length > 0
71: else
72: receive_binary_data(data) if respond_to?(:receive_binary_data)
73: data = ""
74: end
75: end
76: end