コード例 #1
0
ファイル: iq.php プロジェクト: mrdeadmouse/u136006
 public function ReceiveMessage($senderJId, array $arMessage, CXMPPClient $senderClient)
 {
     if (!$senderClient->IsAuthenticated()) {
         return false;
     }
     if (strlen($senderJId) <= 0) {
         return false;
     }
     if (!array_key_exists("iq", $arMessage)) {
         return false;
     }
     $to = "";
     if (array_key_exists("to", $arMessage["iq"]["."])) {
         $to = $arMessage["iq"]["."]["to"];
     }
     if (strlen($to) > 0 && strpos($to, "@") !== false) {
         $arResult = true;
         $arMessage["iq"]["."]["to"] = CXMPPUtility::GetJIdWithResource($arMessage["iq"]["."]["to"], "");
         $server = CXMPPServer::GetServer();
         $server->Send($to, $arMessage, $senderClient->GetClientDomain());
     } else {
         if ($arMessage["iq"]["."]["type"] == "get" && $arMessage["iq"]["query"]["."]["xmlns"] == "http://jabber.org/protocol/disco#items") {
             $arResult = array("iq" => array("." => array("type" => "result", "from" => $senderClient->GetClientDomain(), "id" => $arMessage['iq']['.']['id']), "query" => array("." => array("xmlns" => "http://jabber.org/protocol/disco#items"))));
         } elseif ($arMessage["iq"]["."]["type"] == "set" && $arMessage["iq"]["session"]["."]["xmlns"] == "urn:ietf:params:xml:ns:xmpp-session") {
             $arResult = array("iq" => array("." => array("type" => "result", "from" => $senderClient->GetClientDomain(), "id" => $arMessage['iq']['.']['id'])));
         } else {
             $arResult = array("iq" => array("." => array("type" => "error", "from" => $senderClient->GetClientDomain(), "id" => $arMessage['iq']['.']['id']), "error" => array("." => array("type" => "cancel"), "feature-not-implemented" => array("." => array("xmlns" => "urn:ietf:params:xml:ns:xmpp-stanzas")))));
         }
         //$arResult = CXMPPUtility::GetErrorArray($senderJId, "iq", "cancel", "feature-not-implemented", "", $arMessage['iq']['.']['id'], "");
     }
     return $arResult;
 }
コード例 #2
0
ファイル: server_query.php プロジェクト: DarneoStudio/bitrix
 public function ProcessServerMessage(array $arMessage, $clientDomain = "")
 {
     if (!array_key_exists("query", $arMessage) || !array_key_exists(".", $arMessage["query"])) {
         return false;
     }
     $arResult = array();
     $type = "get";
     if (array_key_exists("type", $arMessage["query"]["."])) {
         $type = $arMessage["query"]["."]["type"];
     }
     $kind = "common";
     if ($type == "get") {
         $server = CXMPPServer::GetServer();
         $arResult = array("query" => array("." => array("type" => "result"), "common" => array("online" => array("#" => $server->NumberOfOnlineUsers()), "connected" => array("#" => $server->NumberOfConnectedUsers() - 1))));
     } elseif ($type == "set") {
         $action = $arMessage["query"]["action"]["#"];
         if ($action == "die") {
             $server = CXMPPServer::GetServer();
             $server->Stop();
             die;
         } elseif ($action == "clearcache") {
             $server = CXMPPServer::GetServer();
             $server->ClearCaches();
             $arResult = array("query" => array("." => array("type" => "result")));
         } elseif ($action == "dump") {
             CXMPPUtility::MakeDump();
             $arResult = array("query" => array("." => array("type" => "result")));
         }
     }
     return $arResult;
 }
