
/****  Preprocessor magic ****/

/* String table with entries starting at 0 and numbered upwards. */
#if !defined(LINEAR)
#error "Required macro LINEAR is missing."
#endif

/* Entry in a LINEAR table.  Default is to do nothing for it. */
#if !defined(STRING)
#define STRING
#endif

/* String table where entries have assigned numbers.  Multiple
 * entries can have the same number (the first listed entry is used
 * when looking up by number). */
#if !defined(NUMBERED)
#define NUMBERED LINEAR
#endif

/* Entry in a NUMBERED table */
#if !defined(ASSIGN)
#define ASSIGN(string, number) STRING(string)
#endif

/* Entry in a versioned NUMBERED table */
#if !defined(VASSIGN)
#define VASSIGN(version, string, number) VSTRING(version, string)
#endif

/* Just like LINEAR, but an enumerated type name##_enum is defined for
 * the entries. */
#if !defined(NAMED)
#define NAMED LINEAR
#endif

/* Entry in a NAMED table */
#if !defined(NSTRING)
#define NSTRING(string, name) STRING(string)
#endif

/* Entry in a versioned NAMED table */
#if !defined(VNSTRING)
#define VNSTRING(version, string, name) VSTRING(version, string)
#endif

/**** End of preprocessor magic.  Tables start here. ****/

/*
 * Wireless Session Protocol (WSP) 1.0 values.
 *
 * Document: OMA-WAP-TS-WSP-V1_0-20020920-C
 * URL: http://technical.openmobilealliance.org/technical/release_program/docs/Browser_Protocol_Stack/V2_1-20050204/OMA-WAP-TS-WSP-V1_0-20020920-C.pdf
 */

/* Table 39. Header Field Name Assignments. Note that headers Accept-Charset, Accept-Encoding,
 * Cache-Control and Content-Range are defined twice. First ones should be used only for
 * compatibility reasons. */
NAMED(header,
VNSTRING(WSP_1_1, "Accept", WSP_HEADER_ACCEPT)
VNSTRING(WSP_1_1, "Accept-Charset", WSP_HEADER_ACCEPT_CHARSET)
VNSTRING(WSP_1_1, "Accept-Encoding", WSP_HEADER_ACCEPT_ENCODING)
VNSTRING(WSP_1_1, "Accept-Language", WSP_HEADER_ACCEPT_LANGUAGE)
VNSTRING(WSP_1_1, "Accept-Ranges", WSP_HEADER_ACCEPT_RANGES)
VNSTRING(WSP_1_1, "Age", WSP_HEADER_AGE)
VNSTRING(WSP_1_1, "Allow", WSP_HEADER_ALLOW)
VNSTRING(WSP_1_1, "Authorization", WSP_HEADER_AUTHORIZATION)
VNSTRING(WSP_1_1, "Cache-Control", WSP_HEADER_CACHE_CONTROL)
VNSTRING(WSP_1_1, "Connection", WSP_HEADER_CONNECTION)
VNSTRING(WSP_1_1, "Content-Base", WSP_HEADER_CONTENT_BASE)
VNSTRING(WSP_1_1, "Content-Encoding", WSP_HEADER_CONTENT_ENCODING)
VNSTRING(WSP_1_1, "Content-Language", WSP_HEADER_CONTENT_LANGUAGE)
VNSTRING(WSP_1_1, "Content-Length", WSP_HEADER_CONTENT_LENGTH)
VNSTRING(WSP_1_1, "Content-Location", WSP_HEADER_CONTENT_LOCATION)
VNSTRING(WSP_1_1, "Content-MD5", WSP_HEADER_CONTENT_MD5)
VNSTRING(WSP_1_1, "Content-Range", WSP_HEADER_CONTENT_RANGE)
VNSTRING(WSP_1_1, "Content-Type", WSP_HEADER_CONTENT_TYPE)
VNSTRING(WSP_1_1, "Date", WSP_HEADER_DATE)
VNSTRING(WSP_1_1, "Etag", WSP_HEADER_ETAG)
VNSTRING(WSP_1_1, "Expires", WSP_HEADER_EXPIRES)
VNSTRING(WSP_1_1, "From", WSP_HEADER_FROM)
VNSTRING(WSP_1_1, "Host", WSP_HEADER_HOST)
VNSTRING(WSP_1_1, "If-Modified-Since", WSP_HEADER_IF_MODIFIED_SINCE)
VNSTRING(WSP_1_1, "If-Match", WSP_HEADER_IF_MATCH)
VNSTRING(WSP_1_1, "If-None-Match", WSP_HEADER_IF_NONE_MATCH)
VNSTRING(WSP_1_1, "If-Range", WSP_HEADER_IF_RANGE)
VNSTRING(WSP_1_1, "If-Unmodified-Since", WSP_HEADER_IF_UNMODIFIED_SINCE)
VNSTRING(WSP_1_1, "Location", WSP_HEADER_LOCATION)
VNSTRING(WSP_1_1, "Last-Modified", WSP_HEADER_LAST_MODIFIED)
VNSTRING(WSP_1_1, "Max-Forwards", WSP_HEADER_MAX_FORWARDS)
VNSTRING(WSP_1_1, "Pragma", WSP_HEADER_PRAGMA)
VNSTRING(WSP_1_1, "Proxy-Authenticate", WSP_HEADER_PROXY_AUTHENTICATE)
VNSTRING(WSP_1_1, "Proxy-Authorization", WSP_HEADER_PROXY_AUTHORIZATION)
VNSTRING(WSP_1_1, "Public", WSP_HEADER_PUBLIC)
VNSTRING(WSP_1_1, "Range", WSP_HEADER_RANGE)
VNSTRING(WSP_1_1, "Referer", WSP_HEADER_REFERER)
VNSTRING(WSP_1_1, "Retry-After", WSP_HEADER_RETRY_AFTER)
VNSTRING(WSP_1_1, "Server", WSP_HEADER_SERVER)
VNSTRING(WSP_1_1, "Transfer-Encoding", WSP_HEADER_TRANSFER_ENCODING)
VNSTRING(WSP_1_1, "Upgrade", WSP_HEADER_UPGRADE)
VNSTRING(WSP_1_1, "User-Agent", WSP_HEADER_USER_AGENT)
VNSTRING(WSP_1_1, "Vary", WSP_HEADER_VARY)
VNSTRING(WSP_1_1, "Via", WSP_HEADER_VIA)
VNSTRING(WSP_1_1, "Warning", WSP_HEADER_WARNING)
VNSTRING(WSP_1_1, "WWW-Authenticate", WSP_HEADER_WWW_AUTHENTICATE)
VNSTRING(WSP_1_1, "Content-Disposition", WSP_HEADER_CONTENT_DISPOSITION)
VNSTRING(WSP_1_2, "X-Wap-Application-Id", WSP_HEADER_X_WAP_APPLICATION_ID)
VNSTRING(WSP_1_2, "X-Wap-Content-URI", WSP_HEADER_X_WAP_CONTENT_URI)
VNSTRING(WSP_1_2, "X-Wap-Initiator-URI", WSP_HEADER_X_WAP_INITIATOR_URI)
VNSTRING(WSP_1_2, "Accept-Application", WSP_HEADER_ACCEPT_APPLICATION)
VNSTRING(WSP_1_2, "Bearer-Indication", WSP_HEADER_BEARER_INDICATION)
VNSTRING(WSP_1_2, "Push-Flag", WSP_HEADER_PUSH_FLAG)
VNSTRING(WSP_1_2, "Profile", WSP_HEADER_PROFILE)
VNSTRING(WSP_1_2, "Profile-Diff", WSP_HEADER_PROFILE_DIFF)
VNSTRING(WSP_1_2, "Profile-Warning", WSP_HEADER_PROFILE_WARNING)
VNSTRING(WSP_1_3, "Expect", WSP_HEADER_EXPECT)
VNSTRING(WSP_1_3, "TE", WSP_HEADER_TE)
VNSTRING(WSP_1_3, "Trailer", WSP_HEADER_TRAILER)
VNSTRING(WSP_1_3, "Accept-Charset", WSP_HEADER_ACCEPT_CHARSET_V13)
VNSTRING(WSP_1_3, "Accept-Encoding", WSP_HEADER_ACCEPT_ENCODING_V13)
VNSTRING(WSP_1_3, "Cache-Control", WSP_HEADER_CACHE_CONTROL_V13)
VNSTRING(WSP_1_3, "Content-Range", WSP_HEADER_CONTENT_RANGE_V13)
VNSTRING(WSP_1_3, "X-WAP-Tod", WSP_HEADER_X_WAP_TOD)
VNSTRING(WSP_1_3, "Content-ID", WSP_HEADER_CONTENT_ID)
VNSTRING(WSP_1_3, "Set-Cookie", WSP_HEADER_SET_COOKIE)
VNSTRING(WSP_1_3, "Cookie", WSP_HEADER_COOKIE)
VNSTRING(WSP_1_3, "Encoding-Version", WSP_HEADER_ENCODING_VERSION)
VNSTRING(WSP_1_4, "Profile-Warning", WSP_HEADER_PROFILE_WARNING_V14)
VNSTRING(WSP_1_4, "Content-Disposition", WSP_HEADER_CONTENT_DISPOSITION_V14)
VNSTRING(WSP_1_4, "X-WAP-Security", WSP_HEADER_X_WAP_SECURITY)
VNSTRING(WSP_1_4, "Cache-Control", WSP_HEADER_CACHE_CONTROL_V14)
VNSTRING(WSP_1_5, "X-Wap-Loc-Invocation", WSP_HEADER_X_WAP_LOC_INVOCATION)
VNSTRING(WSP_1_5, "X-Wap-Loc-Delivery", WSP_HEADER_X_WAP_LOC_DELIVERY)
)

