Overview

Namespaces

  • Budabot
    • Core
      • Modules
    • User
      • Modules
  • None
  • Tyrence
    • Modules

Classes

  • AccessLevel
  • Budabot\Core\AccessManager
  • Budabot\Core\AdminManager
  • Budabot\Core\AOChat
  • Budabot\Core\AOChatPacket
  • Budabot\Core\AOChatQueue
  • Budabot\Core\AOExtMsg
  • Budabot\Core\AsyncHttp
  • Budabot\Core\AutoInject
  • Budabot\Core\BotRunner
  • Budabot\Core\Budabot
  • Budabot\Core\BuddylistManager
  • Budabot\Core\CacheManager
  • Budabot\Core\CacheResult
  • Budabot\Core\ClassLoader
  • Budabot\Core\ColorSettingHandler
  • Budabot\Core\CommandAlias
  • Budabot\Core\CommandManager
  • Budabot\Core\ConfigFile
  • Budabot\Core\DB
  • Budabot\Core\DBRow
  • Budabot\Core\EventLoop
  • Budabot\Core\EventManager
  • Budabot\Core\GuildChannelCommandReply
  • Budabot\Core\GuildManager
  • Budabot\Core\HelpManager
  • Budabot\Core\Http
  • Budabot\Core\HttpRequest
  • Budabot\Core\LegacyLogger
  • Budabot\Core\LimitsController
  • Budabot\Core\LoggerWrapper
  • Budabot\Core\MMDBParser
  • Budabot\Core\Modules\AdminController
  • Budabot\Core\Modules\AliasController
  • Budabot\Core\Modules\AltInfo
  • Budabot\Core\Modules\AltsController
  • Budabot\Core\Modules\BanController
  • Budabot\Core\Modules\BuddylistController
  • Budabot\Core\Modules\ColorsController
  • Budabot\Core\Modules\CommandlistController
  • Budabot\Core\Modules\CommandSearchController
  • Budabot\Core\Modules\ConfigController
  • Budabot\Core\Modules\EventlistController
  • Budabot\Core\Modules\HelpController
  • Budabot\Core\Modules\LogsController
  • Budabot\Core\Modules\PlayerLookupController
  • Budabot\Core\Modules\ProfileCommandReply
  • Budabot\Core\Modules\ProfileController
  • Budabot\Core\Modules\SettingsController
  • Budabot\Core\Modules\SQLController
  • Budabot\Core\Modules\SystemController
  • Budabot\Core\Modules\UsageController
  • Budabot\Core\Modules\WhitelistController
  • Budabot\Core\NumberSettingHandler
  • Budabot\Core\OptionsSettingHandler
  • Budabot\Core\PlayerHistory
  • Budabot\Core\PlayerHistoryManager
  • Budabot\Core\PlayerManager
  • Budabot\Core\Preferences
  • Budabot\Core\PrivateChannelCommandReply
  • Budabot\Core\PrivateMessageCommandReply
  • Budabot\Core\Registry
  • Budabot\Core\SettingHandler
  • Budabot\Core\SettingManager
  • Budabot\Core\SettingObject
  • Budabot\Core\SocketManager
  • Budabot\Core\SocketNotifier
  • Budabot\Core\SubcommandManager
  • Budabot\Core\Text
  • Budabot\Core\TextSettingHandler
  • Budabot\Core\Timer
  • Budabot\Core\TimerEvent
  • Budabot\Core\TimeSettingHandler
  • Budabot\Core\Util
  • Budabot\Core\xml
  • Budabot\User\Modules\AlienArmorController
  • Budabot\User\Modules\AlienBioController
  • Budabot\User\Modules\AlienMiscController
  • Budabot\User\Modules\AOSpeakController
  • Budabot\User\Modules\AOUController
  • Budabot\User\Modules\AXPController
  • Budabot\User\Modules\BankController
  • Budabot\User\Modules\BosslootController
  • Budabot\User\Modules\BroadcastController
  • Budabot\User\Modules\BuffPerksController
  • Budabot\User\Modules\CacheController
  • Budabot\User\Modules\ChatAssistController
  • Budabot\User\Modules\ChatCheckController
  • Budabot\User\Modules\ChatLeaderController
  • Budabot\User\Modules\ChatRallyController
  • Budabot\User\Modules\ChatSayController
  • Budabot\User\Modules\ChatTopicController
  • Budabot\User\Modules\CityWaveController
  • Budabot\User\Modules\CloakController
  • Budabot\User\Modules\ClusterController
  • Budabot\User\Modules\CountdownController
  • Budabot\User\Modules\DevController
  • Budabot\User\Modules\DingController
  • Budabot\User\Modules\EventsController
  • Budabot\User\Modules\FightController
  • Budabot\User\Modules\FindOrgController
  • Budabot\User\Modules\FindPlayerController
  • Budabot\User\Modules\FunController
  • Budabot\User\Modules\GitController
  • Budabot\User\Modules\GuideController
  • Budabot\User\Modules\GuildController
  • Budabot\User\Modules\HelpbotController
  • Budabot\User\Modules\HtmlDecodeController
  • Budabot\User\Modules\ImplantController
  • Budabot\User\Modules\ImplantDesignerController
  • Budabot\User\Modules\InactiveMemberController
  • Budabot\User\Modules\ItemsController
  • Budabot\User\Modules\KillOnSightController
  • Budabot\User\Modules\LevelController
  • Budabot\User\Modules\LinksController
  • Budabot\User\Modules\LootListsController
  • Budabot\User\Modules\MdbController
  • Budabot\User\Modules\MessageInfoCommandReply
  • Budabot\User\Modules\MockCommandReply
  • Budabot\User\Modules\NanoController
  • Budabot\User\Modules\NewsController
  • Budabot\User\Modules\NotesController
  • Budabot\User\Modules\OnlineController
  • Budabot\User\Modules\OrgHistoryController
  • Budabot\User\Modules\OrglistController
  • Budabot\User\Modules\OrgMembersController
  • Budabot\User\Modules\OSController
  • Budabot\User\Modules\PlayerHistoryController
  • Budabot\User\Modules\PlayfieldController
  • Budabot\User\Modules\PocketbossController
  • Budabot\User\Modules\PremadeImplantController
  • Budabot\User\Modules\PrivateChannelController
  • Budabot\User\Modules\QuoteController
  • Budabot\User\Modules\RaffleController
  • Budabot\User\Modules\RaidController
  • Budabot\User\Modules\RandomController
  • Budabot\User\Modules\RecipeController
  • Budabot\User\Modules\RelayController
  • Budabot\User\Modules\ReputationController
  • Budabot\User\Modules\ResearchController
  • Budabot\User\Modules\RunAsController
  • Budabot\User\Modules\SendTellController
  • Budabot\User\Modules\ShoppingController
  • Budabot\User\Modules\SilenceController
  • Budabot\User\Modules\SkillsController
  • Budabot\User\Modules\SpiritsController
  • Budabot\User\Modules\StopwatchController
  • Budabot\User\Modules\Teamspeak3
  • Budabot\User\Modules\TeamspeakController
  • Budabot\User\Modules\TestController
  • Budabot\User\Modules\TimeController
  • Budabot\User\Modules\TimerController
  • Budabot\User\Modules\TimezoneController
  • Budabot\User\Modules\TowerController
  • Budabot\User\Modules\TrackerController
  • Budabot\User\Modules\TrickleController
  • Budabot\User\Modules\UnixtimeController
  • Budabot\User\Modules\VoteController
  • Budabot\User\Modules\WeatherController
  • Budabot\User\Modules\WhatBuffsController
  • Budabot\User\Modules\WhereisController
  • Budabot\User\Modules\WhoisController
  • Budabot\User\Modules\WhoisOrgController
  • Budabot\User\Modules\WhompahController
  • Command
  • DefaultStatus
  • DefineCommand
  • Description
  • Event
  • HandlesCommand
  • Help
  • Inject
  • Instance
  • Intoptions
  • Matches
  • Options
  • Setting
  • Setup
  • Type
  • Tyrence\Modules\DemoResponseCommandReply
  • Tyrence\Modules\SameChannelResponseController
  • Visibility

