function activeListen($runs = 1, $isPost = false)
{
    global $CONFIG, $GROUPS, $INTERNAL, $USER;
    $start = time();
    $USER->Browsers[0]->Typing = isset($_POST[POST_EXTERN_TYPING]);
    if (!(!empty($USER->Browsers[0]->InternalUser) && $USER->Browsers[0]->InternalUser->LastActive > time() - $CONFIG["timeout_clients"])) {
        $USER->Browsers[0]->CloseChat(4);
    }
    while ($runs == 1) {
        processForward();
        if ($USER->Browsers[0]->Declined) {
            displayDeclined();
            return $USER;
        } else {
            if ($USER->Browsers[0]->Closed) {
                displayQuit();
                return $USER;
            } else {
                if ($USER->Browsers[0]->Activated == CHAT_STATUS_WAITING && !(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
                    beginnConversation();
                }
            }
        }
        if ($USER->Browsers[0]->Activated >= CHAT_STATUS_WAITING && !(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
            refreshPicture();
            processTyping();
        }
        if ($runs == 1 && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]) && !isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR]) && !(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
            $USER = $USER->Browsers[0]->RequestFileUpload($USER, AJAXDecode($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]));
        } else {
            if ($runs == 1 && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]) && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR])) {
                $USER = $USER->Browsers[0]->AbortFileUpload($USER, namebase(AJAXDecode($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME])), AJAXDecode($_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR]));
            }
        }
        if ($runs++ == 1 && isset($_POST[POST_GLOBAL_SHOUT])) {
            processPosts();
        }
        if ($USER->Browsers[0]->Activated == CHAT_STATUS_ACTIVE) {
            $isPost = getNewPosts();
            $USER->Browsers[0]->SetStatus(CHAT_STATUS_ACTIVE);
        }
        if (isset($_POST[POST_GLOBAL_SHOUT]) || isset($_POST[POST_GLOBAL_NO_LONG_POLL]) || $isPost || !empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed) {
            break;
        } else {
            if (md5($USER->Response) != AJAXDecode($_POST[POST_GLOBAL_XMLCLIP_HASH_ALL])) {
                $_POST[POST_GLOBAL_XMLCLIP_HASH_ALL] = md5($USER->Response);
                $USER->AddFunctionCall("lz_chat_listen_hash('" . md5($USER->Response) . "','" . getId(5) . "');", false);
                break;
            } else {
                $USER->Response = "";
                break;
            }
        }
    }
}
function listenXML($runs = 1)
{
    global $CONFIG, $RESPONSE, $INTERNAL, $QCOUNT, $QLIST;
    processActions();
    if (!SERVERSETUP && !LOGIN && $INTERNAL[CALLER_SYSTEM_ID]->Status == USER_STATUS_OFFLINE) {
        return;
    }
    $start = time();
    /*while(time() < $start + getLongPollRuntime() || $runs == 1)
    	{
    		if($runs > 1)
    			getData(true,false,true,false);*/
    $RESPONSE->XML = "<listen disabled=\"" . base64_encode(getAvailability() ? "0" : "1") . "\" h=\"<!--gl_all-->\" " . (isset($_POST[POST_INTERN_XMLCLIP_HASH_EXECUTION_TIME]) ? "ex_time=\"<!--execution_time-->\"" : "") . ">\r\n";
    $RESPONSE->Typing = "";
    if ($RESPONSE->Login != null) {
        $RESPONSE->XML .= $RESPONSE->Login;
    }
    buildSystem();
    //if($runs++ == 1)
    processPosts();
    if (($hash = substr(md5($RESPONSE->Typing), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_TYPING] && strlen($RESPONSE->Typing) > 0) {
        $RESPONSE->XML .= "<gl_typ h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Typing . "</gl_typ>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Events), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_EVENTS]) {
        $RESPONSE->XML .= "<gl_ev h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Events . "</gl_ev>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Exceptions), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_ERRORS] && strlen($RESPONSE->Exceptions) > 0) {
        $RESPONSE->XML .= "<gl_e h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Exceptions . "</gl_e>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Internals), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_INTERN] && strlen($RESPONSE->Internals) > 0) {
        $RESPONSE->XML .= "<int_r h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Internals . "</int_r>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Groups), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_GROUPS] && strlen($RESPONSE->Groups) > 0) {
        $RESPONSE->XML .= "<int_d h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Groups . "</int_d>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Actions), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_ACTIONS]) {
        $RESPONSE->XML .= "<int_ac h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Actions . "</int_ac>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->InternalVcards), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_PROFILES]) {
        $RESPONSE->XML .= "<int_v h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->InternalVcards . "</int_v>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->InternalProfilePictures), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_PICTURES_PROFILE]) {
        $RESPONSE->XML .= "<int_pp h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->InternalProfilePictures . "</int_pp>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->InternalWebcamPictures), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_PICTURES_WEBCAM]) {
        $RESPONSE->XML .= "<int_wp h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->InternalWebcamPictures . "</int_wp>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Goals), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_GOALS]) {
        $RESPONSE->XML .= "<int_t h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Goals . "</int_t>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Filter), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_FILTERS]) {
        $RESPONSE->XML .= "<ext_b h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Filter . "</ext_b>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Tracking), 0, 5)) != @$_POST[POST_INTERN_XMLCLIP_HASH_TRACKING]) {
        $RESPONSE->XML .= "<ext_u h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Tracking . "</ext_u>\r\n";
    }
    if ($RESPONSE->Archive != null) {
        $RESPONSE->XML .= "<ext_c>\r\n" . $RESPONSE->Archive . "</ext_c>\r\n";
    }
    if ($RESPONSE->Resources != null) {
        $RESPONSE->XML .= "<ext_res>\r\n" . $RESPONSE->Resources . "</ext_res>\r\n";
    }
    if ($RESPONSE->Ratings != null) {
        $RESPONSE->XML .= "<ext_r>\r\n" . $RESPONSE->Ratings . "</ext_r>\r\n";
    }
    if ($RESPONSE->Messages != null) {
        $RESPONSE->XML .= "<ext_m>\r\n" . $RESPONSE->Messages . "</ext_m>\r\n";
    }
    if (strlen($RESPONSE->Authentications) > 0) {
        $RESPONSE->XML .= "<gl_auths>\r\n" . $RESPONSE->Authentications . "\r\n</gl_auths>\r\n";
    }
    if (strlen($RESPONSE->Posts) > 0) {
        $RESPONSE->XML .= "<usr_p>\r\n" . $RESPONSE->Posts . "</usr_p>\r\n";
    }
    if (isset($_POST[POST_INTERN_ACCESSTEST])) {
        $RESPONSE->XML .= "<permission>" . base64_encode(getFolderPermissions()) . "</permission>";
    }
    if (SERVERSETUP || LOGIN || $INTERNAL[CALLER_SYSTEM_ID]->LastActive <= @filemtime(FILE_CONFIG)) {
        $RESPONSE->XML .= getConfig();
    }
    $RESPONSE->XML .= "</listen>";
    /*
    	if(substr_count($RESPONSE->XML,"<") > 4 || $INTERNAL[CALLER_SYSTEM_ID]->Status == USER_STATUS_OFFLINE || isset($_POST[POST_GLOBAL_NO_LONG_POLL]))
    	{
    		break;
    	}
    	else
    	{
    		if(isset($_POST[POST_GLOBAL_SHOUT]))
    			break;
    		$wait = max($CONFIG["poll_frequency_clients"]-3,1);
    		if(time()+$wait <= $start + getLongPollRuntime())
    		{
    			sleep($wait);
    		}
    		else
    			break;
    	}
    }
    */
}
function activeListen($runs = 1, $isPost = false)
{
    global $USER, $VOUCHER;
    $USER->Browsers[0]->Typing = isset($_POST[POST_EXTERN_TYPING]);
    if (isset($_POST["p_tc_declined"])) {
        $USER->Browsers[0]->UpdateArchive("");
    } else {
        if (isset($_POST["p_tc_email"])) {
            $USER->Browsers[0]->UpdateArchive(Encoding::Base64UrlDecode($_POST["p_tc_email"]));
        }
    }
    $USER->Browsers[0]->ValidateOperator();
    processForward();
    if (!empty($USER->Browsers[0]->Declined)) {
        if ($USER->Browsers[0]->Declined < time() - Server::$Configuration->File["poll_frequency_clients"] * 2) {
            displayDeclined();
        }
        return $USER;
    } else {
        if ($USER->Browsers[0]->Closed || empty($USER->Browsers[0]->OperatorId)) {
            displayQuit();
            return $USER;
        } else {
            if ($USER->Browsers[0]->Activated == CHAT_STATUS_WAITING && !(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
                $USER->Browsers[0]->ExternalWindowActivate();
            }
        }
    }
    if ($USER->Browsers[0]->Activated >= CHAT_STATUS_WAITING && !(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
        refreshPicture();
        updateMembers();
    }
    if (isset($_POST[POST_GLOBAL_SHOUT])) {
        processPosts();
    } else {
        if (!empty($USER->Browsers[0]->OperatorId)) {
            $autoReply = Server::$Operators[$USER->Browsers[0]->OperatorId]->GetAutoReplies("", $USER->Browsers[0]);
            if (!empty($autoReply)) {
                ChatAutoReply::SendAutoReply($autoReply, $USER, $USER->Browsers[0]->OperatorId);
            }
        }
    }
    if ($USER->Browsers[0]->Activated == CHAT_STATUS_ACTIVE) {
        $isPost = receivePosts();
        $USER->Browsers[0]->SetStatus(CHAT_STATUS_ACTIVE);
        if (!empty($VOUCHER)) {
            if (time() - $USER->Browsers[0]->LastActive > 0) {
                $VOUCHER->UpdateVoucherChatTime(time() - $USER->Browsers[0]->LastActive);
            }
            if (!(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
                $VOUCHER->UpdateVoucherChatSessions($USER->Browsers[0]->ChatId);
            }
            $vouchers = VisitorChat::GetRelatedChatVouchers(Encoding::Base64UrlDecode($_POST[POST_EXTERN_USER_GROUP]), $VOUCHER);
            $USER->AddFunctionCall("lz_chat_add_update_vouchers_init('" . base64_encode(getChangeVoucherHTML($vouchers)) . "');", false);
            foreach ($vouchers as $tonlist) {
                $USER->AddFunctionCall("lz_chat_add_available_voucher('" . $tonlist->Id . "'," . $tonlist->ChatTime . "," . $tonlist->ChatTimeMax . "," . $tonlist->ChatSessions . "," . $tonlist->ChatSessionsMax . "," . $tonlist->VoucherAutoExpire . "," . To::BoolString($tonlist->VoucherAutoExpire < time()) . ");", false);
            }
        } else {
            $USER->AddFunctionCall("lz_chat_add_update_vouchers_init('" . base64_encode("") . "');", false);
        }
    }
    if ($USER->Browsers[0]->TranslationSettings != null) {
        $USER->AddFunctionCall("lz_chat_set_translation(" . $USER->Browsers[0]->TranslationSettings[0] . ",'" . base64_encode($USER->Browsers[0]->TranslationSettings[1]) . "','" . base64_encode($USER->Browsers[0]->TranslationSettings[2]) . "');", false);
    }
    if (isset($_POST[POST_GLOBAL_SHOUT]) || isset($_POST[POST_GLOBAL_NO_LONG_POLL]) || $isPost || !empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed) {
        $USER->AddFunctionCall("lz_chat_listen_hash('','" . getId(5) . "');", false);
    } else {
        if (md5($USER->Response) != Encoding::Base64UrlDecode($_POST[POST_GLOBAL_XMLCLIP_HASH_ALL])) {
            $_POST[POST_GLOBAL_XMLCLIP_HASH_ALL] = md5($USER->Response);
            $USER->AddFunctionCall("lz_chat_listen_hash('" . md5($USER->Response) . "','" . getId(5) . "');", false);
        } else {
            $USER->Response = "";
        }
    }
}
function listenXML()
{
    global $RESPONSE, $INTERNAL;
    processActions();
    if (!SERVERSETUP && !LOGIN && $INTERNAL[CALLER_SYSTEM_ID]->Status == USER_STATUS_OFFLINE) {
        return;
    }
    $RESPONSE->XML = "<listen disabled=\"" . base64_encode(getAvailability(false) ? "0" : "1") . "\" h=\"<!--gl_all-->\" " . (isset($_POST[POST_INTERN_XMLCLIP_HASH_EXECUTION_TIME]) ? "ex_time=\"<!--execution_time-->\"" : "") . ">\r\n";
    $RESPONSE->Typing = "";
    if ($RESPONSE->Login != null) {
        $RESPONSE->XML .= $RESPONSE->Login;
    }
    buildSystem();
    processPosts();
    if (($hash = substr(md5($RESPONSE->Typing), 0, 5)) != @$_POST["p_gl_t"] && strlen($RESPONSE->Typing) > 0) {
        $RESPONSE->XML .= "<gl_typ h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Typing . "</gl_typ>\r\n";
    }
    $RESPONSE->XML .= $RESPONSE->Events . "\r\n";
    if (($hash = substr(md5($RESPONSE->Exceptions), 0, 5)) != @$_POST["p_gl_e"] && strlen($RESPONSE->Exceptions) > 0) {
        $RESPONSE->XML .= "<gl_e h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Exceptions . "</gl_e>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Internals), 0, 5)) != @$_POST["p_int_r"] && strlen($RESPONSE->Internals) > 0) {
        $RESPONSE->XML .= "<int_r h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Internals . "</int_r>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Groups), 0, 5)) != @$_POST["p_int_d"] && strlen($RESPONSE->Groups) > 0) {
        $RESPONSE->XML .= "<int_d h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Groups . "</int_d>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Actions), 0, 5)) != @$_POST["p_int_ev"]) {
        $RESPONSE->XML .= "<int_ac h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Actions . "</int_ac>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->InternalVcards), 0, 5)) != @$_POST["p_int_v"]) {
        $RESPONSE->XML .= "<int_v h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->InternalVcards . "</int_v>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->InternalWebcamPictures), 0, 5)) != @$_POST["p_int_wp"]) {
        $RESPONSE->XML .= "<int_wp h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->InternalWebcamPictures . "</int_wp>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Goals), 0, 5)) != @$_POST["p_int_t"]) {
        $RESPONSE->XML .= "<int_t h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Goals . "</int_t>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Filter), 0, 5)) != @$_POST["p_ext_b"]) {
        $RESPONSE->XML .= "<ext_b h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Filter . "</ext_b>\r\n";
    }
    if (!empty($RESPONSE->Tracking) && ($hash = substr(md5($RESPONSE->Tracking), 0, 5)) != @$_POST["p_ext_u"]) {
        $RESPONSE->XML .= "<ext_u h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Tracking . "</ext_u>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->Forwards), 0, 5)) != @$_POST["p_ext_f"]) {
        $RESPONSE->XML .= "<ext_f h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->Forwards . "</ext_f>\r\n";
    }
    if (($hash = substr(md5($RESPONSE->ChatVouchers), 0, 5)) != @$_POST["p_ext_ct"]) {
        $RESPONSE->XML .= "<ext_ct h=\"" . base64_encode($hash) . "\">\r\n" . $RESPONSE->ChatVouchers . "</ext_ct>\r\n";
    }
    if ($RESPONSE->Archive != null) {
        $RESPONSE->XML .= "<ext_c>\r\n" . $RESPONSE->Archive . "</ext_c>\r\n";
    }
    if ($RESPONSE->Resources != null) {
        $RESPONSE->XML .= "<ext_res>\r\n" . $RESPONSE->Resources . "</ext_res>\r\n";
    }
    if ($RESPONSE->Ratings != null) {
        $RESPONSE->XML .= "<ext_r>\r\n" . $RESPONSE->Ratings . "</ext_r>\r\n";
    }
    $RESPONSE->XML .= $RESPONSE->Messages . "\r\n";
    if (strlen($RESPONSE->Authentications) > 0) {
        $RESPONSE->XML .= "<gl_auths>\r\n" . $RESPONSE->Authentications . "\r\n</gl_auths>\r\n";
    }
    if (strlen($RESPONSE->Posts) > 0) {
        $RESPONSE->XML .= "<usr_p>\r\n" . $RESPONSE->Posts . "</usr_p>\r\n";
    }
    if (isset($_POST[POST_INTERN_ACCESSTEST])) {
        $RESPONSE->XML .= "<permission>" . base64_encode(getFolderPermissions()) . "</permission>";
    }
    if (SERVERSETUP || LOGIN || $INTERNAL[CALLER_SYSTEM_ID]->LastActive <= @filemtime(FILE_CONFIG)) {
        $RESPONSE->XML .= getConfig();
    }
    $RESPONSE->XML .= "</listen>";
}
function activeListen($runs = 1, $isPost = false)
{
    global $CONFIG, $USER, $VOUCHER;
    $USER->Browsers[0]->Typing = isset($_POST[POST_EXTERN_TYPING]);
    if (isset($_POST["p_tc_declined"])) {
        $USER->Browsers[0]->UpdateArchive("");
    } else {
        if (isset($_POST["p_tc_email"])) {
            $USER->Browsers[0]->UpdateArchive(base64UrlDecode($_POST["p_tc_email"]));
        }
    }
    if ($USER->Browsers[0]->InternalUser->Status == USER_STATUS_OFFLINE) {
        $USER->Browsers[0]->CloseChat(4);
    } else {
        foreach ($USER->Browsers[0]->Members as $sid => $member) {
            if ($USER->Browsers[0]->InternalUser->Status == USER_STATUS_OFFLINE) {
                $USER->Browsers[0]->LeaveChat($sid);
            }
        }
        if ($USER->Browsers[0]->InternalUser->SystemId != $USER->Browsers[0]->DesiredChatPartner) {
            $USER->Browsers[0]->DesiredChatPartner = $USER->Browsers[0]->InternalUser->SystemId;
        }
    }
    processForward();
    if (!empty($USER->Browsers[0]->Declined)) {
        if ($USER->Browsers[0]->Declined < time() - $CONFIG["poll_frequency_clients"] * 2) {
            displayDeclined();
        }
        return $USER;
    } else {
        if ($USER->Browsers[0]->Closed || empty($USER->Browsers[0]->InternalUser)) {
            displayQuit();
            return $USER;
        } else {
            if ($USER->Browsers[0]->Activated == CHAT_STATUS_WAITING && !(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
                beginnConversation();
            }
        }
    }
    if ($USER->Browsers[0]->Activated >= CHAT_STATUS_WAITING && !(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
        refreshPicture();
        processTyping();
    }
    if ($runs == 1 && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]) && !isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR]) && !(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
        $USER = $USER->Browsers[0]->RequestFileUpload($USER, base64UrlDecode($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]));
    } else {
        if ($runs == 1 && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]) && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR])) {
            $USER = $USER->Browsers[0]->AbortFileUpload($USER, namebase(base64UrlDecode($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME])), base64UrlDecode($_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR]));
        }
    }
    if (isset($_POST[POST_GLOBAL_SHOUT])) {
        processPosts();
    }
    if ($USER->Browsers[0]->Activated == CHAT_STATUS_ACTIVE) {
        $isPost = getNewPosts();
        $USER->Browsers[0]->SetStatus(CHAT_STATUS_ACTIVE);
        if (!empty($VOUCHER)) {
            if (time() - $USER->Browsers[0]->LastActive > 0) {
                $VOUCHER->UpdateVoucherChatTime(time() - $USER->Browsers[0]->LastActive);
            }
            if (!(!empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed)) {
                $VOUCHER->UpdateVoucherChatSessions($USER->Browsers[0]->ChatId);
            }
            $vouchers = VisitorChat::GetRelatedChatVouchers(base64UrlDecode($_POST[POST_EXTERN_USER_GROUP]), $VOUCHER);
            $USER->AddFunctionCall("lz_chat_add_update_vouchers_init('" . base64_encode(getChangeVoucherHTML($vouchers)) . "');", false);
            foreach ($vouchers as $tonlist) {
                $USER->AddFunctionCall("lz_chat_add_available_voucher('" . $tonlist->Id . "'," . $tonlist->ChatTime . "," . $tonlist->ChatTimeMax . "," . $tonlist->ChatSessions . "," . $tonlist->ChatSessionsMax . "," . $tonlist->VoucherAutoExpire . "," . parseBool($tonlist->VoucherAutoExpire < time()) . ");", false);
            }
        } else {
            $USER->AddFunctionCall("lz_chat_add_update_vouchers_init('" . base64_encode("") . "');", false);
        }
    }
    if ($USER->Browsers[0]->TranslationSettings != null) {
        $USER->AddFunctionCall("lz_chat_set_translation(" . $USER->Browsers[0]->TranslationSettings[0] . ",'" . base64_encode($USER->Browsers[0]->TranslationSettings[1]) . "','" . base64_encode($USER->Browsers[0]->TranslationSettings[2]) . "');", false);
    }
    if (isset($_POST[POST_GLOBAL_SHOUT]) || isset($_POST[POST_GLOBAL_NO_LONG_POLL]) || $isPost || !empty($USER->Browsers[0]->Forward) && !$USER->Browsers[0]->Forward->Processed) {
        //break;
    } else {
        if (md5($USER->Response) != base64UrlDecode($_POST[POST_GLOBAL_XMLCLIP_HASH_ALL])) {
            $_POST[POST_GLOBAL_XMLCLIP_HASH_ALL] = md5($USER->Response);
            $USER->AddFunctionCall("lz_chat_listen_hash('" . md5($USER->Response) . "','" . getId(5) . "');", false);
            //break;
        } else {
            $USER->Response = "";
            //break;
        }
    }
}
Exemplo n.º 6
0
function activeListen($runs = 1, $picUpdate = false, $isPost = false)
{
    global $CONFIG, $GROUPS, $INTERNAL, $USER, $ISFORWARD;
    $start = time();
    $USER->Browsers[0]->Typing = isset($_POST[POST_EXTERN_TYPING]);
    while ($runs == 1) {
        isForward();
        processForward();
        if ($runs > 1) {
            getDataSets();
            getData(false, false, false, true);
            $USER->Browsers[0]->LoadChat($CONFIG, null);
            if (isnull($USER->Browsers[0]->Chat)) {
                break;
            }
        }
        if ($USER->Browsers[0]->Chat->Closed) {
            displayQuit();
            return $USER;
        } else {
            if ($USER->Browsers[0]->Chat->Declined) {
                displayDeclined();
                return $USER;
            } else {
                if ($USER->Browsers[0]->Chat->Activated == CHAT_STATUS_WAITING && !$ISFORWARD) {
                    beginnConversation();
                }
            }
        }
        if ($USER->Browsers[0]->Chat->Activated >= CHAT_STATUS_WAITING && !$ISFORWARD) {
            $picUpdate = refreshPicture();
            processTyping();
        }
        if ($runs == 1 && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]) && !isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR]) && !$ISFORWARD) {
            $USER = $USER->Browsers[0]->RequestFileUpload($USER, $_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]);
        } else {
            if ($runs == 1 && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]) && isset($_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR])) {
                $USER->Browsers[0]->AbortFileUpload($USER, namebase($_POST[POST_EXTERN_USER_FILE_UPLOAD_NAME]), $_POST[POST_EXTERN_USER_FILE_UPLOAD_ERROR]);
            }
        }
        if ($runs++ == 1 && isset($_POST[POST_GLOBAL_SHOUT])) {
            processPosts();
        }
        if ($USER->Browsers[0]->Chat->Activated == CHAT_STATUS_ACTIVE) {
            $isPost = getNewPosts();
            updateRoom($USER->Browsers[0]->Chat->Id, CHAT_STATUS_ACTIVE);
        } else {
            updateRoom($USER->Browsers[0]->Chat->Id, CHAT_STATUS_WAITING);
        }
        if (isset($_POST[POST_GLOBAL_SHOUT]) || isset($_POST[POST_GLOBAL_NO_LONG_POLL]) || $isPost || $ISFORWARD) {
            break;
        } else {
            if (md5($USER->Response) != $_POST[POST_GLOBAL_XMLCLIP_HASH_ALL] || $picUpdate) {
                $_POST[POST_GLOBAL_XMLCLIP_HASH_ALL] = md5($USER->Response);
                $USER->AddFunctionCall("lz_chat_listen_hash('" . md5($USER->Response) . "','" . getId(5) . "');", false);
                break;
            } else {
                $USER->Response = "";
                $wait = max($CONFIG["poll_frequency_clients"] - 1, 1);
                if (time() + $wait < $start + getLongPollRuntime()) {
                    sleep($wait);
                } else {
                    break;
                }
            }
        }
    }
}
 static function Listen()
 {
     OperatorRequest::Process();
     if (!SERVERSETUP && !LOGIN && Server::$Operators[CALLER_SYSTEM_ID]->Status == USER_STATUS_OFFLINE) {
         return;
     }
     Server::$Response->XML = "<listen disabled=\"" . base64_encode(Server::IsAvailable(false) ? "0" : "1") . "\" h=\"<!--gl_all-->\" " . (isset($_POST[POST_INTERN_XMLCLIP_HASH_EXECUTION_TIME]) ? "ex_time=\"<!--execution_time-->\"" : "") . ">\r\n";
     Server::$Response->Typing = "";
     if (Server::$Response->Login != null) {
         Server::$Response->XML .= Server::$Response->Login;
     }
     OperatorRequest::Build();
     processPosts();
     if (($hash = substr(md5(Server::$Response->Typing), 0, 5)) != @$_POST["p_gl_t"] && strlen(Server::$Response->Typing) > 0) {
         Server::$Response->XML .= "<gl_typ h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->Typing . "</gl_typ>\r\n";
     }
     Server::$Response->XML .= Server::$Response->Events . "\r\n";
     if (($hash = substr(md5(Server::$Response->Exceptions), 0, 5)) != @$_POST["p_gl_e"] && strlen(Server::$Response->Exceptions) > 0) {
         Server::$Response->XML .= "<gl_e h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->Exceptions . "</gl_e>\r\n";
     }
     if (($hash = substr(md5(Server::$Response->Internals), 0, 5)) != @$_POST["p_int_r"] && strlen(Server::$Response->Internals) > 0) {
         Server::$Response->XML .= "<int_r h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->Internals . "</int_r>\r\n";
     }
     if (($hash = substr(md5(Server::$Response->Groups), 0, 5)) != @$_POST["p_int_d"] && strlen(Server::$Response->Groups) > 0) {
         Server::$Response->XML .= "<int_d h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->Groups . "</int_d>\r\n";
     }
     if (($hash = substr(md5(Server::$Response->Actions), 0, 5)) != @$_POST["p_int_ev"]) {
         Server::$Response->XML .= "<int_ac h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->Actions . "</int_ac>\r\n";
     }
     if (($hash = substr(md5(Server::$Response->InternalVcards), 0, 5)) != @$_POST["p_int_v"]) {
         Server::$Response->XML .= "<int_v h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->InternalVcards . "</int_v>\r\n";
     }
     if (($hash = substr(md5(Server::$Response->InternalWebcamPictures), 0, 5)) != @$_POST["p_int_wp"]) {
         Server::$Response->XML .= "<int_wp h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->InternalWebcamPictures . "</int_wp>\r\n";
     }
     if (!empty(Server::$Response->Tracking) && ($hash = substr(md5(Server::$Response->Tracking), 0, 5)) != @$_POST["p_ext_u"]) {
         Server::$Response->XML .= "<ext_u h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->Tracking . "</ext_u>\r\n";
     }
     if (($hash = substr(md5(Server::$Response->Forwards), 0, 5)) != @$_POST["p_ext_f"]) {
         Server::$Response->XML .= "<ext_f h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->Forwards . "</ext_f>\r\n";
     }
     if (($hash = substr(md5(Server::$Response->ChatVouchers), 0, 5)) != @$_POST["p_ext_ct"]) {
         Server::$Response->XML .= "<ext_ct h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->ChatVouchers . "</ext_ct>\r\n";
     }
     if (Server::$Response->Archive != null) {
         Server::$Response->XML .= "<ext_c>\r\n" . Server::$Response->Archive . "</ext_c>\r\n";
     }
     if (Server::$Response->Resources != null) {
         Server::$Response->XML .= "<ext_res>\r\n" . Server::$Response->Resources . "</ext_res>\r\n";
     }
     if (Server::$Response->Feedbacks != null) {
         Server::$Response->XML .= "<ext_fb>\r\n" . Server::$Response->Feedbacks . "</ext_fb>\r\n";
     }
     if (Server::$Response->Filters != null) {
         Server::$Response->XML .= "<ext_b h=\"" . base64_encode($hash) . "\">\r\n" . Server::$Response->Filters . "</ext_b>\r\n";
     }
     if (!empty(Server::$Response->Reports)) {
         Server::$Response->XML .= Server::$Response->Reports;
     }
     Server::$Response->XML .= Server::$Response->Messages . "\r\n";
     if (strlen(Server::$Response->Authentications) > 0) {
         Server::$Response->XML .= "<gl_auths>\r\n" . Server::$Response->Authentications . "\r\n</gl_auths>\r\n";
     }
     if (strlen(Server::$Response->Posts) > 0) {
         Server::$Response->XML .= "<usr_p>\r\n" . Server::$Response->Posts . "</usr_p>\r\n";
     }
     if (isset($_POST[POST_INTERN_ACCESSTEST])) {
         Server::$Response->XML .= "<permission>" . base64_encode(OperatorRequest::GetPermissions()) . "</permission>";
     }
     if (SERVERSETUP || LOGIN || Server::$Operators[CALLER_SYSTEM_ID]->LastActive <= @filemtime(FILE_CONFIG)) {
         Server::$Response->XML .= OperatorRequest::GetConfig();
     }
     Server::$Response->XML .= "</listen>";
 }