/* Table 40. Well Known WSP Content Type Codes Assignments. 
 * These have been defined by WINA, 
 * see http://www.wapforum.org/wina/wsp-content-type.htm
 * Now they are maintained by OMNA, see URL
 * 
 * http://www.openmobilealliance.org/tech/omna/index.htm (depricated)
 * http://technical.openmobilealliance.org/tech/omna/omna-wsp-content-type.aspx
 *
 * NOTE: The assigned numbers in the above URL start with 0x00, where
 * the binary token values in the WBXML content start with 0x80.
 */
LINEAR(content_type,
VSTRING(WSP_1_1, "*/*")											/* 0x80 */
VSTRING(WSP_1_1, "text/*")										/* 0x81 */
VSTRING(WSP_1_1, "text/html")									/* 0x82 */
VSTRING(WSP_1_1, "text/plain")									/* 0x83 */
VSTRING(WSP_1_1, "text/x-hdml")									/* 0x84 */
VSTRING(WSP_1_1, "text/x-ttml")									/* 0x85 */
VSTRING(WSP_1_1, "text/x-vCalendar")							/* 0x86 */
VSTRING(WSP_1_1, "text/x-vCard")								/* 0x87 */
VSTRING(WSP_1_1, "text/vnd.wap.wml")							/* 0x88 */
VSTRING(WSP_1_1, "text/vnd.wap.wmlscript")						/* 0x89 */
VSTRING(WSP_1_1, "application/vnd.wap.catc")					/* 0x8A */
VSTRING(WSP_1_1, "multipart/*")									/* 0x8B */
VSTRING(WSP_1_1, "multipart/mixed")								/* 0x8C */
VSTRING(WSP_1_1, "multipart/form-data")							/* 0x8D */
VSTRING(WSP_1_1, "multipart/byteranges")						/* 0x8E */
VSTRING(WSP_1_1, "multipart/alternative")						/* 0x8F */
VSTRING(WSP_1_1, "application/*")								/* 0x90 */
VSTRING(WSP_1_1, "application/java-vm")							/* 0x91 */
VSTRING(WSP_1_1, "application/x-www-form-urlencoded")			/* 0x92 */
VSTRING(WSP_1_1, "application/x-hdmlc")							/* 0x93 */
VSTRING(WSP_1_1, "application/vnd.wap.wmlc")					/* 0x94 */
VSTRING(WSP_1_1, "application/vnd.wap.wmlscriptc")				/* 0x95 */
VSTRING(WSP_1_1, "application/vnd.wap.wsic")					/* 0x96 */
VSTRING(WSP_1_1, "application/vnd.wap.uaprof")					/* 0x97 */
VSTRING(WSP_1_1, "application/vnd.wap.wtls-ca-certificate")		/* 0x98 */
VSTRING(WSP_1_1, "application/vnd.wap.wtls-user-certificate")	/* 0x99 */
VSTRING(WSP_1_1, "application/x-x509-ca-cert")					/* 0x9A */
VSTRING(WSP_1_1, "application/x-x509-user-cert")				/* 0x9B */
VSTRING(WSP_1_1, "image/*")										/* 0x9C */
VSTRING(WSP_1_1, "image/gif")									/* 0x9D */
VSTRING(WSP_1_1, "image/jpeg")									/* 0x9E */
VSTRING(WSP_1_1, "image/tiff")									/* 0x9F */
VSTRING(WSP_1_1, "image/png") 									/* 0xA0 */
VSTRING(WSP_1_1, "image/vnd.wap.wbmp") 							/* 0xA1 */
VSTRING(WSP_1_1, "application/vnd.wap.multipart.*") 			/* 0xA2 */
VSTRING(WSP_1_1, "application/vnd.wap.multipart.mixed") 		/* 0xA3 */
VSTRING(WSP_1_1, "application/vnd.wap.multipart.form-data") 	/* 0xA4 */
VSTRING(WSP_1_1, "application/vnd.wap.multipart.byteranges") 	/* 0xA5 */
VSTRING(WSP_1_1, "application/vnd.wap.multipart.alternative") 	/* 0xA6 */
VSTRING(WSP_1_1, "application/xml") 							/* 0xA7 */
VSTRING(WSP_1_1, "text/xml") 									/* 0xA8 */
VSTRING(WSP_1_1, "application/vnd.wap.wbxml") 					/* 0xA9 */
VSTRING(WSP_1_1, "application/x-x968-cross-cert")				/* 0xAA */
VSTRING(WSP_1_1, "application/x-x968-ca-cert") 					/* 0xAB */
VSTRING(WSP_1_1, "application/x-x968-user-cert") 				/* 0xAC */
VSTRING(WSP_1_1, "text/vnd.wap.si") 							/* 0xAD */
VSTRING(WSP_1_2, "application/vnd.wap.sic") 					/* 0xAE */
VSTRING(WSP_1_2, "text/vnd.wap.sl")								/* 0xAF */
VSTRING(WSP_1_2, "application/vnd.wap.slc")						/* 0xB0 */
VSTRING(WSP_1_2, "text/vnd.wap.co")								/* 0xB1 */
VSTRING(WSP_1_2, "application/vnd.wap.coc")						/* 0xB2 */
VSTRING(WSP_1_2, "application/vnd.wap.multipart.related")		/* 0xB3 */
VSTRING(WSP_1_2, "application/vnd.wap.sia")						/* 0xB4 */
VSTRING(WSP_1_3, "text/vnd.wap.connectivity-xml")				/* 0xB5 */
VSTRING(WSP_1_3, "application/vnd.wap.connectivity-wbxml")		/* 0xB6 */
VSTRING(WSP_1_4, "application/pkcs7-mime")						/* 0xB7 */
VSTRING(WSP_1_4, "application/vnd.wap.hashed-certificate")		/* 0xB8 */
VSTRING(WSP_1_4, "application/vnd.wap.signed-certificate")		/* 0xB9 */
VSTRING(WSP_1_4, "application/vnd.wap.cert-response")			/* 0xBA */
VSTRING(WSP_1_4, "application/xhtml+xml")						/* 0xBB */
VSTRING(WSP_1_4, "application/wml+xml")							/* 0xBC */
VSTRING(WSP_1_4, "text/css")									/* 0xBD */
VSTRING(WSP_1_4, "application/vnd.wap.mms-message")				/* 0xBE */
VSTRING(WSP_1_4, "application/vnd.wap.rollover-certificate")	/* 0xBF */
VSTRING(WSP_1_5, "application/vnd.wap.locc+wbxml") 				/* 0xC0 */
VSTRING(WSP_1_5, "application/vnd.wap.loc+xml")					/* 0xC1 */
VSTRING(WSP_1_5, "application/vnd.syncml.dm+wbxml") 			/* 0xC2 */
VSTRING(WSP_1_5, "application/vnd.syncml.dm+xml") 				/* 0xC3 */
VSTRING(WSP_1_5, "application/vnd.syncml.notification") 		/* 0xC4 */
VSTRING(WSP_1_5, "application/vnd.wap.xhtml+xml") 				/* 0xC5 */
VSTRING(WSP_1_5, "application/vnd.wv.csp.cir") 					/* 0xC6 */
VSTRING(WSP_1_5, "application/vnd.oma.dd+xml") 					/* 0xC7 */
VSTRING(WSP_1_5, "application/vnd.oma.drm.message") 			/* 0xC8 */
VSTRING(WSP_1_5, "application/vnd.oma.drm.content")				/* 0xC9 */
VSTRING(WSP_1_5, "application/vnd.oma.drm.rights+xml") 			/* 0xCA */
VSTRING(WSP_1_5, "application/vnd.oma.drm.rights+wbxml")		/* 0xCB */
VSTRING(WSP_1_5, "application/vnd.wv.csp+xml")					/* 0xCC */
VSTRING(WSP_1_5, "application/vnd.wv.csp+wbxml")				/* 0xCD */
VSTRING(WSP_1_5, "application/vnd.syncml.ds.notification")		/* 0xCE */
VSTRING(WSP_1_6, "audio/*")										/* 0xCF */
VSTRING(WSP_1_6, "video/*") 									/* 0xD0 */
VSTRING(WSP_TBD, "application/vnd.oma.dd2+xml")					/* 0xD1 */
VSTRING(WSP_TBD, "application/mikey") 							/* 0xD2 */
VSTRING(WSP_TBD, "application/vnd.oma.dcd")						/* 0xD3 */
VSTRING(WSP_TBD, "application/vnd.oma.dcdc")					/* 0xD4 */
VSTRING(WSP_TBD, "text/x-vMessage")								/* 0xD5 */
VSTRING(WSP_TBD, "application/vnd.omads-email+wbxml")			/* 0xD6 */
VSTRING(WSP_TBD, "text/x-vBookmark")							/* 0xD7 */
VSTRING(WSP_TBD, "application/vnd.syncml.dm.notification")		/* 0xD8 */
VSTRING(WSP_TBD, "")											/* 0xD9 */
VSTRING(WSP_TBD, "application/octet-stream")					/* 0xDA */
)

