Exemplo n.º 1
0
 public function getBinds()
 {
     $binds = array();
     foreach ($this->getConfig("binds") as $protocol => $bind) {
         foreach ($bind as $ip => $state) {
             if ($state != "on") {
                 continue;
             }
             $p = $this->getConfig($protocol . "port-" . $ip);
             $binds['pjsip'][$ip][$protocol] = $p;
         }
     }
     if (!function_exists('sipsettings_get')) {
         //urgh......
         include __DIR__ . "/functions.inc.php";
     }
     $out = sipsettings_get();
     $out['bindaddr'] = !empty($out['bindaddr']) ? $out['bindaddr'] : '0.0.0.0';
     $out['bindport'] = !empty($out['bindport']) ? $out['bindport'] : '5060';
     $binds['sip'][$out['bindaddr']]['udp'] = $out['bindport'];
     return $binds;
 }
Exemplo n.º 2
0
    }
    $p_idx++;
}
switch ($action) {
    case "edit":
        //just delete and re-add
        if (($errors = sipsettings_edit($sip_settings)) !== true) {
            $error_displays = process_errors($errors);
        } else {
            needreload();
            //redirect_standard();
        }
        break;
    default:
        /* only get them if first time load, if they pressed submit, use values from POST */
        $sip_settings = sipsettings_get();
}
$error_displays = array_merge($error_displays, sipsettings_check_custom_files());
?>

</div>
<div class="content">
  <h2><?php 
echo _("Edit Settings");
?>
</h2>

<?php 
/* We massaged these above or they came from sipsettings_get() if this is not
 * from and edit. So extract them after sorting out the codec sub arrays.
 */
