The settings are now correctly de-/encoded.
PPPoE and authentication produce working output. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6965 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
62ffde749f
commit
c737ab9ab1
@ -28,7 +28,7 @@ class DialUpAddon {
|
||||
DialUpAddon(BMessage *addons) : fAddons(addons) {}
|
||||
virtual ~DialUpAddon() {}
|
||||
|
||||
const BMessage *Addons() const
|
||||
BMessage *Addons() const
|
||||
{ return fAddons; }
|
||||
|
||||
virtual const char *FriendlyName() const
|
||||
@ -47,6 +47,8 @@ class DialUpAddon {
|
||||
|
||||
virtual bool LoadSettings(BMessage *settings, BMessage *profile, bool isNew)
|
||||
{ return false; }
|
||||
virtual bool HasTemporaryProfile() const
|
||||
{ return false; }
|
||||
virtual void IsModified(bool& settings, bool& profile) const
|
||||
{ settings = profile = false; }
|
||||
virtual bool SaveSettings(BMessage *settings, BMessage *profile,
|
||||
|
@ -10,7 +10,9 @@
|
||||
|
||||
#include "MessageDriverSettingsUtils.h"
|
||||
|
||||
// built-in add-ons
|
||||
#include "GeneralAddon.h"
|
||||
#include "PPPoEAddon.h"
|
||||
|
||||
|
||||
#include <PPPInterface.h>
|
||||
@ -107,12 +109,6 @@ DialUpView::DialUpView(BRect frame)
|
||||
tabViewRect.bottom -= fTabView->TabHeight();
|
||||
fAddons.AddRect("TabViewRect", tabViewRect);
|
||||
|
||||
// BRect noInterfacesRect(rect);
|
||||
// noInterfacesRect.top = rect.top + rect.Width() / 2;
|
||||
// noInterfacesRect.bottom = noInterfacesRect.top + 15;
|
||||
// fNoInterfacesStringView = new BStringView(noInterfacesRect, "NoInterfacesView",
|
||||
// TEXT_NO_INTERFACE_SELECTED);
|
||||
|
||||
rect.top = rect.bottom + 15;
|
||||
rect.bottom = rect.top + 15;
|
||||
rect.right = rect.left + 200;
|
||||
@ -162,10 +158,8 @@ DialUpView::AttachedToWindow()
|
||||
fInterfaceMenu->SetTargetForItems(this);
|
||||
fConnectButton->SetTarget(this);
|
||||
|
||||
if(fListener.InitCheck() != B_OK) {
|
||||
if(fListener.InitCheck() != B_OK)
|
||||
(new BAlert(ERROR_TITLE, ERROR_NO_PPP_STACK, TEXT_OK))->Go();
|
||||
// be_app->PostMessage(B_QUIT_REQUESTED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -178,12 +172,15 @@ DialUpView::MessageReceived(BMessage *message)
|
||||
break;
|
||||
|
||||
case MSG_CREATE_NEW: {
|
||||
// TODO: open dialog asking for name
|
||||
AddInterface("New interface", true);
|
||||
if(fCurrentItem)
|
||||
fCurrentItem->SetMarked(true);
|
||||
} break;
|
||||
|
||||
case MSG_DELETE_CURRENT: {
|
||||
// TODO: remove file from disk
|
||||
|
||||
fInterfaceMenu->RemoveItem(fCurrentItem);
|
||||
delete fCurrentItem;
|
||||
fCurrentItem = NULL;
|
||||
@ -278,7 +275,6 @@ DialUpView::SaveSettings(BMessage& settings, BMessage& profile, bool saveModifie
|
||||
if(!fCurrentItem)
|
||||
return false;
|
||||
|
||||
// create tabs for all registered and valid "Tab" add-ons
|
||||
DialUpAddon *addon;
|
||||
TemplateList<DialUpAddon*> addons;
|
||||
for(int32 index = 0;
|
||||
@ -604,6 +600,10 @@ DialUpView::LoadAddons()
|
||||
GeneralAddon *generalAddon = new GeneralAddon(&fAddons);
|
||||
fAddons.AddPointer("Tab", generalAddon);
|
||||
fAddons.AddPointer("DeleteMe", generalAddon);
|
||||
// "PPPoE" device
|
||||
PPPoEAddon *pppoeAddon = new PPPoEAddon(&fAddons);
|
||||
fAddons.AddPointer("Device", pppoeAddon);
|
||||
fAddons.AddPointer("DeleteMe", pppoeAddon);
|
||||
// "PAP" authenticator
|
||||
BMessage addon;
|
||||
addon.AddString("KernelModuleName", "pap");
|
||||
@ -627,7 +627,10 @@ DialUpView::AddInterface(const char *name, bool isNew = false)
|
||||
|
||||
BMenuItem *item = new BMenuItem(name, new BMessage(MSG_SELECT_INTERFACE));
|
||||
item->SetTarget(this);
|
||||
fInterfaceMenu->AddItem(item, CountInterfaces());
|
||||
int32 index = FindNextMenuInsertionIndex(fInterfaceMenu, name);
|
||||
if(index > CountInterfaces())
|
||||
index = CountInterfaces();
|
||||
fInterfaceMenu->AddItem(item, index);
|
||||
if(CountInterfaces() == 1)
|
||||
fInterfaceMenu->SetLabelFromMarked(true);
|
||||
SelectInterface(CountInterfaces() - 1, isNew);
|
||||
@ -653,8 +656,6 @@ DialUpView::SelectInterface(int32 index, bool isNew = false)
|
||||
} else {
|
||||
if(!fCurrentItem) {
|
||||
fTabView->Show();
|
||||
// fTabView->MoveBy(-Bounds().Width(), 0);
|
||||
// fNoInterfacesStringView->MoveBy(Bounds().Width(), 0);
|
||||
fConnectButton->SetEnabled(true);
|
||||
}
|
||||
|
||||
@ -673,13 +674,8 @@ DialUpView::SelectInterface(int32 index, bool isNew = false)
|
||||
// tell modules to unload all settings
|
||||
|
||||
fTabView->Hide();
|
||||
// fTabView->MoveBy(Bounds().Width(), 0);
|
||||
// fNoInterfacesStringView->MoveBy(-Bounds().Width(), 0);
|
||||
fConnectButton->SetEnabled(false);
|
||||
} else if(isNew && !LoadSettings(true)) {
|
||||
(new BAlert(ERROR_TITLE, ERROR_LOADING_FAILED, TEXT_OK))->Go();
|
||||
LoadSettings(true);
|
||||
} else if(!LoadSettings(false)) {
|
||||
} else if(!isNew && !LoadSettings(false)) {
|
||||
(new BAlert(ERROR_TITLE, ERROR_LOADING_FAILED, TEXT_OK))->Go();
|
||||
LoadSettings(true);
|
||||
}
|
||||
@ -691,3 +687,18 @@ DialUpView::CountInterfaces() const
|
||||
{
|
||||
return fInterfaceMenu->CountItems() - 3;
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
DialUpView::FindNextMenuInsertionIndex(BMenu *menu, const BString& name,
|
||||
int32 index = 0)
|
||||
{
|
||||
BMenuItem *item;
|
||||
for(; index < menu->CountItems(); index++) {
|
||||
item = menu->ItemAt(index);
|
||||
if(item && name.ICompare(item->Label()) <= 0)
|
||||
return index;
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
@ -45,6 +45,8 @@ class DialUpView : public BView {
|
||||
void AddInterface(const char *name, bool isNew = false);
|
||||
void SelectInterface(int32 index, bool isNew = false);
|
||||
int32 CountInterfaces() const;
|
||||
int32 FindNextMenuInsertionIndex(BMenu *menu, const BString& name,
|
||||
int32 index = 0);
|
||||
|
||||
private:
|
||||
PPPInterfaceListener fListener;
|
||||
@ -62,7 +64,6 @@ class DialUpView : public BView {
|
||||
BPopUpMenu *fInterfaceMenu;
|
||||
BMenuField *fMenuField;
|
||||
BTabView *fTabView;
|
||||
// BStringView *fNoInterfacesStringView;
|
||||
};
|
||||
|
||||
|
||||
|
@ -32,11 +32,9 @@ GeneralAddon::GeneralAddon(BMessage *addons)
|
||||
fHasPassword(false),
|
||||
fAuthenticatorsCount(0),
|
||||
fSettings(NULL),
|
||||
fProfile(NULL)
|
||||
fProfile(NULL),
|
||||
fGeneralView(NULL)
|
||||
{
|
||||
BRect rect;
|
||||
addons->FindRect("TabViewRect", &rect);
|
||||
fGeneralView = new GeneralView(this, rect);
|
||||
}
|
||||
|
||||
|
||||
@ -50,7 +48,7 @@ GeneralAddon::FindDevice(const BString& moduleName) const
|
||||
{
|
||||
DialUpAddon *addon;
|
||||
for(int32 index = 0; Addons()->FindPointer("Device", index,
|
||||
reinterpret_cast<void**>(addon)); index++)
|
||||
reinterpret_cast<void**>(&addon)) == B_OK; index++)
|
||||
if(addon && moduleName == addon->KernelModuleName())
|
||||
return addon;
|
||||
|
||||
@ -68,6 +66,11 @@ GeneralAddon::LoadSettings(BMessage *settings, BMessage *profile, bool isNew)
|
||||
fAuthenticatorsCount = 0;
|
||||
fSettings = settings;
|
||||
fProfile = profile;
|
||||
|
||||
if(fGeneralView)
|
||||
fGeneralView->Reload();
|
||||
// reset all views (empty settings)
|
||||
|
||||
if(!settings || !profile || isNew)
|
||||
return true;
|
||||
|
||||
@ -77,6 +80,10 @@ GeneralAddon::LoadSettings(BMessage *settings, BMessage *profile, bool isNew)
|
||||
if(!LoadAuthenticationSettings(settings, profile))
|
||||
return false;
|
||||
|
||||
if(fGeneralView)
|
||||
fGeneralView->Reload();
|
||||
// reload new settings
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -90,7 +97,7 @@ GeneralAddon::LoadDeviceSettings(BMessage *settings, BMessage *profile)
|
||||
return false;
|
||||
// TODO: tell user that device specification is missing
|
||||
|
||||
if(!device.FindString("Values", &fDeviceName))
|
||||
if(device.FindString("Values", &fDeviceName) != B_OK)
|
||||
return false;
|
||||
// TODO: tell user that device specification is missing
|
||||
|
||||
@ -161,6 +168,13 @@ GeneralAddon::LoadAuthenticationSettings(BMessage *settings, BMessage *profile)
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
GeneralAddon::HasTemporaryProfile() const
|
||||
{
|
||||
return !fGeneralView->DoesSavePassword();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
GeneralAddon::IsModified(bool& settings, bool& profile) const
|
||||
{
|
||||
@ -216,7 +230,7 @@ GeneralAddon::IsAuthenticationModified(bool& settings, bool& profile) const
|
||||
|| authenticator != fGeneralView->AuthenticatorName());
|
||||
}
|
||||
|
||||
profile = (fUsername != fGeneralView->Username()
|
||||
profile = (settings || fUsername != fGeneralView->Username()
|
||||
|| (fPassword != fGeneralView->Password() && fHasPassword)
|
||||
|| fHasPassword != fGeneralView->DoesSavePassword());
|
||||
}
|
||||
@ -229,10 +243,14 @@ GeneralAddon::SaveSettings(BMessage *settings, BMessage *profile, bool saveTempo
|
||||
return false;
|
||||
// TODO: tell user that a device is needed (if we fail because of this)
|
||||
|
||||
if(!fDeviceAddon || !fDeviceAddon->SaveSettings(settings, profile, saveTemporary))
|
||||
return false;
|
||||
|
||||
if(fGeneralView->AuthenticatorName()) {
|
||||
BMessage authenticator;
|
||||
authenticator.AddString("Name", PPP_AUTHENTICATOR_KEY);
|
||||
authenticator.AddString("Values", fGeneralView->AuthenticatorName());
|
||||
settings->AddMessage("Parameters", &authenticator);
|
||||
|
||||
BMessage username;
|
||||
username.AddString("Name", "User");
|
||||
@ -246,22 +264,21 @@ GeneralAddon::SaveSettings(BMessage *settings, BMessage *profile, bool saveTempo
|
||||
password.AddString("Values", fGeneralView->Password());
|
||||
authenticator.AddMessage("Parameters", &password);
|
||||
}
|
||||
|
||||
profile->AddMessage("Parameters", &authenticator);
|
||||
}
|
||||
|
||||
DialUpAddon *addon = FindDevice(fGeneralView->DeviceName());
|
||||
if(!addon)
|
||||
return false;
|
||||
|
||||
return addon->SaveSettings(settings, profile, saveTemporary);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
GeneralAddon::GetPreferredSize(float *width, float *height) const
|
||||
{
|
||||
BRect rect(0, 0, 200, 300);
|
||||
// set default values
|
||||
Addons()->FindRect("TabViewRect", &rect);
|
||||
BRect rect;
|
||||
if(Addons()->FindRect("TabViewRect", &rect) != B_OK)
|
||||
rect.Set(0, 0, 200, 300);
|
||||
// set default values
|
||||
|
||||
if(width)
|
||||
*width = rect.Width();
|
||||
@ -275,10 +292,11 @@ GeneralAddon::GetPreferredSize(float *width, float *height) const
|
||||
BView*
|
||||
GeneralAddon::CreateView(BPoint leftTop)
|
||||
{
|
||||
BRect rect;
|
||||
if(Addons()->FindRect("TabViewRect", &rect) != B_OK);
|
||||
rect.Set(0, 0, 200, 300);
|
||||
// set default values
|
||||
if(!fGeneralView) {
|
||||
BRect rect;
|
||||
Addons()->FindRect("TabViewRect", &rect);
|
||||
fGeneralView = new GeneralView(this, rect);
|
||||
}
|
||||
|
||||
fGeneralView->MoveTo(leftTop);
|
||||
fGeneralView->Reload();
|
||||
@ -326,13 +344,14 @@ GeneralAddon::MarkAuthenticatorAsValid(const BString& moduleName)
|
||||
|
||||
|
||||
GeneralView::GeneralView(GeneralAddon *addon, BRect frame)
|
||||
: BView(frame, "General", B_FOLLOW_NONE, 0),
|
||||
: BView(frame, "GeneralView", B_FOLLOW_NONE, 0),
|
||||
fAddon(addon)
|
||||
{
|
||||
BRect rect = Bounds();
|
||||
rect.InsetBy(5, 5);
|
||||
rect.bottom = 100;
|
||||
fDeviceBox = new BBox(rect, "Device");
|
||||
Addon()->Addons()->AddFloat("DeviceViewWidth", fDeviceBox->Bounds().Width() - 10);
|
||||
rect.top = rect.bottom + 10;
|
||||
rect.bottom = rect.top
|
||||
+ 25 // space for topmost control
|
||||
@ -340,17 +359,16 @@ GeneralView::GeneralView(GeneralAddon *addon, BRect frame)
|
||||
+ 3 * 5; // space beween controls and bottom of box
|
||||
fAuthenticationBox = new BBox(rect, "Authentication");
|
||||
|
||||
fDeviceField = new BMenuField(BRect(5, 0, 250, 25), "Device",
|
||||
fDeviceField = new BMenuField(BRect(5, 0, 250, 20), "Device",
|
||||
"Device:", new BPopUpMenu("No Devices Found!"));
|
||||
fDeviceField->SetDivider(fDeviceField->StringWidth(fDeviceField->Label()) + 10);
|
||||
fDeviceField->SetDivider(StringWidth(fDeviceField->Label()) + 10);
|
||||
fDeviceField->Menu()->SetRadioMode(true);
|
||||
AddDevices();
|
||||
fDeviceBox->SetLabel(fDeviceField);
|
||||
|
||||
fAuthenticatorField = new BMenuField(BRect(5, 0, 250, 25), "Authenticator",
|
||||
fAuthenticatorField = new BMenuField(BRect(5, 0, 250, 20), "Authenticator",
|
||||
"Authenticator:", new BPopUpMenu("No Authenticators Found!"));
|
||||
fAuthenticatorField->SetDivider(fAuthenticatorField->StringWidth(
|
||||
fAuthenticatorField->Label()) + 10);
|
||||
fAuthenticatorField->SetDivider(StringWidth(fAuthenticatorField->Label()) + 10);
|
||||
fAuthenticatorField->Menu()->SetRadioMode(true);
|
||||
AddAuthenticators();
|
||||
fAuthenticationBox->SetLabel(fAuthenticatorField);
|
||||
@ -364,6 +382,15 @@ GeneralView::GeneralView(GeneralAddon *addon, BRect frame)
|
||||
rect.bottom = rect.top + 20;
|
||||
fPassword = new BTextControl(rect, "password", "Password: ", NULL, NULL);
|
||||
fPassword->TextView()->HideTyping(true);
|
||||
float usernameWidth = StringWidth(fUsername->Label()) + 5;
|
||||
float passwordWidth = StringWidth(fPassword->Label()) + 5;
|
||||
if(usernameWidth > passwordWidth)
|
||||
passwordWidth = usernameWidth;
|
||||
else
|
||||
usernameWidth = passwordWidth;
|
||||
fUsername->SetDivider(usernameWidth);
|
||||
fPassword->SetDivider(passwordWidth);
|
||||
|
||||
rect.top = rect.bottom + 5;
|
||||
rect.bottom = rect.top + 20;
|
||||
fSavePassword = new BCheckBox(rect, "SavePassword", "Save Password", NULL);
|
||||
@ -379,18 +406,12 @@ GeneralView::GeneralView(GeneralAddon *addon, BRect frame)
|
||||
|
||||
GeneralView::~GeneralView()
|
||||
{
|
||||
// TODO: delete device add-on
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
GeneralView::Reload()
|
||||
{
|
||||
// TODO: reload settings:
|
||||
// - select device and authenticator
|
||||
// - add device view (and move authenticator view to fit)
|
||||
// - set username, password, and checkbox
|
||||
|
||||
fDeviceAddon = NULL;
|
||||
|
||||
BMenuItem *item;
|
||||
@ -402,7 +423,7 @@ GeneralView::Reload()
|
||||
break;
|
||||
}
|
||||
|
||||
if(fDeviceAddon == Addon()->DeviceAddon()) {
|
||||
if(fDeviceAddon && fDeviceAddon == Addon()->DeviceAddon()) {
|
||||
item->SetMarked(true);
|
||||
ReloadDeviceView();
|
||||
} else {
|
||||
@ -417,8 +438,9 @@ GeneralView::Reload()
|
||||
BMessage authentication;
|
||||
if(Addon()->Settings()->FindMessage("Authentication", &authentication) == B_OK)
|
||||
authentication.FindString("Authenticators", &authenticator);
|
||||
for(int32 index = 0; index < fDeviceField->Menu()->CountItems(); index++) {
|
||||
item = fDeviceField->Menu()->ItemAt(index);
|
||||
BMenu *menu = fAuthenticatorField->Menu();
|
||||
for(int32 index = 0; index < menu->CountItems(); index++) {
|
||||
item = menu->ItemAt(index);
|
||||
if(item && item->Message()
|
||||
&& item->Message()->FindString("KernelModuleName",
|
||||
&kernelModule) == B_OK && kernelModule == authenticator) {
|
||||
@ -432,6 +454,8 @@ GeneralView::Reload()
|
||||
fUsername->SetText(Addon()->Username());
|
||||
fPassword->SetText(Addon()->Password());
|
||||
fSavePassword->SetValue(Addon()->HasPassword());
|
||||
|
||||
ReloadDeviceView();
|
||||
}
|
||||
|
||||
|
||||
@ -512,14 +536,16 @@ void
|
||||
GeneralView::ReloadDeviceView()
|
||||
{
|
||||
// first remove existing device view(s)
|
||||
while(fDeviceBox->CountChildren() > 0)
|
||||
fDeviceBox->RemoveChild(fDeviceBox->ChildAt(0));
|
||||
while(fDeviceBox->CountChildren() > 1)
|
||||
fDeviceBox->RemoveChild(fDeviceBox->ChildAt(1));
|
||||
|
||||
if(!fDeviceAddon)
|
||||
return;
|
||||
|
||||
BRect rect(fDeviceBox->Bounds());
|
||||
rect.top = 25;
|
||||
float width, height;
|
||||
if(!fDeviceAddon->GetPreferredSize(&width, &height)) {
|
||||
width = 50;
|
||||
width = rect.Width();
|
||||
height = 50;
|
||||
}
|
||||
|
||||
@ -527,10 +553,16 @@ GeneralView::ReloadDeviceView()
|
||||
width = rect.Width();
|
||||
if(height < 10)
|
||||
height = 10;
|
||||
// set minimum height
|
||||
else if(height > 200)
|
||||
height = 200;
|
||||
// set maximum height
|
||||
|
||||
rect.InsetBy((rect.Width() - width) / 2, 0);
|
||||
// center horizontally
|
||||
rect.top = 25;
|
||||
rect.bottom = rect.top + height;
|
||||
float deltaY = rect.Height() - fDeviceBox->Bounds().Height();
|
||||
float deltaY = height + 30 - fDeviceBox->Bounds().Height();
|
||||
fDeviceBox->ResizeBy(0, deltaY);
|
||||
fAuthenticationBox->MoveBy(0, deltaY);
|
||||
|
||||
@ -560,7 +592,7 @@ GeneralView::AddAuthenticators()
|
||||
Addon()->Addons()->FindMessage("Authenticator", index, &addon) == B_OK;
|
||||
index++) {
|
||||
BMessage *message = new BMessage(MSG_SELECT_AUTHENTICATOR);
|
||||
message->AddString("Authenticator", addon.FindString("KernelModuleName"));
|
||||
message->AddString("KernelModuleName", addon.FindString("KernelModuleName"));
|
||||
|
||||
BString name, technicalName, friendlyName;
|
||||
bool hasTechnicalName
|
||||
@ -578,7 +610,7 @@ GeneralView::AddAuthenticators()
|
||||
name << ")";
|
||||
}
|
||||
|
||||
int32 insertAt = FindNextAddonInsertionIndex(fAuthenticatorField->Menu(),
|
||||
int32 insertAt = FindNextMenuInsertionIndex(fAuthenticatorField->Menu(),
|
||||
name, 2);
|
||||
fAuthenticatorField->Menu()->AddItem(new BMenuItem(name.String(), message),
|
||||
insertAt);
|
||||
@ -610,14 +642,14 @@ GeneralView::AddAddonsToMenu(BMenu *menu, const char *type, uint32 what)
|
||||
name << ")";
|
||||
}
|
||||
|
||||
int32 insertAt = FindNextAddonInsertionIndex(menu, name);
|
||||
int32 insertAt = FindNextMenuInsertionIndex(menu, name);
|
||||
menu->AddItem(new BMenuItem(name.String(), message), insertAt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
GeneralView::FindNextAddonInsertionIndex(BMenu *menu, const BString& name,
|
||||
GeneralView::FindNextMenuInsertionIndex(BMenu *menu, const BString& name,
|
||||
int32 index = 0)
|
||||
{
|
||||
BMenuItem *item;
|
||||
|
@ -56,6 +56,7 @@ class GeneralAddon : public DialUpAddon {
|
||||
bool LoadDeviceSettings(BMessage *settings, BMessage *profile);
|
||||
bool LoadAuthenticationSettings(BMessage *settings, BMessage *profile);
|
||||
|
||||
virtual bool HasTemporaryProfile() const;
|
||||
virtual void IsModified(bool& settings, bool& profile) const;
|
||||
void IsDeviceModified(bool& settings, bool& profile) const;
|
||||
void IsAuthenticationModified(bool& settings, bool& profile) const;
|
||||
@ -109,7 +110,7 @@ class GeneralView : public BView {
|
||||
void AddDevices();
|
||||
void AddAuthenticators();
|
||||
void AddAddonsToMenu(BMenu *menu, const char *type, uint32 what);
|
||||
int32 FindNextAddonInsertionIndex(BMenu *menu, const BString& name,
|
||||
int32 FindNextMenuInsertionIndex(BMenu *menu, const BString& name,
|
||||
int32 index = 0);
|
||||
|
||||
private:
|
||||
|
@ -4,6 +4,9 @@ UsePrivateHeaders net ;
|
||||
UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp shared libppp headers ] ;
|
||||
UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp shared libkernelppp headers ] ;
|
||||
|
||||
# additonal headers for built-in add-ons:
|
||||
UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp pppoe ] ; # PPPoE
|
||||
|
||||
SimpleTest DialUpPreflet :
|
||||
DialUpApplication.cpp
|
||||
DialUpView.cpp
|
||||
@ -13,6 +16,7 @@ SimpleTest DialUpPreflet :
|
||||
|
||||
# built-in add-ons
|
||||
GeneralAddon.cpp
|
||||
PPPoEAddon.cpp
|
||||
;
|
||||
|
||||
LinkSharedOSLibs DialUpPreflet : be libppp.a ;
|
||||
LinkSharedOSLibs DialUpPreflet : libppp.a be ;
|
||||
|
@ -4,7 +4,6 @@
|
||||
#include <File.h>
|
||||
#include <Message.h>
|
||||
#include <String.h>
|
||||
#include <TypeConstants.h>
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
@ -61,6 +60,8 @@ ReadMessageDriverSettings(const char *name, BMessage& message)
|
||||
return false;
|
||||
|
||||
void *handle = load_driver_settings(name);
|
||||
if(!handle)
|
||||
return false;
|
||||
const driver_settings *settings = get_driver_settings(handle);
|
||||
if(!settings) {
|
||||
unload_driver_settings(handle);
|
||||
@ -79,6 +80,17 @@ ReadMessageDriverSettings(const char *name, BMessage& message)
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
void
|
||||
EscapeWord(BString& word)
|
||||
{
|
||||
word.ReplaceAll("\\", "\\\\");
|
||||
word.ReplaceAll("#", "\\#");
|
||||
word.ReplaceAll("\"", "\\\"");
|
||||
word.ReplaceAll("\'", "\\\'");
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
bool
|
||||
WriteParameter(BFile& file, const BMessage& parameter, int32 level)
|
||||
@ -87,13 +99,29 @@ WriteParameter(BFile& file, const BMessage& parameter, int32 level)
|
||||
if(parameter.FindString("Name", &name) != B_OK || !name)
|
||||
return false;
|
||||
|
||||
BString line;
|
||||
BString line, word(name);
|
||||
EscapeWord(word);
|
||||
bool needsEscaping = word.FindFirst(' ') >= 0;
|
||||
line.SetTo('\t', level);
|
||||
line << name << ' ';
|
||||
if(needsEscaping)
|
||||
line << '\"';
|
||||
line << word;
|
||||
if(needsEscaping)
|
||||
line << '\"';
|
||||
line << ' ';
|
||||
|
||||
for(int32 index = 0; parameter.FindString("Values", index, &name) == B_OK; index++)
|
||||
if(name)
|
||||
line << name << ' ';
|
||||
if(name) {
|
||||
word = name;
|
||||
EscapeWord(word);
|
||||
needsEscaping = word.FindFirst(' ') >= 0;
|
||||
if(needsEscaping)
|
||||
line << '\"';
|
||||
line << word;
|
||||
if(needsEscaping)
|
||||
line << '\"';
|
||||
line << ' ';
|
||||
}
|
||||
|
||||
type_code type;
|
||||
int32 parameterCount;
|
||||
@ -112,7 +140,7 @@ WriteParameter(BFile& file, const BMessage& parameter, int32 level)
|
||||
WriteParameter(file, subParameter, level + 1);
|
||||
|
||||
line.SetTo('\t', level);
|
||||
line << '\n';
|
||||
line << "}\n";
|
||||
file.Write(line.String(), line.Length());
|
||||
}
|
||||
|
||||
@ -126,12 +154,16 @@ WriteMessageDriverSettings(BFile& file, const BMessage& message)
|
||||
if(file.InitCheck() != B_OK || !file.IsWritable())
|
||||
return false;
|
||||
|
||||
file.SetSize(0);
|
||||
file.Seek(0, SEEK_SET);
|
||||
|
||||
BMessage parameter;
|
||||
for(int32 index = 0; message.FindMessage("Parameters", index, ¶meter) == B_OK;
|
||||
index++)
|
||||
index++) {
|
||||
if(index > 0)
|
||||
file.Write("\n", 1);
|
||||
WriteParameter(file, parameter, 0);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ Short-term TODOs:
|
||||
- write PAP authenticator add-on
|
||||
- write PPPoE device add-on
|
||||
- move DEVNOTES into a doxygen file and document the rest of the API
|
||||
- remove static window positions
|
||||
|
||||
Long-term TODOs:
|
||||
- allow selecting multiple authenticators
|
||||
|
Loading…
x
Reference in New Issue
Block a user