コード例 #3
0
ファイル: factory.php プロジェクト: mrdeadmouse/u136006
 public function SendUnreadMessages($receiverJId, $domain = "")
 {
     $receiverJId = trim($receiverJId);
     if (strlen($receiverJId) <= 0) {
         return false;
     }
     $receiver = CXMPPUtility::GetUserByJId($receiverJId, $domain);
     if (!$receiver) {
         return false;
     }
     $factory = CXMPPFactory::GetFactory();
     if (IsModuleInstalled("im") && CModule::IncludeModule("im")) {
         $CIMMessage = new CIMMessage($receiverJId, array('hide_link' => true));
         $arMessage = $CIMMessage->GetUnreadMessage(array('SPEED_CHECK' => 'N', 'ORDER' => 'ASC', 'USE_SMILES' => 'N', 'USER_LOAD' => 'N', 'LOAD_DEPARTMENT' => 'N'));
         if ($arMessage['result']) {
             foreach ($arMessage['message'] as $id => $arMessage) {
                 $factory->__SendMessage($arMessage["senderId"], $arMessage["recipientId"], $arMessage["id"], IM_MESSAGE_PRIVATE, htmlspecialcharsbx(CTextParser::convert4mail(str_replace(array("#BR#", "<br />", "<br>", "<br/>"), "\n", $arMessage["text"]))), $domain);
             }
         }
         // Notify
         $CIMNotify = new CIMNotify($receiverJId);
         $arNotify = $CIMNotify->GetUnreadNotify(array('SPEED_CHECK' => 'N', 'ORDER' => 'ASC'));
         if ($arNotify['result']) {
             foreach ($arNotify['original_notify'] as $id => $arNotify) {
                 if (isset($arNotify["NOTIFY_MODULE"]) && isset($arNotify["NOTIFY_EVENT"]) && !CIMSettings::GetNotifyAccess($arNotify["TO_USER_ID"], $arNotify["NOTIFY_MODULE"], $arNotify["NOTIFY_EVENT"], CIMSettings::CLIENT_XMPP)) {
                     continue;
                 }
                 if ($arNotify["MESSAGE_OUT"] == IM_MAIL_SKIP) {
                     $arNotify["MESSAGE_OUT"] = '';
                 }
                 $factory->__SendMessage($arNotify["FROM_USER_ID"], $arNotify["TO_USER_ID"], $arNotify["ID"], IM_MESSAGE_SYSTEM, htmlspecialcharsbx(CTextParser::convert4mail(str_replace(array("#BR#", "<br />", "<br>", "<br/>"), "\n", strlen($arNotify["MESSAGE_OUT"]) > 0 ? $arNotify["MESSAGE_OUT"] : $arNotify["MESSAGE"]))), $domain);
             }
         }
     } else {
         $parser = new CSocNetTextParser();
         $dbMessages = CSocNetMessages::GetList(array("DATE_CREATE" => "ASC"), array("TO_USER_ID" => $receiver["ID"], "DATE_VIEW" => "", "TO_DELETED" => "N", "IS_LOG_ALL" => "Y"), false, false, array("ID", "FROM_USER_ID", "TO_USER_ID", "MESSAGE", "DATE_VIEW", "MESSAGE_TYPE", "FROM_DELETED", "TO_DELETED", "IS_LOG"));
         while ($arMessage = $dbMessages->Fetch()) {
             $factory->__SendMessage($arMessage["IS_LOG"] == "Y" ? -5 : $arMessage["FROM_USER_ID"], $arMessage["TO_USER_ID"], $arMessage["ID"], $arMessage["MESSAGE_TYPE"], htmlspecialcharsbx($parser->convert4mail(str_replace(array("#BR#", "<br />", "<br>", "<br/>"), "\n", $arMessage["MESSAGE"]))), $domain);
         }
     }
     return true;
 }