Exemplo n.º 3
0
function sipsettings_hookGet_config($engine)
{
    global $core_conf;
    global $ext;
    // is this the best way to pass this?
    switch ($engine) {
        case "asterisk":
            if (isset($core_conf) && is_a($core_conf, "core_conf")) {
                $raw_settings = sipsettings_get(true);
                /* TODO: This is example concept code
                
                           The only real conflicts are codecs (mainly cause
                           it will look ugly. So we should strip those but
                           leave the rest. If we overrite it, oh well
                
                				 */
                $idx = 0;
                foreach ($core_conf->_sip_general as $entry) {
                    switch (strtolower($entry['key'])) {
                        case 'allow':
                        case 'disallow':
                            unset($core_conf->_sip_general[$idx]);
                            break;
                        default:
                            // do nothing
                    }
                    $idx++;
                }
                foreach ($raw_settings as $var) {
                    switch ($var['type']) {
                        case SIP_NORMAL:
                            $interim_settings[$var['keyword']] = $var['data'];
                            break;
                        case SIP_CUSTOM:
                            $sip_settings[] = array($var['keyword'], $var['data']);
                            break;
                        default:
                            // Error should be above
                    }
                }
                unset($raw_settings);
                // Add any defaults that should be in there
                $def = FreePBX::Sipsettings()->getChanSipDefaults();
                foreach ($def as $k => $v) {
                    if (!isset($interim_settings[$k]) && $v) {
                        $interim_settings[$k] = $v;
                    }
                }
                /* Codecs First */
                $core_conf->addSipGeneral('disallow', 'all');
                foreach (FreePBX::Sipsettings()->getCodecs('audio') as $codec => $enabled) {
                    if ($enabled != '') {
                        $core_conf->addSipGeneral('allow', $codec);
                    }
                }
                unset($codecs);
                if ($interim_settings['videosupport'] == 'yes') {
                    foreach (FreePBX::Sipsettings()->getCodecs('video') as $codec => $enabled) {
                        if ($enabled != '') {
                            $core_conf->addSipGeneral('allow', $codec);
                        }
                    }
                }
                unset($video_codecs);
                /* next figure out what we need to write out (deal with things like nat combos, etc. */
                $nat_mode = $interim_settings['nat_mode'];
                $jbenable = $interim_settings['jbenable'];
                $foundexternip = false;
                if (is_array($interim_settings)) {
                    foreach ($interim_settings as $key => $value) {
                        switch ($key) {
                            case 'nat_mode':
                                break;
                            case 'externhost_val':
                                if ($nat_mode == 'externhost' && $value != '') {
                                    $sip_settings[] = array('externhost', $value);
                                }
                                break;
                            case 'externrefresh':
                                if ($nat_mode == 'externhost' && $value != '') {
                                    $sip_settings[] = array($key, $value);
                                }
                                break;
                            case 'externip_val':
                                if ($nat_mode == 'externip' && $value != '') {
                                    $foundexternip = true;
                                    $sip_settings[] = array('externip', $value);
                                }
                                break;
                            case 'jbforce':
                            case 'jbimpl':
                            case 'jbmaxsize':
                            case 'jbresyncthreshold':
                            case 'jblog':
                                if ($jbenable == 'yes' && $value != '') {
                                    $sip_settings[] = array($key, $value);
                                }
                                break;
                            case 'sip_language':
                                if ($key != '') {
                                    $sip_settings[] = array('language', $value);
                                    $ext->addGlobal('SIPLANG', $value);
                                }
                                break;
                            case 't38pt_udptl':
                                if ($value != 'no') {
                                    $sip_settings[] = array('t38pt_udptl', 'yes,redundancy,maxdatagram=400');
                                }
                                break;
                            default:
                                // Ignore localnet settings from chansip sipsettings, they're now in general
                                if (substr($key, 0, 9) == "localnet_" || substr($key, 0, 8) == "netmask_") {
                                    break;
                                }
                                $sip_settings[] = array($key, $value);
                                break;
                        }
                    }
                }
                // Is there a global external IP settings? If there wasn't one specified
                // as part of the chan_sip settings, check to see if there's one here.
                if (!$foundexternip && $nat_mode == "externip") {
                    $externip = FreePBX::create()->Sipsettings->getConfig('externip');
                    if ($externip) {
                        $sip_settings[] = array("externip", $externip);
                    }
                }
                // Now do the localnets
                $localnets = FreePBX::create()->Sipsettings->getConfig('localnets');
                foreach ($localnets as $arr) {
                    $sip_settings[] = array("localnet", $arr['net'] . "/" . $arr['mask']);
                }
                unset($interim_settings);
                if (is_array($sip_settings)) {
                    foreach ($sip_settings as $entry) {
                        if ($entry[1] != '') {
                            $core_conf->addSipGeneral($entry[0], $entry[1]);
                        }
                    }
                }
            }
            break;
    }
    return true;
}
Exemplo n.º 4
0
function sipsettings_hookGet_config($engine)
{
    global $core_conf;
    global $ext;
    // is this the best way to pass this?
    switch ($engine) {
        case "asterisk":
            if (isset($core_conf) && is_a($core_conf, "core_conf")) {
                $raw_settings = sipsettings_get(true);
                /* TODO: This is example concept code
                
                           The only real conflicts are codecs (mainly cause
                           it will look ugly. So we should strip those but
                           leave the rest. If we overrite it, oh well
                
                				 */
                $idx = 0;
                foreach ($core_conf->_sip_general as $entry) {
                    switch (strtolower($entry['key'])) {
                        case 'allow':
                        case 'disallow':
                            unset($core_conf->_sip_general[$idx]);
                            break;
                        default:
                            // do nothing
                    }
                    $idx++;
                }
                foreach ($raw_settings as $var) {
                    switch ($var['type']) {
                        case SIP_NORMAL:
                            $interim_settings[$var['keyword']] = $var['data'];
                            break;
                        case SIP_CODEC:
                            $codecs[$var['keyword']] = $var['data'];
                            break;
                        case SIP_VIDEO_CODEC:
                            $video_codecs[$var['keyword']] = $var['data'];
                            break;
                        case SIP_CUSTOM:
                            $sip_settings[] = array($var['keyword'], $var['data']);
                            break;
                        default:
                            // Error should be above
                    }
                }
                unset($raw_settings);
                /* Codecs First */
                $core_conf->addSipGeneral('disallow', 'all');
                foreach ($codecs as $codec => $enabled) {
                    if ($enabled != '') {
                        $core_conf->addSipGeneral('allow', $codec);
                    }
                }
                unset($codecs);
                if ($interim_settings['videosupport'] == 'yes') {
                    foreach ($video_codecs as $codec => $enabled) {
                        if ($enabled != '') {
                            $core_conf->addSipGeneral('allow', $codec);
                        }
                    }
                }
                unset($video_codecs);
                /* next figure out what we need to write out (deal with things like nat combos, etc. */
                $nat_mode = $interim_settings['nat_mode'];
                $jbenable = $interim_settings['jbenable'];
                if (is_array($interim_settings)) {
                    foreach ($interim_settings as $key => $value) {
                        switch ($key) {
                            case 'nat_mode':
                                break;
                            case 'externhost_val':
                                if ($nat_mode == 'externhost' && $value != '') {
                                    $sip_settings[] = array('externhost', $value);
                                }
                                break;
                            case 'externrefresh':
                                if ($nat_mode == 'externhost' && $value != '') {
                                    $sip_settings[] = array($key, $value);
                                }
                                break;
                            case 'externip_val':
                                if ($nat_mode == 'externip' && $value != '') {
                                    $sip_settings[] = array('externip', $value);
                                }
                                break;
                            case 'jbforce':
                            case 'jbimpl':
                            case 'jbmaxsize':
                            case 'jbresyncthreshold':
                            case 'jblog':
                                if ($jbenable == 'yes' && $value != '') {
                                    $sip_settings[] = array($key, $value);
                                }
                                break;
                            case 'sip_language':
                                if ($key != '') {
                                    $sip_settings[] = array('language', $value);
                                    $ext->addGlobal('SIPLANG', $value);
                                }
                                break;
                            default:
                                if (substr($key, 0, 9) == "localnet_" && $value != '') {
                                    if ($nat_mode != 'public') {
                                        $seq = substr($key, 9);
                                        $network = "{$value}/" . $interim_settings["netmask_{$seq}"];
                                        $sip_settings[] = array('localnet', $network);
                                    }
                                } else {
                                    if (substr($key, 0, 8) == "netmask_") {
                                        // do nothing, handled above
                                    } else {
                                        $sip_settings[] = array($key, $value);
                                    }
                                }
                        }
                    }
                }
                unset($interim_settings);
                if (is_array($sip_settings)) {
                    foreach ($sip_settings as $entry) {
                        if ($entry[1] != '') {
                            $core_conf->addSipGeneral($entry[0], $entry[1]);
                        }
                    }
                }
            }
            break;
    }
    return true;
}
Exemplo n.º 5
0
function sipsettings_hookGet_config($engine)
{
    global $core_conf;
    global $ext;
    // is this the best way to pass this?
    switch ($engine) {
        case "asterisk":
            if (isset($core_conf) && is_a($core_conf, "core_conf")) {
                $raw_settings = sipsettings_get(true);
                /* TODO: This is example concept code
                
                           The only real conflicts are codecs (mainly cause
                           it will look ugly. So we should strip those but
                           leave the rest. If we overrite it, oh well
                
                				 */
                $idx = 0;
                foreach ($core_conf->_sip_general as $entry) {
                    switch (strtolower($entry['key'])) {
                        case 'allow':
                        case 'disallow':
                            unset($core_conf->_sip_general[$idx]);
                            break;
                        default:
                            // do nothing
                    }
                    $idx++;
                }
                $interim_settings = array();
                foreach ($raw_settings as $var) {
                    switch ($var['type']) {
                        case SIP_NORMAL:
                            $interim_settings[$var['keyword']] = $var['data'];
                            break;
                        case SIP_CUSTOM:
                            $sip_settings[] = array($var['keyword'], $var['data']);
                            break;
                        default:
                            // Error should be above
                    }
                }
                unset($raw_settings);
                // Add any defaults that should be in there
                $def = FreePBX::Sipsettings()->getChanSipDefaults();
                foreach ($def as $k => $v) {
                    if (!isset($interim_settings[$k]) && $v) {
                        $interim_settings[$k] = $v;
                    }
                }
                /* Codecs First */
                $core_conf->addSipGeneral('disallow', 'all');
                foreach (FreePBX::Sipsettings()->getCodecs('audio') as $codec => $enabled) {
                    if ($enabled != '') {
                        $core_conf->addSipGeneral('allow', $codec);
                    }
                }
                unset($codecs);
                if ($interim_settings['videosupport'] == 'yes') {
                    foreach (FreePBX::Sipsettings()->getCodecs('video') as $codec => $enabled) {
                        if ($enabled != '') {
                            $core_conf->addSipGeneral('allow', $codec);
                        }
                    }
                }
                unset($video_codecs);
                /* next figure out what we need to write out (deal with things like nat combos, etc. */
                $nat_mode = $interim_settings['nat_mode'];
                $jbenable = $interim_settings['jbenable'];
                $foundexternip = false;
                // Ensure default TLS Settings for chansip are available
                if (empty($interim_settings['tlsbindport'])) {
                    // Note - this is TCP, not UDP.
                    $interim_settings['tlsbindport'] = 5061;
                }
                if (!empty($interim_settings['tlsbindaddr'])) {
                    $interim_settings['tlsbindaddr'] = $interim_settings['tlsbindaddr'] . ":" . $interim_settings['tlsbindport'];
                } else {
                    // [::] means 'listen on all interfaces, both ipv4 and ipv6' when in sipsettings.
                    $interim_settings['tlsbindaddr'] = "[::]:" . $interim_settings['tlsbindport'];
                }
                // There is no sip setting 'tlsbindport', so make sure we remove it before writing the file.
                unset($interim_settings['tlsbindport']);
                foreach ($interim_settings as $key => $value) {
                    switch ($key) {
                        case 'csipcertid':
                            if (!empty($value) && $interim_settings['tlsenable'] == 'yes' && FreePBX::Modules()->moduleHasMethod("certman", "getDefaultCertDetails")) {
                                $cert = FreePBX::Certman()->getCertificateDetails($value);
                                if (!empty($cert['files']['crt']) && !empty($cert['files']['key'])) {
                                    $sip_settings[] = array('tlsprivatekey', $cert['files']['key']);
                                    $sip_settings[] = array('tlscertfile', $cert['files']['crt']);
                                    if (isset($cert['files']['ca-bundle'])) {
                                        $sip_settings[] = array('tlscafile', $cert['files']['ca-bundle']);
                                    }
                                }
                            }
                            break;
                        case 'nat_mode':
                            break;
                        case 'externhost_val':
                            if ($nat_mode == 'externhost' && $value != '') {
                                $sip_settings[] = array('externhost', $value);
                            }
                            break;
                        case 'externrefresh':
                            if ($nat_mode == 'externhost' && $value != '') {
                                $sip_settings[] = array($key, $value);
                            }
                            break;
                        case 'externip_val':
                            if ($nat_mode == 'externip' && $value != '') {
                                $foundexternip = true;
                                $sip_settings[] = array('externip', $value);
                            }
                            break;
                        case 'jbforce':
                        case 'jbimpl':
                        case 'jbmaxsize':
                        case 'jbresyncthreshold':
                        case 'jblog':
                            if ($jbenable == 'yes' && $value != '') {
                                $sip_settings[] = array($key, $value);
                            }
                            break;
                        case 'language':
                            if ($value != '') {
                                $sip_settings[] = array('language', $value);
                                $ext->addGlobal('SIPLANG', $value);
                            }
                            break;
                            //FREEPBX-9737 AND FREEPBX-6518 In Asterisk 11+ nat=yes is deprecated.
                        //FREEPBX-9737 AND FREEPBX-6518 In Asterisk 11+ nat=yes is deprecated.
                        case 'nat':
                            global $amp_conf;
                            $astge11 = version_compare($amp_conf['ASTVERSION'], '11.5', 'ge');
                            if ($astge11) {
                                switch ($value) {
                                    case 'yes':
                                        $value = "force_rport,comedia";
                                        break;
                                    case 'never':
                                        $value = "no";
                                        break;
                                    case 'route':
                                        $value = "force_rport";
                                        break;
                                }
                            }
                            $sip_settings[] = array($key, $value);
                            break;
                        case 't38pt_udptl':
                            if ($value != 'no') {
                                if ($value == 'yes') {
                                    $sip_settings[] = array('t38pt_udptl', 'yes,redundancy,maxdatagram=400');
                                } elseif ($value == 'fec') {
                                    $sip_settings[] = array('t38pt_udptl', 'yes,fec');
                                } elseif ($value == 'redundancy') {
                                    $sip_settings[] = array('t38pt_udptl', 'yes,redundancy');
                                } elseif ($value == 'none') {
                                    $sip_settings[] = array('t38pt_udptl', 'yes,none');
                                }
                            }
                            break;
                        default:
                            // Ignore localnet settings from chansip sipsettings, they're now in general
                            if (substr($key, 0, 9) == "localnet_" || substr($key, 0, 8) == "netmask_") {
                                break;
                            }
                            $sip_settings[] = array($key, $value);
                            break;
                    }
                }
                // Is there a global external IP settings? If there wasn't one specified
                // as part of the chan_sip settings, check to see if there's one here.
                if (!$foundexternip && $nat_mode == "externip") {
                    $externip = FreePBX::create()->Sipsettings->getConfig('externip');
                    if ($externip) {
                        $sip_settings[] = array("externip", $externip);
                    }
                }
                // Now do the localnets
                $localnets = FreePBX::create()->Sipsettings->getConfig('localnets');
                if (!empty($localnets) && is_array($localnets)) {
                    foreach ($localnets as $arr) {
                        $sip_settings[] = array("localnet", $arr['net'] . "/" . $arr['mask']);
                    }
                }
                unset($interim_settings);
                if (is_array($sip_settings)) {
                    foreach ($sip_settings as $entry) {
                        if ($entry[1] != '') {
                            $core_conf->addSipGeneral($entry[0], $entry[1]);
                        }
                    }
                }
            }
            break;
    }
    return true;
}