2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								#!/usr/bin/env php
  
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< ? php  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Laconica  -  a  distributed  open - source  microblogging  tool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Copyright  ( C )  2008 ,  Controlez - Vous ,  Inc . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  This  program  is  free  software :  you  can  redistribute  it  and / or  modify 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  it  under  the  terms  of  the  GNU  Affero  General  Public  License  as  published  by 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  the  Free  Software  Foundation ,  either  version  3  of  the  License ,  or 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  ( at  your  option )  any  later  version . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  This  program  is  distributed  in  the  hope  that  it  will  be  useful , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  but  WITHOUT  ANY  WARRANTY ;  without  even  the  implied  warranty  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  MERCHANTABILITY  or  FITNESS  FOR  A  PARTICULAR  PURPOSE .   See  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  GNU  Affero  General  Public  License  for  more  details . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  You  should  have  received  a  copy  of  the  GNU  Affero  General  Public  License 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  along  with  this  program .   If  not ,  see  < http :// www . gnu . org / licenses />. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 01:49:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function  xmppdaemon_error_handler ( $errno ,  $errstr ,  $errfile ,  $errline ,  $errcontext )  {  
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    switch  ( $errno )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     case  E_USER_ERROR : 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-22 02:46:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									echo  " ERROR: [ $errno ]  $errstr  ( $errfile : $errline ) \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									echo  "   Fatal error on line  $errline  in file  $errfile " ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 09:44:08 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									echo  " , PHP  "  .  PHP_VERSION  .  "  ( "  .  PHP_OS  .  " ) \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									echo  " Aborting... \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									exit ( 1 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									break ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-22 02:46:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    case  E_USER_WARNING : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									echo  " WARNING [ $errno ]  $errstr  ( $errfile : $errline ) \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									break ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     case  E_USER_NOTICE : 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-22 02:46:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									echo  " My NOTICE [ $errno ]  $errstr  ( $errfile : $errline ) \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									break ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     default : 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-22 02:46:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									echo  " Unknown error type: [ $errno ]  $errstr  ( $errfile : $errline ) \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 02:47:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /* Don't execute PHP internal error handler */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-16 01:49:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								set_error_handler ( 'xmppdaemon_error_handler' );  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:05:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# Abort if called from a web server
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  ( isset ( $_SERVER )  &&  array_key_exists ( 'REQUEST_METHOD' ,  $_SERVER ))  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									print  " This script must be run from the command line \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									exit (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-13 11:46:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								define ( 'INSTALLDIR' ,  realpath ( dirname ( __FILE__ )  .  '/..' ));  
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								define ( 'LACONICA' ,  true );  
						 
					
						
							
								
									
										
										
										
											2008-08-22 14:59:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								define ( 'CLAIM_TIMEOUT' ,  100000 );  
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require_once ( INSTALLDIR  .  '/lib/common.php' );  
						 
					
						
							
								
									
										
										
										
											2008-06-26 03:07:03 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								require_once ( INSTALLDIR  .  '/lib/jabber.php' );  
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:12:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# This is kind of clunky; we create a class to call the global functions
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# in jabber.php, which create a new XMPP class. A more elegant (?) solution
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# might be to use make this a subclass of XMPP.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  XMPPDaemon  {  
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:02:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 03:59:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  XMPPDaemon ( $resource = NULL )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										static  $attrs  =  array ( 'server' ,  'port' ,  'user' ,  'password' ,  'host' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:09:30 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										foreach  ( $attrs  as  $attr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											$this -> $attr  =  common_config ( 'xmpp' ,  $attr ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 03:59:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( $resource )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> resource  =  $resource ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> resource  =  common_config ( 'xmpp' ,  'resource' )  .  'daemon' ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 03:59:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$this -> log ( LOG_INFO ,  " { $this -> user } @ { $this -> server } / { $this -> resource } " ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									function  connect ()  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 16:24:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$connect_to  =  ( $this -> host )  ?  $this -> host  :  $this -> server ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$this -> log ( LOG_INFO ,  " Connecting to  $connect_to  on port  $this->port " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$this -> conn  =  jabber_connect ( $this -> resource ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										if  ( ! $this -> conn )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 14:47:29 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  ! $this -> conn -> isDisconnected (); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:02:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									function  handle ()  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										static  $parts  =  array ( 'message' ,  'presence' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															  'end_stream' ,  'session_start' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 16:24:12 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										while ( ! $this -> conn -> isDisconnected ())  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$payloads  =  $this -> conn -> processUntil ( $parts ,  10 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( $payloads )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												foreach ( $payloads  as  $event )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$pl  =  $event [ 1 ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													switch ( $event [ 0 ])  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													 case  'message' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														$this -> handle_message ( $pl ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													 case  'presence' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														$this -> handle_presence ( $pl ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													 case  'session_start' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														$this -> handle_session ( $pl ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> broadcast_queue (); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 03:13:19 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$this -> confirmation_queue (); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-14 08:47:33 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  handle_session ( $pl )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										# XXX what to do here?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 14:11:44 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  get_user ( $from )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$user  =  User :: staticGet ( 'jabber' ,  jabber_normalize_jid ( $from )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  $user ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									function  get_confirmation ( $from )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$confirm  =  new  Confirm_address (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$confirm -> address  =  $from ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$confirm -> address_type  =  'jabber' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( $confirm -> find ( TRUE ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  $confirm ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									function  handle_message ( & $pl )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-23 18:36:41 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( $pl [ 'type' ]  !=  'chat' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( strlen ( $pl [ 'body' ])  ==  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 16:39:35 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$from  =  jabber_normalize_jid ( $pl [ 'from' ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$user  =  $this -> get_user ( $from ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										if  ( ! $user )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$this -> from_site ( $from ,  'Unknown user; go to '  . 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-04 16:17:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
															 common_local_url ( 'imsettings' )  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															 ' to add your address to your account' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-23 00:18:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$this -> log ( LOG_WARNING ,  'Message from unknown user '  .  $from ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( $this -> handle_command ( $user ,  $pl [ 'body' ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-07 20:30:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  if  ( $this -> is_autoreply ( $pl [ 'body' ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> log ( LOG_INFO ,  'Ignoring auto reply from '  .  $from ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-05 20:21:34 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  if  ( $this -> is_otr ( $pl [ 'body' ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> log ( LOG_INFO ,  'Ignoring OTR from '  .  $from ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-18 17:30:31 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											if ( strlen ( $pl [ 'body' ]) > 140 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$this -> from_site ( $from ,  'Message too long - maximum is 140 characters, you sent '  .  strlen ( $pl [ 'body' ])); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											$this -> add_notice ( $user ,  $pl ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-07 20:30:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  is_autoreply ( $txt )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( preg_match ( '/[\[\(]?[Aa]uto-?[Rr]eply[\]\)]/' ,  $txt ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-05 20:21:34 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  is_otr ( $txt )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( preg_match ( '/^\?OTR/' ,  $txt ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									
							 
						 
					
						
							
								
									
										
										
										
											2008-07-04 16:17:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  from_site ( $address ,  $msg )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$text  =  '[' . common_config ( 'site' ,  'name' )  .  '] '  .  $msg ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										jabber_send_message ( $address ,  $text ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									function  handle_command ( $user ,  $body )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										# XXX: localise
 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 15:10:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$p = explode ( ' ' , $body ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if ( count ( $p ) > 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										switch ( $p [ 0 ])  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 case  'help' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	if ( count ( $p ) != 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	$this -> from_site ( $user -> jabber ,  " Commands: \n  on     - turn on notifications \n  off    - turn off notifications \n  help   - show this help  \n  sub - subscribe to user \n  unsub - unsubscribe from user " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										 case  'on' : 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 15:10:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										 	if ( count ( $p ) != 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											$this -> set_notify ( $user ,  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-04 16:17:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$this -> from_site ( $user -> jabber ,  'notifications on' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 case  'off' : 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 15:10:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										 	if ( count ( $p ) != 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											$this -> set_notify ( $user ,  false ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-04 16:17:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$this -> from_site ( $user -> jabber ,  'notifications off' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-22 15:10:32 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										 case  'sub' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	if ( count ( $p ) == 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		$this -> from_site ( $user -> jabber ,  'Specify the name of the user to subscribe to' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	$result = subs_subscribe_user ( $user ,  $p [ 1 ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	if ( $result == 'true' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		$this -> from_site ( $user -> jabber ,  'Subscribed to '  .  $p [ 1 ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		$this -> from_site ( $user -> jabber ,  $result ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 case  'unsub' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	if ( count ( $p ) == 1 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		$this -> from_site ( $user -> jabber ,  'Specify the name of the user to unsubscribe from' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	$result = subs_unsubscribe_user ( $user ,  $p [ 1 ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	if ( $result == 'true' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		$this -> from_site ( $user -> jabber ,  'Unsubscribed from '  .  $p [ 1 ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 		$this -> from_site ( $user -> jabber ,  $result ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 	return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										 default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:38:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									function  set_notify ( & $user ,  $notify )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$orig  =  clone ( $user ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$user -> jabbernotify  =  $notify ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$result  =  $user -> update ( $orig ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-19 03:13:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( ! $result )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:38:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$last_error  =  & PEAR :: getStaticProperty ( 'DB_DataObject' , 'lastError' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-18 15:08:35 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$this -> log ( LOG_ERR , 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:38:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													   'Could not set notify flag to '  .  $notify  . 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:02:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													   ' for user '  .  common_log_objstring ( $user )  . 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:38:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													   ': '  .  $last_error -> message ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> log ( LOG_INFO , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													   'User '  .  $user -> nickname  .  ' set notify flag to '  .  $notify ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:02:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									function  add_notice ( & $user ,  & $pl )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-08-17 22:55:49 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$notice  =  Notice :: saveNew ( $user -> id ,  trim ( mb_substr ( $pl [ 'body' ],  0 ,  140 )),  'xmpp' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-29 22:28:56 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( is_string ( $notice ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> log ( LOG_ERR ,  $notice ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-04 03:29:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										common_real_broadcast ( $notice ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:38:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$this -> log ( LOG_INFO , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												   'Added notice '  .  $notice -> id  .  ' from user '  .  $user -> nickname ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:02:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									function  handle_presence ( & $pl )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-23 20:15:23 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$from  =  jabber_normalize_jid ( $pl [ 'from' ]); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 02:46:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										switch  ( $pl [ 'type' ])  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										 case  'subscribe' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											# We let anyone subscribe
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> subscribed ( $from ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> log ( LOG_INFO , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													   'Accepted subscription from '  .  $from ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 case  'subscribed' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 case  'unsubscribed' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 case  'unsubscribe' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> log ( LOG_INFO , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													   'Ignoring  "'  .  $pl [ 'type' ]  .  '" from '  .  $from ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( ! $pl [ 'type' ])  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$user  =  User :: staticGet ( 'jabber' ,  $from ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( ! $user )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-17 09:24:52 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													$this -> log ( LOG_WARNING ,  'Presence from unknown user '  .  $from ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													return ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 02:46:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( $user -> updatefrompresence )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$this -> log ( LOG_INFO ,  'Updating '  .  $user -> nickname  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															   ' status from presence.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$this -> add_notice ( $user ,  $pl ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											break ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:02:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									function  log ( $level ,  $msg )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										common_log ( $level ,  'XMPPDaemon(' . $this -> resource . '): ' . $msg ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 02:46:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									function  subscribed ( $to )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										jabber_special_presence ( 'subscribed' ,  $to ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 02:46:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  set_status ( $status )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:12:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$this -> log ( LOG_INFO ,  'Setting status to "'  .  $status  .  '"' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										jabber_send_presence ( $status ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 02:46:46 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									function  top_queue_item ()  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$qi  =  new  Queue_item (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$qi -> orderBy ( 'created' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$qi -> whereAdd ( 'claimed is NULL' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$qi -> limit ( 1 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$cnt  =  $qi -> find ( TRUE ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( $cnt )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											# XXX: potential race condition
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											# can we force it to only update if claimed is still NULL
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											# (or old)?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> log ( LOG_INFO ,  'claiming queue item = '  .  $qi -> notice_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$orig  =  clone ( $qi ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$qi -> claimed  =  DB_DataObject_Cast :: dateTime (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$result  =  $qi -> update ( $orig ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( $result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$this -> log ( LOG_INFO ,  'claim succeeded.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												return  $qi ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$this -> log ( LOG_INFO ,  'claim failed.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$qi  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									function  broadcast_queue ()  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$this -> clear_old_claims (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$this -> log ( LOG_INFO ,  'checking for queued notices' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										do  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$qi  =  $this -> top_queue_item (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( $qi )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 14:39:55 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												$this -> log ( LOG_INFO ,  'Got item enqueued ' . common_exact_date ( $qi -> created )); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												$notice  =  Notice :: staticGet ( $qi -> notice_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( $notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$this -> log ( LOG_INFO ,  'broadcasting notice ID = '  .  $notice -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													# XXX: what to do if broadcast fails?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$result  =  common_real_broadcast ( $notice ,  $this -> is_remote ( $notice )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													if  ( ! $result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														$this -> log ( LOG_WARNING ,  'Failed broadcast for notice ID = '  .  $notice -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														$orig  =  $qi ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														$qi -> claimed  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														$qi -> update ( $orig ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														$this -> log ( LOG_WARNING ,  'Abandoned claim for notice ID = '  .  $notice -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$this -> log ( LOG_INFO ,  'finished broadcasting notice ID = '  .  $notice -> id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$notice  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$this -> log ( LOG_WARNING ,  'queue item for notice that does not exist' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$qi -> delete (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  while  ( $qi ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									function  clear_old_claims ()  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$qi  =  new  Queue_item (); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 05:03:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									        $qi -> claimed  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 13:28:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$qi -> whereAdd ( 'now() - claimed > ' . CLAIM_TIMEOUT ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$qi -> update ( DB_DATAOBJECT_WHEREADD_ONLY ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									function  is_remote ( $notice )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$user  =  User :: staticGet ( $notice -> profile_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  ! $user ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  confirmation_queue ()  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 02:14:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    # $this->clear_old_confirm_claims();
 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$this -> log ( LOG_INFO ,  'checking for queued confirmations' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										do  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$confirm  =  $this -> next_confirm (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( $confirm )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$this -> log ( LOG_INFO ,  'Sending confirmation for '  .  $confirm -> address ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$user  =  User :: staticGet ( $confirm -> user_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( ! $user )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$this -> log ( LOG_WARNING ,  'Confirmation for unknown user '  .  $confirm -> user_id ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$success  =  jabber_confirm_address ( $confirm -> code , 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 02:14:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
																  $user -> nickname , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
																  $confirm -> address ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												if  ( ! $success )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-18 15:08:35 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													$this -> log ( LOG_ERR ,  'Confirmation failed for '  .  $confirm -> address ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													# Just let the claim age out; hopefully things work then
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$this -> log ( LOG_INFO ,  'Confirmation sent for '  .  $confirm -> address ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													# Mark confirmation sent
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													$original  =  clone ( $confirm ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 05:03:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													$confirm -> sent  =  $confirm -> claimed ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													$result  =  $confirm -> update ( $original ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													if  ( ! $result )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-18 15:08:35 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
														$this -> log ( LOG_ERR ,  'Cannot mark sent for '  .  $confirm -> address ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
														# Just let the claim age out; hopefully things work then
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
														continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  while  ( $confirm ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  next_confirm ()  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$confirm  =  new  Confirm_address (); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 02:14:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$confirm -> whereAdd ( 'claimed IS NULL' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 05:03:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$confirm -> whereAdd ( 'sent IS NULL' ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:58:38 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										# XXX: eventually we could do other confirmations in the queue, too
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$confirm -> address_type  =  'jabber' ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$confirm -> orderBy ( 'modified DESC' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$confirm -> limit ( 1 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( $confirm -> find ( TRUE ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$this -> log ( LOG_INFO ,  'Claiming confirmation for '  .  $confirm -> address ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 05:03:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										        # working around some weird DB_DataObject behaviour
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$confirm -> whereAdd ( '' );  # clears where stuff
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										        $original  =  clone ( $confirm ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											$confirm -> claimed  =  DB_DataObject_Cast :: dateTime (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											$result  =  $confirm -> update ( $original ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( $result )  { 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 05:03:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												$this -> log ( LOG_INFO ,  'Succeeded in claim! ' .  $result ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												return  $confirm ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												$this -> log ( LOG_INFO ,  'Failed in claim!' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									function  clear_old_confirm_claims ()  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$confirm  =  new  Confirm (); 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-06 05:03:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									        $confirm -> claimed  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-05 23:57:07 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										$confirm -> whereAdd ( 'now() - claimed > ' . CLAIM_TIMEOUT ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										$confirm -> update ( DB_DATAOBJECT_WHEREADD_ONLY ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-20 01:57:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-08-17 23:30:49 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								mb_internal_encoding ( 'UTF-8' );  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								$resource  =  ( $argc  >  1 )  ?  $argv [ 1 ]  :  NULL ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								$daemon  =  new  XMPPDaemon ( $resource );  
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:01:50 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  ( $daemon -> connect ())  {  
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:03:36 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									$daemon -> set_status ( " Send me a message to post a notice " ); 
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 23:01:50 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									$daemon -> handle (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2008-06-26 11:12:02 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-06-22 22:27:10 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								?>