/* Registered WSP Content Type Codes Assignments. 
 * Now they are maintained by OMNA, see URL
 * 
 * http://www.openmobilealliance.org/tech/omna/index.htm (depricated)
 * http://technical.openmobilealliance.org/tech/omna/omna-wsp-content-type.aspx
 */
NUMBERED(content_type_registered,
ASSIGN("application/vnd.uplanet.cacheop-wbxml", 0x0201)
ASSIGN("application/vnd.uplanet.signal", 0x0202)
ASSIGN("application/vnd.uplanet.alert-wbxml", 0x0203)
ASSIGN("application/vnd.uplanet.list-wbxml", 0x0204)
ASSIGN("application/vnd.uplanet.listcmd-wbxml", 0x0205)
ASSIGN("application/vnd.uplanet.channel-wbxml", 0x0206)
ASSIGN("application/vnd.uplanet.provisioning-status-uri", 0x0207)
ASSIGN("x-wap.multipart/vnd.uplanet.header-set", 0x0208)
ASSIGN("application/vnd.uplanet.bearer-choice-wbxml", 0x0209)
ASSIGN("application/vnd.phonecom.mmc-wbxml", 0x020A)
ASSIGN("application/vnd.nokia.syncset+wbxml", 0x020B)
ASSIGN("image/x-up-wpng", 0x020C)
ASSIGN("application/iota.mmc-wbxml", 0x0300)
ASSIGN("application/iota.mmc-xml", 0x0301)
ASSIGN("application/vnd.syncml+xml", 0x0302)
ASSIGN("application/vnd.syncml+wbxml", 0x0303)
ASSIGN("text/vnd.wap.emn+xml", 0x0304)
ASSIGN("text/calendar", 0x0305)
ASSIGN("application/vnd.omads-email+xml", 0x0306)
ASSIGN("application/vnd.omads-file+xml", 0x0307)
ASSIGN("application/vnd.omads-folder+xml", 0x0308)
ASSIGN("text/directory;profile=vCard", 0x0309)
ASSIGN("application/vnd.wap.emn+wbxml", 0x030A)
ASSIGN("application/vnd.nokia.ipdc-purchase-response", 0x030B)
ASSIGN("application/vnd.motorola.screen3+xml", 0x030C)
ASSIGN("application/vnd.motorola.screen3+gzip", 0x030D)
ASSIGN("application/vnd.cmcc.setting+wbxml", 0x030E)
ASSIGN("application/vnd.cmcc.bombing+wbxml", 0x030F)
ASSIGN("application/vnd.docomo.pf", 0x0310)
ASSIGN("application/vnd.docomo.ub", 0x0311)
ASSIGN("application/vnd.omaloc-supl-init", 0x0312)
ASSIGN("application/vnd.oma.group-usage-list+xml", 0x0313)
ASSIGN("application/oma-directory+xml", 0x0314)
ASSIGN("application/vnd.docomo.pf2", 0x0315)
ASSIGN("application/vnd.oma.drm.roap-trigger+wbxml", 0x0316)
ASSIGN("application/vnd.sbm.mid2", 0x0317)
ASSIGN("application/vnd.wmf.bootstrap", 0x0318)
ASSIGN("application/vnc.cmcc.dcd+xml", 0x0319)
ASSIGN("application/vnd.sbm.cid", 0x031A)
ASSIGN("application/vnd.oma.bcast.provisioningtrigger", 0x031B)
ASSIGN("application/vnd.docomo.dm", 0x031C)
ASSIGN("application/vnd.oma.scidm.messages+xml", 0x031D)
ASSIGN("application/vnd.innopath.wamp.notification", 0x031E)
)

