<?php

if (!defined('IN_CELIVE')) {
    exit('Access Denied');
}
if (!function_exists('daddslashes')) {
    function daddslashes($string, $force = 1)
    {
        if (is_array($string)) {
            $keys = array_keys($string);
            foreach ($keys as $key) {
                $val = $string[$key];
                unset($string[$key]);
                $string[(addslashes($key))] = daddslashes($val, $force);
            }
        } else {
            $string = (addslashes(trim($string)));
        }
        return $string;
    }
}
$_GET = daddslashes($_GET);
$_POST = daddslashes($_POST);
$_COOKIE = daddslashes($_COOKIE);
function convertip($ip)
{
    $return = '';
    if (preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) {
        $iparray = explode('.', $ip);
        if ($iparray[0] == 10 || $iparray[0] == 127 || ($iparray[0] == 192 && $iparray[1] == 168) || ($iparray[0] == 172 && ($iparray[1] >= 16 && $iparray[1] <= 31))) {
            $return = 'LAN(<?php echo $lang[lan]?>)';
        } elseif ($iparray[0] > 255 || $iparray[1] > 255 || $iparray[2] > 255 || $iparray[3] > 255) {
            $return = '- Invalid IP Address';
        } else {
            $tinyipfile = CE_ROOT . './include/ipdata/area.dat';
            $fullipfile = CE_ROOT . './include/ipdata/area1.dat';
            if (@file_exists($tinyipfile)) {
                $return = convertip_tiny($ip, $tinyipfile);
            } elseif (@file_exists($fullipfile)) {
                $return = convertip_full($ip, $fullipfile);
            }
        }
    }
    return $return;
}

function convertip_tiny($ip, $ipdatafile)
{
    static $fp = NULL, $offset = array(), $index = NULL;
    $ipdot = explode('.', $ip);
    $ip = pack('N', ip2long($ip));
    $ipdot[0] = (int)$ipdot[0];
    $ipdot[1] = (int)$ipdot[1];
    if ($fp === NULL && $fp = @fopen($ipdatafile, 'rb')) {
        $offset = unpack('Nlen', fread($fp, 4));
        $index = fread($fp, $offset['len'] - 4);
    } elseif ($fp == FALSE) {
        return '- Invalid IP data file';
    }
    $length = $offset['len'] - 1028;
    $start = unpack('Vlen', $index[$ipdot[0] * 4] . $index[$ipdot[0] * 4 + 1] . $index[$ipdot[0] * 4 + 2] . $index[$ipdot[0] * 4 + 3]);
    for ($start = $start['len'] * 8 + 1024; $start < $length; $start += 8) {
        if ($index{$start} . $index{$start + 1} . $index{$start + 2} . $index{$start + 3} >= $ip) {
            $index_offset = unpack('Vlen', $index{$start + 4} . $index{$start + 5} . $index{$start + 6} . "\x0");
            $index_length = unpack('Clen', $index{$start + 7});
            break;
        }
    }
    fseek($fp, $offset['len'] + $index_offset['len'] - 1024);
    if ($index_length['len']) {
        return '- ' . fread($fp, $index_length['len']);
    } else {
        return '- Unknown';
    }
}

