0 ) { return true; } return false; } } //updateState function support function returnRejectedCallIfPresent($userHash) { global $link; $query="SELECT c.to_id, u.user_data_escaped FROM calls c INNER JOIN logged_users u ON (c.to_id = u.user_hash) WHERE c.state = ". CALL_REJECTED." AND c.from_id = '".$userHash."'"; $result = mysql_query($query, $link); if (!$result) { dieWithMessage(METHOD_UPDATESTATE,'Failed to get outgoing calls in updateState: ' . mysql_error()); } else { if ( mysql_num_rows($result) > 0 ) { $obj = mysql_fetch_object($result); return $obj->user_data_escaped.'^@^'.$obj->to_id; } } return null; } //updateState function support function returnAnsweredCallIfPresent($userHash) { global $link; $query="SELECT c.to_id, u.user_data_escaped FROM calls c INNER JOIN logged_users u ON (c.to_id = u.user_hash) WHERE c.state = ". CALL_ANSWERED." AND c.from_id = '".$userHash."'"; $result = mysql_query($query, $link); if (!$result) { dieWithMessage(METHOD_UPDATESTATE,'Failed to get outgoing calls in updateState: ' . mysql_error()); } else { if ( mysql_num_rows($result) > 0 ) { $obj = mysql_fetch_object($result); return $obj->user_data_escaped.'^@^'.$obj->to_id; } } return null; } //updateState function support function returnIncomingCallIfPresent($userHash) { global $link; $query="SELECT c.from_id, u.user_data_escaped FROM calls c INNER JOIN logged_users u ON (c.from_id = u.user_hash) WHERE c.state = ". CALL_WAITING." AND c.to_id = '".$userHash."'"; $result = mysql_query($query, $link); if (!$result) { dieWithMessage(METHOD_UPDATESTATE,'Failed to get outgoing calls in updateState: ' . mysql_error()); } else { if ( mysql_num_rows($result) > 0 ) { $obj = mysql_fetch_object($result); return $obj->user_data_escaped.'^@^'.$obj->from_id; } } return null; } function clearCall($fromHash, $toHash) { global $link; $fromHash = mysql_real_escape_string($fromHash); $toHash = mysql_real_escape_string($toHash); $query = "DELETE FROM calls WHERE `from_id`='".$fromHash."' AND `to_id`='".$toHash."'"; if ( !mysql_query($query, $link) ) { dieWithMessage(METHOD_CLEARCALL, 'Failed to clear call'); } else { showResult( METHOD_CLEARCALL, $query ); } } //Make a call function makeCall($fromHash, $toHash) { global $link; $fromHash = mysql_real_escape_string($fromHash); $toHash = mysql_real_escape_string($toHash); $currentTime = time(); //dropping previous calls $query = "UPDATE calls SET `state` = ".CALL_INVALID.", `last_updated`=".$currentTime." WHERE `from_id` = '".$fromHash."'"; //print $query; if (! mysql_query($query, $link) ) { dieWithMessage(METHOD_MAKECALL,'Failed to delete calls in makecall : ' . mysql_error()); } //checking if person having toHash is online $query = "SELECT * FROM logged_users WHERE (`user_hash` = '".$toHash."' AND `state` = ".USER_LOGGED_IN.')'; //print $query; $result = mysql_query($query, $link); if (!$result ) { dieWithMessage(METHOD_MAKECALL,'Failed to look for to_user in makecall : ' . mysql_error()); } else { //Checking if there are logged in users with the given toHash if ( mysql_num_rows($result) > 0 ) { $r_array = mysql_fetch_array($result, MYSQL_NUM); //Yes, there are, creating a call record $query = "INSERT INTO calls VALUES ('".$fromHash."','".$toHash."',".$currentTime.','.CALL_WAITING.')'; //print $query; if (! mysql_query($query, $link) ) { dieWithMessage(METHOD_MAKECALL,'Failed to create record in calls: ' . mysql_error()); } showResult(METHOD_MAKECALL,"MOK"); } else { //They are offline showResult(METHOD_MAKECALL,"MOFFL"); } } } //Answer a call function answerCall( $fromHash, $toHash ) { global $link; $fromHash = mysql_real_escape_string($fromHash); $toHash = mysql_real_escape_string($toHash); $currentTime = time(); //checking if call exists and waiting $query = "SELECT * FROM calls WHERE ((`from_id` = '".$fromHash."' AND `to_id` = '".$toHash."') AND `state` = ".CALL_WAITING.')'; //print $query; $result = mysql_query($query, $link); if ( !$result ) { dieWithMessage(METHOD_ANSWERCALL,'Failed to select calls in answer'.mysql_error()); } else { if ( mysql_num_rows($result) > 0 ) { $r_array = mysql_fetch_array($result, MYSQL_NUM); $query = "UPDATE calls SET `state`=".CALL_ANSWERED.", `last_updated` = ".$currentTime." WHERE `from_id`='".$fromHash."' AND `to_id`='".$toHash."'"; //print $query; if (! mysql_query($query, $link) ) { dieWithMessage(METHOD_ANSWERCALL,'Failed to update record in answercall: ' . mysql_error()); } else { //Call answered showResult(METHOD_ANSWERCALL,"ANSWRD"); } } else { //No calls remaining showResult(METHOD_ANSWERCALL,"NOCALLS"); } } } //Reject a call function rejectCall($fromHash,$toHash) { global $link; $fromHash = mysql_real_escape_string($fromHash); $toHash = mysql_real_escape_string($toHash); $currentTime = time(); //checking if call exists and waiting $query = "SELECT * FROM calls WHERE ((`from_id` = '".$fromHash."' AND `to_id` = '".$toHash."') AND `state` = ".CALL_WAITING.')'; //print $query; $result = mysql_query($query, $link); if ( !$result ) { dieWithMessage(METHOD_REJECTCALL,'Failed to select calls in answer'.mysql_error()); } else { if ( mysql_num_rows($result) > 0 ) { $r_array = mysql_fetch_array($result, MYSQL_NUM); $query = "UPDATE calls SET `state`=".CALL_REJECTED.", `last_updated` = ".$currentTime." WHERE `from_id`='".$fromHash."' AND `to_id`='".$toHash."'"; //print $query; if (! mysql_query($query, $link) ) { dieWithMessage(METHOD_REJECTCALL,'Failed to update record in answercall: ' . mysql_error()); } else { //Call answered showResult(METHOD_REJECTCALL,"RJCTD"); } } else { //No calls remaining showResult(METHOD_REJECTCALL,"NOCALLS"); } } } function getDisplayName( $hash ) { global $link; $query = "SELECT user_data_escaped FROM logged_users WHERE user_hash = '".$hash."'"; $result = mysql_query($query, $link); if (! $result ) { dieWithMessage(METHOD_GETCALLERLINK,'Failed to find caller record in logged_users' . mysql_error()); } else { if ( mysql_num_rows($result) > 0 ) { $r_array = mysql_fetch_array($result, MYSQL_NUM); return $r_array[0]; } else { return 'Joe Unknown'; } } } function getCallerLink( $fromHash, $toHash ) { global $link; $fromHash = mysql_real_escape_string($fromHash); $toHash = mysql_real_escape_string($toHash); $callerName = getDisplayName($fromHash); $userClient = new SoapClient(OM_SERVER_ADDRESS.'/services/UserService?wsdl'); $roomClient = new SoapClient(OM_SERVER_ADDRESS.'/services/RoomService?wsdl'); $session = $userClient->getSession(); $loginResult = $userClient->loginUser(array('SID'=>$session->return->session_id,'username'=>OM_ADMIN_LOGIN, 'userpass'=>OM_ADMIN_PASS)); if ($loginResult > 0) { //Successfully logged in, searching for a room, if its created $confs = $roomClient->getRooms(array('SID'=>$session->return->session_id, 'start'=>0, 'max'=>100, 'orderby'=>'name', 'asc'=>true))->return->result; $roomId = null; foreach ( $confs as $value ) { if ($value->name == $fromHash.$toHash) { //room exists, returning link to it $roomId = $value->rooms_id; } } if ( $roomId == null ) { //room doesn't exist, creating one and returning a link $addRoomResult = $roomClient->addRoomWithModeration(array('SID'=>$session->return->session_id, 'name'=>$fromHash.$toHash,'roomtypes_id'=>1,'comment'=>'Call room','numberOfPartizipants'=>2, 'ispublic'=>true,'appointment'=>false,'isDemoRoom'=>false,'demoTime'=>0,'isModeratedRoom'=>true))->return; if ( $addRoomResult > 0 ) { $roomId = $addRoomResult; } else { dieWithMessage( METHOD_GETCALLERLINK, 'Failed to add a room' ); } } $setUserObjectResult = $userClient->setUserObjectAndGenerateRoomHash(array('SID'=>$session->return->session_id, 'username'=>$callerName,'firstname'=>$callerName, 'lastname'=>'', 'profilePictureUrl'=>'', 'email'=>'','externalUserId'=>0,'externalUserType'=>'caller','room_id'=>$roomId, 'becomeModeratorAsInt'=>2, 'showAudioVideoTestAsInt'=>2))->return; if ( $setUserObjectResult != null ) { showResult(METHOD_GETCALLERLINK, OM_SERVER_ADDRESS.'/openmeetings/main.lzx.swf8.swf?secureHash='.$setUserObjectResult); } else { dieWithMessage(METHOD_GETCALLERLINK,"Setting user object failed"); } } else { dieWithMessage(METHOD_GETCALLERLINK, "Login failed"); } } function getCalleeLink( $fromHash, $toHash ) { global $link; $fromHash = mysql_real_escape_string($fromHash); $toHash = mysql_real_escape_string($toHash); $callerName = getDisplayName($toHash); $userClient = new SoapClient(OM_SERVER_ADDRESS.'/services/UserService?wsdl'); $roomClient = new SoapClient(OM_SERVER_ADDRESS.'/services/RoomService?wsdl'); $session = $userClient->getSession(); $loginResult = $userClient->loginUser(array('SID'=>$session->return->session_id,'username'=>OM_ADMIN_LOGIN, 'userpass'=>OM_ADMIN_PASS)); if ($loginResult > 0) { //Successfully logged in, searching for a room, if its created $confs = $roomClient->getRooms(array('SID'=>$session->return->session_id, 'start'=>0, 'max'=>100, 'orderby'=>'name', 'asc'=>true))->return->result; $roomId = null; foreach ( $confs as $value ) { if ($value->name == $fromHash.$toHash) { //room exists, returning link to it $roomId = $value->rooms_id; } } if ( $roomId == null ) { //room doesn't exist, creating one and returning a link $addRoomResult = $roomClient->addRoomWithModeration(array('SID'=>$session->return->session_id, 'name'=>$fromHash.$toHash,'roomtypes_id'=>1,'comment'=>'Call room','numberOfPartizipants'=>2, 'ispublic'=>true,'appointment'=>false,'isDemoRoom'=>false,'demoTime'=>0,'isModeratedRoom'=>true))->return; if ( $addRoomResult > 0 ) { $roomId = $addRoomResult; } else { dieWithMessage( METHOD_GETCALLEELINK, 'Failed to add a room' ); } } $setUserObjectResult = $userClient->setUserObjectAndGenerateRoomHash(array('SID'=>$session->return->session_id, 'username'=>$callerName,'firstname'=>$callerName, 'lastname'=>'', 'profilePictureUrl'=>'', 'email'=>'','externalUserId'=>0,'externalUserType'=>'caller','room_id'=>$roomId, 'becomeModeratorAsInt'=>0, 'showAudioVideoTestAsInt'=>2))->return; if ( $setUserObjectResult != null ) { showResult(METHOD_GETCALLEELINK, OM_SERVER_ADDRESS.'/openmeetings/main.lzx.swf8.swf?secureHash='.$setUserObjectResult); } else { dieWithMessage(METHOD_GETCALLEELINK,"Setting user object failed"); } } else { dieWithMessage(METHOD_GETCALLEELINK, "Login failed"); } } //End of function definitions if ( $_REQUEST["method"] && ($_REQUEST["arg0"] && $_REQUEST["arg1"]) ) { initDB(); call_user_func( $_REQUEST["method"], $_REQUEST["arg0"], $_REQUEST["arg1"], $_REQUEST["arg2"] ); disposeAndClose(); } else { dieWithMessage('METHOD ERROR',"No method given or argument list is broken"); } ?>