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()); } }
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); } }