/** * This reads the subtype from the MIME type. This will fill the subtype <code>ParseBuffer</code>. * This will read all chars upto but not including the first instance of a ';'. The subtype of a * media-type as defined by RFC 2616 is <code>type/subtype;param=val;param2=val</code>. */ private void secondary() { while (off < count) { if (buf[off] == ';') { break; } type.append(buf[off]); secondary.append(buf[off]); off++; } }
/** * This reads the type from the MIME type. This will fill the type <code>ParseBuffer</code>. This * will read all chars upto but not including the first instance of a '/'. The type of a * media-type as defined by RFC 2616 is <code>type/subtype;param=val;param2=val</code>. */ private void primary() { while (off < count) { if (buf[off] == '/') { type.append('/'); break; } type.append(buf[off]); primary.append(buf[off]); off++; } }
/** * This will simply read all characters from the buffer before the first '=' character. This * represents a parameter name (see RFC 2616 for token). The parameter name is not buffered it is * simply read from the buffer. This will not cause an <code>IndexOutOfBoundsException</code> as * each offset is checked before it is acccessed. */ private void name() { while (off < count) { if (buf[off] == '=') { break; } name.append(buf[off]); off++; } }
/** * This is used to read the value from the <code>charset</code> param. This will fill the <code> * charset</code> <code>ParseBuffer</code> and with the <code>charset</code> value. This will read * a literal or a token as the <code>charset</code> value. If the <code>charset</code> is a * literal then the quotes will be read as part of the charset. */ private void charset() { if (buf[off] == '"') { charset.append('"'); for (off++; off < count; ) { charset.append(buf[off]); if (buf[off++] == '"') if (buf[off - 2] != '\\') { break; } } } else { while (off < count) { if (buf[off] == ';') { break; } charset.append(buf[off]); off++; } } }
/** * This is used to read a parameters value from the buf. This will read all <code>char</code>'s * upto but excluding the first terminal <code>char</code> encountered from the off within the * buf, or if the value is a literal it will read a literal from the buffer (literal is any data * between quotes except if the quote is prefixed with a backward slash character). */ private void value() { if (quote(buf[off])) { for (off++; off < count; ) { if (quote(buf[off])) { if (buf[++off - 2] != '\\') { break; } } value.append(buf[off++]); } } else { while (off < count) { if (buf[off] == ';') { break; } value.append(buf[off]); off++; } } }
/** * This sets the secondary type to whatever value is in the string provided is. If the string is * null then this will contain a null string for the secondary type of the parameter, which is * likely invalid in most cases. * * @param value the type to set for the primary type of this */ public void setSecondary(String value) { type.reset(primary); type.append('/'); type.append(value); secondary.reset(value); }