Interfaces

  • Budabot\Core\CommandReply

Exceptions

  • Budabot\Core\InvalidHttpRequest
  • Budabot\Core\SQLException
  • Budabot\Core\StopExecutionException

Functions

  • Budabot\Core\isWindows
  • Budabot\Core\Modules\read_input
  • Overview
  • Namespace
  • Class
  1: <?php
  2: 
  3: namespace Budabot\Core;
  4: 
  5: use Exception;
  6: 
  7: /*
  8: * $Id: aochat.php,v 1.1 2006/12/08 15:17:54 genesiscl Exp $
  9: *
 10: * Modified to handle the recent problem with the integer overflow
 11: *
 12: * Copyright (C) 2002-2005  Oskari Saarenmaa <auno@auno.org>.
 13: *
 14: * AOChat, a PHP class for talking with the Anarchy Online chat servers.
 15: * It requires the sockets extension (to connect to the chat server..)
 16: * from PHP 4.2.0+ and either the GMP or BCMath extension (for generating
 17: * and calculating the login keys) to work.
 18: *
 19: * A disassembly of the official java chat client[1] for Anarchy Online
 20: * and Slicer's AO::Chat perl module[2] were used as a reference for this
 21: * class.
 22: *
 23: * [1]: <http://www.anarchy-online.com/content/community/forumsandchat/>
 24: * [2]: <http://www.hackersquest.org/ao/>
 25: *
 26: * Updates to this class can be found from the following web site:
 27: *   http://auno.org/dev/aochat.html
 28: *
 29: **************************************************************************
 30: *
 31: * This program is free software; you can redistribute it and/or modify
 32: * it under the terms of the GNU General Public License as published by
 33: * the Free Software Foundation; either version 2 of the License, or
 34: * (at your option) any later version.
 35: *
 36: * This program is distributed in the hope that it will be useful, but
 37: * WITHOUT ANY WARRANTY; without even the implied warranty of
 38: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 39: * General Public License for more details.
 40: *
 41: * You should have received a copy of the GNU General Public License
 42: * along with this program; if not, write to the Free Software
 43: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 44: * USA
 45: *
 46: */
 47: 
 48: /**
 49:  * The AOChatPacket class - turning packets into binary blobs and
 50:  * binary blobs into packets.
 51:  *
 52:  * Data types:
 53:  * I - 32 bit integer: uint32_t
 54:  * S - 8 bit string array: uint16_t length, char str[length]
 55:  * G - 40 bit binary data: unsigned char data[5]
 56:  * i - integer array: uint16_t count, uint32_t[count]
 57:  * s - string array: uint16_t count, aochat_str_t[count]
 58:  *
 59:  * D - 'data', we have relabeled all 'D' type fields to 'S'
 60:  * M - mapping [see t.class in ao_nosign.jar] - unsupported
 61:  *
 62:  */
 63: 
 64: /* Packet type definitions - so we won't have to use the number IDs
 65: * .. I did not distinct between server and client message types, as
 66: * they are mostly the same for same type packets, but maybe it should
 67: * have been done anyway..  // auno - 2004/mar/26
 68: */
 69: define('AOCP_LOGIN_SEED',               0);
 70: define('AOCP_LOGIN_REQUEST',            2);
 71: define('AOCP_LOGIN_SELECT',             3);
 72: define('AOCP_LOGIN_OK',                 5);
 73: define('AOCP_LOGIN_ERROR',              6);
 74: define('AOCP_LOGIN_CHARLIST',           7);
 75: define('AOCP_CLIENT_UNKNOWN',          10);
 76: define('AOCP_CLIENT_NAME',             20);
 77: define('AOCP_CLIENT_LOOKUP',           21);
 78: define('AOCP_MSG_PRIVATE',             30);
 79: define('AOCP_MSG_VICINITY',            34);
 80: define('AOCP_MSG_VICINITYA',           35);
 81: define('AOCP_MSG_SYSTEM',              36);
 82: define('AOCP_CHAT_NOTICE',             37);
 83: define('AOCP_BUDDY_ADD',               40);
 84: define('AOCP_BUDDY_REMOVE',            41);
 85: define('AOCP_ONLINE_SET',              42);
 86: define('AOCP_PRIVGRP_INVITE',          50);
 87: define('AOCP_PRIVGRP_KICK',            51);
 88: define('AOCP_PRIVGRP_JOIN',            52);
 89: define('AOCP_PRIVGRP_PART',            53);
 90: define('AOCP_PRIVGRP_KICKALL',         54);
 91: define('AOCP_PRIVGRP_CLIJOIN',         55);
 92: define('AOCP_PRIVGRP_CLIPART',         56);
 93: define('AOCP_PRIVGRP_MESSAGE',         57);
 94: define('AOCP_PRIVGRP_REFUSE',          58);
 95: define('AOCP_GROUP_ANNOUNCE',          60);
 96: define('AOCP_GROUP_PART',              61);
 97: define('AOCP_GROUP_DATA_SET',          64);
 98: define('AOCP_GROUP_MESSAGE',           65);
 99: define('AOCP_GROUP_CM_SET',            66);