/* Table 42, Character Set Assignment (partial) */
/* The full list is at
 *   ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets
 * but the WSP standard lists these values explicitly.
 */
NUMBERED(charset,
ASSIGN("big5", 2026)				/* 0x07EA */
ASSIGN("iso-10646-ucs-2", 1000)		/* 0x03E8 */
ASSIGN("iso-8859-1", 4)				/* 0x04 */
ASSIGN("iso-8859-2", 5)				/* 0x05 */
ASSIGN("iso-8859-3", 6)				/* 0x06 */
ASSIGN("iso-8859-4", 7)				/* 0x07 */
ASSIGN("iso-8859-5", 8)				/* 0x08 */
ASSIGN("iso-8859-6", 9)				/* 0x09 */
ASSIGN("iso-8859-7", 10)			/* 0x0A */
ASSIGN("iso-8859-8", 11)			/* 0x0B */
ASSIGN("iso-8859-9", 12)			/* 0x0C */
ASSIGN("shift_JIS", 17)				/* 0x11 */
ASSIGN("us-ascii", 3)				/* 0x03 */
ASSIGN("utf-8", 106)				/* 0x6A */
ASSIGN("utf-16", 1015)				/* 0x03F7 */
)

/* Table 38, Well-Known Parameter Assignments 
 * Now defined by OMNA, see
 * http://www.openmobilealliance.org/tech/omna/omna-wsp-header-param.htm (depricated)
 * http://technical.openmobilealliance.org/tech/omna/omna-wsp-header-param.aspx
 */
