function cloudaddons_open($extra, $post = '', $timeout = 999)
{
    return dfsockopen(cloudaddons_url('&from=s') . $extra, 0, $post, '', false, CLOUDADDONS_DOWNLOAD_IP, $timeout);
}
require_once libfile('function/cloudaddons');
cpheader();
if (!$admincp->isfounder) {
    cpmsg('noaccess_isfounder', '', 'error');
}
if (!$operation) {
    cloudaddons_check();
    shownav('cloudaddons');
    $extra = '';
    if (!empty($_GET['id'])) {
        $extra .= '&mod=app&ac=item&id=' . rawurlencode($_GET['id']);
    }
    if (!empty($_GET['extra'])) {
        $extra .= '&' . addslashes($_GET['extra']);
    }
    $url = cloudaddons_url($extra);
    echo '<script type="text/javascript">location.href=\'' . $url . '\';</script>';
} elseif ($operation == 'download') {
    $step = intval($_GET['step']);
    $addoni = intval($_GET['i']);
    $uniqueid = $_G['setting']['siteuniqueid'] ? $_G['setting']['siteuniqueid'] : C::t('common_setting')->fetch('siteuniqueid');
    if (!$_GET['md5hash'] || md5($_GET['addonids'] . md5($uniqueid . $_GET['timestamp'])) != $_GET['md5hash']) {
        cpmsg('cloudaddons_validator_error', '', 'error');
    }
    $addonids = explode(',', $_GET['addonids']);
    list($_GET['key'], $_GET['type'], $_GET['rid']) = explode('.', isset($addonids[$addoni]) ? $addonids[$addoni] : $addonids[0]);
    if ($step == 0) {
        cpmsg('cloudaddons_downloading', "action=cloudaddons&operation=download&addonids={$_GET['addonids']}&i={$addoni}&step=1&md5hash=" . $_GET['md5hash'] . '&timestamp=' . $_GET['timestamp'], 'loading', array('addonid' => $_GET['key'] . '.' . $_GET['type']), '<div>0%</div>', FALSE);
    } elseif ($step == 1) {
        $packnum = isset($_GET['num']) ? $_GET['num'] : 0;
        $tmpdir = 'saekv://data/download/' . $_GET['rid'];