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