NUMBERED(parameter,
VASSIGN(WSP_1_1, "q", 0x00)
VASSIGN(WSP_1_1, "charset", 0x01)
VASSIGN(WSP_1_1, "level", 0x02)
VASSIGN(WSP_1_1, "type", 0x03)
VASSIGN(WSP_1_1, "uaprof", 0x04)
VASSIGN(WSP_1_1, "name", 0x05)
VASSIGN(WSP_1_1, "filename", 0x06)
VASSIGN(WSP_1_1, "differences", 0x07)
VASSIGN(WSP_1_1, "padding", 0x08)
VASSIGN(WSP_1_2, "type", 0x09)
VASSIGN(WSP_1_2, "start", 0x0A)
VASSIGN(WSP_1_2, "start-info", 0x0B)
VASSIGN(WSP_1_3, "comment", 0x0C)
VASSIGN(WSP_1_3, "domain", 0x0D)
VASSIGN(WSP_1_3, "max-age", 0x0E)
VASSIGN(WSP_1_3, "path", 0x0F)
VASSIGN(WSP_1_3, "secure", 0x10)
VASSIGN(WSP_1_4, "sec", 0x11)
VASSIGN(WSP_1_4, "mac", 0x12)
VASSIGN(WSP_1_4, "creation-date", 0x13)
VASSIGN(WSP_1_4, "modification-date", 0x14)
VASSIGN(WSP_1_4, "read-date", 0x15)
VASSIGN(WSP_1_4, "size", 0x16)
VASSIGN(WSP_1_4, "name", 0x17)
VASSIGN(WSP_1_4, "filename", 0x18)
VASSIGN(WSP_1_4, "start", 0x19)
VASSIGN(WSP_1_4, "start-info", 0x1A)
VASSIGN(WSP_1_4, "comment", 0x1B)
VASSIGN(WSP_1_4, "domain", 0x1C)
VASSIGN(WSP_1_4, "path", 0x1D)
)

/* 8.4.2.18, Content encoding field */
LINEAR(encoding,
STRING("gzip")
STRING("compress")
STRING("deflate")
)

/* 8.4.2.11, Accept ranges field */
LINEAR(ranges,
STRING("none")
STRING("bytes")
)

/* 8.4.2.15, Cache-control field */
NAMED(cache_control,
NSTRING("no-cache", WSP_CACHE_CONTROL_NO_CACHE)
NSTRING("no-store", WSP_CACHE_CONTROL_NO_STORE)
NSTRING("max-age", WSP_CACHE_CONTROL_MAX_AGE)
NSTRING("max-stale", WSP_CACHE_CONTROL_MAX_STALE)
NSTRING("min-fresh", WSP_CACHE_CONTROL_MIN_FRESH)
NSTRING("only-if-cached", WSP_CACHE_CONTROL_ONLY_IF_CACHED)
NSTRING("public", WSP_CACHE_CONTROL_PUBLIC)
NSTRING("private", WSP_CACHE_CONTROL_PRIVATE)
NSTRING("no-transform", WSP_CACHE_CONTROL_NO_TRANSFORM)
NSTRING("must-revalidate", WSP_CACHE_CONTROL_MUST_REVALIDATE)
NSTRING("proxy-revalidate", WSP_CACHE_CONTROL_PROXY_REVALIDATE)
NSTRING("s-maxage", WSP_CACHE_CONTROL_S_MAXAGE)
)

/* 8.4.2.53, Content-disposition field */
LINEAR(disposition,
STRING("form-data")
STRING("attachment")
STRING("inline")
)

/* Table 41, ISO 639 Language Assignments */
/* For some reason this table was incomplete in the spec.  The languages
 * were listed, but not their abbreviations. */
