License:
BSD style: see license.txt

Version:
Initial release: April 2004

author:
Kris

  • struct HttpToken ;
  • Struct used to expose freachable HttpToken instances.

  • class HttpTokens : tango.io.protocol.model.IWriter.IWritable;
  • Maintains a set of HTTP tokens. These tokens include headers, query- parameters, and anything else vaguely related. Both input and output are supported, though a subclass may choose to expose as read-only.

    All tokens are mapped directly onto a buffer, so there is no memory allocation or copying involved.

    Note that this class does not support deleting tokens, per se. Instead it marks tokens as being 'unused' by setting content to null, avoiding unwarranted reshaping of the token stack. The token stack is reused as time goes on, so there's only minor runtime overhead.


  • this(char separator, bool inclusive = false);
  • Construct a set of tokens based upon the given delimiter, and an indication of whether said delimiter should be considered part of the left side (effectively the name).

    The latter is useful with headers, since the seperating ':' character should really be considered part of the name for purposes of subsequent token matching.



  • this(HttpTokens source);
  • Clone a source set of HttpTokens

  • abstract void parse (IBuffer input);
  • Read all tokens. Everything is mapped rather than being allocated & copied

  • void parse (char[] content);
  • Parse an input string.

  • HttpTokens reset ();
  • Reset this set of tokens.

  • bool isParsed ();
  • Have tokens been parsed yet?

  • void setParsed (bool parsed);
  • Indicate whether tokens have been parsed or not.

  • char[] get (char[] name, char[] ret = null);
  • Return the value of the provided header, or null if the header does not exist

  • int getInt (char[] name, int ret = -1);
  • Return the integer value of the provided header, or the provided default-vaule if the header does not exist

  • Time getDate (char[] name, Time date = epoch);
  • Return the date value of the provided header, or the provided default-value if the header does not exist

  • int opApply (int delegate(ref HttpToken ) dg);
  • Iterate over the set of tokens

  • void write (IWriter writer);
  • Output the token list to the provided writer

  • void produce (void delegate(void[]) consume, char[] eol);
  • Output the token list to the provided consumer

  • protected bool handleMissingSeparator (char[] s, ref HttpToken element);
  • overridable method to handle the case where a token does not have a separator. Apparently, this can happen in HTTP usage

  • FilteredTokens createFilter (char[] match);
  • Create a filter for iterating over the tokens matching a particular name.

  • protected void setOutputBuffer (IBuffer output);
  • ***************** these should be exposed carefully ******************





    Set the output buffer for adding tokens to. This is used by the various mutating classes.


  • protected IBuffer getOutputBuffer ();
  • Return the buffer used for output.

  • char[] formatTokens (IBuffer dst, char[] delim);
  • Return a char[] representing the output. An empty array is returned if output was not configured. This perhaps could just return our 'output' buffer content, but that would not reflect deletes, or seperators. Better to do it like this instead, for a small cost.

  • protected void add (char[] name, void delegate(IBuffer) dg);
  • Add a token with the given name. The content is provided via the specified delegate. We stuff this name & content into the output buffer, and map a new Token onto the appropriate buffer slice.

  • protected void add (char[] name, char[] value);
  • Add a simple name/value pair to the output

  • protected void addInt (char[] name, int value);
  • Add a name/integer pair to the output

  • protected void addDate (char[] name, Time value);
  • Add a name/date(long) pair to the output

  • protected bool remove (char[] name);
  • remove a token from our list. Returns false if the named token is not found.

    Copyright (c) 2004 Kris Bell. All rights reserved :: page rendered by CandyDoc