function convertip_full($ip, $ipdatafile)
{
    if (!$fd = @fopen($ipdatafile, 'rb')) {
        return '- Invalid IP data file';
    }
    $ip = explode('.', $ip);
    $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
    if (!($DataBegin = fread($fd, 4)) || !($DataEnd = fread($fd, 4))) return;
    @$ipbegin = implode('', unpack('L', $DataBegin));
    if ($ipbegin < 0) $ipbegin += pow(2, 32);
    @$ipend = implode('', unpack('L', $DataEnd));
    if ($ipend < 0) $ipend += pow(2, 32);
    $ipAllNum = ($ipend - $ipbegin) / 7 + 1;
    $BeginNum = $ip2num = $ip1num = 0;
    $ipAddr1 = $ipAddr2 = '';
    $EndNum = $ipAllNum;
    while ($ip1num > $ipNum || $ip2num < $ipNum) {
        $Middle = intval(($EndNum + $BeginNum) / 2);
        fseek($fd, $ipbegin + 7 * $Middle);
        $ipData1 = fread($fd, 4);
        if (strlen($ipData1) < 4) {
            fclose($fd);
            return '- System Error';
        }
        $ip1num = implode('', unpack('L', $ipData1));
        if ($ip1num < 0) $ip1num += pow(2, 32);
        if ($ip1num > $ipNum) {
            $EndNum = $Middle;
            continue;
        }
        $DataSeek = fread($fd, 3);
        if (strlen($DataSeek) < 3) {
            fclose($fd);
            return '- System Error';
        }
        $DataSeek = implode('', unpack('L', $DataSeek . chr(0)));
        fseek($fd, $DataSeek);
        $ipData2 = fread($fd, 4);
        if (strlen($ipData2) < 4) {
            fclose($fd);
            return '- System Error';
        }
        $ip2num = implode('', unpack('L', $ipData2));
        if ($ip2num < 0) $ip2num += pow(2, 32);
        if ($ip2num < $ipNum) {
            if ($Middle == $BeginNum) {
                fclose($fd);
                return '- Unknown';
            }
            $BeginNum = $Middle;
        }
    }
    $ipFlag = fread($fd, 1);
    if ($ipFlag == chr(1)) {
        $ipSeek = fread($fd, 3);
        if (strlen($ipSeek) < 3) {
            fclose($fd);
            return '- System Error';
        }
        $ipSeek = implode('', unpack('L', $ipSeek . chr(0)));
        fseek($fd, $ipSeek);
        $ipFlag = fread($fd, 1);
    }
    if ($ipFlag == chr(2)) {
        $AddrSeek = fread($fd, 3);
        if (strlen($AddrSeek) < 3) {
            fclose($fd);
            return '- System Error';
        }
        $ipFlag = fread($fd, 1);
        if ($ipFlag == chr(2)) {
            $AddrSeek2 = fread($fd, 3);
            if (strlen($AddrSeek2) < 3) {
                fclose($fd);
                return '- System Error';
            }
            $AddrSeek2 = implode('', unpack('L', $AddrSeek2 . chr(0)));
            fseek($fd, $AddrSeek2);
        } else {
            fseek($fd, -1, SEEK_CUR);
        }
        while (($char = fread($fd, 1)) != chr(0))
            $ipAddr2 .= $char;
        $AddrSeek = implode('', unpack('L', $AddrSeek . chr(0)));
        fseek($fd, $AddrSeek);
        while (($char = fread($fd, 1)) != chr(0))
            $ipAddr1 .= $char;
    } else {
        fseek($fd, -1, SEEK_CUR);
        while (($char = fread($fd, 1)) != chr(0))
            $ipAddr1 .= $char;
        $ipFlag = fread($fd, 1);
        if ($ipFlag == chr(2)) {
            $AddrSeek2 = fread($fd, 3);
            if (strlen($AddrSeek2) < 3) {
                fclose($fd);
                return '- System Error';
            }
            $AddrSeek2 = implode('', unpack('L', $AddrSeek2 . chr(0)));
            fseek($fd, $AddrSeek2);
        } else {
            fseek($fd, -1, SEEK_CUR);
        }
        while (($char = fread($fd, 1)) != chr(0))
            $ipAddr2 .= $char;
    }
    fclose($fd);
    if (preg_match('/http/i', $ipAddr2)) {
        $ipAddr2 = '';
    }
    $ipaddr = "$ipAddr1 $ipAddr2";
    $ipaddr = preg_replace('/CZ88\.NET/is', '', $ipaddr);
    $ipaddr = preg_replace('/^\s*/is', '', $ipaddr);
    $ipaddr = preg_replace('/\s*$/is', '', $ipaddr);
    if (preg_match('/http/i', $ipaddr) || $ipaddr == '') {
        $ipaddr = '- Unknown';
    }
    return '- ' . $ipaddr;
}

function key_from_match_val2($array, $match)
{
    $returned = false;
    foreach ($array as $key => $val) {
        foreach ($array[$key] as $key2 => $val2) {
            if ($array[$key][$key2] == $match) {
                return $key;
                $returned = true;
            }
        }
    }
    if ($returned !== true) {
        return false;
    }
}

function nl_br($arg)
{
    return preg_replace("!\n!iU", '<br />', $arg);
}

function br_nl($arg)
{
    return preg_replace('!<br.*>!iU', "\n", $arg);
}

function secs_to_hms($time)
{
    $secs = $time;
    if ($secs > 59) {
        $hours = floor($secs / 3600);
        $secs = $secs % 3600;
        $mins = floor($secs / 60);
        $secs = $secs % 60;
        if ($hours > 0) {
            return $hours . ' hours ' . $mins . ' mins ' . $secs . ' secs';
        } else {
            return $mins . ' mins ' . $secs . ' secs';
        }
    } else {
        return $secs . ' secs';
    }
}

function ascii_to_html($ascii)
{
    if ($ascii < '127') {
        return chr($ascii);
    } else {
        return '&#' . $ascii . ';';
    }
}

function char_to_html($string)
{
    $html = '';
    for ($i = 0; $i < strlen($string); $i++) {
        $html .= '&#' . ord($string{$i}) . ';';
    }
    return $html;
}

function html_to_char($string)
{
    $character = split(";", $string);
    $text = '';
    foreach ($character as $key => $val) {
        if (strlen($character[$key]) > 2) {
            $ascii = substr($character[$key], 2);
            $html = chr($ascii);
            $text = $text . $html;
        }
    }
    return $text;
}

function parse_with_session($chatid, $string, $person = '')
{
    if ($person == 'operator') {
        $string = str_replace('PERSON', $_SESSION['hcl_' . $chatid]['operator'], $string);
    } elseif ($person == 'guest') {
        $string = str_replace('PERSON', $_SESSION['hcl_' . $chatid]['guest'], $string);
    }
    $string = str_replace('GUEST', $_SESSION['hcl_' . $chatid]['guest'], $string);
    $string = str_replace('OPERATOR', $_SESSION['hcl_' . $chatid]['operator'], $string);
    $string = str_replace('DEPARTMENT', $_SESSION['hcl_' . $chatid]['department'], $string);
    return $string;
}

if (!function_exists('file_get_contents')) {
    function file_get_contents($file)
    {
        $file = file($file);
        return !$file ? false : implode('', $file);
    }
}
date_default_timezone_set('Asia/Shanghai');

?>