コード例 #4
0
ファイル: roster.php プロジェクト: DarneoStudio/bitrix
 public function ReceiveMessage($senderJId, array $arMessage, CXMPPClient $senderClient)
 {
     if (!$senderClient->IsAuthenticated()) {
         return false;
     }
     if (strlen($senderJId) <= 0) {
         return false;
     }
     if (!array_key_exists("iq", $arMessage)) {
         return false;
     }
     if ($arMessage['iq']['query']['.']['xmlns'] != 'jabber:iq:roster' && ($arMessage['iq']['query']['.']['xmlns'] != 'jabber:iq:private' || $arMessage['iq']['query']['roster']['.']['xmlns'] != 'roster:delimiter')) {
         return false;
     }
     if ($arMessage['iq']['query']['.']['xmlns'] == 'jabber:iq:roster') {
         $arResult = array("iq" => array("." => array("type" => "result", "to" => $senderJId, "id" => $arMessage['iq']['.']['id']), "query" => array("." => array("xmlns" => $arMessage['iq']['query']['.']['xmlns']))));
         if ($this->intranet) {
             $clientDomain = $senderClient->GetClientDomain();
             if (!array_key_exists($clientDomain, $this->rosterCache)) {
                 $this->rosterCache[$clientDomain] = array();
             }
             if (!array_key_exists($clientDomain, $this->rosterCacheAlt)) {
                 $this->rosterCacheAlt[$clientDomain] = array();
             }
             if ($senderClient->IsSubGroupsSupported() && count($this->rosterCache[$clientDomain]) <= 0 || !$senderClient->IsSubGroupsSupported() && count($this->rosterCacheAlt[$clientDomain]) <= 0) {
                 $arDepCache = array();
                 $arDepCacheValue = array();
                 $dbUsers = CUser::GetList($b = "LAST_NAME", $o = "asc", array("ACTIVE" => "Y", "!UF_DEPARTMENT" => false), array('SELECT' => array('UF_*')));
                 while ($arUser = $dbUsers->Fetch()) {
                     $arT = array("." => array("subscription" => "both", "name" => CUser::FormatName($this->nameTemplate, $arUser), "jid" => CXMPPUtility::GetJId($arUser, $clientDomain)));
                     if (is_array($arUser['UF_DEPARTMENT']) && count($arUser['UF_DEPARTMENT']) > 0) {
                         $arNewDep = array_diff($arUser['UF_DEPARTMENT'], $arDepCache);
                         if (count($arNewDep) > 0) {
                             $dbRes = CIBlockSection::GetList(array('SORT' => 'ASC'), array('ID' => $arNewDep));
                             while ($arSect = $dbRes->Fetch()) {
                                 $arDepCache[] = $arSect['ID'];
                                 $dbRes1 = CIBlockSection::GetNavChain($arSect['IBLOCK_ID'], $arSect['ID']);
                                 while ($arSect1 = $dbRes1->Fetch()) {
                                     if ($senderClient->IsSubGroupsSupported()) {
                                         if (strlen($arDepCacheValue[$arSect['ID']]) > 0) {
                                             $arDepCacheValue[$arSect['ID']] .= "/";
                                         }
                                         $arDepCacheValue[$arSect['ID']] .= htmlspecialcharsbx($arSect1['NAME']);
                                     } else {
                                         if (strlen($arDepCacheValue[$arSect['ID']]) > 0) {
                                             $arDepCacheValue[$arSect['ID']] = "/" . $arDepCacheValue[$arSect['ID']];
                                         }
                                         $arDepCacheValue[$arSect['ID']] = htmlspecialcharsbx($arSect1['NAME']) . $arDepCacheValue[$arSect['ID']];
                                     }
                                 }
                             }
                         }
                         foreach ($arUser['UF_DEPARTMENT'] as $key => $sect) {
                             if (strlen($arDepCacheValue[$sect]) > 0) {
                                 $arT["group"][] = array("#" => $arDepCacheValue[$sect]);
                                 if (!is_array($GLOBALS["BX_JHGDHGFJKDFSDG67"])) {
                                     $GLOBALS["BX_JHGDHGFJKDFSDG67"] = array();
                                 }
                                 if (!is_array($GLOBALS["BX_JHGDHGFJKDFSDG67"][$clientDomain])) {
                                     $GLOBALS["BX_JHGDHGFJKDFSDG67"][$clientDomain] = array();
                                 }
                                 if (!in_array($arDepCacheValue[$sect], $GLOBALS["BX_JHGDHGFJKDFSDG67"][$clientDomain])) {
                                     $GLOBALS["BX_JHGDHGFJKDFSDG67"][$clientDomain][] = $arDepCacheValue[$sect];
                                 }
                             }
                         }
                     }
                     if ($senderClient->IsSubGroupsSupported()) {
                         $this->rosterCache[$clientDomain][] = $arT;
                     } else {
                         $this->rosterCacheAlt[$clientDomain][] = $arT;
                     }
                 }
             }
             if ($senderClient->IsSubGroupsSupported()) {
                 foreach ($this->rosterCache[$clientDomain] as $ar) {
                     if ($senderClient->GetJId() != $ar["."]["jid"]) {
                         $arResult["iq"]["query"]["item"][] = $ar;
                     }
                 }
             } else {
                 foreach ($this->rosterCacheAlt[$clientDomain] as $ar) {
                     if ($senderClient->GetJId() != $ar["."]["jid"]) {
                         $arResult["iq"]["query"]["item"][] = $ar;
                     }
                 }
             }
         } else {
             $ar = array();
             $dbFriends = CSocNetUserRelations::GetRelatedUsers($senderClient->GetId(), SONET_RELATIONS_FRIEND);
             while ($arFriends = $dbFriends->GetNext()) {
                 $pref = $senderClient->GetId() == $arFriends["FIRST_USER_ID"] ? "SECOND" : "FIRST";
                 $name = CUser::FormatName($this->nameTemplate, array("NAME" => $arFriends[$pref . "_USER_NAME"], "LAST_NAME" => $arFriends[$pref . "_USER_LAST_NAME"], "SECOND_NAME" => $arFriends[$pref . "_USER_SECOND_NAME"], "LOGIN" => $arFriends[$pref . "_USER_LOGIN"]), true);
                 $arT = array("." => array("subscription" => "both", "name" => $name, "jid" => CXMPPUtility::GetJId(array("LOGIN" => $arFriends[$pref . "_USER_LOGIN"]), $senderClient->GetClientDomain())));
                 $ar[] = $arT;
             }
             $arResult["iq"]["query"]["item"] = $ar;
         }
         $senderClient->Send($arResult);
         $server = CXMPPServer::GetServer();
         $server->SendPresenceMessages($senderJId, $senderClient->GetClientDomain());
         $server->SendPresenceMessages2($senderJId, $senderClient->GetClientDomain());
     } elseif ($arMessage['iq']['query']['.']['xmlns'] == 'jabber:iq:private' && $arMessage['iq']['query']['roster']['.']['xmlns'] == 'roster:delimiter') {
         $arResult = array("iq" => array("." => array("type" => "result", "to" => $senderJId, "id" => $arMessage['iq']['.']['id']), "query" => array("." => array("xmlns" => 'jabber:iq:private'), "roster" => array("." => array("xmlns" => 'roster:delimiter'), "#" => "/"))));
         $senderClient->SetSubGroupsSupport(true);
         $senderClient->Send($arResult);
     }
     return true;
 }
