function _gs_prov_phone_checkcfg_by_ip_do($ip, $reboot = true)
{
    if (!preg_match('/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/', $ip)) {
        return false;
    }
    $chktype = _gs_prov_phone_checkcfg_getphonetype("ip", $ip);
    gs_log(GS_LOG_DEBUG, "do phone_checkcfg by ip \"{$ip}\" and type \"{$chktype}\"");
    if (gs_get_conf('GS_SNOM_PROV_ENABLED') && ($chktype == "snom3xx" || $chktype == "unknown")) {
        gs_log(GS_LOG_DEBUG, "about to gs_prov_phone_checkcfg_by_ip_do_snom for ip \"{$ip}\"");
        _gs_prov_phone_checkcfg_by_ip_do_snom($ip, $reboot);
    }
    if (gs_get_conf('GS_SNOM_PROV_M3_ACCOUNTS') && ($chktype == "snomm3" || $chktype == "unknown")) {
        gs_log(GS_LOG_DEBUG, "about to gs_prov_phone_checkcfg_by_ip_do_snom_m3 for ip \"{$ip}\"");
        _gs_prov_phone_checkcfg_by_ip_do_snom_m3($ip, $reboot);
    }
    if (gs_get_conf('GS_SIEMENS_PROV_ENABLED') && ($chktype == "siemens" || $chktype == "unknown")) {
        gs_log(GS_LOG_DEBUG, "about to gs_prov_phone_checkcfg_by_ip_do_siemens for ip \"{$ip}\"");
        _gs_prov_phone_checkcfg_by_ip_do_siemens($ip, $reboot);
    }
    if (gs_get_conf('GS_AASTRA_PROV_ENABLED') && ($chktype == "aastra" || $chktype == "unknown")) {
        gs_log(GS_LOG_DEBUG, "about to gs_prov_phone_checkcfg_by_ip_do_aastra for ip \"{$ip}\"");
        _gs_prov_phone_checkcfg_by_ip_do_aastra($ip, $reboot);
    }
    if (gs_get_conf('GS_GRANDSTREAM_PROV_ENABLED') && ($chktype == "grandstream" || $chktype == "unknown")) {
        gs_log(GS_LOG_DEBUG, "about to gs_prov_phone_checkcfg_by_ip_do_grandstream for ip \"{$ip}\"");
        _gs_prov_phone_checkcfg_by_ip_do_grandstream($ip, $reboot);
    }
    if (gs_get_conf('GS_POLYCOM_PROV_ENABLED') && ($chktype == "polycom" || $chktype == "unknown")) {
        gs_log(GS_LOG_DEBUG, "about to gs_prov_phone_checkcfg_by_ip_do_polycom for ip \"{$ip}\"");
        _gs_prov_phone_checkcfg_by_ip_do_polycom($ip, $reboot);
    }
    if (gs_get_conf('GS_TIPTEL_PROV_ENABLED') && ($chktype == "tiptel" || $chktype == "unknown")) {
        gs_log(GS_LOG_DEBUG, "about to gs_prov_phone_checkcfg_by_ip_do_tiptel for ip \"{$ip}\"");
        _gs_prov_phone_checkcfg_by_ip_do_tiptel($ip, $reboot);
    }
    //return $err == 0;
    return true;
}
function _gs_prov_phone_checkcfg_by_ip_do($ip, $reboot = true)
{
    if (!preg_match('/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/', $ip)) {
        return false;
    }
    gs_log(GS_LOG_DEBUG, "do phone_checkcfg by ip \"{$ip}\"");
    /*
    $db = @gs_db_slave_connect();
    if (! $db) {
    	gs_log(GS_LOG_WARNING, 'Failed to connect to DB');
    	return false;
    }
    $rs = @$db->execute(
    'SELECT DISTINCT(`p`.`type`)
    FROM
    `users` `u` JOIN
    `phones` `p` ON (`p`.`user_id`=`u`.`id`)
    WHERE
    `u`.`current_ip`=\''. $db->escape($ip) .'\''
    );
    if (! $rs) {
    	gs_log(GS_LOG_WARNING, 'DB error');
    	return false;
    }
    $is_snom    = false;
    $is_siemens = false;
    while ($r = $rs->fetchRow()) {
    	$tmp = strToLower($r['type']);
    	if     (subStr($tmp,0,4)==='snom')
    		$is_snom    = true;
    	elseif (subStr($tmp,0,7)==='siemens')
    		$is_siemens = true;
    }
    
    # no elseif here!:
    if ($is_snom) {
    	gs_log(GS_LOG_DEBUG, "do phone_checkcfg by ip \"$ip\" (snom)");
    	_gs_prov_phone_checkcfg_by_ip_do_snom   ( $ip, $reboot );
    }
    if ($is_siemens) {
    	gs_log(GS_LOG_DEBUG, "do phone_checkcfg by ip \"$ip\" (siemens)");
    	_gs_prov_phone_checkcfg_by_ip_do_siemens( $ip, $reboot );
    }
    if (! $is_snom && ! $is_siemens) {
    	# we don't know the type of that phone, just try everything
    	gs_log(GS_LOG_NOTICE, "Not sure how to sync phone");
    	gs_log(GS_LOG_DEBUG, "do phone_checkcfg by ip \"$ip\" (unknown phone type)");
    	_gs_prov_phone_checkcfg_by_ip_do_snom   ( $ip, $reboot );
    	_gs_prov_phone_checkcfg_by_ip_do_siemens( $ip, $reboot );
    }
    */
    # damn - we did already removed the user id from the phones table
    if (gs_get_conf('GS_SNOM_PROV_ENABLED')) {
        _gs_prov_phone_checkcfg_by_ip_do_snom($ip, $reboot);
    }
    if (gs_get_conf('GS_SNOM_PROV_M3_ACCOUNTS')) {
        _gs_prov_phone_checkcfg_by_ip_do_snom_m3($ip, $reboot);
    }
    if (gs_get_conf('GS_SIEMENS_PROV_ENABLED')) {
        _gs_prov_phone_checkcfg_by_ip_do_siemens($ip, $reboot);
    }
    if (gs_get_conf('GS_AASTRA_PROV_ENABLED')) {
        _gs_prov_phone_checkcfg_by_ip_do_aastra($ip, $reboot);
    }
    if (gs_get_conf('GS_GRANDSTREAM_PROV_ENABLED')) {
        _gs_prov_phone_checkcfg_by_ip_do_grandstream($ip, $reboot);
    }
    if (gs_get_conf('GS_TIPTEL_PROV_ENABLED')) {
        _gs_prov_phone_checkcfg_by_ip_do_tiptel($ip, $reboot);
    }
    //return $err == 0;
    return true;
}