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