コード例 #5
0
ファイル: xmpp_server.php プロジェクト: DarneoStudio/bitrix
            } else {
                echo $startErrorMessage;
            }
            /*
            $WshShell = new COM("WScript.Shell");
            $oExec = $WshShell->Run("cmd /C ../apache/php.exe xmppd.php", 0, false);
            */
            /*
            pclose(popen("start ../apache/php.exe xmppd.php", "r"));
            */
            /*
            exec("/usr/local/bin/php /path/to/script.php > /dev/null &");
            */
        } elseif ($_REQUEST["server_action"] == "stop") {
            $arMessage = array("query" => array("." => array("type" => "set"), "action" => array("#" => "die")));
            CXMPPUtility::SendToServer($arMessage);
            echo "success";
        }
    }
    die;
}
$APPLICATION->SetTitle(GetMessage("XMPP_AXS_TITLE"));
$aTabs = array(array("DIV" => "edit1", "TAB" => GetMessage("XMPP_AXS_TAB1"), "ICON" => "main_user_edit", "TITLE" => GetMessage("XMPP_AXS_TAB1_TITLE")));
$tabControl = new CAdminTabControl("tabControl", $aTabs);
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
?>

<script language="JavaScript">
var savedNS;
var stop;
コード例 #6
0
ファイル: interface.php プロジェクト: mrdeadmouse/u136006
 public function Initialize()
 {
     $this->nameTemplate = CXMPPUtility::GetNameFormat();
 }
コード例 #7
0
ファイル: message.php プロジェクト: DarneoStudio/bitrix
 public function ProcessServerMessage(array $arMessage, $clientDomain = "")
 {
     if (!array_key_exists("message", $arMessage) || !array_key_exists(".", $arMessage["message"])) {
         return false;
     }
     $type = "normal";
     if (array_key_exists("type", $arMessage["message"]["."])) {
         $type = $arMessage["message"]["."]["type"];
     }
     if ($type == "error") {
         return false;
     }
     if (!in_array($type, array("chat", "groupchat", "headline", "normal"))) {
         return CXMPPUtility::GetServerErrorArray("bad-request");
     }
     $recipientJId = "";
     if (array_key_exists("to", $arMessage["message"]["."])) {
         $recipientJId = $arMessage["message"]["."]["to"];
     }
     if (strlen($recipientJId) <= 0) {
         return CXMPPUtility::GetServerErrorArray("bad-request");
     }
     $server = CXMPPServer::GetServer();
     $res = $server->Send($recipientJId, $arMessage, $clientDomain);
     return array('result' => array("." => array("type" => $res ? "success" : "skip")));
 }
コード例 #8
0
ファイル: client.php プロジェクト: DarneoStudio/bitrix
 private static function GetPresenceIBlockId($clientDomain)
 {
     static $arPresenceIBlockIdCache = array();
     if (!array_key_exists($clientDomain, $arPresenceIBlockIdCache)) {
         CXMPPUtility::ClearOptionsCache("xmpp");
         $arPresenceIBlockIdCache[$clientDomain] = COption::GetOptionInt('xmpp', 'iblock_presence');
     }
     return $arPresenceIBlockIdCache[$clientDomain];
 }
