/**
   * This is used to acquire all the individual header values from the message. The header values
   * provided by this are unparsed and represent the actual string values that have been added to
   * the message keyed by a given header name.
   *
   * @param name the name of the header to get the values for
   * @return this returns a list of the values for the header name
   */
  @Override
  public List<String> getAll(String name) {
    String token = name.toLowerCase();
    Series series = this.values.get(token);

    if (series == null) return this.getAll(name, token);
    return series.getValues();
  }
  /**
   * This is used to acquire all the individual header values from the message. The header values
   * provided by this are unparsed and represent the actual string values that have been added to
   * the message keyed by a given header name.
   *
   * @param name the name of the header to get the values for
   * @return this returns a list of the values for the header name
   */
  public List<String> getAll(String name) {
    String token = name.toLowerCase();
    Series series = values.get(token);

    if (series == null) {
      return getAll(name, token);
    }
    return series.getValues();
  }
  /**
   * This is used to acquire all the individual header values from the message. The header values
   * provided by this are unparsed and represent the actual string values that have been added to
   * the message keyed by a given header name.
   *
   * @param name the name of the header to get the values for
   * @param token this provides a lower case version of the header
   * @return this returns a list of the values for the header name
   */
  private List<String> getAll(String name, String token) {
    Series series = new Series();
    String value = this.names.get(token);

    if (value == null) {
      this.names.put(token, name);
    }
    this.values.put(token, series);

    return series.getValues();
  }