100: define('AOCP_CLIENTMODE_GET',          70);
101: define('AOCP_CLIENTMODE_SET',          71);
102: define('AOCP_PING',                   100);
103: define('AOCP_FORWARD',                110);
104: define('AOCP_CC',                     120);
105: define('AOCP_ADM_MUX_INFO',          1100);
106: 
107: define('AOCP_GROUP_JOIN',       AOCP_GROUP_ANNOUNCE); /* compat */
108: 
109: class AOChatPacket {
110:     private static $packet_map = array(
111:         "in" => array(
112:             AOCP_LOGIN_SEED       => array("name"=>"Login Seed",                  "args"=>"S"),
113:             AOCP_LOGIN_OK         => array("name"=>"Login Result OK",             "args"=>""),
114:             AOCP_LOGIN_ERROR      => array("name"=>"Login Result Error",          "args"=>"S"),
115:             AOCP_LOGIN_CHARLIST   => array("name"=>"Login CharacterList",         "args"=>"isii"),
116:             AOCP_CLIENT_UNKNOWN   => array("name"=>"Client Unknown",              "args"=>"I"),
117:             AOCP_CLIENT_NAME      => array("name"=>"Client Name",                 "args"=>"IS"),
118:             AOCP_CLIENT_LOOKUP    => array("name"=>"Lookup Result",               "args"=>"IS"),
119:             AOCP_MSG_PRIVATE      => array("name"=>"Message Private",             "args"=>"ISS"),
120:             AOCP_MSG_VICINITY     => array("name"=>"Message Vicinity",            "args"=>"ISS"),
121:             AOCP_MSG_VICINITYA    => array("name"=>"Message Anon Vicinity",       "args"=>"SSS"),
122:             AOCP_MSG_SYSTEM       => array("name"=>"Message System",              "args"=>"S"),
123:             AOCP_CHAT_NOTICE      => array("name"=>"Chat Notice",                 "args"=>"IIIS"),
124:             AOCP_BUDDY_ADD        => array("name"=>"Buddy Added",                 "args"=>"IIS"),
125:             AOCP_BUDDY_REMOVE     => array("name"=>"Buddy Removed",               "args"=>"I"),
126:             AOCP_PRIVGRP_INVITE   => array("name"=>"Privategroup Invited",        "args"=>"I"),
127:             AOCP_PRIVGRP_KICK     => array("name"=>"Privategroup Kicked",         "args"=>"I"),
128:             AOCP_PRIVGRP_PART     => array("name"=>"Privategroup Part",           "args"=>"I"),
129:             AOCP_PRIVGRP_CLIJOIN  => array("name"=>"Privategroup Client Join",    "args"=>"II"),
130:             AOCP_PRIVGRP_CLIPART  => array("name"=>"Privategroup Client Part",    "args"=>"II"),
131:             AOCP_PRIVGRP_MESSAGE  => array("name"=>"Privategroup Message",        "args"=>"IISS"),
132:             AOCP_PRIVGRP_REFUSE   => array("name"=>"Privategroup Refuse Invite",  "args"=>"II"),
133:             AOCP_GROUP_ANNOUNCE   => array("name"=>"Group Announce",              "args"=>"GSIS"),
134:             AOCP_GROUP_PART       => array("name"=>"Group Part",                  "args"=>"G"),
135:             AOCP_GROUP_MESSAGE    => array("name"=>"Group Message",               "args"=>"GISS"),
136:             AOCP_PING             => array("name"=>"Pong",                        "args"=>"S"),
137:             AOCP_FORWARD          => array("name"=>"Forward",                     "args"=>"IM"),
138:             AOCP_ADM_MUX_INFO     => array("name"=>"Adm Mux Info",                "args"=>"iii"),
139:         ),
140:         "out" => array(
141:             AOCP_LOGIN_REQUEST    => array("name"=>"Login Response GetCharLst",   "args"=>"ISS"),
142:             AOCP_LOGIN_SELECT     => array("name"=>"Login Select Character",      "args"=>"I"),
143:             AOCP_CLIENT_LOOKUP    => array("name"=>"Name Lookup",                 "args"=>"S"),
144:             AOCP_MSG_PRIVATE      => array("name"=>"Message Private",             "args"=>"ISS"),
145:             AOCP_BUDDY_ADD        => array("name"=>"Buddy Add",                   "args"=>"IS"),
146:             AOCP_BUDDY_REMOVE     => array("name"=>"Buddy Remove",                "args"=>"I"),
147:             AOCP_ONLINE_SET       => array("name"=>"Onlinestatus Set",            "args"=>"I"),
148:             AOCP_PRIVGRP_INVITE   => array("name"=>"Privategroup Invite",         "args"=>"I"),
149:             AOCP_PRIVGRP_KICK     => array("name"=>"Privategroup Kick",           "args"=>"I"),
150:             AOCP_PRIVGRP_JOIN     => array("name"=>"Privategroup Join",           "args"=>"I"),
151:             AOCP_PRIVGRP_PART     => array("name"=>"Privategroup Part",           "args"=>"I"),
152:             AOCP_PRIVGRP_KICKALL  => array("name"=>"Privategroup Kickall",        "args"=>""),
153:             AOCP_PRIVGRP_MESSAGE  => array("name"=>"Privategroup Message",        "args"=>"ISS"),
154:             AOCP_GROUP_DATA_SET   => array("name"=>"Group Data Set",              "args"=>"GIS"),
155:             AOCP_GROUP_MESSAGE    => array("name"=>"Group Message",               "args"=>"GSS"),
156:             AOCP_GROUP_CM_SET     => array("name"=>"Group Clientmode Set",        "args"=>"GIIII"),
157:             AOCP_CLIENTMODE_GET   => array("name"=>"Clientmode Get",              "args"=>"IG"),
158:             AOCP_CLIENTMODE_SET   => array("name"=>"Clientmode Set",              "args"=>"IIII"),
159:             AOCP_PING             => array("name"=>"Ping",                        "args"=>"S"),
160:             AOCP_CC               => array("name"=>"CC",                          "args"=>"s"),
161:         )
162:     );
163: 
164:     function __construct($dir, $type, $data) {
165:         $this->args = array();
166:         $this->type = $type;
167:         $this->dir  = $dir;
168:         $pmap = self::$packet_map[$dir][$type];
169: 
170:         if (!$pmap) {
171:             throw new Exception("Unsupported packet type (". $dir . ", " . $type . ")");
172:             return false;
173:         }
174: 
175:         if ($dir == "in") {
176:             if (!is_string($data)) {
177:                 throw new Exception("Incorrect argument for incoming packet, expecting a string.");
178:                 return false;
179:             }
180: 
181:             for ($i = 0; $i < strlen($pmap["args"]); $i++) {
182:                 $sa = $pmap["args"][$i];
183:                 switch ($sa) {
184:                     case "I":
185:                         $res  = array_pop(unpack("N", $data));
186:                         $data = substr($data, 4);
187:                         break;
188: 
189:                     case "S":
190:                         $len  = array_pop(unpack("n", $data));
191:                         $res  = substr($data, 2, $len);
192:                         $data = substr($data, 2 + $len);
193:                         break;
194: 
195:                     case "G":
196:                         $res  = substr($data, 0, 5);
197:                         $data = substr($data, 5);
198:                         break;
199: 
200:                     case "i":
201:                         $len  = array_pop(unpack("n", $data));
202:                         $res  = array_values(unpack("N" . $len, substr($data, 2)));
203:                         $data = substr($data, 2 + 4 * $len);
204:                         break;
205: 
206:                     case "s":
207:                         $len  = array_pop(unpack("n", $data));
208:                         $data = substr($data, 2);
209:                         $res  = array();
210:                         while ($len--) {
211:                             $slen  = array_pop(unpack("n", $data));
212:                             $res[] = substr($data, 2, $slen);
213:                             $data  = substr($data, 2+$slen);
214:                         }
215:                         break;
216: 
217:                     default:
218:                         throw new Exception("Unknown argument type! (" . $sa . ")");
219:                         continue(2);
220:                 }
221:                 $this->args[] = $res;
222:             }
223:         } else {
224:             if (!is_array($data)) {
225:                 $args = array($data);
226:             } else {
227:                 $args = $data;
228:             }
229:             $data = "";
230: 
231:             for ($i = 0; $i < strlen($pmap["args"]); $i++) {
232:                 $sa = $pmap["args"][$i];
233:                 $it = array_shift($args);
234: 
235:                 if (is_null($it)) {
236:                     throw new Exception("Missing argument for packet.");
237:                     break;
238:                 }
239: 
240:                 switch ($sa) {
241:                     case "I":
242:                         $data .= pack("N", $it);
243:                         break;
244: 
245:                     case "S":
246:                         $data .= pack("n", strlen($it)) . $it;
247:                         break;
248: 
249:                     case "G":
250:                         $data .= $it;
251:                         break;
252: 
253:                     case "s":
254:                         $data .= pack("n", count($it));
255:                         forEach ($it as $it_elem) {
256:                             $data .= pack("n", strlen($it_elem)) . $it_elem;
257:                         }
258:                         break;
259: 
260:                     default:
261:                         throw new Exception("Unknown argument type! (" . $sa . ")");
262:                         continue(2);
263:                 }
264:             }
265: 
266:             $this->data = $data;
267:         }
268:         return true;
269:     }
270: }
271: 
Budabot 4 Docs API documentation generated by ApiGen