Ejemplo n.º 1
0
void
EthernetSettingsView::_SaveAdaptersConfiguration()
{
    BPath path;
    status_t status = _GetPath("interfaces", path);
    if (status < B_OK)
        return;

    FILE* fp = NULL;
    // loop over all adapters. open the settings file only once,
    // append the settins of each non-autoconfiguring adapter
    for (int i = 0; i < fSettings.CountItems(); i++) {
        Settings* settings = fSettings.ItemAt(i);

        if (settings->AutoConfigure() && settings->WirelessNetwork() == "")
            continue;

        if (fp == NULL) {
            fp = fopen(path.Path(), "w");
            if (fp == NULL) {
                fprintf(stderr, "failed to open file %s to write "
                        "configuration: %s\n", path.Path(), strerror(errno));
                return;
            }
        }

        fprintf(fp, "interface %s {\n",
                settings->Name());

        if (settings->IsDisabled())
            fprintf(fp, "\tdisabled\ttrue\n");
        else if (!settings->AutoConfigure()) {
            fprintf(fp, "\taddress {\n");
            fprintf(fp, "\t\tfamily\tinet\n");
            fprintf(fp, "\t\taddress\t%s\n", settings->IP());
            fprintf(fp, "\t\tgateway\t%s\n", settings->Gateway());
            fprintf(fp, "\t\tmask\t%s\n", settings->Netmask());
            fprintf(fp, "\t}\n");
        }
        if (settings->WirelessNetwork() != "") {
            fprintf(fp, "\tnetwork\t%s\n",
                    settings->WirelessNetwork().String());
        }
        fprintf(fp, "}\n\n");
    }
    if (fp) {
        printf("%s saved.\n", path.Path());
        fclose(fp);
    } else {
        // all configuration is DHCP, so delete interfaces file.
        remove(path.Path());
    }
}
Ejemplo n.º 2
0
void
EthernetSettingsView::MessageReceived(BMessage* message)
{
    switch (message->what) {
    case kMsgStaticMode:
    case kMsgDHCPMode:
    case kMsgDisabledMode:
    case kMsgNetwork:
        _EnableTextControls(message->what == kMsgStaticMode);
        fApplyButton->SetEnabled(true);
        fRevertButton->SetEnabled(true);
        break;
    case kMsgInfo:
    {
        const char* name;
        if (message->FindString("interface", &name) != B_OK)
            break;
        for (int32 i = 0; i < fSettings.CountItems(); i++) {
            Settings* settings = fSettings.ItemAt(i);
            if (strcmp(settings->Name(), name) == 0) {
                _ShowConfiguration(settings);
                break;
            }
        }
        break;
    }
    case kMsgRevert:
        _ShowConfiguration(fCurrentSettings);
        fRevertButton->SetEnabled(false);
        break;
    case kMsgApply:
        if (_ValidateControl(fIPTextControl)
                && _ValidateControl(fNetMaskTextControl)
                && (strlen(fGatewayTextControl->Text()) == 0
                    || _ValidateControl(fGatewayTextControl))
                && (strlen(fPrimaryDNSTextControl->Text()) == 0
                    || _ValidateControl(fPrimaryDNSTextControl))
                && (strlen(fSecondaryDNSTextControl->Text()) == 0
                    || _ValidateControl(fSecondaryDNSTextControl)))
            _SaveConfiguration();
        break;
    case kMsgChange:
        fErrorMessage->SetText("");
        fApplyButton->SetEnabled(true);
        break;
    default:
        BView::MessageReceived(message);
    }
}