<?php | |
class TokenMap | |
{ | |
private static $primaryStrings = array( | |
"", | |
"", | |
"", | |
"account", | |
"ack", | |
"action", | |
"active", | |
"add", | |
"after", | |
"all", | |
"allow", | |
"apple", | |
"auth", | |
"author", | |
"available", | |
"bad-protocol", | |
"bad-request", | |
"before", | |
"body", | |
"broadcast", | |
"cancel", | |
"category", | |
"challenge", | |
"chat", | |
"clean", | |
"code", | |
"composing", | |
"config", | |
"contacts", | |
"count", | |
"create", | |
"creation", | |
"debug", | |
"default", | |
"delete", | |
"delivery", | |
"delta", | |
"deny", | |
"digest", | |
"dirty", | |
"duplicate", | |
"elapsed", | |
"enable", | |
"encoding", | |
"error", | |
"event", | |
"expiration", | |
"expired", | |
"fail", | |
"failure", | |
"false", | |
"favorites", | |
"feature", | |
"features", | |
"feature-not-implemented", | |
"field", | |
"first", | |
"free", | |
"from", | |
"g.us", | |
"get", | |
"google", | |
"group", | |
"groups", | |
"groups_v2", | |
"http://etherx.jabber.org/streams", | |
"http://jabber.org/protocol/chatstates", | |
"ib", | |
"id", | |
"image", | |
"img", | |
"index", | |
"internal-server-error", | |
"ip", | |
"iq", | |
"item-not-found", | |
"item", | |
"jabber:iq:last", | |
"jabber:iq:privacy", | |
"jabber:x:event", | |
"jid", | |
"kind", | |
"last", | |
"leave", | |
"list", | |
"max", | |
"mechanism", | |
"media", | |
"message_acks", | |
"message", | |
"method", | |
"microsoft", | |
"missing", | |
"modify", | |
"mute", | |
"name", | |
"nokia", | |
"none", | |
"not-acceptable", | |
"not-allowed", | |
"not-authorized", | |
"notification", | |
"notify", | |
"off", | |
"offline", | |
"order", | |
"owner", | |
"owning", | |
"p_o", | |
"p_t", | |
"paid", | |
"participant", | |
"participants", | |
"participating", | |
"paused", | |
"picture", | |
"pin", | |
"ping", | |
"platform", | |
"port", | |
"presence", | |
"preview", | |
"probe", | |
"prop", | |
"props", | |
"query", | |
"raw", | |
"read", | |
"readreceipts", | |
"reason", | |
"receipt", | |
"relay", | |
"remote-server-timeout", | |
"remove", | |
"request", | |
"required", | |
"resource-constraint", | |
"resource", | |
"response", | |
"result", | |
"retry", | |
"rim", | |
"s_o", | |
"s_t", | |
"s.us", | |
"s.whatsapp.net", | |
"seconds", | |
"server-error", | |
"server", | |
"service-unavailable", | |
"set", | |
"show", | |
"silent", | |
"stat", | |
"status", | |
"stream:error", | |
"stream:features", | |
"subject", | |
"subscribe", | |
"success", | |
"sync", | |
"t", | |
"text", | |
"timeout", | |
"timestamp", | |
"to", | |
"true", | |
"type", | |
"unavailable", | |
"unsubscribe", | |
"uri", | |
"url", | |
"urn:ietf:params:xml:ns:xmpp-sasl", | |
"urn:ietf:params:xml:ns:xmpp-stanzas", | |
"urn:ietf:params:xml:ns:xmpp-streams", | |
"urn:xmpp:ping", | |
"urn:xmpp:whatsapp:account", | |
"urn:xmpp:whatsapp:dirty", | |
"urn:xmpp:whatsapp:mms", | |
"urn:xmpp:whatsapp:push", | |
"urn:xmpp:whatsapp", | |
"user", | |
"user-not-found", | |
"value", | |
"version", | |
"w:g", | |
"w:p:r", | |
"w:p", | |
"w:profile:picture", | |
"w", | |
"wait", | |
"WAUTH-2", | |
"xmlns:stream", | |
"xmlns", | |
"1", | |
"chatstate", | |
"crypto", | |
"phash", | |
"enc", | |
"class", | |
"off_cnt", | |
"w:g2", | |
"promote", | |
"demote", | |
"creator", | |
"Bell.caf", | |
"Boing.caf", | |
"Glass.caf", | |
"Harp.caf", | |
"TimePassing.caf", | |
"Tri-tone.caf", | |
"Xylophone.caf", | |
"background", | |
"backoff", | |
"chunked", | |
"context", | |
"full", | |
"in", | |
"interactive", | |
"out", | |
"registration", | |
"sid", | |
"urn:xmpp:whatsapp:sync", | |
"flt", | |
"s16", | |
"u8", | |
"adpcm", | |
"amrnb", | |
"amrwb", | |
"mp3", | |
"pcm", | |
"qcelp", | |
"wma", | |
"h263", | |
"h264", | |
"jpeg" | |
); | |
private static $secondaryStrings = array( | |
"mpeg4", | |
"wmv", | |
"audio/3gpp", | |
"audio/aac", | |
"audio/amr", | |
"audio/mp4", | |
"audio/mpeg", | |
"audio/ogg", | |
"audio/qcelp", | |
"audio/wav", | |
"audio/webm", | |
"audio/x-caf", | |
"audio/x-ms-wma", | |
"image/gif", | |
"image/jpeg", | |
"image/png", | |
"video/3gpp", | |
"video/avi", | |
"video/mp4", | |
"video/mpeg", | |
"video/quicktime", | |
"video/x-flv", | |
"video/x-ms-asf", | |
"302", | |
"400", | |
"401", | |
"402", | |
"403", | |
"404", | |
"405", | |
"406", | |
"407", | |
"409", | |
"410", | |
"500", | |
"501", | |
"503", | |
"504", | |
"abitrate", | |
"acodec", | |
"app_uptime", | |
"asampfmt", | |
"asampfreq", | |
"audio", | |
"clear", | |
"conflict", | |
"conn_no_nna", | |
"cost", | |
"currency", | |
"duration", | |
"extend", | |
"file", | |
"fps", | |
"g_notify", | |
"g_sound", | |
"gcm", | |
"gone", | |
"google_play", | |
"hash", | |
"height", | |
"invalid", | |
"jid-malformed", | |
"latitude", | |
"lc", | |
"lg", | |
"live", | |
"location", | |
"log", | |
"longitude", | |
"max_groups", | |
"max_participants", | |
"max_subject", | |
"mimetype", | |
"mode", | |
"napi_version", | |
"normalize", | |
"orighash", | |
"origin", | |
"passive", | |
"password", | |
"played", | |
"policy-violation", | |
"pop_mean_time", | |
"pop_plus_minus", | |
"price", | |
"pricing", | |
"redeem", | |
"Replaced by new connection", | |
"resume", | |
"signature", | |
"size", | |
"sound", | |
"source", | |
"system-shutdown", | |
"username", | |
"vbitrate", | |
"vcard", | |
"vcodec", | |
"video", | |
"width", | |
"xml-not-well-formed", | |
"checkmarks", | |
"image_max_edge", | |
"image_max_kbytes", | |
"image_quality", | |
"ka", | |
"ka_grow", | |
"ka_shrink", | |
"newmedia", | |
"library", | |
"caption", | |
"forward", | |
"c0", | |
"c1", | |
"c2", | |
"c3", | |
"clock_skew", | |
"cts", | |
"k0", | |
"k1", | |
"login_rtt", | |
"m_id", | |
"nna_msg_rtt", | |
"nna_no_off_count", | |
"nna_offline_ratio", | |
"nna_push_rtt", | |
"no_nna_con_count", | |
"off_msg_rtt", | |
"on_msg_rtt", | |
"stat_name", | |
"sts", | |
"suspect_conn", | |
"lists", | |
"self", | |
"qr", | |
"web", | |
"w:b", | |
"recipient", | |
"w:stats", | |
"forbidden", | |
"aurora.m4r", | |
"bamboo.m4r", | |
"chord.m4r", | |
"circles.m4r", | |
"complete.m4r", | |
"hello.m4r", | |
"input.m4r", | |
"keys.m4r", | |
"note.m4r", | |
"popcorn.m4r", | |
"pulse.m4r", | |
"synth.m4r", | |
"filehash", | |
"max_list_recipients", | |
"en-AU", | |
"en-GB", | |
"es-MX", | |
"pt-PT", | |
"zh-Hans", | |
"zh-Hant", | |
"relayelection", | |
"relaylatency", | |
"interruption", | |
"Apex.m4r", | |
"Beacon.m4r", | |
"Bulletin.m4r", | |
"By The Seaside.m4r", | |
"Chimes.m4r", | |
"Circuit.m4r", | |
"Constellation.m4r", | |
"Cosmic.m4r", | |
"Crystals.m4r", | |
"Hillside.m4r", | |
"Illuminate.m4r", | |
"Night Owl.m4r", | |
"Opening.m4r", | |
"Playtime.m4r", | |
"Presto.m4r", | |
"Radar.m4r", | |
"Radiate.m4r", | |
"Ripples.m4r", | |
"Sencha.m4r", | |
"Signal.m4r", | |
"Silk.m4r", | |
"Slow Rise.m4r", | |
"Stargaze.m4r", | |
"Summit.m4r", | |
"Twinkle.m4r", | |
"Uplift.m4r", | |
"Waves.m4r", | |
"voip", | |
"eligible", | |
"upgrade", | |
"planned", | |
"current", | |
"future", | |
"disable", | |
"expire", | |
"start", | |
"stop", | |
"accuracy", | |
"speed", | |
"bearing", | |
"recording", | |
"encrypt", | |
"key", | |
"identity", | |
"w:gp2", | |
"admin", | |
"locked", | |
"unlocked", | |
"new", | |
"battery", | |
"archive", | |
"adm", | |
"plaintext_size", | |
"compressed_size", | |
"delivered", | |
"msg", | |
"pkmsg", | |
"everyone", | |
"v", | |
"transport", | |
"call-id" | |
); | |
public static function TryGetToken($string, &$subdict, &$token) | |
{ | |
$foo = array_search($string, self::$primaryStrings); | |
if ($foo) { | |
$token = $foo; | |
return true; | |
} | |
$foo = array_search($string, self::$secondaryStrings); | |
if ($foo) { | |
$subdict = true; | |
$token = $foo; | |
return true; | |
} | |
return false; | |
} | |
public static function GetToken($token, &$subdict, &$string) | |
{ | |
//override subdict | |
if (!$subdict && $token >= 236 && $token < (236 + count(self::$secondaryStrings))) { | |
$subdict = true; | |
} | |
$tokenMap = array(); | |
if ($subdict) { | |
$tokenMap = self::$secondaryStrings; | |
} else { | |
$tokenMap = self::$primaryStrings; | |
} | |
if ($token < 0 || $token > count($tokenMap)) { | |
return;//fail | |
} | |
$string = $tokenMap[$token]; | |
if (!$string) { | |
throw new Exception("Invalid token/length in GetToken"); | |
} | |
} | |
} |