예제 #1
0
/** function guifi_mac_validate($mac,&$form_state)
 * 
 * */
function guifi_mac_validate($mac, &$form_state)
{
    if ($form_state['clicked_button']['#value'] == t('Reset')) {
        return;
    }
    $m2 = $mac;
    unset($m2['#post']);
    guifi_log(GUIFILOG_TRACE, 'guifi_mac_validate', $m2['#parents']);
    guifi_log(GUIFILOG_TRACE, 'guifi_mac_validate', $form_state);
    // if empty,
    if (empty($mac['#value'])) {
        $pmac = null;
        // ...and have parents, take parent mac
        if (in_array($mac['#parents'][0], array('vlans', 'aggregations'))) {
            $macs = guifi_get_currentDeviceMacs($mac['#post']);
            $related = $mac['#post'][$mac['#parents'][0]][$mac['#parents'][1]]['related_interfaces'];
            guifi_log(GUIFILOG_TRACE, 'guifi_mac_validate MACS', $macs);
            guifi_log(GUIFILOG_TRACE, 'guifi_mac_validate RELATED', $related);
            if (is_array($related)) {
                $pmac = $macs[$related[0]];
            } else {
                $pmac = $macs[$related];
            }
        }
        // ... or ineterface mac, calculate from base device mac
        if ($mac['#parents'][0] == 'interfaces') {
            $iId = $mac['#post']['interfaces'][$mac['#parents'][1]];
            guifi_log(GUIFILOG_TRACE, 'guifi_mac_validate interface MAC', $iId);
            $pmac = _guifi_mac_sum($mac['#post']['mac'], $iId['etherdev_counter']);
        }
        // if mac set, set value in form
        if (!is_null($pmac)) {
            $mac['#value'] = $pmac;
            form_set_value(array('#parents' => $mac['#parents']), $pmac, $form_state);
            $form_state['rebuild'] = TRUE;
            guifi_log(GUIFILOG_TRACE, 'guifi_mac_validate (null NEW MAC)', $pmac);
        }
        //  if still empty, nothing to validate
        return;
    }
    $pmac = _guifi_validate_mac($mac['#value']);
    if ($pmac == FALSE) {
        form_error($mac, t('Error in MAC address (%mac), use 99:99:99:99:99:99 format.', array('%mac' => $mac['#value'])), 'error');
    } else {
        if ($pmac != $mac['#value']) {
            form_set_value(array('#parents' => $mac['#parents']), $pmac, $form_state);
            $form_state['rebuild'] = TRUE;
        }
    }
    return $mac;
}
예제 #2
0
/**
 *
 * @param GuifiAPI $gapi GuifiAPI object
 *
 * @param mixed[] $parameters
 *
 * @return
 */
function _guifi_api_radio_check_parameters($gapi, $parameters)
{
    extract($parameters);
    if (!empty($mac)) {
        if (!_guifi_validate_mac($mac)) {
            $gapi->addError(403, "mac: {$mac}");
            return FALSE;
        }
    }
    if (isset($antenna_angle)) {
        $antenna_angles = array(0, 6, 60, 90, 120, 360);
        if (!in_array($anntena_angle, $antenna_angles)) {
            $gapi->addError(403, "antenna_angle: {$antenna_angle}");
            return FALSE;
        }
    }
    if (isset($antenna_gain)) {
        if (is_numeric($antenna_gain)) {
            $antenna_gain = (int) $antenna_gain;
        }
        $antenna_gains = array(2, 8, 12, 14, 18, 21, 24, 'more');
        if (!in_array($antenna_gain, $antenna_gains)) {
            $gapi->addError(403, "antenna_gain: {$antenna_gain}");
            return FALSE;
        }
    }
    if (isset($antenna_azimuth)) {
        $antenna_azimuth = (int) $antenna_azimuth;
        if (!is_numeric($antenna_azimuth) || $antenna_azimuth > 360 || $antenna_azimuth < 0) {
            $gapi->addError(403, "antenna_azimuth: {$antenna_azimuth}");
            return FALSE;
        }
    }
    if (isset($antenna_mode)) {
        $antenna_modes = array('Main', 'Aux');
        if (!in_array($antenna_mode, $antenna_modes)) {
            $gapi->addError(403, "antenna_mode: {$antenna_mode}");
            return FALSE;
        }
    }
    switch ($mode) {
        case 'ap':
            if (isset($clients_accepted)) {
                $clients_accepted_modes = array('Yes', 'No');
                if (!in_array($clients_accepted, $clients_accepted_modes)) {
                    $gapi->addError(403, "clients_accepted: {$clients_accepted}");
                    return FALSE;
                }
            }
            // Pending to revise, for mesh
        // Pending to revise, for mesh
        case 'ad-hoc':
            if (isset($protocol)) {
                if (!guifi_validate_types('protocol', $protocol)) {
                    $gapi->addError(403, "protocol is not supported: {$protocol}");
                    return FALSE;
                }
            }
            if (isset($channel)) {
                if (!guifi_validate_types('channel', $channel, $protocol)) {
                    $gapi->addError(403, "channel is not supported: {$channel}");
                    return FALSE;
                }
            }
            break;
    }
    if (isset($graph_server)) {
        $server = db_fetch_object(db_query("SELECT id FROM {guifi_services} WHERE id = '%d' AND service_type = 'SNPgraphs'", $graph_server));
        if (!$server->id) {
            $gapi->addError(403, "graph_server: {$graph_server}");
            return FALSE;
        }
    }
    return TRUE;
}