NUMBERED(language,
ASSIGN("*", 0) /* Special any-language value */
ASSIGN("aa", 0x01)  /* Afar */
ASSIGN("ab", 0x02)  /* Abkhazian */
ASSIGN("af", 0x03)  /* Afrikaans */
ASSIGN("am", 0x04)  /* Amharic */
ASSIGN("ar", 0x05)  /* Arabic */
ASSIGN("as", 0x06)  /* Assamese */
ASSIGN("ay", 0x07)  /* Aymara */
ASSIGN("az", 0x08)  /* Azerbaijani */
ASSIGN("ba", 0x09)  /* Bashkir */
ASSIGN("be", 0x0a)  /* Byelorussian */
ASSIGN("bg", 0x0b)  /* Bulgarian */
ASSIGN("bh", 0x0c)  /* Bihari */
ASSIGN("bi", 0x0d)  /* Bislama */
ASSIGN("bn", 0x0e)  /* Bengali; Bangla */
ASSIGN("bo", 0x0f)  /* Tibetan */
ASSIGN("br", 0x10)  /* Breton */
ASSIGN("ca", 0x11)  /* Catalan */
ASSIGN("co", 0x12)  /* Corsican */
ASSIGN("cs", 0x13)  /* Czech */
ASSIGN("cy", 0x14)  /* Welsh */
ASSIGN("da", 0x15)  /* Danish */
ASSIGN("de", 0x16)  /* German */
ASSIGN("dz", 0x17)  /* Bhutani */
ASSIGN("el", 0x18)  /* Greek */
ASSIGN("en", 0x19)  /* English */
ASSIGN("eo", 0x1a)  /* Esperanto */
ASSIGN("es", 0x1b)  /* Spanish */
ASSIGN("et", 0x1c)  /* Estonian */
ASSIGN("eu", 0x1d)  /* Basque */
ASSIGN("fa", 0x1e)  /* Persian */
ASSIGN("fi", 0x1f)  /* Finnish */
ASSIGN("fj", 0x20)  /* Fiji */
ASSIGN("fo", 0x82)  /* Faroese */
ASSIGN("fr", 0x22)  /* French */
ASSIGN("fy", 0x83)  /* Frisian */
ASSIGN("ga", 0x24)  /* Irish */
ASSIGN("gd", 0x25)  /* Scots Gaelic */
ASSIGN("gl", 0x26)  /* Galician */
ASSIGN("gn", 0x27)  /* Guarani */
ASSIGN("gu", 0x28)  /* Gujarati */
ASSIGN("ha", 0x29)  /* Hausa */
ASSIGN("he", 0x2a)  /* Hebrew (formerly iw) */
ASSIGN("hi", 0x2b)  /* Hindi */
ASSIGN("hr", 0x2c)  /* Croatian */
ASSIGN("hu", 0x2d)  /* Hungarian */
ASSIGN("hy", 0x2e)  /* Armenian */
ASSIGN("ia", 0x84)  /* Interlingua */
ASSIGN("id", 0x30)  /* Indonesian (formerly in) */
ASSIGN("ie", 0x86)  /* Interlingue */
ASSIGN("ik", 0x87)  /* Inupiak */
ASSIGN("is", 0x33)  /* Icelandic */
ASSIGN("it", 0x34)  /* Italian */
ASSIGN("iu", 0x89)  /* Inuktitut */
ASSIGN("ja", 0x36)  /* Japanese */
ASSIGN("jw", 0x37)  /* Javanese */
ASSIGN("ka", 0x38)  /* Georgian */
ASSIGN("kk", 0x39)  /* Kazakh */
ASSIGN("kl", 0x8a)  /* Greenlandic */
ASSIGN("km", 0x3b)  /* Cambodian */
ASSIGN("kn", 0x3c)  /* Kannada */
ASSIGN("ko", 0x3d)  /* Korean */
ASSIGN("ks", 0x3e)  /* Kashmiri */
ASSIGN("ku", 0x3f)  /* Kurdish */
ASSIGN("ky", 0x40)  /* Kirghiz */
ASSIGN("la", 0x8b)  /* Latin */
ASSIGN("ln", 0x42)  /* Lingala */
ASSIGN("lo", 0x43)  /* Laothian */
ASSIGN("lt", 0x44)  /* Lithuanian */
ASSIGN("lv", 0x45)  /* Latvian, Lettish */
ASSIGN("mg", 0x46)  /* Malagasy */
ASSIGN("mi", 0x47)  /* Maori */
ASSIGN("mk", 0x48)  /* Macedonian */
ASSIGN("ml", 0x49)  /* Malayalam */
ASSIGN("mn", 0x4a)  /* Mongolian */
ASSIGN("mo", 0x4b)  /* Moldavian */
ASSIGN("mr", 0x4c)  /* Marathi */
ASSIGN("ms", 0x4d)  /* Malay */
ASSIGN("mt", 0x4e)  /* Maltese */
ASSIGN("my", 0x4f)  /* Burmese */
ASSIGN("na", 0x81)  /* Nauru */
ASSIGN("ne", 0x51)  /* Nepali */
ASSIGN("nl", 0x52)  /* Dutch */
ASSIGN("no", 0x53)  /* Norwegian */
ASSIGN("oc", 0x54)  /* Occitan */
ASSIGN("om", 0x55)  /* (Afan) Oromo */
ASSIGN("or", 0x56)  /* Oriya */
ASSIGN("pa", 0x57)  /* Punjabi */
ASSIGN("pl", 0x58)  /* Polish */
ASSIGN("ps", 0x59)  /* Pashto, Pushto */
ASSIGN("pt", 0x5a)  /* Portuguese */
ASSIGN("qu", 0x5b)  /* Quechua */
ASSIGN("rm", 0x8c)  /* Rhaeto-Romance */
ASSIGN("rn", 0x5d)  /* Kirundi */
ASSIGN("ro", 0x5e)  /* Romanian */
ASSIGN("ru", 0x5f)  /* Russian */
ASSIGN("rw", 0x60)  /* Kinyarwanda */
ASSIGN("sa", 0x61)  /* Sanskrit */
ASSIGN("sd", 0x62)  /* Sindhi */
ASSIGN("sg", 0x63)  /* Sangro (Sangho) */
ASSIGN("sh", 0x64)  /* Serbo-Croatian */
ASSIGN("si", 0x65)  /* Sinhalese */
ASSIGN("sk", 0x66)  /* Slovak */
ASSIGN("sl", 0x67)  /* Slovenian */
ASSIGN("sm", 0x68)  /* Samoan */
ASSIGN("sn", 0x69)  /* Shona */
ASSIGN("so", 0x6a)  /* Somali */
ASSIGN("sq", 0x6b)  /* Albanian */
ASSIGN("sr", 0x6c)  /* Serbian */
ASSIGN("ss", 0x6d)  /* Siswati */
ASSIGN("st", 0x6e)  /* Sesotho */
ASSIGN("su", 0x6f)  /* Sundanese */
ASSIGN("sv", 0x70)  /* Swedish */
ASSIGN("sw", 0x71)  /* Swahili */
ASSIGN("ta", 0x72)  /* Tamil */
ASSIGN("te", 0x73)  /* Telugu */
ASSIGN("tg", 0x74)  /* Tajik */
ASSIGN("th", 0x75)  /* Thai */
ASSIGN("ti", 0x76)  /* Tigrinya */
ASSIGN("tk", 0x77)  /* Turkmen */
ASSIGN("tl", 0x78)  /* Tagalog */
ASSIGN("tn", 0x79)  /* Setswana */
ASSIGN("to", 0x7a)  /* Tonga */
ASSIGN("tr", 0x7b)  /* Turkish */
ASSIGN("ts", 0x7c)  /* Tsonga */
ASSIGN("tt", 0x7d)  /* Tatar */
ASSIGN("tw", 0x7e)  /* Twi */
ASSIGN("ug", 0x7f)  /* Uighur */
ASSIGN("uk", 0x50)  /* Ukrainian */
ASSIGN("ur", 0x21)  /* Urdu */
ASSIGN("uz", 0x23)  /* Uzbek */
ASSIGN("vi", 0x2f)  /* Vietnamese */
ASSIGN("vo", 0x85)  /* Volapuk */
ASSIGN("wo", 0x31)  /* Wolof */
ASSIGN("xh", 0x32)  /* Xhosa */
ASSIGN("yi", 0x88)  /* Yiddish (formerly ji) */
ASSIGN("yo", 0x35)  /* Yoruba */
ASSIGN("za", 0x3a)  /* Zhuang */
ASSIGN("zh", 0x41)  /* Chinese */
ASSIGN("zu", 0x5c)  /* Zulu */
)

/* Table 34, Well known methods. */
NUMBERED(method,
ASSIGN("GET", 0x40)
ASSIGN("OPTIONS", 0x41)
ASSIGN("HEAD", 0x42)
ASSIGN("DELETE", 0x43)
ASSIGN("TRACE", 0x44)
ASSIGN("POST", 0x60)
ASSIGN("PUT", 0x61)
ASSIGN("DATA", 0x80)
)

