code: def get_messages_from_stream(data):
      
      messages = []
      iterator = HEADER_RE.finditer(data)
      last_pos = 0
      for match in iterator:
          pos = match.span()[0]
          header = read_machine_header(data[pos:])
          h_len = __get_machine_header_length(header)
          cur_last_pos = pos + h_len + header['meta_len'] + header['data_len']
  
          if cur_last_pos > len(data):
              break
  
          header, meta, bin_data = parse_message(data[pos:])
          messages.append({'header': header, 'meta': meta, 'data': bin_data})
  
          last_pos = cur_last_pos
  
      data = data[last_pos:]
      return messages, data
docs: Extract complete messages from stream and cut out them from stream.
  
      @data - stream binary data
      @return - [list of messages, choped stream data]