コード例 #9
0
ファイル: server.php プロジェクト: DarneoStudio/bitrix
 public function Send($jid, $arMessage, $clientDomain = "")
 {
     $p = strpos($jid, "/");
     if ($p !== false) {
         $jid = substr($jid, 0, $p);
     }
     if (empty($clientDomain)) {
         $clientDomain = CXMPPServer::GetDomain();
     }
     if (array_key_exists($clientDomain, $this->arClientsIndex)) {
         if (array_key_exists($jid, $this->arClientsIndex[$clientDomain])) {
             $r = false;
             foreach ($this->arClientsIndex[$clientDomain][$jid] as $v) {
                 $r = $this->arClients[$v]->Send($arMessage);
             }
             return $r;
         } else {
             CXMPPUtility::Show("Error jid=" . $jid . " - Not connected", 0);
         }
     } else {
         CXMPPUtility::Show("Error clientDomain=" . $clientDomain . " - Not connected", 0);
     }
     return false;
 }
コード例 #10
0
ファイル: vcard.php プロジェクト: mrdeadmouse/u136006
 public function ReceiveMessage($senderJId, array $arMessage, CXMPPClient $senderClient)
 {
     if (!$senderClient->IsAuthenticated()) {
         return false;
     }
     if (strlen($senderJId) <= 0) {
         return false;
     }
     if (!array_key_exists("iq", $arMessage) || !array_key_exists("vcard", $arMessage["iq"]) || $arMessage["iq"]["vcard"]["."]["xmlns"] != "vcard-temp") {
         return false;
     }
     $type = "";
     if (array_key_exists("type", $arMessage["iq"]["."])) {
         $type = $arMessage["iq"]["."]["type"];
     }
     if ($type == "get") {
         $to = $arMessage["iq"]["."]["to"];
         $arUser = CXMPPUtility::GetUserByJId($to);
         if ($arUser) {
             $photoType = "";
             $photo = "";
             if (intval($arUser["PERSONAL_PHOTO"]) > 0) {
                 $imageFile = CFile::GetFileArray($arUser["PERSONAL_PHOTO"]);
                 if ($imageFile !== false) {
                     $arFileTmp = CFile::ResizeImageGet($imageFile, array("width" => 300, "height" => 300), BX_RESIZE_IMAGE_PROPORTIONAL, false);
                     if (is_array($arFileTmp)) {
                         $arFileTmp = CFile::MakeFileArray($arFileTmp["src"]);
                     }
                     $photoType = $imageFile["CONTENT_TYPE"];
                     if (File_Exists($arFileTmp["tmp_name"])) {
                         $photo = File_Get_Contents($arFileTmp["tmp_name"]);
                         $photo = Base64_Encode($photo);
                     }
                 }
             }
             if (empty($photo)) {
                 $photoType = "image/gif";
                 if (File_Exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/images/socialnetwork/nopic_user_150.gif")) {
                     $photo = File_Get_Contents($_SERVER["DOCUMENT_ROOT"] . "/bitrix/images/socialnetwork/nopic_user_150.gif");
                     $photo = Base64_Encode($photo);
                 }
             }
             $arResult = array("iq" => array("." => array("type" => "result", "from" => $to, "to" => $senderJId, "id" => $arMessage['iq']['.']['id']), "vCard" => array("." => array("xmlns" => "vcard-temp", "prodid" => '-//HandGen//NONSGML vGen v1.0//EN', "version" => '2.0'), "FN" => array("#" => CUser::FormatName($this->nameTemplate, $arUser)), "N" => array("FAMILY" => array("#" => $arUser["LAST_NAME"]), "GIVEN" => array("#" => $arUser["NAME"]), "MIDDLE" => array("#" => $arUser["SECOND_NAME"])), "NICKNAME" => array("#" => CUser::FormatName($this->nameTemplate, $arUser)), "BDAY" => array("#" => ConvertDateTime($arUser["PERSONAL_BIRTHDAY"], "YYYY-MM-DD", SITE_ID)), "ORG" => array("ORGNAME" => array("#" => $arUser["WORK_COMPANY"]), "ORGUNIT" => array("#" => $arUser["WORK_DEPARTMENT"])), "TITLE" => array("#" => $arUser["WORK_POSITION"]), "EMAIL" => array("INTERNET" => array("#" => ""), "PREF" => array("#" => ""), "USERID" => array("#" => $arUser["EMAIL"])), "JABBERID" => array("#" => $to), "PHOTO" => array("TYPE" => array("#" => $photoType), "BINVAL" => array("#" => $photo)))));
             if (strlen($arUser["WORK_FAX"]) > 0) {
                 $arResult["iq"]["vCard"]["TEL"][] = array("WORK" => array("#" => ""), "FAX" => array("#" => ""), "NUMBER" => array("#" => $arUser["WORK_FAX"]));
             }
             if (strlen($arUser["PERSONAL_MOBILE"]) > 0) {
                 $arResult["iq"]["vCard"]["TEL"][] = array("HOME" => array("#" => ""), "CELL" => array("#" => ""), "NUMBER" => array("#" => $arUser["PERSONAL_MOBILE"]));
             }
             if (strlen($arUser["WORK_PHONE"]) > 0) {
                 $arResult["iq"]["vCard"]["TEL"][] = array("WORK" => array("#" => ""), "VOICE" => array("#" => ""), "NUMBER" => array("#" => $arUser["WORK_PHONE"]));
             }
             if (strlen($arUser["PERSONAL_PHONE"]) > 0) {
                 $arResult["iq"]["vCard"]["TEL"][] = array("HOME" => array("#" => ""), "VOICE" => array("#" => ""), "NUMBER" => array("#" => $arUser["PERSONAL_PHONE"]));
             }
             if (strlen($arUser["PERSONAL_FAX"]) > 0) {
                 $arResult["iq"]["vCard"]["TEL"][] = array("HOME" => array("#" => ""), "FAX" => array("#" => ""), "NUMBER" => array("#" => $arUser["PERSONAL_FAX"]));
             }
             if (strlen($arUser["WORK_STREET"]) > 0 || strlen($arUser["WORK_CITY"]) > 0 || strlen($arUser["WORK_COUNTRY"]) > 0) {
                 $arResult["iq"]["vCard"]["ADR"][] = array("WORK" => array("#" => ""), "EXTADD" => array("#" => ""), "STREET" => array("#" => $arUser["WORK_STREET"]), "LOCALITY" => array("#" => $arUser["WORK_CITY"]), "REGION" => array("#" => $arUser["WORK_STATE"]), "PCODE" => array("#" => $arUser["WORK_ZIP"]), "CTRY" => array("#" => GetCountryByID($arUser["WORK_COUNTRY"])));
             }
             if (strlen($arUser["PERSONAL_STREET"]) > 0 || strlen($arUser["PERSONAL_CITY"]) > 0 || strlen($arUser["PERSONAL_COUNTRY"]) > 0) {
                 $arResult["iq"]["vCard"]["ADR"][] = array("HOME" => array("#" => ""), "EXTADD" => array("#" => ""), "STREET" => array("#" => $arUser["PERSONAL_STREET"]), "LOCALITY" => array("#" => $arUser["PERSONAL_CITY"]), "REGION" => array("#" => $arUser["PERSONAL_STATE"]), "PCODE" => array("#" => $arUser["PERSONAL_ZIP"]), "CTRY" => array("#" => GetCountryByID($arUser["PERSONAL_COUNTRY"])));
             }
             if ($senderJId != $to) {
                 $arResult["iq"]["."]["from"] = $to;
             }
             //print_r($arResult);echo "\n*****************************************\n";
         } else {
             $arResult = array("iq" => array("." => array("type" => "error", "to" => $senderJId, "id" => $arMessage['iq']['.']['id']), "vCard" => array("." => array("xmlns" => "vcard-temp")), "error" => array("." => array("type" => "cancel"), "item-not-found" => array("." => array("xmlns" => "urn:ietf:params:xml:ns:xmpp-stanzas")))));
             if ($senderJId != $to) {
                 $arResult["iq"]["."]["from"] = $to;
             }
         }
     } elseif ($type == "set") {
         $arResult = array("iq" => array("." => array("type" => "result", "from" => $senderClient->GetClientDomain(), "id" => $arMessage['iq']['.']['id'])));
     }
     return $arResult;
 }