/* Connection-value tokens, from section 8.4.2.16 */
LINEAR(connection,
STRING("close")
)

/* Transfer-encoding values, from section 8.4.2.46 */
LINEAR(transfer_encoding,
STRING("chunked")
)

/* Well-known bearer type codes, from WDP Appendix C */
LINEAR(bearer_indication,
STRING("any_ipv4")
STRING("any_ipv6")
STRING("gsm_usd_any")
STRING("gsm_sms_gsmmsisdn")
STRING("ansi-136_guts/r-data_ansi_136_msisdn")
STRING("is-95_cdma_sms_is_637_msisdn")
STRING("is-95_cdma_csd_ipv4")
STRING("is-95_packet_data_ipv4")
STRING("ansi-136_csd_ipv4")
STRING("ansi-136_packet_data_ipv4")
STRING("gsm_csd_ipv4")
STRING("gsm_gprs_ipv4")
STRING("gsm_ussd_ipv4")
STRING("amps_cdpd_ipv4")
STRING("pdc_csd_ipv4")
STRING("pdc_packet_data_ipv4")
STRING("iden_sms_iden_msisdn")
STRING("iden_csd_ipv4")
STRING("iden_packet_data_ipv4")
STRING("paging_network_flex_flex_msisdn")
STRING("phs_sms_phs_msisdn")
STRING("phs_csd_ipv4")
STRING("gsm_ussd_gsm_service_code")
STRING("tetra_sds_tetra_itsi")
STRING("tetra_sds_tetra_msisdn")
STRING("tetra_packet_data_ipv4")
STRING("paging_network_reflex_reflex_isdn")
STRING("gsm_ussd_gsm_msisdn")
STRING("mobitex_mpak_man")
STRING("ansi-136_ghost/r_data_gsm_isdn")
)

/*
 * Well known and registered push application ids, see URL
 * 
 * http://www.openmobilealliance.org/tech/omna/omna-push-app-id.htm (depricated)
 * http://technical.openmobilealliance.org/tech/omna/omna-push-app-id.aspx
 * 
 * NOTE: Generic id strings do not contain the "x-wap-application" prefix,
 * it's the default, otherwise an alternate is given.
 */
