forked from Wavyzz/dolibarr
1887 lines
83 KiB
HTML
1887 lines
83 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
|
<title>dolibarr: htdocs/lib/jabber/class.jabber.php Source File</title>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
|
</head><body>
|
|
<!-- Généré par Doxygen 1.3.7 -->
|
|
<div class="qindex"><a class="qindex" href="index.html">Page principale</a> | <a class="qindex" href="classes.html">Liste alphabétique</a> | <a class="qindex" href="annotated.html">Liste des classes</a> | <a class="qindex" href="files.html">Liste des fichiers</a> | <a class="qindex" href="functions.html">Membres de classe</a> | <a class="qindex" href="globals.html">Membres de fichier</a></div>
|
|
<h1>htdocs/lib/jabber/class.jabber.php</h1><a href="class_8jabber_8php.html">Aller à la documentation de ce fichier.</a><pre class="fragment"><div>00001 <?php
|
|
00002
|
|
00003 <span class="comment">/***************************************************************************</span>
|
|
00004 <span class="comment"></span>
|
|
00005 <span class="comment"> Class.Jabber.PHP v0.4</span>
|
|
00006 <span class="comment"> (c) 2002 Carlo "Gossip" Zottmann</span>
|
|
00007 <span class="comment"> http://phpjabber.g-blog.net *** gossip@jabber.g-blog.net</span>
|
|
00008 <span class="comment"></span>
|
|
00009 <span class="comment"> The FULL documentation and examples for this software can be found at</span>
|
|
00010 <span class="comment"> http://phpjabber.g-blog.net (not many doc comments in here, sorry)</span>
|
|
00011 <span class="comment"></span>
|
|
00012 <span class="comment"> last modified: 27.04.2003 13:01:53 CET</span>
|
|
00013 <span class="comment"></span>
|
|
00014 <span class="comment"> ***************************************************************************/</span>
|
|
00015
|
|
00016 <span class="comment">/***************************************************************************</span>
|
|
00017 <span class="comment"> *</span>
|
|
00018 <span class="comment"></span>
|
|
00019 <span class="comment"> *</span>
|
|
00020 <span class="comment"> ***************************************************************************/</span>
|
|
00021
|
|
00022 <span class="comment">/*</span>
|
|
00023 <span class="comment"> Jabber::Connect()</span>
|
|
00024 <span class="comment"> Jabber::Disconnect()</span>
|
|
00025 <span class="comment"> Jabber::SendAuth()</span>
|
|
00026 <span class="comment"> Jabber::AccountRegistration($reg_email {string}, $reg_name {string})</span>
|
|
00027 <span class="comment"></span>
|
|
00028 <span class="comment"> Jabber::Listen()</span>
|
|
00029 <span class="comment"> Jabber::SendPacket($xml {string})</span>
|
|
00030 <span class="comment"></span>
|
|
00031 <span class="comment"> Jabber::RosterUpdate()</span>
|
|
00032 <span class="comment"> Jabber::RosterAddUser($jid {string}, $id {string}, $name {string})</span>
|
|
00033 <span class="comment"> Jabber::RosterRemoveUser($jid {string}, $id {string})</span>
|
|
00034 <span class="comment"> Jabber::RosterExistsJID($jid {string})</span>
|
|
00035 <span class="comment"></span>
|
|
00036 <span class="comment"> Jabber::Subscribe($jid {string})</span>
|
|
00037 <span class="comment"> Jabber::Unsubscribe($jid {string})</span>
|
|
00038 <span class="comment"></span>
|
|
00039 <span class="comment"> Jabber::CallHandler($message {array})</span>
|
|
00040 <span class="comment"> Jabber::CruiseControl([$seconds {number}])</span>
|
|
00041 <span class="comment"></span>
|
|
00042 <span class="comment"> Jabber::SubscriptionApproveRequest($to {string})</span>
|
|
00043 <span class="comment"> Jabber::SubscriptionDenyRequest($to {string})</span>
|
|
00044 <span class="comment"></span>
|
|
00045 <span class="comment"> Jabber::GetFirstFromQueue()</span>
|
|
00046 <span class="comment"> Jabber::GetFromQueueById($packet_type {string}, $id {string})</span>
|
|
00047 <span class="comment"></span>
|
|
00048 <span class="comment"> Jabber::SendMessage($to {string}, $id {number}, $type {string}, $content {array}[, $payload {array}])</span>
|
|
00049 <span class="comment"> Jabber::SendIq($to {string}, $type {string}, $id {string}, $xmlns {string}[, $payload {string}])</span>
|
|
00050 <span class="comment"> Jabber::SendPresence($type {string}[, $to {string}[, $status {string}[, $show {string}[, $priority {number}]]]])</span>
|
|
00051 <span class="comment"></span>
|
|
00052 <span class="comment"> Jabber::SendError($to {string}, $id {string}, $error_number {number}[, $error_message {string}])</span>
|
|
00053 <span class="comment"></span>
|
|
00054 <span class="comment"> Jabber::TransportRegistrationDetails($transport {string})</span>
|
|
00055 <span class="comment"> Jabber::TransportRegistration($transport {string}, $details {array})</span>
|
|
00056 <span class="comment"></span>
|
|
00057 <span class="comment"> Jabber::GetvCard($jid {string}[, $id {string}]) -- EXPERIMENTAL --</span>
|
|
00058 <span class="comment"></span>
|
|
00059 <span class="comment"> Jabber::GetInfoFromMessageFrom($packet {array})</span>
|
|
00060 <span class="comment"> Jabber::GetInfoFromMessageType($packet {array})</span>
|
|
00061 <span class="comment"> Jabber::GetInfoFromMessageId($packet {array})</span>
|
|
00062 <span class="comment"> Jabber::GetInfoFromMessageThread($packet {array})</span>
|
|
00063 <span class="comment"> Jabber::GetInfoFromMessageSubject($packet {array})</span>
|
|
00064 <span class="comment"> Jabber::GetInfoFromMessageBody($packet {array})</span>
|
|
00065 <span class="comment"> Jabber::GetInfoFromMessageError($packet {array})</span>
|
|
00066 <span class="comment"></span>
|
|
00067 <span class="comment"> Jabber::GetInfoFromIqFrom($packet {array})</span>
|
|
00068 <span class="comment"> Jabber::GetInfoFromIqType($packet {array})</span>
|
|
00069 <span class="comment"> Jabber::GetInfoFromIqId($packet {array})</span>
|
|
00070 <span class="comment"> Jabber::GetInfoFromIqKey($packet {array})</span>
|
|
00071 <span class="comment"> Jabber::GetInfoFromIqError($packet {array})</span>
|
|
00072 <span class="comment"></span>
|
|
00073 <span class="comment"> Jabber::GetInfoFromPresenceFrom($packet {array})</span>
|
|
00074 <span class="comment"> Jabber::GetInfoFromPresenceType($packet {array})</span>
|
|
00075 <span class="comment"> Jabber::GetInfoFromPresenceStatus($packet {array})</span>
|
|
00076 <span class="comment"> Jabber::GetInfoFromPresenceShow($packet {array})</span>
|
|
00077 <span class="comment"> Jabber::GetInfoFromPresencePriority($packet {array})</span>
|
|
00078 <span class="comment"></span>
|
|
00079 <span class="comment"> Jabber::AddToLog($string {string})</span>
|
|
00080 <span class="comment"> Jabber::PrintLog()</span>
|
|
00081 <span class="comment"></span>
|
|
00082 <span class="comment"> MakeXML::AddPacketDetails($string {string}[, $value {string/number}])</span>
|
|
00083 <span class="comment"> MakeXML::BuildPacket([$array {array}])</span>
|
|
00084 <span class="comment">*/</span>
|
|
00085
|
|
00095 <span class="keyword">class </span>Jabber
|
|
00096 {
|
|
00097 var $server;
|
|
00098 var $port;
|
|
00099 var $username;
|
|
00100 var $password;
|
|
00101 var $resource;
|
|
00102 var $jid;
|
|
00103
|
|
00104 var $connection;
|
|
00105 var $delay_disconnect;
|
|
00106
|
|
00107 var $stream_id;
|
|
00108 var $roster;
|
|
00109
|
|
00110 var $enable_logging;
|
|
00111 var $log_array;
|
|
00112 var $log_filename;
|
|
00113 var $log_filehandler;
|
|
00114
|
|
00115 var $iq_sleep_timer;
|
|
00116 var $last_ping_time;
|
|
00117
|
|
00118 var $packet_queue;
|
|
00119 var $subscription_queue;
|
|
00120
|
|
00121 var $iq_version_name;
|
|
00122 var $iq_version_os;
|
|
00123 var $iq_version_version;
|
|
00124
|
|
00125 var $error_codes;
|
|
00126
|
|
00127 var $connected;
|
|
00128 var $keep_alive_id;
|
|
00129 var $returned_keep_alive;
|
|
00130 var $txnid;
|
|
00131
|
|
00132 var $CONNECTOR;
|
|
00133
|
|
00134
|
|
00135
|
|
00136 function Jabber()
|
|
00137 {
|
|
00138 $this->server = <span class="stringliteral">"localhost"</span>;
|
|
00139 $this->port = <span class="stringliteral">"5222"</span>;
|
|
00140
|
|
00141 $this->username = <span class="stringliteral">"larry"</span>;
|
|
00142 $this->password = <span class="stringliteral">"curly"</span>;
|
|
00143 $this->resource = NULL;
|
|
00144
|
|
00145 $this->enable_logging = FALSE;
|
|
00146 $this->log_array = array();
|
|
00147 $this->log_filename = '';
|
|
00148 $this->log_filehandler = FALSE;
|
|
00149
|
|
00150 $this->packet_queue = array();
|
|
00151 $this->subscription_queue = array();
|
|
00152
|
|
00153 $this->iq_sleep_timer = 1;
|
|
00154 $this->delay_disconnect = 1;
|
|
00155
|
|
00156 $this->returned_keep_alive = TRUE;
|
|
00157 $this->txnid = 0;
|
|
00158
|
|
00159 $this->iq_version_name = <span class="stringliteral">"Class.Jabber.PHP -- http://phpjabber.g-blog.net -- by Carlo 'Gossip' Zottmann, gossip@jabber.g-blog.net"</span>;
|
|
00160 $this->iq_version_version = <span class="stringliteral">"0.4"</span>;
|
|
00161 $this->iq_version_os = $_SERVER['SERVER_SOFTWARE'];
|
|
00162
|
|
00163 $this->connection_class = <span class="stringliteral">"CJP_StandardConnector"</span>;
|
|
00164
|
|
00165 $this->error_codes = array(400 => <span class="stringliteral">"Bad Request"</span>,
|
|
00166 401 => <span class="stringliteral">"Unauthorized"</span>,
|
|
00167 402 => <span class="stringliteral">"Payment Required"</span>,
|
|
00168 403 => <span class="stringliteral">"Forbidden"</span>,
|
|
00169 404 => <span class="stringliteral">"Not Found"</span>,
|
|
00170 405 => <span class="stringliteral">"Not Allowed"</span>,
|
|
00171 406 => <span class="stringliteral">"Not Acceptable"</span>,
|
|
00172 407 => <span class="stringliteral">"Registration Required"</span>,
|
|
00173 408 => <span class="stringliteral">"Request Timeout"</span>,
|
|
00174 409 => <span class="stringliteral">"Conflict"</span>,
|
|
00175 500 => <span class="stringliteral">"Internal Server Error"</span>,
|
|
00176 501 => <span class="stringliteral">"Not Implemented"</span>,
|
|
00177 502 => <span class="stringliteral">"Remove Server Error"</span>,
|
|
00178 503 => <span class="stringliteral">"Service Unavailable"</span>,
|
|
00179 504 => <span class="stringliteral">"Remove Server Timeout"</span>,
|
|
00180 510 => <span class="stringliteral">"Disconnected"</span>);
|
|
00181 }
|
|
00182
|
|
00183
|
|
00184
|
|
00185 function Connect()
|
|
00186 {
|
|
00187 $this->_create_logfile();
|
|
00188
|
|
00189 $this->CONNECTOR = <span class="keyword">new</span> $this->connection_class;
|
|
00190
|
|
00191 <span class="keywordflow">if</span> ($this->CONNECTOR->OpenSocket($this->server, $this->port))
|
|
00192 {
|
|
00193 $this->SendPacket(<span class="stringliteral">"<?xml version='1.0' encoding='UTF-8' ?"</span> . <span class="stringliteral">">\n"</span>);
|
|
00194 $this->SendPacket(<span class="stringliteral">"<stream:stream to='{$this->server}' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>\n"</span>);
|
|
00195
|
|
00196 sleep(2);
|
|
00197
|
|
00198 <span class="keywordflow">if</span> ($this->_check_connected())
|
|
00199 {
|
|
00200 $this->connected = TRUE; <span class="comment">// Nathan Fritz</span>
|
|
00201 <span class="keywordflow">return</span> TRUE;
|
|
00202 }
|
|
00203 <span class="keywordflow">else</span>
|
|
00204 {
|
|
00205 $this->AddToLog(<span class="stringliteral">"ERROR: Connect() #1"</span>);
|
|
00206 <span class="keywordflow">return</span> FALSE;
|
|
00207 }
|
|
00208 }
|
|
00209 <span class="keywordflow">else</span>
|
|
00210 {
|
|
00211 $this->AddToLog(<span class="stringliteral">"ERROR: Connect() #2"</span>);
|
|
00212 <span class="keywordflow">return</span> FALSE;
|
|
00213 }
|
|
00214 }
|
|
00215
|
|
00216
|
|
00217
|
|
00218 function Disconnect()
|
|
00219 {
|
|
00220 <span class="keywordflow">if</span> (is_int($this->delay_disconnect))
|
|
00221 {
|
|
00222 sleep($this->delay_disconnect);
|
|
00223 }
|
|
00224
|
|
00225 $this->SendPacket(<span class="stringliteral">"</stream:stream>"</span>);
|
|
00226 $this->CONNECTOR->CloseSocket();
|
|
00227
|
|
00228 $this->_close_logfile();
|
|
00229 $this->PrintLog();
|
|
00230 }
|
|
00231
|
|
00232
|
|
00233
|
|
00234 function SendAuth()
|
|
00235 {
|
|
00236 $this->auth_id = <span class="stringliteral">"auth_"</span> . md5(time() . $_SERVER['REMOTE_ADDR']);
|
|
00237
|
|
00238 $this->resource = ($this->resource != NULL) ? $this->resource : (<span class="stringliteral">"Class.Jabber.PHP "</span> . md5($this->auth_id));
|
|
00239 $this->jid = <span class="stringliteral">"{$this->username}@{$this->server}/{$this->resource}"</span>;
|
|
00240
|
|
00241 <span class="comment">// request available authentication methods</span>
|
|
00242 $payload = <span class="stringliteral">"<username>{$this->username}</username>"</span>;
|
|
00243 $packet = $this->SendIq(NULL, 'get', $this->auth_id, <span class="stringliteral">"jabber:iq:auth"</span>, $payload);
|
|
00244
|
|
00245 <span class="comment">// was a result returned?</span>
|
|
00246 <span class="keywordflow">if</span> ($this->GetInfoFromIqType($packet) == 'result' && $this->GetInfoFromIqId($packet) == $this->auth_id)
|
|
00247 {
|
|
00248 <span class="comment">// yes, now check for auth method availability in descending order (best to worst)</span>
|
|
00249
|
|
00250 <span class="keywordflow">if</span> (!function_exists(mhash))
|
|
00251 {
|
|
00252 $this->AddToLog(<span class="stringliteral">"ATTENTION: SendAuth() - mhash() is not available; screw 0k and digest method, we need to go with plaintext auth"</span>);
|
|
00253 }
|
|
00254
|
|
00255 <span class="comment">// auth_0k</span>
|
|
00256 <span class="keywordflow">if</span> (function_exists(mhash) && isset($packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['sequence'][0][<span class="stringliteral">"#"</span>]) && isset($packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['token'][0][<span class="stringliteral">"#"</span>]))
|
|
00257 {
|
|
00258 <span class="keywordflow">return</span> $this->_sendauth_0k($packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['token'][0][<span class="stringliteral">"#"</span>], $packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['sequence'][0][<span class="stringliteral">"#"</span>]);
|
|
00259 }
|
|
00260 <span class="comment">// digest</span>
|
|
00261 elseif (function_exists(mhash) && isset($packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['digest']))
|
|
00262 {
|
|
00263 <span class="keywordflow">return</span> $this->_sendauth_digest();
|
|
00264 }
|
|
00265 <span class="comment">// plain text</span>
|
|
00266 elseif ($packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['password'])
|
|
00267 {
|
|
00268 <span class="keywordflow">return</span> $this->_sendauth_plaintext();
|
|
00269 }
|
|
00270 <span class="comment">// dude, you're fucked</span>
|
|
00271 {
|
|
00272 $this->AddToLog(<span class="stringliteral">"ERROR: SendAuth() #2 - No auth method available!"</span>);
|
|
00273 <span class="keywordflow">return</span> FALSE;
|
|
00274 }
|
|
00275 }
|
|
00276 <span class="keywordflow">else</span>
|
|
00277 {
|
|
00278 <span class="comment">// no result returned</span>
|
|
00279 $this->AddToLog(<span class="stringliteral">"ERROR: SendAuth() #1"</span>);
|
|
00280 <span class="keywordflow">return</span> FALSE;
|
|
00281 }
|
|
00282 }
|
|
00283
|
|
00284
|
|
00285
|
|
00286 function AccountRegistration($reg_email = NULL, $reg_name = NULL)
|
|
00287 {
|
|
00288 $packet = $this->SendIq($this->server, 'get', 'reg_01', 'jabber:iq:register');
|
|
00289
|
|
00290 <span class="keywordflow">if</span> ($packet)
|
|
00291 {
|
|
00292 $key = $this->GetInfoFromIqKey($packet); <span class="comment">// just in case a key was passed back from the server</span>
|
|
00293 unset($packet);
|
|
00294
|
|
00295 $payload = <span class="stringliteral">"<username>{$this->username}</username></span>
|
|
00296 <span class="stringliteral"> <password>{$this->password}</password></span>
|
|
00297 <span class="stringliteral"> <email>$reg_email</email></span>
|
|
00298 <span class="stringliteral"> <name>$reg_name</name>\n"</span>;
|
|
00299
|
|
00300 $payload .= ($key) ? <span class="stringliteral">"<key>$key</key>\n"</span> : '';
|
|
00301
|
|
00302 $packet = $this->SendIq($this->server, 'set', <span class="stringliteral">"reg_01"</span>, <span class="stringliteral">"jabber:iq:register"</span>, $payload);
|
|
00303
|
|
00304 <span class="keywordflow">if</span> ($this->GetInfoFromIqType($packet) == 'result')
|
|
00305 {
|
|
00306 <span class="keywordflow">if</span> (isset($packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['registered'][0][<span class="charliteral">'#'</span>]))
|
|
00307 {
|
|
00308 $return_code = 1;
|
|
00309 }
|
|
00310 <span class="keywordflow">else</span>
|
|
00311 {
|
|
00312 $return_code = 2;
|
|
00313 }
|
|
00314
|
|
00315 <span class="keywordflow">if</span> ($this->resource)
|
|
00316 {
|
|
00317 $this->jid = <span class="stringliteral">"{$this->username}@{$this->server}/{$this->resource}"</span>;
|
|
00318 }
|
|
00319 <span class="keywordflow">else</span>
|
|
00320 {
|
|
00321 $this->jid = <span class="stringliteral">"{$this->username}@{$this->server}"</span>;
|
|
00322 }
|
|
00323
|
|
00324 }
|
|
00325 elseif ($this->GetInfoFromIqType($packet) == 'error' && isset($packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'#'</span>]))
|
|
00326 {
|
|
00327 <span class="comment">// "conflict" error, i.e. already registered</span>
|
|
00328 <span class="keywordflow">if</span> ($packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'@'</span>]['code'] == '409')
|
|
00329 {
|
|
00330 $return_code = 1;
|
|
00331 }
|
|
00332 <span class="keywordflow">else</span>
|
|
00333 {
|
|
00334 $return_code = <span class="stringliteral">"Error "</span> . $packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'@'</span>]['code'] . <span class="stringliteral">": "</span> . $packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'#'</span>];
|
|
00335 }
|
|
00336 }
|
|
00337
|
|
00338 <span class="keywordflow">return</span> $return_code;
|
|
00339
|
|
00340 }
|
|
00341 <span class="keywordflow">else</span>
|
|
00342 {
|
|
00343 <span class="keywordflow">return</span> 3;
|
|
00344 }
|
|
00345 }
|
|
00346
|
|
00347
|
|
00348
|
|
00349 function SendPacket($xml)
|
|
00350 {
|
|
00351 $xml = trim($xml);
|
|
00352
|
|
00353 <span class="keywordflow">if</span> ($this->CONNECTOR->WriteToSocket($xml))
|
|
00354 {
|
|
00355 $this->AddToLog(<span class="stringliteral">"SEND: $xml"</span>);
|
|
00356 <span class="keywordflow">return</span> TRUE;
|
|
00357 }
|
|
00358 <span class="keywordflow">else</span>
|
|
00359 {
|
|
00360 $this->AddToLog('ERROR: SendPacket() #1');
|
|
00361 <span class="keywordflow">return</span> FALSE;
|
|
00362 }
|
|
00363 }
|
|
00364
|
|
00365
|
|
00366
|
|
00367 function Listen()
|
|
00368 {
|
|
00369 unset($incoming);
|
|
00370
|
|
00371 <span class="keywordflow">while</span> ($line = $this->CONNECTOR->ReadFromSocket(4096))
|
|
00372 {
|
|
00373 $incoming .= $line;
|
|
00374 }
|
|
00375
|
|
00376 $incoming = trim($incoming);
|
|
00377
|
|
00378 <span class="keywordflow">if</span> ($incoming != <span class="stringliteral">""</span>)
|
|
00379 {
|
|
00380 $this->AddToLog(<span class="stringliteral">"RECV: $incoming"</span>);
|
|
00381 }
|
|
00382
|
|
00383 <span class="keywordflow">if</span> ($incoming != <span class="stringliteral">""</span>)
|
|
00384 {
|
|
00385 $temp = $this->_split_incoming($incoming);
|
|
00386
|
|
00387 <span class="keywordflow">for</span> ($a = 0; $a < count($temp); $a++)
|
|
00388 {
|
|
00389 $this->packet_queue[] = $this->xmlize($temp[$a]);
|
|
00390 }
|
|
00391 }
|
|
00392
|
|
00393 <span class="keywordflow">return</span> TRUE;
|
|
00394 }
|
|
00395
|
|
00396
|
|
00397
|
|
00398 function StripJID($jid = NULL)
|
|
00399 {
|
|
00400 preg_match(<span class="stringliteral">"/(.*)\/(.*)/Ui"</span>, $jid, $temp);
|
|
00401 <span class="keywordflow">return</span> ($temp[1] != <span class="stringliteral">""</span>) ? $temp[1] : $jid;
|
|
00402 }
|
|
00403
|
|
00404
|
|
00405
|
|
00406 function SendMessage($to, $type = <span class="stringliteral">"normal"</span>, $<span class="keywordtype">id</span> = NULL, $content = NULL, $payload = NULL)
|
|
00407 {
|
|
00408 <span class="keywordflow">if</span> ($to && is_array($content))
|
|
00409 {
|
|
00410 <span class="keywordflow">if</span> (!$id)
|
|
00411 {
|
|
00412 $id = $type . <span class="stringliteral">"_"</span> . time();
|
|
00413 }
|
|
00414
|
|
00415 $content = $this->_array_htmlspecialchars($content);
|
|
00416
|
|
00417 $xml = <span class="stringliteral">"<message to='$to' type='$type' id='$id'>\n"</span>;
|
|
00418
|
|
00419 <span class="keywordflow">if</span> ($content['subject'])
|
|
00420 {
|
|
00421 $xml .= <span class="stringliteral">"<subject>"</span> . $content['subject'] . <span class="stringliteral">"</subject>\n"</span>;
|
|
00422 }
|
|
00423
|
|
00424 <span class="keywordflow">if</span> ($content['thread'])
|
|
00425 {
|
|
00426 $xml .= <span class="stringliteral">"<thread>"</span> . $content['thread'] . <span class="stringliteral">"</thread>\n"</span>;
|
|
00427 }
|
|
00428
|
|
00429 $xml .= <span class="stringliteral">"<body>"</span> . $content['body'] . <span class="stringliteral">"</body>\n"</span>;
|
|
00430 $xml .= $payload;
|
|
00431 $xml .= <span class="stringliteral">"</message>\n"</span>;
|
|
00432
|
|
00433
|
|
00434 <span class="keywordflow">if</span> ($this->SendPacket($xml))
|
|
00435 {
|
|
00436 <span class="keywordflow">return</span> TRUE;
|
|
00437 }
|
|
00438 <span class="keywordflow">else</span>
|
|
00439 {
|
|
00440 $this->AddToLog(<span class="stringliteral">"ERROR: SendMessage() #1"</span>);
|
|
00441 <span class="keywordflow">return</span> FALSE;
|
|
00442 }
|
|
00443 }
|
|
00444 <span class="keywordflow">else</span>
|
|
00445 {
|
|
00446 $this->AddToLog(<span class="stringliteral">"ERROR: SendMessage() #2"</span>);
|
|
00447 <span class="keywordflow">return</span> FALSE;
|
|
00448 }
|
|
00449 }
|
|
00450
|
|
00451
|
|
00452
|
|
00453 function SendPresence($type = NULL, $to = NULL, $status = NULL, $show = NULL, $priority = NULL)
|
|
00454 {
|
|
00455 $xml = <span class="stringliteral">"<presence"</span>;
|
|
00456 $xml .= ($to) ? <span class="stringliteral">" to='$to'"</span> : '';
|
|
00457 $xml .= ($type) ? <span class="stringliteral">" type='$type'"</span> : '';
|
|
00458 $xml .= ($status || $show || $priority) ? <span class="stringliteral">">\n"</span> : <span class="stringliteral">" />\n"</span>;
|
|
00459
|
|
00460 $xml .= ($status) ? <span class="stringliteral">" <status>$status</status>\n"</span> : '';
|
|
00461 $xml .= ($show) ? <span class="stringliteral">" <show>$show</show>\n"</span> : '';
|
|
00462 $xml .= ($priority) ? <span class="stringliteral">" <priority>$priority</priority>\n"</span> : '';
|
|
00463
|
|
00464 $xml .= ($status || $show || $priority) ? <span class="stringliteral">"</presence>\n"</span> : '';
|
|
00465
|
|
00466 <span class="keywordflow">if</span> ($this->SendPacket($xml))
|
|
00467 {
|
|
00468 <span class="keywordflow">return</span> TRUE;
|
|
00469 }
|
|
00470 <span class="keywordflow">else</span>
|
|
00471 {
|
|
00472 $this->AddToLog(<span class="stringliteral">"ERROR: SendPresence() #1"</span>);
|
|
00473 <span class="keywordflow">return</span> FALSE;
|
|
00474 }
|
|
00475 }
|
|
00476
|
|
00477
|
|
00478
|
|
00479 function SendError($to, $<span class="keywordtype">id</span> = NULL, $error_number, $error_message = NULL)
|
|
00480 {
|
|
00481 $xml = <span class="stringliteral">"<iq type='error' to='$to'"</span>;
|
|
00482 $xml .= ($id) ? <span class="stringliteral">" id='$id'"</span> : '';
|
|
00483 $xml .= <span class="stringliteral">">\n"</span>;
|
|
00484 $xml .= <span class="stringliteral">" <error code='$error_number'>"</span>;
|
|
00485 $xml .= ($error_message) ? $error_message : $this->error_codes[$error_number];
|
|
00486 $xml .= <span class="stringliteral">"</error>\n"</span>;
|
|
00487 $xml .= <span class="stringliteral">"</iq>"</span>;
|
|
00488
|
|
00489 $this->SendPacket($xml);
|
|
00490 }
|
|
00491
|
|
00492
|
|
00493
|
|
00494 function RosterUpdate()
|
|
00495 {
|
|
00496 $roster_request_id = <span class="stringliteral">"roster_"</span> . time();
|
|
00497
|
|
00498 $incoming_array = $this->SendIq(NULL, 'get', $roster_request_id, <span class="stringliteral">"jabber:iq:roster"</span>);
|
|
00499
|
|
00500 <span class="keywordflow">if</span> (is_array($incoming_array))
|
|
00501 {
|
|
00502 <span class="keywordflow">if</span> ($incoming_array['iq'][<span class="charliteral">'@'</span>]['type'] == 'result'
|
|
00503 && $incoming_array['iq'][<span class="charliteral">'@'</span>]['<span class="keywordtype">id</span>'] == $roster_request_id
|
|
00504 && $incoming_array['iq'][<span class="charliteral">'#'</span>]['query'][<span class="charliteral">'0'</span>][<span class="charliteral">'@'</span>]['xmlns'] == <span class="stringliteral">"jabber:iq:roster"</span>)
|
|
00505 {
|
|
00506 $number_of_contacts = count($incoming_array['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['item']);
|
|
00507 $this->roster = array();
|
|
00508
|
|
00509 <span class="keywordflow">for</span> ($a = 0; $a < $number_of_contacts; $a++)
|
|
00510 {
|
|
00511 $this->roster[$a] = array( <span class="stringliteral">"jid"</span> => strtolower($incoming_array['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['item'][$a][<span class="charliteral">'@'</span>]['jid']),
|
|
00512 <span class="stringliteral">"name"</span> => $incoming_array['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['item'][$a][<span class="charliteral">'@'</span>]['name'],
|
|
00513 <span class="stringliteral">"subscription"</span> => $incoming_array['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['item'][$a][<span class="charliteral">'@'</span>]['subscription'],
|
|
00514 <span class="stringliteral">"group"</span> => $incoming_array['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['item'][$a][<span class="charliteral">'#'</span>]['group'][0][<span class="charliteral">'#'</span>]
|
|
00515 );
|
|
00516 }
|
|
00517
|
|
00518 <span class="keywordflow">return</span> TRUE;
|
|
00519 }
|
|
00520 <span class="keywordflow">else</span>
|
|
00521 {
|
|
00522 $this->AddToLog(<span class="stringliteral">"ERROR: RosterUpdate() #1"</span>);
|
|
00523 <span class="keywordflow">return</span> FALSE;
|
|
00524 }
|
|
00525 }
|
|
00526 <span class="keywordflow">else</span>
|
|
00527 {
|
|
00528 $this->AddToLog(<span class="stringliteral">"ERROR: RosterUpdate() #2"</span>);
|
|
00529 <span class="keywordflow">return</span> FALSE;
|
|
00530 }
|
|
00531 }
|
|
00532
|
|
00533
|
|
00534
|
|
00535 function RosterAddUser($jid = NULL, $<span class="keywordtype">id</span> = NULL, $name = NULL)
|
|
00536 {
|
|
00537 $id = ($id) ? $id : <span class="stringliteral">"adduser_"</span> . time();
|
|
00538
|
|
00539 <span class="keywordflow">if</span> ($jid)
|
|
00540 {
|
|
00541 $payload = <span class="stringliteral">" <item jid='$jid'"</span>;
|
|
00542 $payload .= ($name) ? <span class="stringliteral">" name='"</span> . htmlspecialchars($name) . <span class="stringliteral">"'"</span> : '';
|
|
00543 $payload .= <span class="stringliteral">"/>\n"</span>;
|
|
00544
|
|
00545 $packet = $this->SendIq(NULL, 'set', $<span class="keywordtype">id</span>, <span class="stringliteral">"jabber:iq:roster"</span>, $payload);
|
|
00546
|
|
00547 <span class="keywordflow">if</span> ($this->GetInfoFromIqType($packet) == 'result')
|
|
00548 {
|
|
00549 $this->RosterUpdate();
|
|
00550 <span class="keywordflow">return</span> TRUE;
|
|
00551 }
|
|
00552 <span class="keywordflow">else</span>
|
|
00553 {
|
|
00554 $this->AddToLog(<span class="stringliteral">"ERROR: RosterAddUser() #2"</span>);
|
|
00555 <span class="keywordflow">return</span> FALSE;
|
|
00556 }
|
|
00557 }
|
|
00558 <span class="keywordflow">else</span>
|
|
00559 {
|
|
00560 $this->AddToLog(<span class="stringliteral">"ERROR: RosterAddUser() #1"</span>);
|
|
00561 <span class="keywordflow">return</span> FALSE;
|
|
00562 }
|
|
00563 }
|
|
00564
|
|
00565
|
|
00566
|
|
00567 function RosterRemoveUser($jid = NULL, $<span class="keywordtype">id</span> = NULL)
|
|
00568 {
|
|
00569 $id = ($id) ? $id : 'deluser_' . time();
|
|
00570
|
|
00571 <span class="keywordflow">if</span> ($jid && $id)
|
|
00572 {
|
|
00573 $packet = $this->SendIq(NULL, 'set', $<span class="keywordtype">id</span>, <span class="stringliteral">"jabber:iq:roster"</span>, <span class="stringliteral">"<item jid='$jid' subscription='remove'/>"</span>);
|
|
00574
|
|
00575 <span class="keywordflow">if</span> ($this->GetInfoFromIqType($packet) == 'result')
|
|
00576 {
|
|
00577 $this->RosterUpdate();
|
|
00578 <span class="keywordflow">return</span> TRUE;
|
|
00579 }
|
|
00580 <span class="keywordflow">else</span>
|
|
00581 {
|
|
00582 $this->AddToLog(<span class="stringliteral">"ERROR: RosterRemoveUser() #2"</span>);
|
|
00583 <span class="keywordflow">return</span> FALSE;
|
|
00584 }
|
|
00585 }
|
|
00586 <span class="keywordflow">else</span>
|
|
00587 {
|
|
00588 $this->AddToLog(<span class="stringliteral">"ERROR: RosterRemoveUser() #1"</span>);
|
|
00589 <span class="keywordflow">return</span> FALSE;
|
|
00590 }
|
|
00591 }
|
|
00592
|
|
00593
|
|
00594
|
|
00595 function RosterExistsJID($jid = NULL)
|
|
00596 {
|
|
00597 <span class="keywordflow">if</span> ($jid)
|
|
00598 {
|
|
00599 <span class="keywordflow">if</span> ($this->roster)
|
|
00600 {
|
|
00601 <span class="keywordflow">for</span> ($a = 0; $a < count($this->roster); $a++)
|
|
00602 {
|
|
00603 <span class="keywordflow">if</span> ($this->roster[$a]['jid'] == strtolower($jid))
|
|
00604 {
|
|
00605 <span class="keywordflow">return</span> $a;
|
|
00606 }
|
|
00607 }
|
|
00608 }
|
|
00609 <span class="keywordflow">else</span>
|
|
00610 {
|
|
00611 $this->AddToLog(<span class="stringliteral">"ERROR: RosterExistsJID() #2"</span>);
|
|
00612 <span class="keywordflow">return</span> FALSE;
|
|
00613 }
|
|
00614 }
|
|
00615 <span class="keywordflow">else</span>
|
|
00616 {
|
|
00617 $this->AddToLog(<span class="stringliteral">"ERROR: RosterExistsJID() #1"</span>);
|
|
00618 <span class="keywordflow">return</span> FALSE;
|
|
00619 }
|
|
00620 }
|
|
00621
|
|
00622
|
|
00623
|
|
00624 function GetFirstFromQueue()
|
|
00625 {
|
|
00626 <span class="keywordflow">return</span> array_shift($this->packet_queue);
|
|
00627 }
|
|
00628
|
|
00629
|
|
00630
|
|
00631 function GetFromQueueById($packet_type, $<span class="keywordtype">id</span>)
|
|
00632 {
|
|
00633 $found_message = FALSE;
|
|
00634
|
|
00635 foreach ($this->packet_queue as $key => $value)
|
|
00636 {
|
|
00637 <span class="keywordflow">if</span> ($value[$packet_type][<span class="charliteral">'@'</span>]['<span class="keywordtype">id</span>'] == $id)
|
|
00638 {
|
|
00639 $found_message = $value;
|
|
00640 unset($this->packet_queue[$key]);
|
|
00641
|
|
00642 <span class="keywordflow">break</span>;
|
|
00643 }
|
|
00644 }
|
|
00645
|
|
00646 <span class="keywordflow">return</span> (is_array($found_message)) ? $found_message : FALSE;
|
|
00647 }
|
|
00648
|
|
00649
|
|
00650
|
|
00651 function CallHandler($packet = NULL)
|
|
00652 {
|
|
00653 $packet_type = $this->_get_packet_type($packet);
|
|
00654
|
|
00655 <span class="keywordflow">if</span> ($packet_type == <span class="stringliteral">"message"</span>)
|
|
00656 {
|
|
00657 $type = $packet['message'][<span class="charliteral">'@'</span>]['type'];
|
|
00658 $type = ($type != <span class="stringliteral">""</span>) ? $type : <span class="stringliteral">"normal"</span>;
|
|
00659 $funcmeth = <span class="stringliteral">"Handler_message_$type"</span>;
|
|
00660 }
|
|
00661 elseif ($packet_type == <span class="stringliteral">"iq"</span>)
|
|
00662 {
|
|
00663 $namespace = $packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'@'</span>]['xmlns'];
|
|
00664 $namespace = str_replace(<span class="stringliteral">":"</span>, <span class="stringliteral">"_"</span>, $<span class="keyword">namespace</span>);
|
|
00665 $funcmeth = <span class="stringliteral">"Handler_iq_$namespace"</span>;
|
|
00666 }
|
|
00667 elseif ($packet_type == <span class="stringliteral">"presence"</span>)
|
|
00668 {
|
|
00669 $type = $packet['presence'][<span class="charliteral">'@'</span>]['type'];
|
|
00670 $type = ($type != <span class="stringliteral">""</span>) ? $type : <span class="stringliteral">"available"</span>;
|
|
00671 $funcmeth = <span class="stringliteral">"Handler_presence_$type"</span>;
|
|
00672 }
|
|
00673
|
|
00674
|
|
00675 <span class="keywordflow">if</span> ($funcmeth != '')
|
|
00676 {
|
|
00677 <span class="keywordflow">if</span> (function_exists($funcmeth))
|
|
00678 {
|
|
00679 call_user_func($funcmeth, $packet);
|
|
00680 }
|
|
00681 elseif (method_exists($<span class="keyword">this</span>, $funcmeth))
|
|
00682 {
|
|
00683 call_user_func(array(&$<span class="keyword">this</span>, $funcmeth), $packet);
|
|
00684 }
|
|
00685 <span class="keywordflow">else</span>
|
|
00686 {
|
|
00687 $this->Handler_NOT_IMPLEMENTED($packet);
|
|
00688 $this->AddToLog(<span class="stringliteral">"ERROR: CallHandler() #1 - neither method nor function $funcmeth() available"</span>);
|
|
00689 }
|
|
00690 }
|
|
00691 }
|
|
00692
|
|
00693
|
|
00694
|
|
00695 function CruiseControl($seconds = -1)
|
|
00696 {
|
|
00697 $count = 0;
|
|
00698
|
|
00699 <span class="keywordflow">while</span> ($count != $seconds)
|
|
00700 {
|
|
00701 $this->Listen();
|
|
00702
|
|
00703 <span class="keywordflow">do</span> {
|
|
00704 $packet = $this->GetFirstFromQueue();
|
|
00705
|
|
00706 <span class="keywordflow">if</span> ($packet) {
|
|
00707 $this->CallHandler($packet);
|
|
00708 }
|
|
00709
|
|
00710 } <span class="keywordflow">while</span> (count($this->packet_queue) > 1);
|
|
00711
|
|
00712 $count += 0.25;
|
|
00713 usleep(250000);
|
|
00714
|
|
00715 <span class="keywordflow">if</span> ($this->last_ping_time != date('H:i'))
|
|
00716 {
|
|
00717 <span class="comment">// Modified by Nathan Fritz</span>
|
|
00718 <span class="keywordflow">if</span> ($this->returned_keep_alive == FALSE)
|
|
00719 {
|
|
00720 $this->connected = FALSE;
|
|
00721 $this->AddToLog('EVENT: Disconnected');
|
|
00722 }
|
|
00723
|
|
00724 $this->returned_keep_alive = FALSE;
|
|
00725 $this->keep_alive_id = 'keep_alive_' . time();
|
|
00726 $this->SendPacket(<span class="stringliteral">"<iq id='{$this->keep_alive_id}'/>"</span>, 'CruiseControl');
|
|
00727 <span class="comment">// **</span>
|
|
00728
|
|
00729 $this->last_ping_time = date(<span class="stringliteral">"H:i"</span>);
|
|
00730 }
|
|
00731 }
|
|
00732
|
|
00733 <span class="keywordflow">return</span> TRUE;
|
|
00734 }
|
|
00735
|
|
00736
|
|
00737
|
|
00738 function SubscriptionAcceptRequest($to = NULL)
|
|
00739 {
|
|
00740 <span class="keywordflow">return</span> ($to) ? $this->SendPresence(<span class="stringliteral">"subscribed"</span>, $to) : FALSE;
|
|
00741 }
|
|
00742
|
|
00743
|
|
00744
|
|
00745 function SubscriptionDenyRequest($to = NULL)
|
|
00746 {
|
|
00747 <span class="keywordflow">return</span> ($to) ? $this->SendPresence(<span class="stringliteral">"unsubscribed"</span>, $to) : FALSE;
|
|
00748 }
|
|
00749
|
|
00750
|
|
00751
|
|
00752 function Subscribe($to = NULL)
|
|
00753 {
|
|
00754 <span class="keywordflow">return</span> ($to) ? $this->SendPresence(<span class="stringliteral">"subscribe"</span>, $to) : FALSE;
|
|
00755 }
|
|
00756
|
|
00757
|
|
00758
|
|
00759 function Unsubscribe($to = NULL)
|
|
00760 {
|
|
00761 <span class="keywordflow">return</span> ($to) ? $this->SendPresence(<span class="stringliteral">"unsubscribe"</span>, $to) : FALSE;
|
|
00762 }
|
|
00763
|
|
00764
|
|
00765
|
|
00766 function SendIq($to = NULL, $type = 'get', $<span class="keywordtype">id</span> = NULL, $xmlns = NULL, $payload = NULL, $from = NULL)
|
|
00767 {
|
|
00768 <span class="keywordflow">if</span> (!preg_match(<span class="stringliteral">"/^(get|set|result|error)$/"</span>, $type))
|
|
00769 {
|
|
00770 unset($type);
|
|
00771
|
|
00772 $this->AddToLog(<span class="stringliteral">"ERROR: SendIq() #2 - type must be 'get', 'set', 'result' or 'error'"</span>);
|
|
00773 <span class="keywordflow">return</span> FALSE;
|
|
00774 }
|
|
00775 elseif ($<span class="keywordtype">id</span> && $xmlns)
|
|
00776 {
|
|
00777 $xml = <span class="stringliteral">"<iq type='$type' id='$id'"</span>;
|
|
00778 $xml .= ($to) ? <span class="stringliteral">" to='$to'"</span> : '';
|
|
00779 $xml .= ($from) ? <span class="stringliteral">" from='$from'"</span> : '';
|
|
00780 $xml .= <span class="stringliteral">"></span>
|
|
00781 <span class="stringliteral"> <query xmlns='$xmlns'></span>
|
|
00782 <span class="stringliteral"> $payload</span>
|
|
00783 <span class="stringliteral"> </query></span>
|
|
00784 <span class="stringliteral"> </iq>"</span>;
|
|
00785
|
|
00786 $this->SendPacket($xml);
|
|
00787 sleep($this->iq_sleep_timer);
|
|
00788 $this->Listen();
|
|
00789
|
|
00790 <span class="keywordflow">return</span> (preg_match(<span class="stringliteral">"/^(get|set)$/"</span>, $type)) ? $this->GetFromQueueById(<span class="stringliteral">"iq"</span>, $<span class="keywordtype">id</span>) : TRUE;
|
|
00791 }
|
|
00792 <span class="keywordflow">else</span>
|
|
00793 {
|
|
00794 $this->AddToLog(<span class="stringliteral">"ERROR: SendIq() #1 - to, id and xmlns are mandatory"</span>);
|
|
00795 <span class="keywordflow">return</span> FALSE;
|
|
00796 }
|
|
00797 }
|
|
00798
|
|
00799
|
|
00800
|
|
00801 <span class="comment">// get the transport registration fields</span>
|
|
00802 <span class="comment">// method written by Steve Blinch, http://www.blitzaffe.com </span>
|
|
00803 function TransportRegistrationDetails($transport)
|
|
00804 {
|
|
00805 $this->txnid++;
|
|
00806 $packet = $this->SendIq($transport, 'get', <span class="stringliteral">"reg_{$this->txnid}"</span>, <span class="stringliteral">"jabber:iq:register"</span>, NULL, $this->jid);
|
|
00807
|
|
00808 <span class="keywordflow">if</span> ($packet)
|
|
00809 {
|
|
00810 $res = array();
|
|
00811
|
|
00812 foreach ($packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>] as $element => $data)
|
|
00813 {
|
|
00814 <span class="keywordflow">if</span> ($element != 'instructions' && $element != 'key')
|
|
00815 {
|
|
00816 $res[] = $element;
|
|
00817 }
|
|
00818 }
|
|
00819
|
|
00820 <span class="keywordflow">return</span> $res;
|
|
00821 }
|
|
00822 <span class="keywordflow">else</span>
|
|
00823 {
|
|
00824 <span class="keywordflow">return</span> 3;
|
|
00825 }
|
|
00826 }
|
|
00827
|
|
00828
|
|
00829
|
|
00830 <span class="comment">// register with the transport</span>
|
|
00831 <span class="comment">// method written by Steve Blinch, http://www.blitzaffe.com </span>
|
|
00832 function TransportRegistration($transport, $details)
|
|
00833 {
|
|
00834 $this->txnid++;
|
|
00835 $packet = $this->SendIq($transport, 'get', <span class="stringliteral">"reg_{$this->txnid}"</span>, <span class="stringliteral">"jabber:iq:register"</span>, NULL, $this->jid);
|
|
00836
|
|
00837 <span class="keywordflow">if</span> ($packet)
|
|
00838 {
|
|
00839 $key = $this->GetInfoFromIqKey($packet); <span class="comment">// just in case a key was passed back from the server</span>
|
|
00840 unset($packet);
|
|
00841
|
|
00842 $payload = ($key) ? <span class="stringliteral">"<key>$key</key>\n"</span> : '';
|
|
00843 foreach ($details as $element => $value)
|
|
00844 {
|
|
00845 $payload .= <span class="stringliteral">"<$element>$value</$element>\n"</span>;
|
|
00846 }
|
|
00847
|
|
00848 $packet = $this->SendIq($transport, 'set', <span class="stringliteral">"reg_{$this->txnid}"</span>, <span class="stringliteral">"jabber:iq:register"</span>, $payload);
|
|
00849
|
|
00850 <span class="keywordflow">if</span> ($this->GetInfoFromIqType($packet) == 'result')
|
|
00851 {
|
|
00852 <span class="keywordflow">if</span> (isset($packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['registered'][0][<span class="charliteral">'#'</span>]))
|
|
00853 {
|
|
00854 $return_code = 1;
|
|
00855 }
|
|
00856 <span class="keywordflow">else</span>
|
|
00857 {
|
|
00858 $return_code = 2;
|
|
00859 }
|
|
00860 }
|
|
00861 elseif ($this->GetInfoFromIqType($packet) == 'error')
|
|
00862 {
|
|
00863 <span class="keywordflow">if</span> (isset($packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'#'</span>]))
|
|
00864 {
|
|
00865 $return_code = <span class="stringliteral">"Error "</span> . $packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'@'</span>]['code'] . <span class="stringliteral">": "</span> . $packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'#'</span>];
|
|
00866 $this->AddToLog('ERROR: TransportRegistration()');
|
|
00867 }
|
|
00868 }
|
|
00869
|
|
00870 <span class="keywordflow">return</span> $return_code;
|
|
00871 }
|
|
00872 <span class="keywordflow">else</span>
|
|
00873 {
|
|
00874 <span class="keywordflow">return</span> 3;
|
|
00875 }
|
|
00876 }
|
|
00877
|
|
00878
|
|
00879
|
|
00880 function GetvCard($jid = NULL, $<span class="keywordtype">id</span> = NULL)
|
|
00881 {
|
|
00882 <span class="keywordflow">if</span> (!$id)
|
|
00883 {
|
|
00884 $id = <span class="stringliteral">"vCard_"</span> . md5(time() . $_SERVER['REMOTE_ADDR']);
|
|
00885 }
|
|
00886
|
|
00887 <span class="keywordflow">if</span> ($jid)
|
|
00888 {
|
|
00889 $xml = <span class="stringliteral">"<iq type='get' to='$jid' id='$id'></span>
|
|
00890 <span class="stringliteral"> <vCard xmlns='vcard-temp'/></span>
|
|
00891 <span class="stringliteral"> </iq>"</span>;
|
|
00892
|
|
00893 $this->SendPacket($xml);
|
|
00894 sleep($this->iq_sleep_timer);
|
|
00895 $this->Listen();
|
|
00896
|
|
00897 <span class="keywordflow">return</span> $this->GetFromQueueById(<span class="stringliteral">"iq"</span>, $<span class="keywordtype">id</span>);
|
|
00898 }
|
|
00899 <span class="keywordflow">else</span>
|
|
00900 {
|
|
00901 $this->AddToLog(<span class="stringliteral">"ERROR: GetvCard() #1 - to and id are mandatory"</span>);
|
|
00902 <span class="keywordflow">return</span> FALSE;
|
|
00903 }
|
|
00904 }
|
|
00905
|
|
00906
|
|
00907
|
|
00908 function PrintLog()
|
|
00909 {
|
|
00910 <span class="keywordflow">if</span> ($this->enable_logging)
|
|
00911 {
|
|
00912 <span class="keywordflow">if</span> ($this->log_filehandler)
|
|
00913 {
|
|
00914 echo <span class="stringliteral">"<h2>Logging enabled, logged events have been written to the file {$this->log_filename}.</h2>\n"</span>;
|
|
00915 }
|
|
00916 <span class="keywordflow">else</span>
|
|
00917 {
|
|
00918 echo <span class="stringliteral">"<h2>Logging enabled, logged events below:</h2>\n"</span>;
|
|
00919 echo <span class="stringliteral">"<pre>\n"</span>;
|
|
00920 echo (count($this->log_array) > 0) ? implode(<span class="stringliteral">"\n\n\n"</span>, $this->log_array) : "No logged events.";
|
|
00921 echo <span class="stringliteral">"</pre>\n"</span>;
|
|
00922 }
|
|
00923 }
|
|
00924 }
|
|
00925
|
|
00926
|
|
00927
|
|
00928 <span class="comment">// ======================================================================</span>
|
|
00929 <span class="comment">// private methods</span>
|
|
00930 <span class="comment">// ======================================================================</span>
|
|
00931
|
|
00932
|
|
00933
|
|
00934 function _sendauth_0k($zerok_token, $zerok_sequence)
|
|
00935 {
|
|
00936 <span class="comment">// initial hash of password</span>
|
|
00937 $zerok_hash = mhash(MHASH_SHA1, $this->password);
|
|
00938 $zerok_hash = bin2hex($zerok_hash);
|
|
00939
|
|
00940 <span class="comment">// sequence 0: hash of hashed-password and token</span>
|
|
00941 $zerok_hash = mhash(MHASH_SHA1, $zerok_hash . $zerok_token);
|
|
00942 $zerok_hash = bin2hex($zerok_hash);
|
|
00943
|
|
00944 <span class="comment">// repeat as often as needed</span>
|
|
00945 <span class="keywordflow">for</span> ($a = 0; $a < $zerok_sequence; $a++)
|
|
00946 {
|
|
00947 $zerok_hash = mhash(MHASH_SHA1, $zerok_hash);
|
|
00948 $zerok_hash = bin2hex($zerok_hash);
|
|
00949 }
|
|
00950
|
|
00951 $payload = <span class="stringliteral">"<username>{$this->username}</username></span>
|
|
00952 <span class="stringliteral"> <hash>$zerok_hash</hash></span>
|
|
00953 <span class="stringliteral"> <resource>{$this->resource}</resource>"</span>;
|
|
00954
|
|
00955 $packet = $this->SendIq(NULL, 'set', $this->auth_id, <span class="stringliteral">"jabber:iq:auth"</span>, $payload);
|
|
00956
|
|
00957 <span class="comment">// was a result returned?</span>
|
|
00958 <span class="keywordflow">if</span> ($this->GetInfoFromIqType($packet) == 'result' && $this->GetInfoFromIqId($packet) == $this->auth_id)
|
|
00959 {
|
|
00960 <span class="keywordflow">return</span> TRUE;
|
|
00961 }
|
|
00962 <span class="keywordflow">else</span>
|
|
00963 {
|
|
00964 $this->AddToLog(<span class="stringliteral">"ERROR: _sendauth_0k() #1"</span>);
|
|
00965 <span class="keywordflow">return</span> FALSE;
|
|
00966 }
|
|
00967 }
|
|
00968
|
|
00969
|
|
00970
|
|
00971 function _sendauth_digest()
|
|
00972 {
|
|
00973 $payload = <span class="stringliteral">"<username>{$this->username}</username></span>
|
|
00974 <span class="stringliteral"> <resource>{$this->resource}</resource></span>
|
|
00975 <span class="stringliteral"> <digest>"</span> . bin2hex(mhash(MHASH_SHA1, $this->stream_id . $this->password)) . <span class="stringliteral">"</digest>"</span>;
|
|
00976
|
|
00977 $packet = $this->SendIq(NULL, 'set', $this->auth_id, <span class="stringliteral">"jabber:iq:auth"</span>, $payload);
|
|
00978
|
|
00979 <span class="comment">// was a result returned?</span>
|
|
00980 <span class="keywordflow">if</span> ($this->GetInfoFromIqType($packet) == 'result' && $this->GetInfoFromIqId($packet) == $this->auth_id)
|
|
00981 {
|
|
00982 <span class="keywordflow">return</span> TRUE;
|
|
00983 }
|
|
00984 <span class="keywordflow">else</span>
|
|
00985 {
|
|
00986 $this->AddToLog(<span class="stringliteral">"ERROR: _sendauth_digest() #1"</span>);
|
|
00987 <span class="keywordflow">return</span> FALSE;
|
|
00988 }
|
|
00989 }
|
|
00990
|
|
00991
|
|
00992
|
|
00993 function _sendauth_plaintext()
|
|
00994 {
|
|
00995 $payload = <span class="stringliteral">"<username>{$this->username}</username></span>
|
|
00996 <span class="stringliteral"> <password>{$this->password}</password></span>
|
|
00997 <span class="stringliteral"> <resource>{$this->resource}</resource>"</span>;
|
|
00998
|
|
00999 $packet = $this->SendIq(NULL, 'set', $this->auth_id, <span class="stringliteral">"jabber:iq:auth"</span>, $payload);
|
|
01000
|
|
01001 <span class="comment">// was a result returned?</span>
|
|
01002 <span class="keywordflow">if</span> ($this->GetInfoFromIqType($packet) == 'result' && $this->GetInfoFromIqId($packet) == $this->auth_id)
|
|
01003 {
|
|
01004 <span class="keywordflow">return</span> TRUE;
|
|
01005 }
|
|
01006 <span class="keywordflow">else</span>
|
|
01007 {
|
|
01008 $this->AddToLog(<span class="stringliteral">"ERROR: _sendauth_plaintext() #1"</span>);
|
|
01009 <span class="keywordflow">return</span> FALSE;
|
|
01010 }
|
|
01011 }
|
|
01012
|
|
01013
|
|
01014
|
|
01015 function _listen_incoming()
|
|
01016 {
|
|
01017 unset($incoming);
|
|
01018
|
|
01019 <span class="keywordflow">while</span> ($line = $this->CONNECTOR->ReadFromSocket(4096))
|
|
01020 {
|
|
01021 $incoming .= $line;
|
|
01022 }
|
|
01023
|
|
01024 $incoming = trim($incoming);
|
|
01025
|
|
01026 <span class="keywordflow">if</span> ($incoming != <span class="stringliteral">""</span>)
|
|
01027 {
|
|
01028 $this->AddToLog(<span class="stringliteral">"RECV: $incoming"</span>);
|
|
01029 }
|
|
01030
|
|
01031 <span class="keywordflow">return</span> $this->xmlize($incoming);
|
|
01032 }
|
|
01033
|
|
01034
|
|
01035
|
|
01036 function _check_connected()
|
|
01037 {
|
|
01038 $incoming_array = $this->_listen_incoming();
|
|
01039
|
|
01040 <span class="keywordflow">if</span> (is_array($incoming_array))
|
|
01041 {
|
|
01042 <span class="keywordflow">if</span> ($incoming_array[<span class="stringliteral">"stream:stream"</span>][<span class="charliteral">'@'</span>]['from'] == $this->server
|
|
01043 && $incoming_array[<span class="stringliteral">"stream:stream"</span>][<span class="charliteral">'@'</span>]['xmlns'] == <span class="stringliteral">"jabber:client"</span>
|
|
01044 && $incoming_array[<span class="stringliteral">"stream:stream"</span>][<span class="charliteral">'@'</span>][<span class="stringliteral">"xmlns:stream"</span>] == <span class="stringliteral">"http://etherx.jabber.org/streams"</span>)
|
|
01045 {
|
|
01046 $this->stream_id = $incoming_array[<span class="stringliteral">"stream:stream"</span>][<span class="charliteral">'@'</span>]['<span class="keywordtype">id</span>'];
|
|
01047
|
|
01048 <span class="keywordflow">return</span> TRUE;
|
|
01049 }
|
|
01050 <span class="keywordflow">else</span>
|
|
01051 {
|
|
01052 $this->AddToLog(<span class="stringliteral">"ERROR: _check_connected() #1"</span>);
|
|
01053 <span class="keywordflow">return</span> FALSE;
|
|
01054 }
|
|
01055 }
|
|
01056 <span class="keywordflow">else</span>
|
|
01057 {
|
|
01058 $this->AddToLog(<span class="stringliteral">"ERROR: _check_connected() #2"</span>);
|
|
01059 <span class="keywordflow">return</span> FALSE;
|
|
01060 }
|
|
01061 }
|
|
01062
|
|
01063
|
|
01064
|
|
01065 function _get_packet_type($packet = NULL)
|
|
01066 {
|
|
01067 <span class="keywordflow">if</span> (is_array($packet))
|
|
01068 {
|
|
01069 reset($packet);
|
|
01070 $packet_type = key($packet);
|
|
01071 }
|
|
01072
|
|
01073 <span class="keywordflow">return</span> ($packet_type) ? $packet_type : FALSE;
|
|
01074 }
|
|
01075
|
|
01076
|
|
01077
|
|
01078 function _split_incoming($incoming)
|
|
01079 {
|
|
01080 $temp = preg_split(<span class="stringliteral">"/<(message|iq|presence|stream)/"</span>, $incoming, -1, PREG_SPLIT_DELIM_CAPTURE);
|
|
01081 $array = array();
|
|
01082
|
|
01083 <span class="keywordflow">for</span> ($a = 1; $a < count($temp); $a = $a + 2)
|
|
01084 {
|
|
01085 $array[] = <span class="stringliteral">"<"</span> . $temp[$a] . $temp[($a + 1)];
|
|
01086 }
|
|
01087
|
|
01088 <span class="keywordflow">return</span> $array;
|
|
01089 }
|
|
01090
|
|
01091
|
|
01092
|
|
01093 function _create_logfile()
|
|
01094 {
|
|
01095 <span class="keywordflow">if</span> ($this->log_filename != '' && $this->enable_logging)
|
|
01096 {
|
|
01097 $this->log_filehandler = fopen($this->log_filename, <span class="charliteral">'w'</span>);
|
|
01098 }
|
|
01099 }
|
|
01100
|
|
01101
|
|
01102
|
|
01103 function AddToLog($string)
|
|
01104 {
|
|
01105 <span class="keywordflow">if</span> ($this->enable_logging)
|
|
01106 {
|
|
01107 <span class="keywordflow">if</span> ($this->log_filehandler)
|
|
01108 {
|
|
01109 fwrite($this->log_filehandler, $string . <span class="stringliteral">"\n\n"</span>);
|
|
01110 }
|
|
01111 <span class="keywordflow">else</span>
|
|
01112 {
|
|
01113 $this->log_array[] = htmlspecialchars($string);
|
|
01114 }
|
|
01115 }
|
|
01116 }
|
|
01117
|
|
01118
|
|
01119
|
|
01120 function _close_logfile()
|
|
01121 {
|
|
01122 <span class="keywordflow">if</span> ($this->log_filehandler)
|
|
01123 {
|
|
01124 fclose($this->log_filehandler);
|
|
01125 }
|
|
01126 }
|
|
01127
|
|
01128
|
|
01129
|
|
01130 <span class="comment">// _array_htmlspecialchars()</span>
|
|
01131 <span class="comment">// applies htmlspecialchars() to all values in an array</span>
|
|
01132
|
|
01133 function _array_htmlspecialchars($array)
|
|
01134 {
|
|
01135 <span class="keywordflow">if</span> (is_array($array))
|
|
01136 {
|
|
01137 foreach ($array as $k => $v)
|
|
01138 {
|
|
01139 <span class="keywordflow">if</span> (is_array($v))
|
|
01140 {
|
|
01141 $v = $this->_array_htmlspecialchars($v);
|
|
01142 }
|
|
01143 <span class="keywordflow">else</span>
|
|
01144 {
|
|
01145 $v = htmlspecialchars($v);
|
|
01146 }
|
|
01147 }
|
|
01148 }
|
|
01149
|
|
01150 <span class="keywordflow">return</span> $array;
|
|
01151 }
|
|
01152
|
|
01153
|
|
01154
|
|
01155 <span class="comment">// ======================================================================</span>
|
|
01156 <span class="comment">// <message/> parsers</span>
|
|
01157 <span class="comment">// ======================================================================</span>
|
|
01158
|
|
01159
|
|
01160
|
|
01161 function GetInfoFromMessageFrom($packet = NULL)
|
|
01162 {
|
|
01163 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['message'][<span class="charliteral">'@'</span>]['from'] : FALSE;
|
|
01164 }
|
|
01165
|
|
01166
|
|
01167
|
|
01168 function GetInfoFromMessageType($packet = NULL)
|
|
01169 {
|
|
01170 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['message'][<span class="charliteral">'@'</span>]['type'] : FALSE;
|
|
01171 }
|
|
01172
|
|
01173
|
|
01174
|
|
01175 function GetInfoFromMessageId($packet = NULL)
|
|
01176 {
|
|
01177 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['message'][<span class="charliteral">'@'</span>]['<span class="keywordtype">id</span>'] : FALSE;
|
|
01178 }
|
|
01179
|
|
01180
|
|
01181
|
|
01182 function GetInfoFromMessageThread($packet = NULL)
|
|
01183 {
|
|
01184 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['message'][<span class="charliteral">'#'</span>]['thread'][0][<span class="charliteral">'#'</span>] : FALSE;
|
|
01185 }
|
|
01186
|
|
01187
|
|
01188
|
|
01189 function GetInfoFromMessageSubject($packet = NULL)
|
|
01190 {
|
|
01191 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['message'][<span class="charliteral">'#'</span>]['subject'][0][<span class="charliteral">'#'</span>] : FALSE;
|
|
01192 }
|
|
01193
|
|
01194
|
|
01195
|
|
01196 function GetInfoFromMessageBody($packet = NULL)
|
|
01197 {
|
|
01198 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['message'][<span class="charliteral">'#'</span>]['body'][0][<span class="charliteral">'#'</span>] : FALSE;
|
|
01199 }
|
|
01200
|
|
01201
|
|
01202
|
|
01203 function GetInfoFromMessageError($packet = NULL)
|
|
01204 {
|
|
01205 $error = preg_replace(<span class="stringliteral">"/^\/$/"</span>, <span class="stringliteral">""</span>, ($packet['message'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'@'</span>]['code'] . <span class="stringliteral">"/"</span> . $packet['message'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'#'</span>]));
|
|
01206 <span class="keywordflow">return</span> (is_array($packet)) ? $error : FALSE;
|
|
01207 }
|
|
01208
|
|
01209
|
|
01210
|
|
01211 <span class="comment">// ======================================================================</span>
|
|
01212 <span class="comment">// <iq/> parsers</span>
|
|
01213 <span class="comment">// ======================================================================</span>
|
|
01214
|
|
01215
|
|
01216
|
|
01217 function GetInfoFromIqFrom($packet = NULL)
|
|
01218 {
|
|
01219 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['iq'][<span class="charliteral">'@'</span>]['from'] : FALSE;
|
|
01220 }
|
|
01221
|
|
01222
|
|
01223
|
|
01224 function GetInfoFromIqType($packet = NULL)
|
|
01225 {
|
|
01226 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['iq'][<span class="charliteral">'@'</span>]['type'] : FALSE;
|
|
01227 }
|
|
01228
|
|
01229
|
|
01230
|
|
01231 function GetInfoFromIqId($packet = NULL)
|
|
01232 {
|
|
01233 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['iq'][<span class="charliteral">'@'</span>]['<span class="keywordtype">id</span>'] : FALSE;
|
|
01234 }
|
|
01235
|
|
01236
|
|
01237
|
|
01238 function GetInfoFromIqKey($packet = NULL)
|
|
01239 {
|
|
01240 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['iq'][<span class="charliteral">'#'</span>]['query'][0][<span class="charliteral">'#'</span>]['key'][0][<span class="charliteral">'#'</span>] : FALSE;
|
|
01241 }
|
|
01242
|
|
01243
|
|
01244
|
|
01245 function GetInfoFromIqError($packet = NULL)
|
|
01246 {
|
|
01247 $error = preg_replace(<span class="stringliteral">"/^\/$/"</span>, <span class="stringliteral">""</span>, ($packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'@'</span>]['code'] . <span class="stringliteral">"/"</span> . $packet['iq'][<span class="charliteral">'#'</span>]['error'][0][<span class="charliteral">'#'</span>]));
|
|
01248 <span class="keywordflow">return</span> (is_array($packet)) ? $error : FALSE;
|
|
01249 }
|
|
01250
|
|
01251
|
|
01252
|
|
01253 <span class="comment">// ======================================================================</span>
|
|
01254 <span class="comment">// <presence/> parsers</span>
|
|
01255 <span class="comment">// ======================================================================</span>
|
|
01256
|
|
01257
|
|
01258
|
|
01259 function GetInfoFromPresenceFrom($packet = NULL)
|
|
01260 {
|
|
01261 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['presence'][<span class="charliteral">'@'</span>]['from'] : FALSE;
|
|
01262 }
|
|
01263
|
|
01264
|
|
01265
|
|
01266 function GetInfoFromPresenceType($packet = NULL)
|
|
01267 {
|
|
01268 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['presence'][<span class="charliteral">'@'</span>]['type'] : FALSE;
|
|
01269 }
|
|
01270
|
|
01271
|
|
01272
|
|
01273 function GetInfoFromPresenceStatus($packet = NULL)
|
|
01274 {
|
|
01275 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['presence'][<span class="charliteral">'#'</span>]['status'][0][<span class="charliteral">'#'</span>] : FALSE;
|
|
01276 }
|
|
01277
|
|
01278
|
|
01279
|
|
01280 function GetInfoFromPresenceShow($packet = NULL)
|
|
01281 {
|
|
01282 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['presence'][<span class="charliteral">'#'</span>]['show'][0][<span class="charliteral">'#'</span>] : FALSE;
|
|
01283 }
|
|
01284
|
|
01285
|
|
01286
|
|
01287 function GetInfoFromPresencePriority($packet = NULL)
|
|
01288 {
|
|
01289 <span class="keywordflow">return</span> (is_array($packet)) ? $packet['presence'][<span class="charliteral">'#'</span>]['priority'][0][<span class="charliteral">'#'</span>] : FALSE;
|
|
01290 }
|
|
01291
|
|
01292
|
|
01293
|
|
01294 <span class="comment">// ======================================================================</span>
|
|
01295 <span class="comment">// <message/> handlers</span>
|
|
01296 <span class="comment">// ======================================================================</span>
|
|
01297
|
|
01298
|
|
01299
|
|
01300 function Handler_message_normal($packet)
|
|
01301 {
|
|
01302 $from = $packet['message'][<span class="charliteral">'@'</span>]['from'];
|
|
01303 $this->AddToLog(<span class="stringliteral">"EVENT: Message (type normal) from $from"</span>);
|
|
01304 }
|
|
01305
|
|
01306
|
|
01307
|
|
01308 function Handler_message_chat($packet)
|
|
01309 {
|
|
01310 $from = $packet['message'][<span class="charliteral">'@'</span>]['from'];
|
|
01311 $this->AddToLog(<span class="stringliteral">"EVENT: Message (type chat) from $from"</span>);
|
|
01312 }
|
|
01313
|
|
01314
|
|
01315
|
|
01316 function Handler_message_groupchat($packet)
|
|
01317 {
|
|
01318 $from = $packet['message'][<span class="charliteral">'@'</span>]['from'];
|
|
01319 $this->AddToLog(<span class="stringliteral">"EVENT: Message (type groupchat) from $from"</span>);
|
|
01320 }
|
|
01321
|
|
01322
|
|
01323
|
|
01324 function Handler_message_headline($packet)
|
|
01325 {
|
|
01326 $from = $packet['message'][<span class="charliteral">'@'</span>]['from'];
|
|
01327 $this->AddToLog(<span class="stringliteral">"EVENT: Message (type headline) from $from"</span>);
|
|
01328 }
|
|
01329
|
|
01330
|
|
01331
|
|
01332 function Handler_message_error($packet)
|
|
01333 {
|
|
01334 $from = $packet['message'][<span class="charliteral">'@'</span>]['from'];
|
|
01335 $this->AddToLog(<span class="stringliteral">"EVENT: Message (type error) from $from"</span>);
|
|
01336 }
|
|
01337
|
|
01338
|
|
01339
|
|
01340 <span class="comment">// ======================================================================</span>
|
|
01341 <span class="comment">// <iq/> handlers</span>
|
|
01342 <span class="comment">// ======================================================================</span>
|
|
01343
|
|
01344
|
|
01345
|
|
01346 <span class="comment">// application version updates</span>
|
|
01347 function Handler_iq_jabber_iq_autoupdate($packet)
|
|
01348 {
|
|
01349 $from = $this->GetInfoFromIqFrom($packet);
|
|
01350 $id = $this->GetInfoFromIqId($packet);
|
|
01351
|
|
01352 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01353 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:autoupdate from $from"</span>);
|
|
01354 }
|
|
01355
|
|
01356
|
|
01357
|
|
01358 <span class="comment">// interactive server component properties</span>
|
|
01359 function Handler_iq_jabber_iq_agent($packet)
|
|
01360 {
|
|
01361 $from = $this->GetInfoFromIqFrom($packet);
|
|
01362 $id = $this->GetInfoFromIqId($packet);
|
|
01363
|
|
01364 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01365 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:agent from $from"</span>);
|
|
01366 }
|
|
01367
|
|
01368
|
|
01369
|
|
01370 <span class="comment">// method to query interactive server components</span>
|
|
01371 function Handler_iq_jabber_iq_agents($packet)
|
|
01372 {
|
|
01373 $from = $this->GetInfoFromIqFrom($packet);
|
|
01374 $id = $this->GetInfoFromIqId($packet);
|
|
01375
|
|
01376 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01377 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:agents from $from"</span>);
|
|
01378 }
|
|
01379
|
|
01380
|
|
01381
|
|
01382 <span class="comment">// simple client authentication</span>
|
|
01383 function Handler_iq_jabber_iq_auth($packet)
|
|
01384 {
|
|
01385 $from = $this->GetInfoFromIqFrom($packet);
|
|
01386 $id = $this->GetInfoFromIqId($packet);
|
|
01387
|
|
01388 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01389 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:auth from $from"</span>);
|
|
01390 }
|
|
01391
|
|
01392
|
|
01393
|
|
01394 <span class="comment">// out of band data</span>
|
|
01395 function Handler_iq_jabber_iq_oob($packet)
|
|
01396 {
|
|
01397 $from = $this->GetInfoFromIqFrom($packet);
|
|
01398 $id = $this->GetInfoFromIqId($packet);
|
|
01399
|
|
01400 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01401 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:oob from $from"</span>);
|
|
01402 }
|
|
01403
|
|
01404
|
|
01405
|
|
01406 <span class="comment">// method to store private data on the server</span>
|
|
01407 function Handler_iq_jabber_iq_private($packet)
|
|
01408 {
|
|
01409 $from = $this->GetInfoFromIqFrom($packet);
|
|
01410 $id = $this->GetInfoFromIqId($packet);
|
|
01411
|
|
01412 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01413 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:private from $from"</span>);
|
|
01414 }
|
|
01415
|
|
01416
|
|
01417
|
|
01418 <span class="comment">// method for interactive registration</span>
|
|
01419 function Handler_iq_jabber_iq_register($packet)
|
|
01420 {
|
|
01421 $from = $this->GetInfoFromIqFrom($packet);
|
|
01422 $id = $this->GetInfoFromIqId($packet);
|
|
01423
|
|
01424 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01425 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:register from $from"</span>);
|
|
01426 }
|
|
01427
|
|
01428
|
|
01429
|
|
01430 <span class="comment">// client roster management</span>
|
|
01431 function Handler_iq_jabber_iq_roster($packet)
|
|
01432 {
|
|
01433 $from = $this->GetInfoFromIqFrom($packet);
|
|
01434 $id = $this->GetInfoFromIqId($packet);
|
|
01435
|
|
01436 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01437 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:roster from $from"</span>);
|
|
01438 }
|
|
01439
|
|
01440
|
|
01441
|
|
01442 <span class="comment">// method for searching a user database</span>
|
|
01443 function Handler_iq_jabber_iq_search($packet)
|
|
01444 {
|
|
01445 $from = $this->GetInfoFromIqFrom($packet);
|
|
01446 $id = $this->GetInfoFromIqId($packet);
|
|
01447
|
|
01448 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01449 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:search from $from"</span>);
|
|
01450 }
|
|
01451
|
|
01452
|
|
01453
|
|
01454 <span class="comment">// method for requesting the current time</span>
|
|
01455 function Handler_iq_jabber_iq_time($packet)
|
|
01456 {
|
|
01457 $type = $this->GetInfoFromIqType($packet);
|
|
01458 $from = $this->GetInfoFromIqFrom($packet);
|
|
01459 $id = $this->GetInfoFromIqId($packet);
|
|
01460 $id = ($id != <span class="stringliteral">""</span>) ? $id : <span class="stringliteral">"time_"</span> . time();
|
|
01461
|
|
01462 <span class="keywordflow">if</span> ($type == 'get')
|
|
01463 {
|
|
01464 $payload = <span class="stringliteral">"<utc>"</span> . gmdate(<span class="stringliteral">"Ydm\TH:i:s"</span>) . <span class="stringliteral">"</utc></span>
|
|
01465 <span class="stringliteral"> <tz>"</span> . date(<span class="stringliteral">"T"</span>) . <span class="stringliteral">"</tz></span>
|
|
01466 <span class="stringliteral"> <display>"</span> . date(<span class="stringliteral">"Y/d/m h:i:s A"</span>) . <span class="stringliteral">"</display>"</span>;
|
|
01467
|
|
01468 $this->SendIq($from, 'result', $<span class="keywordtype">id</span>, <span class="stringliteral">"jabber:iq:time"</span>, $payload);
|
|
01469 }
|
|
01470
|
|
01471 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:time (type $type) from $from"</span>);
|
|
01472 }
|
|
01473
|
|
01474
|
|
01475
|
|
01476 <span class="comment">// method for requesting version</span>
|
|
01477 function Handler_iq_jabber_iq_version($packet)
|
|
01478 {
|
|
01479 $type = $this->GetInfoFromIqType($packet);
|
|
01480 $from = $this->GetInfoFromIqFrom($packet);
|
|
01481 $id = $this->GetInfoFromIqId($packet);
|
|
01482 $id = ($id != <span class="stringliteral">""</span>) ? $id : <span class="stringliteral">"version_"</span> . time();
|
|
01483
|
|
01484 <span class="keywordflow">if</span> ($type == 'get')
|
|
01485 {
|
|
01486 $payload = <span class="stringliteral">"<name>{$this->iq_version_name}</name></span>
|
|
01487 <span class="stringliteral"> <os>{$this->iq_version_os}</os></span>
|
|
01488 <span class="stringliteral"> <version>{$this->iq_version_version}</version>"</span>;
|
|
01489
|
|
01490 $this->SendIq($from, 'result', $<span class="keywordtype">id</span>, <span class="stringliteral">"jabber:iq:version"</span>, $payload);
|
|
01491 }
|
|
01492
|
|
01493 $this->AddToLog(<span class="stringliteral">"EVENT: jabber:iq:version (type $type) from $from"</span>);
|
|
01494 }
|
|
01495
|
|
01496
|
|
01497
|
|
01498 <span class="comment">// keepalive method, added by Nathan Fritz</span>
|
|
01499 function Handler_iq_($packet)
|
|
01500 {
|
|
01501 <span class="keywordflow">if</span> ($this->keep_alive_id == $this->GetInfoFromIqId($packet))
|
|
01502 {
|
|
01503 $this->returned_keep_alive = TRUE;
|
|
01504 $this->AddToLog('EVENT: Keep-Alive returned, connection alive.');
|
|
01505 }
|
|
01506 }
|
|
01507
|
|
01508
|
|
01509
|
|
01510 <span class="comment">// ======================================================================</span>
|
|
01511 <span class="comment">// <presence/> handlers</span>
|
|
01512 <span class="comment">// ======================================================================</span>
|
|
01513
|
|
01514
|
|
01515
|
|
01516 function Handler_presence_available($packet)
|
|
01517 {
|
|
01518 $from = $this->GetInfoFromPresenceFrom($packet);
|
|
01519
|
|
01520 $show_status = $this->GetInfoFromPresenceStatus($packet) . <span class="stringliteral">" / "</span> . $this->GetInfoFromPresenceShow($packet);
|
|
01521 $show_status = ($show_status != <span class="stringliteral">" / "</span>) ? <span class="stringliteral">" ($addendum)"</span> : '';
|
|
01522
|
|
01523 $this->AddToLog(<span class="stringliteral">"EVENT: Presence (type: available) - $from is available $show_status"</span>);
|
|
01524 }
|
|
01525
|
|
01526
|
|
01527
|
|
01528 function Handler_presence_unavailable($packet)
|
|
01529 {
|
|
01530 $from = $this->GetInfoFromPresenceFrom($packet);
|
|
01531
|
|
01532 $show_status = $this->GetInfoFromPresenceStatus($packet) . <span class="stringliteral">" / "</span> . $this->GetInfoFromPresenceShow($packet);
|
|
01533 $show_status = ($show_status != <span class="stringliteral">" / "</span>) ? <span class="stringliteral">" ($addendum)"</span> : '';
|
|
01534
|
|
01535 $this->AddToLog(<span class="stringliteral">"EVENT: Presence (type: unavailable) - $from is unavailable $show_status"</span>);
|
|
01536 }
|
|
01537
|
|
01538
|
|
01539
|
|
01540 function Handler_presence_subscribe($packet)
|
|
01541 {
|
|
01542 $from = $this->GetInfoFromPresenceFrom($packet);
|
|
01543 $this->SubscriptionAcceptRequest($from);
|
|
01544 $this->RosterUpdate();
|
|
01545
|
|
01546 $this->log_array[] = <span class="stringliteral">"<b>Presence:</b> (type: subscribe) - Subscription request from $from, was added to \$this->subscription_queue, roster updated"</span>;
|
|
01547 }
|
|
01548
|
|
01549
|
|
01550
|
|
01551 function Handler_presence_subscribed($packet)
|
|
01552 {
|
|
01553 $from = $this->GetInfoFromPresenceFrom($packet);
|
|
01554 $this->RosterUpdate();
|
|
01555
|
|
01556 $this->AddToLog(<span class="stringliteral">"EVENT: Presence (type: subscribed) - Subscription allowed by $from, roster updated"</span>);
|
|
01557 }
|
|
01558
|
|
01559
|
|
01560
|
|
01561 function Handler_presence_unsubscribe($packet)
|
|
01562 {
|
|
01563 $from = $this->GetInfoFromPresenceFrom($packet);
|
|
01564 $this->SendPresence(<span class="stringliteral">"unsubscribed"</span>, $from);
|
|
01565 $this->RosterUpdate();
|
|
01566
|
|
01567 $this->AddToLog(<span class="stringliteral">"EVENT: Presence (type: unsubscribe) - Request to unsubscribe from $from, was automatically approved, roster updated"</span>);
|
|
01568 }
|
|
01569
|
|
01570
|
|
01571
|
|
01572 function Handler_presence_unsubscribed($packet)
|
|
01573 {
|
|
01574 $from = $this->GetInfoFromPresenceFrom($packet);
|
|
01575 $this->RosterUpdate();
|
|
01576
|
|
01577 $this->AddToLog(<span class="stringliteral">"EVENT: Presence (type: unsubscribed) - Unsubscribed from $from's presence"</span>);
|
|
01578 }
|
|
01579
|
|
01580
|
|
01581
|
|
01582 <span class="comment">// Added By Nathan Fritz</span>
|
|
01583 function Handler_presence_error($packet)
|
|
01584 {
|
|
01585 $from = $this->GetInfoFromPresenceFrom($packet);
|
|
01586 $this->AddToLog(<span class="stringliteral">"EVENT: Presence (type: error) - Error in $from's presence"</span>);
|
|
01587 }
|
|
01588
|
|
01589
|
|
01590
|
|
01591 <span class="comment">// ======================================================================</span>
|
|
01592 <span class="comment">// Generic handlers</span>
|
|
01593 <span class="comment">// ======================================================================</span>
|
|
01594
|
|
01595
|
|
01596
|
|
01597 <span class="comment">// Generic handler for unsupported requests</span>
|
|
01598 function Handler_NOT_IMPLEMENTED($packet)
|
|
01599 {
|
|
01600 $packet_type = $this->_get_packet_type($packet);
|
|
01601 $from = call_user_func(array(&$<span class="keyword">this</span>, <span class="stringliteral">"GetInfoFrom"</span> . ucfirst($packet_type) . <span class="stringliteral">"From"</span>), $packet);
|
|
01602 $id = call_user_func(array(&$<span class="keyword">this</span>, <span class="stringliteral">"GetInfoFrom"</span> . ucfirst($packet_type) . <span class="stringliteral">"Id"</span>), $packet);
|
|
01603
|
|
01604 $this->SendError($from, $<span class="keywordtype">id</span>, 501);
|
|
01605 $this->AddToLog(<span class="stringliteral">"EVENT: Unrecognized <$packet_type/> from $from"</span>);
|
|
01606 }
|
|
01607
|
|
01608
|
|
01609
|
|
01610 <span class="comment">// ======================================================================</span>
|
|
01611 <span class="comment">// Third party code</span>
|
|
01612 <span class="comment">// m@d pr0ps to the coders ;)</span>
|
|
01613 <span class="comment">// ======================================================================</span>
|
|
01614
|
|
01615
|
|
01616
|
|
01617 <span class="comment">// xmlize()</span>
|
|
01618 <span class="comment">// (c) Hans Anderson / http://www.hansanderson.com/php/xml/</span>
|
|
01619
|
|
01620 function xmlize($data)
|
|
01621 {
|
|
01622 $vals = $index = $array = array();
|
|
01623 $parser = xml_parser_create();
|
|
01624 xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
|
|
01625 xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
|
|
01626 xml_parse_into_struct($parser, $data, $vals, $index);
|
|
01627 xml_parser_free($parser);
|
|
01628
|
|
01629 $i = 0;
|
|
01630
|
|
01631 $tagname = $vals[$i]['tag'];
|
|
01632 $array[$tagname][<span class="charliteral">'@'</span>] = $vals[$i]['attributes'];
|
|
01633 $array[$tagname][<span class="charliteral">'#'</span>] = $this->_xml_depth($vals, $i);
|
|
01634
|
|
01635 <span class="keywordflow">return</span> $array;
|
|
01636 }
|
|
01637
|
|
01638
|
|
01639
|
|
01640 <span class="comment">// _xml_depth()</span>
|
|
01641 <span class="comment">// (c) Hans Anderson / http://www.hansanderson.com/php/xml/</span>
|
|
01642
|
|
01643 function _xml_depth($vals, &$i)
|
|
01644 {
|
|
01645 $children = array();
|
|
01646
|
|
01647 <span class="keywordflow">if</span> ($vals[$i]['value'])
|
|
01648 {
|
|
01649 array_push($children, trim($vals[$i]['value']));
|
|
01650 }
|
|
01651
|
|
01652 <span class="keywordflow">while</span> (++$i < count($vals))
|
|
01653 {
|
|
01654 <span class="keywordflow">switch</span> ($vals[$i]['type'])
|
|
01655 {
|
|
01656 <span class="keywordflow">case</span> 'cdata':
|
|
01657 array_push($children, trim($vals[$i]['value']));
|
|
01658 <span class="keywordflow">break</span>;
|
|
01659
|
|
01660 <span class="keywordflow">case</span> 'complete':
|
|
01661 $tagname = $vals[$i]['tag'];
|
|
01662 $size = <span class="keyword">sizeof</span>($children[$tagname]);
|
|
01663 $children[$tagname][$size][<span class="charliteral">'#'</span>] = trim($vals[$i]['value']);
|
|
01664 <span class="keywordflow">if</span> ($vals[$i]['attributes'])
|
|
01665 {
|
|
01666 $children[$tagname][$size][<span class="charliteral">'@'</span>] = $vals[$i]['attributes'];
|
|
01667 }
|
|
01668 <span class="keywordflow">break</span>;
|
|
01669
|
|
01670 <span class="keywordflow">case</span> 'open':
|
|
01671 $tagname = $vals[$i]['tag'];
|
|
01672 $size = <span class="keyword">sizeof</span>($children[$tagname]);
|
|
01673 <span class="keywordflow">if</span> ($vals[$i]['attributes'])
|
|
01674 {
|
|
01675 $children[$tagname][$size][<span class="charliteral">'@'</span>] = $vals[$i]['attributes'];
|
|
01676 $children[$tagname][$size][<span class="charliteral">'#'</span>] = $this->_xml_depth($vals, $i);
|
|
01677 }
|
|
01678 <span class="keywordflow">else</span>
|
|
01679 {
|
|
01680 $children[$tagname][$size][<span class="charliteral">'#'</span>] = $this->_xml_depth($vals, $i);
|
|
01681 }
|
|
01682 <span class="keywordflow">break</span>;
|
|
01683
|
|
01684 <span class="keywordflow">case</span> 'close':
|
|
01685 <span class="keywordflow">return</span> $children;
|
|
01686 <span class="keywordflow">break</span>;
|
|
01687 }
|
|
01688 }
|
|
01689
|
|
01690 <span class="keywordflow">return</span> $children;
|
|
01691 }
|
|
01692
|
|
01693
|
|
01694
|
|
01695 <span class="comment">// TraverseXMLize()</span>
|
|
01696 <span class="comment">// (c) acebone@f2s.com, a HUGE help!</span>
|
|
01697
|
|
01698 function TraverseXMLize($array, $arrName = <span class="stringliteral">"array"</span>, $level = 0)
|
|
01699 {
|
|
01700 <span class="keywordflow">if</span> ($level == 0)
|
|
01701 {
|
|
01702 echo <span class="stringliteral">"<pre>"</span>;
|
|
01703 }
|
|
01704
|
|
01705 <span class="keywordflow">while</span> (list($key, $val) = @each($array))
|
|
01706 {
|
|
01707 <span class="keywordflow">if</span> (is_array($val))
|
|
01708 {
|
|
01709 $this->TraverseXMLize($val, $arrName . <span class="stringliteral">"["</span> . $key . <span class="stringliteral">"]"</span>, $level + 1);
|
|
01710 }
|
|
01711 <span class="keywordflow">else</span>
|
|
01712 {
|
|
01713 echo <span class="charliteral">'$'</span> . $arrName . <span class="charliteral">'['</span> . $key . '] = <span class="stringliteral">"' . $val . "</span>\<span class="stringliteral">"\n"</span>;
|
|
01714 }
|
|
01715 }
|
|
01716
|
|
01717 <span class="keywordflow">if</span> ($level == 0)
|
|
01718 {
|
|
01719 echo <span class="stringliteral">"</pre>"</span>;
|
|
01720 }
|
|
01721 }
|
|
01722 }
|
|
01723
|
|
01724
|
|
01725
|
|
01726 <span class="keyword">class </span>MakeXML <span class="keyword">extends</span> Jabber
|
|
01727 {
|
|
01728 var $nodes;
|
|
01729
|
|
01730
|
|
01731 function MakeXML()
|
|
01732 {
|
|
01733 $nodes = array();
|
|
01734 }
|
|
01735
|
|
01736
|
|
01737
|
|
01738 function AddPacketDetails($string, $value = NULL)
|
|
01739 {
|
|
01740 <span class="keywordflow">if</span> (preg_match(<span class="stringliteral">"/\(([0-9]*)\)$/i"</span>, $string))
|
|
01741 {
|
|
01742 $string .= <span class="stringliteral">"/[\"#\"]"</span>;
|
|
01743 }
|
|
01744
|
|
01745 $temp = @explode(<span class="stringliteral">"/"</span>, $string);
|
|
01746
|
|
01747 <span class="keywordflow">for</span> ($a = 0; $a < count($temp); $a++)
|
|
01748 {
|
|
01749 $temp[$a] = preg_replace(<span class="stringliteral">"/^[@]{1}([a-z0-9_]*)$/i"</span>, <span class="stringliteral">"[\"@\"][\"\\1\"]"</span>, $temp[$a]);
|
|
01750 $temp[$a] = preg_replace(<span class="stringliteral">"/^([a-z0-9_]*)\(([0-9]*)\)$/i"</span>, <span class="stringliteral">"[\"\\1\"][\\2]"</span>, $temp[$a]);
|
|
01751 $temp[$a] = preg_replace(<span class="stringliteral">"/^([a-z0-9_]*)$/i"</span>, <span class="stringliteral">"[\"\\1\"]"</span>, $temp[$a]);
|
|
01752 }
|
|
01753
|
|
01754 $node = implode(<span class="stringliteral">""</span>, $temp);
|
|
01755
|
|
01756 <span class="comment">// Yeahyeahyeah, I know it's ugly... get over it. ;)</span>
|
|
01757 echo <span class="stringliteral">"\$this->nodes$node = \""</span> . htmlspecialchars($value) . <span class="stringliteral">"\";<br/>"</span>;
|
|
01758 eval(<span class="stringliteral">"\$this->nodes$node = \""</span> . htmlspecialchars($value) . <span class="stringliteral">"\";"</span>);
|
|
01759 }
|
|
01760
|
|
01761
|
|
01762
|
|
01763 function BuildPacket($array = NULL)
|
|
01764 {
|
|
01765
|
|
01766 <span class="keywordflow">if</span> (!$array)
|
|
01767 {
|
|
01768 $array = $this->nodes;
|
|
01769 }
|
|
01770
|
|
01771 <span class="keywordflow">if</span> (is_array($array))
|
|
01772 {
|
|
01773 array_multisort($array, SORT_ASC, SORT_STRING);
|
|
01774
|
|
01775 foreach ($array as $key => $value)
|
|
01776 {
|
|
01777 <span class="keywordflow">if</span> (is_array($value) && $key == <span class="stringliteral">"@"</span>)
|
|
01778 {
|
|
01779 foreach ($value as $subkey => $subvalue)
|
|
01780 {
|
|
01781 $subvalue = htmlspecialchars($subvalue);
|
|
01782 $text .= <span class="stringliteral">" $subkey='$subvalue'"</span>;
|
|
01783 }
|
|
01784
|
|
01785 $text .= <span class="stringliteral">">\n"</span>;
|
|
01786
|
|
01787 }
|
|
01788 elseif ($key == <span class="stringliteral">"#"</span>)
|
|
01789 {
|
|
01790 $text .= htmlspecialchars($value);
|
|
01791 }
|
|
01792 elseif (is_array($value))
|
|
01793 {
|
|
01794 <span class="keywordflow">for</span> ($a = 0; $a < count($value); $a++)
|
|
01795 {
|
|
01796 $text .= <span class="stringliteral">"<$key"</span>;
|
|
01797
|
|
01798 <span class="keywordflow">if</span> (!$this->_preg_grep_keys(<span class="stringliteral">"/^@/"</span>, $value[$a]))
|
|
01799 {
|
|
01800 $text .= <span class="stringliteral">">"</span>;
|
|
01801 }
|
|
01802
|
|
01803 $text .= $this->BuildPacket($value[$a]);
|
|
01804
|
|
01805 $text .= <span class="stringliteral">"</$key>\n"</span>;
|
|
01806 }
|
|
01807 }
|
|
01808 <span class="keywordflow">else</span>
|
|
01809 {
|
|
01810 $value = htmlspecialchars($value);
|
|
01811 $text .= <span class="stringliteral">"<$key>$value</$key>\n"</span>;
|
|
01812 }
|
|
01813 }
|
|
01814
|
|
01815 <span class="keywordflow">return</span> $text;
|
|
01816 }
|
|
01817 }
|
|
01818
|
|
01819
|
|
01820
|
|
01821 function _preg_grep_keys($pattern, $array)
|
|
01822 {
|
|
01823 <span class="keywordflow">while</span> (list($key, $val) = each($array))
|
|
01824 {
|
|
01825 <span class="keywordflow">if</span> (preg_match($pattern, $key))
|
|
01826 {
|
|
01827 $newarray[$key] = $val;
|
|
01828 }
|
|
01829 }
|
|
01830 <span class="keywordflow">return</span> (is_array($newarray)) ? $newarray : FALSE;
|
|
01831 }
|
|
01832 }
|
|
01833
|
|
01834
|
|
01835
|
|
01836 <span class="keyword">class </span>CJP_StandardConnector
|
|
01837 {
|
|
01838 var $active_socket;
|
|
01839
|
|
01840 function OpenSocket($server, $port)
|
|
01841 {
|
|
01842 <span class="keywordflow">if</span> ($this->active_socket = fsockopen($server, $port))
|
|
01843 {
|
|
01844 socket_set_blocking($this->active_socket, 0);
|
|
01845 socket_set_timeout($this->active_socket, 31536000);
|
|
01846
|
|
01847 <span class="keywordflow">return</span> TRUE;
|
|
01848 }
|
|
01849 <span class="keywordflow">else</span>
|
|
01850 {
|
|
01851 <span class="keywordflow">return</span> FALSE;
|
|
01852 }
|
|
01853 }
|
|
01854
|
|
01855
|
|
01856
|
|
01857 function CloseSocket()
|
|
01858 {
|
|
01859 <span class="keywordflow">return</span> fclose($this->active_socket);
|
|
01860 }
|
|
01861
|
|
01862
|
|
01863
|
|
01864 function WriteToSocket($data)
|
|
01865 {
|
|
01866 <span class="keywordflow">return</span> fwrite($this->active_socket, $data);
|
|
01867 }
|
|
01868
|
|
01869
|
|
01870
|
|
01871 function ReadFromSocket($chunksize)
|
|
01872 {
|
|
01873 set_magic_quotes_runtime(0);
|
|
01874 $buffer = fread($this->active_socket, $chunksize);
|
|
01875 set_magic_quotes_runtime(get_magic_quotes_gpc());
|
|
01876
|
|
01877 <span class="keywordflow">return</span> $buffer;
|
|
01878 }
|
|
01879 }
|
|
01880
|
|
01881
|
|
01882
|
|
01883 ?>
|
|
</div></pre><hr size="1"><address style="align: right;"><small>Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.7 </small></address>
|
|
</body>
|
|
</html>
|