コード例 #11
0
ファイル: stream.php プロジェクト: DarneoStudio/bitrix
 public function ReceiveMessage($senderJId, array $arMessage, CXMPPClient $senderClient)
 {
     if ($senderClient->IsAuthenticated() && !array_key_exists("stream:stream", $arMessage)) {
         return false;
     }
     $server = CXMPPServer::GetServer();
     $arResult = true;
     if (array_key_exists("stream:stream", $arMessage)) {
         if ($senderClient->IsAuthenticated()) {
             $senderClient->SetStreamId("bx" . rand(1000, 9999));
             $message = sprintf('<' . '?xml version="1.0" encoding="UTF-8"?' . '><stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="%s" from="%s" version="1.0"><stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/><ping xmlns="urn:xmpp:ping"/></stream:features>', $senderClient->GetStreamId(), htmlspecialcharsbx($senderClient->GetClientDomain()));
             $senderClient->__Send($message);
         } else {
             $version = "";
             if (is_array($arMessage["stream:stream"]["."]) && array_key_exists("version", $arMessage["stream:stream"]["."])) {
                 $version = $arMessage["stream:stream"]["."]["version"];
             }
             $to = "";
             if (is_array($arMessage["stream:stream"]["."]) && array_key_exists("to", $arMessage["stream:stream"]["."])) {
                 $to = $arMessage["stream:stream"]["."]["to"];
             }
             if (CXMPPUtility::IsBitrix24Mode()) {
                 $senderClient->SetClientDomain($to);
             } else {
                 $senderClient->SetClientDomain(CXMPPServer::GetDomain());
             }
             if (CXMPPUtility::SelectDatabase($senderClient->GetClientDomain())) {
                 $bAllowSasl = false;
                 if (strlen($version) > 0) {
                     $ar = explode(".", $version);
                     $majorV = intval($ar[0]);
                     if ($majorV >= 1) {
                         $bAllowSasl = true;
                     }
                 }
                 if ($bAllowSasl) {
                     $senderClient->SetAuthenticationType("SASL");
                 } else {
                     $senderClient->SetAuthenticationType("NON-SASL");
                 }
                 if ($bAllowSasl) {
                     $message = sprintf('<?xml version="1.0"?><stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="%s" from="%s" version="1.0"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism></mechanisms><auth xmlns="http://jabber.org/features/iq-auth"/></stream:features>', rand(1000, 9999), htmlspecialcharsbx($senderClient->GetClientDomain()));
                 } else {
                     $message = sprintf('<?xml version="1.0"?><stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="%s" from="%s">', rand(1000, 9999), htmlspecialcharsbx($senderClient->GetClientDomain()));
                 }
                 $senderClient->__Send($message);
             } else {
                 $senderClient->Disconnect();
             }
         }
     } elseif (array_key_exists("auth", $arMessage) && $senderClient->GetAuthenticationType() == "SASL") {
         $mechanism = "PLAIN";
         if (array_key_exists("mechanism", $arMessage["auth"]["."])) {
             $mechanism = strtoupper($arMessage["auth"]["."]["mechanism"]);
         }
         $message = '';
         if ($mechanism == "PLAIN") {
             $r = base64_decode($arMessage["auth"]["#"]);
             if (strlen($r) > 0) {
                 if (substr($r, 0, 1) == "") {
                     $r = "z" . $r;
                 }
                 $arResp = explode("", $r);
                 $jid = $arResp[0];
                 $login = $arResp[1];
                 $pwd = $arResp[2];
                 if (strlen($login) > 0) {
                     $authResult = $GLOBALS["USER"]->Login($login, $pwd, "N");
                     CXMPPUtility::Show("!S " . $login . ": " . (is_array($authResult) ? Print_R($authResult, true) : $authResult), 0);
                     if ($authResult === true) {
                         $message = '<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>';
                         $senderClient->_Authenticate($GLOBALS["USER"]->GetID(), $login, CXMPPUtility::GetJId(array("LOGIN" => $login), $senderClient->GetClientDomain()), false, $arMessage['iq']['query']['resource']['#']);
                     } else {
                         $message = '<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure></stream:stream>';
                     }
                 } else {
                     $message = '<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><temporary-auth-failure/></failure></stream:stream>';
                 }
             } else {
                 $message = '<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><temporary-auth-failure/></failure></stream:stream>';
             }
         } else {
             $message = '<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><invalid-mechanism/></failure></stream:stream>';
         }
         $senderClient->__Send($message);
     } elseif (array_key_exists("iq", $arMessage) && $senderClient->GetAuthenticationType() == "NON-SASL") {
         $message = '';
         if ($arMessage['iq']['query']['.']['xmlns'] == 'jabber:iq:auth') {
             $type = $arMessage['iq']['.']['type'];
             if (!in_array($type, array("get", "set"))) {
                 return;
             }
             if ($type == 'get') {
                 $message = sprintf('<iq type="result" id="%s" from="%s"><query xmlns="%s"><username>%s</username><password/><resource/></query></iq>', htmlspecialcharsbx($arMessage['iq']['.']['id']), htmlspecialcharsbx($senderClient->GetClientDomain()), htmlspecialcharsbx($arMessage['iq']['query']['.']['xmlns']), htmlspecialcharsbx($arMessage['iq']['query']['username']['#']));
             } elseif ($type == 'set') {
                 $username = $arMessage['iq']['query']['username']['#'];
                 $password = $arMessage['iq']['query']['password']['#'];
                 $authResult = $GLOBALS["USER"]->Login($username, $password, "N");
                 CXMPPUtility::Show("!N " . $username . ": " . (is_array($authResult) ? print_r($authResult, true) : $authResult), 0);
                 if ($authResult === true) {
                     $message = sprintf('<iq type="result" id="%s" from="%s"/>', htmlspecialcharsbx($arMessage['iq']['.']['id']), htmlspecialcharsbx($senderClient->GetClientDomain()));
                     $senderClient->_Authenticate($GLOBALS["USER"]->GetID(), $username, CXMPPUtility::GetJId(array("LOGIN" => $username), $senderClient->GetClientDomain()), false, $arMessage['iq']['query']['resource']['#']);
                 } else {
                     $message = sprintf('<iq type="error" id="%s" from="%s"><error code="401" type="auth"><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>', htmlspecialcharsbx($arMessage['iq']['.']['id']), htmlspecialcharsbx($senderClient->GetClientDomain()));
                 }
             }
         } else {
             $message = '<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><invalid-mechanism/></failure></stream:stream>';
         }
         $senderClient->__Send($message);
     }
     return $arResult;
 }