NUMBERED(application_id,
ASSIGN("*", 0x00)
ASSIGN("push.sia", 0x01)
ASSIGN("wml.ua", 0x02)
ASSIGN("wta.ua", 0x03) 
ASSIGN("mms.ua", 0x04) 
ASSIGN("push.syncml", 0x05) 
ASSIGN("loc.ua", 0x06) 
ASSIGN("syncml.dm", 0x07)
ASSIGN("drm.ua", 0x08)
ASSIGN("emn.ua", 0x09)
ASSIGN("wv.ua", 0x0A)
ASSIGN("x-oma-application:ulp.ua", 0x10)
ASSIGN("x-oma-application:dlota.ua", 0x11)
ASSIGN("x-oma-application:java-ams", 0x12)
ASSIGN("x-oma-application:bcast.ua", 0x13)
ASSIGN("x-oma-application:dpe.ua", 0x14)
ASSIGN("x-oma-application:cpm:ua", 0x15)
ASSIGN("x-oma-application:evvm.ua", 0x16)
/* vendor-specific registered values */
ASSIGN("x-wap-microsoft:localcontent.ua", 0x8000)
ASSIGN("x-wap-microsoft:IMclient.ua", 0x8001)
ASSIGN("x-wap-docomo:imode.mail.ua", 0x8002)
ASSIGN("x-wap-docomo:imode.mr.ua", 0x8003)
ASSIGN("x-wap-docomo:imode.mf.ua", 0x8004)
ASSIGN("x-motorola:location.ua", 0x8005)
ASSIGN("x-motorola:now.ua", 0x8006)
ASSIGN("x-motorola:otaprov.ua", 0x8007)
ASSIGN("x-motorola:browser.ua", 0x8008)
ASSIGN("x-motorola:splash.ua", 0x8009)
ASSIGN("x-wap-nai:mvsw.command", 0x800B)
ASSIGN("x-wap-openvawe:iota.ua", 0x8010)
ASSIGN("x-wap-docomo:imode.mail2.ua", 0x9000)
ASSIGN("x-oma-nec:otaprov.ua", 0x9001)
ASSIGN("x-oma-nokia:call.ua", 0x9002)
ASSIGN("x-oma-coremobility:sqa.ua", 0x9003)
ASSIGN("x-oma-docomo:doja.jam.ua", 0x9004)
ASSIGN("x-oma-nokia:sip.ua", 0x9010)
ASSIGN("x-oma-vodafone:otaprov.ua", 0x9011)
ASSIGN("x-hutchison:ad.ua", 0x9012)
ASSIGN("x-oma-nokia:voip.ua", 0x9013)
ASSIGN("x-oma-docomo:voice.ua", 0x9014)
ASSIGN("x-oma-docomo:browser.ctl", 0x9015)
ASSIGN("x-oma-docomo:dan.ua", 0x9016)
ASSIGN("x-oma-nokia:vs.ua", 0x9017)
ASSIGN("x-oma-nokia:voip.ext1.ua", 0x9018)
ASSIGN("x-wap-vodafone:casting.ua", 0x9019)
ASSIGN("x-oma-docomo:imode.data.ua", 0x901A)
ASSIGN("x-oma-snapin:otaprov.ctl", 0x901B)
ASSIGN("x-oma-nokia:vrs.ua", 0x901C)
ASSIGN("x-oma-nokia:vrpg.ua", 0x901D)
ASSIGN("x-oma-motorola:screen3.ua", 0x901E)
ASSIGN("x-oma-docomo:device.ctl", 0x901F)
ASSIGN("x-oma-nokia:msc.ua", 0x9020)
ASSIGN("x-3gpp2:lcs.ua", 0x9021)
ASSIGN("x-wap-vodafone:dcd.ua", 0x9022)
ASSIGN("x-3gpp:mbms.service.announcement.ua", 0x9023)
ASSIGN("x-oma-vodafone:dltmtbl.ua", 0x9024)
ASSIGN("x-oma-vodafone:dvcctl.ua", 0x9025)
ASSIGN("x-oma-cmcc:mail.ua", 0x9026)
ASSIGN("x-oma-nokia:vmb.ua", 0x9027)
ASSIGN("x-oma-nokia:ldapss.ua", 0x9028)
ASSIGN("x-hutchison:al.ua", 0x9029)
ASSIGN("x-oma-nokia:uma.ua", 0x902A)
ASSIGN("x-oma-nokia:news.ua", 0x902B)
ASSIGN("x-oma-docomo:pf", 0x902C)
ASSIGN("x-oma-docomo:ub", 0x902D)
ASSIGN("x-oma-nokia:nat.traversal.ua", 0x902E)
ASSIGN("x-oma-intromobile:intropad.ua", 0x902F)
ASSIGN("x-oma-docomo:uin.ua", 0x9030)
ASSIGN("x-oma-nokia:iptv.ua", 0x9031)
ASSIGN("x-hutchison:il.ua", 0x9032)
ASSIGN("x-oma-nokia:voip.general.ua", 0x9033)
ASSIGN("x-microsoft:drm.meter", 0x9034)
ASSIGN("x-microsoft:drm.license", 0x9035)
ASSIGN("x-oma-docomo:ic.ctl", 0x9036)
ASSIGN("x-oma-slingmedia:SPM.ua", 0x9037)
ASSIGN("x-cibenix:odp.ua", 0x9038)
ASSIGN("x-oma-motorola:voip.ua", 0x9039)
ASSIGN("x-oma-motorola:ims", 0x903A)
ASSIGN("x-oma-docomo:imode.remote.ctl", 0x903B)
ASSIGN("x-oma-docomo:device.ctl.um", 0x903C)
ASSIGN("x-microsoft:playready.drm.initiator", 0x903D)
ASSIGN("x-microsoft:playready.drm", 0x903E)
ASSIGN("x-oma-sbm:ms.mexa.ua", 0x903F)
ASSIGN("urn:oma:drms:org-LGE:L650V", 0x9040)
ASSIGN("x-oma-docomo:um", 0x9041)
ASSIGN("x-oma-docomo:uin.um", 0x9042)
ASSIGN("urn:oma:drms:org-LGE:KU450", 0x9043)
ASSIGN("x-wap-microsoft:cfgmgr.ua", 0x9044)
ASSIGN("x-3gpp:mbms.download.delivery.ua", 0x9045)
ASSIGN("x-oma-docomo:star.ctl", 0x9046)
ASSIGN("urn:oma:drms:org-LGE:KU380", 0x9047)
ASSIGN("x-oma-docomo:pf2", 0x9048)
ASSIGN("x-oma-motorola:blogcentral.ua", 0x9049)
ASSIGN("x-oma-docomo:imode.agent.ua", 0x904A)
ASSIGN("x-wap-application:push.sia", 0x904B)
ASSIGN("x-oma-nokia:destination.network.ua", 0x904C)
ASSIGN("x-oma-sbm:mid2.ua", 0x904D)
ASSIGN("x-carrieriq:avm.ctl", 0x904E)
ASSIGN("x-oma-sbm:ms.xml.ua", 0x904F)
ASSIGN("urn:dvb:ipdc:notification:2008", 0x9050)
ASSIGN("x-oma-docomo:imode.mvch.ua", 0x9051)
ASSIGN("x-oma-motorola:webui.ua", 0x9052)
ASSIGN("x-oma-sbm:cid.ua", 0x9053)
ASSIGN("x-oma-nokia:vcc.v1.ua", 0x9054)
ASSIGN("x-oma-docomo:open.ctl", 0x9055)
ASSIGN("x-oma-docomo:sp.mail.ua", 0x9056)
ASSIGN("x-essoy-application:push.erace", 0x9057)
ASSIGN("x-oma-docomo:open.fu", 0x9058)
ASSIGN("x-samsung:osp.ua", 0x9059)
ASSIGN("x-oma-docomo:imode.mchara.ua", 0x905A)
ASSIGN("x-oma-application:scidm.ua", 0x905B)
ASSIGN("x-oma-docomo:xmd.mail.ua", 0x905C)
ASSIGN("x-oma-application:pal.ua", 0x905D)
ASSIGN("x-oma-docomo:imode.relation.ua", 0x905E)
ASSIGN("x-oma-docomo:xmd.storage.ua", 0x905F)
ASSIGN("x-oma-docomo:xmd.lcsapp.ua", 0x9060)
ASSIGN("x-oma-docomo:xmd.info.ua", 0x9061)
ASSIGN("x-oma-docomo:xmd.agent.ua", 0x9062)
ASSIGN("x-oma-docomo:xmd.sab.ua", 0x9063)
ASSIGN("x-oma-docomo:xmd.am.ua", 0x9064)
ASSIGN("x-oma-application:push.scws", 0x9065)
ASSIGN("x-oma-docomo:xmd.disastermessageapp.ua", 0x9066)
ASSIGN("x-innopath:wamp.notification", 0x9067)
ASSIGN("x-wap-docomo:interp.ctl", 0x9068)
ASSIGN("x-oma-kddi:apps.ua", 0x9069)
ASSIGN("x-oma-kddi:push.ua", 0x906A)
ASSIGN("x-oma-docomo:xmd.emdm.ua", 0x906B)
ASSIGN("x-oma-docomo:xmd.lac.ua", 0x906C)
ASSIGN("x-oma-docomo:xmd.osv.ua", 0x906D)
ASSIGN("x-oma-docomo:xmd.dcs.ua", 0x906E)
ASSIGN("x-oma-docomo:xmd.wipe.ua", 0x906F)
ASSIGN("x-oma-docomo:xmd.vdapp.ua", 0x9070)
ASSIGN("x-wap-3gpp:gba.andsf", 0x9071)
)

/**** More preprocessor magic ****/

#undef LINEAR
#undef STRING
#undef VSTRING
#undef NUMBERED
#undef ASSIGN
#undef VASSIGN
#undef NAMED
#undef NSTRING
#undef VNSTRING