コード例 #12
0
ファイル: xmpp_stanza.php プロジェクト: DarneoStudio/bitrix
?>
">
	<input type="reset" value="<?php 
echo GetMessage("STANZA_RESET");
?>
">
	<?php 
$editTab->End();
?>
</form>
<?php 
if ($_SERVER["REQUEST_METHOD"] == "POST" && $stanza != "" && check_bitrix_sessid()) {
    $errorNo = "";
    $errorStr = "";
    $first = getmicrotime();
    $result = CXMPPUtility::_SendToServerXML($stanza, $errorNo, $errorStr);
    $exec_time = Round(getmicrotime() - $first, 5);
    if ($result !== false) {
        $strResult = GetMessage("STANZA_SUCCESS_EXECUTE");
        $strMessage = GetMessage("STANZA_EXEC_TIME") . "<b>" . $exec_time . "</b> " . GetMessage("STANZA_SEC");
        $strData = HtmlSpecialChars($result);
    } else {
        $strResult = GetMessage("STANZA_QUERY_ERROR_1");
        $strMessage = GetMessage("STANZA_EXEC_TIME") . "<b>" . $exec_time . "</b> " . GetMessage("STANZA_SEC");
        $strData = "[" . $errorNo . "] " . $errorStr;
    }
    echo "<div style=\"font-size:70%\">";
    echo "<b>" . $strResult . "</b><br /><br />";
    echo $strData . "<br /><br />";
    echo $strMessage . "<br /><br />";
    echo "</div>";
コード例 #13
0
ファイル: presence.php プロジェクト: mrdeadmouse/u136006
 public function ProcessServerMessage(array $arMessage, $clientDomain = "")
 {
     if (!array_key_exists("presence", $arMessage) || !array_key_exists(".", $arMessage["presence"])) {
         return false;
     }
     $type = "available";
     if (array_key_exists("type", $arMessage["presence"]["."])) {
         $type = $arMessage["presence"]["."]["type"];
     }
     if ($type == "error") {
         return false;
     }
     if (!in_array($type, array("available", "unavailable", "subscribe", "subscribed", "unsubscribe", "unsubscribed", "probe"))) {
         return CXMPPUtility::GetServerErrorArray("bad-request");
     }
     $recipientJId = "";
     if (array_key_exists("to", $arMessage["presence"]["."])) {
         $recipientJId = $arMessage["presence"]["."]["to"];
     }
     $server = CXMPPServer::GetServer();
     if (strlen($recipientJId) <= 0) {
         $server->SendAll($arMessage, $clientDomain);
     } else {
         $server->Send($recipientJId, $arMessage, $clientDomain);
     }
     return true;
 }
コード例 #14
0
ファイル: util.php プロジェクト: mrdeadmouse/u136006
 static function SelectDatabase($clientDomain)
 {
     if (!CXMPPUtility::IsBitrix24Mode()) {
         return true;
     }
     if (empty($clientDomain)) {
         return true;
     }
     static $arDomainDatabases = array();
     if (!array_key_exists($clientDomain, $arDomainDatabases)) {
         CXMPPUtility::Show("Creating connection to " . $clientDomain . " database", 5);
         $dbHost = $GLOBALS["DB"]->DBHost;
         $dbTmp = new CDatabase();
         if ($dbTmp->Connect($dbHost, $clientDomain, "root", "12345")) {
             // ($dbTmp->Connect($dbHost, $clientDomain, $clientDomain, ""))
             $arDomainDatabases[$clientDomain] = $dbTmp;
         }
         //$arDomainDatabases[$clientDomain] = $GLOBALS["DB"];
     }
     if (array_key_exists($clientDomain, $arDomainDatabases)) {
         CXMPPUtility::Show("Database selected: " . $clientDomain, 0);
         $GLOBALS["DB"] = $arDomainDatabases[$clientDomain];
         return true;
     }
     CXMPPUtility::Show("Error connecting to " . $clientDomain . " database", 5);
     return false;
 }