Forgot to commit some files.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10114 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
/*
|
||||
* Copyright 2003-2004, Waldemar Kornewald <[email protected]>
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
#include "ConnectionView.h"
|
||||
|
||||
#include "InterfaceUtils.h"
|
||||
#include "MessageDriverSettingsUtils.h"
|
||||
|
||||
#include <Box.h>
|
||||
#include <Button.h>
|
||||
#include <MenuField.h>
|
||||
#include <MenuItem.h>
|
||||
#include <PopUpMenu.h>
|
||||
#include <StringView.h>
|
||||
|
||||
#include <PPPDefs.h>
|
||||
|
||||
|
||||
PPPUpAddon::PPPUpAddon(BMessage *addons, ConnectionView *connectionView)
|
||||
: DialUpAddon(addons),
|
||||
fHasPassword(false),
|
||||
fAuthenticatorsCount(0),
|
||||
fSettings(NULL),
|
||||
fProfile(NULL),
|
||||
fConnectionView(connectionView)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PPPUpAddon::~PPPUpAddon()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DialUpAddon*
|
||||
PPPUpAddon::FindDevice(const BString& moduleName) const
|
||||
{
|
||||
DialUpAddon *addon;
|
||||
for(int32 index = 0; Addons()->FindPointer(DUN_DEVICE_ADDON_TYPE, index,
|
||||
reinterpret_cast<void**>(&addon)) == B_OK; index++)
|
||||
if(addon && moduleName == addon->KernelModuleName())
|
||||
return addon;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
PPPUpAddon::LoadSettings(BMessage *settings, BMessage *profile, bool isNew)
|
||||
{
|
||||
fIsNew = isNew;
|
||||
fHasPassword = false;
|
||||
fDeviceName = fUsername = fPassword = "";
|
||||
fDeviceAddon = NULL;
|
||||
fAuthenticatorsCount = 0;
|
||||
fSettings = settings;
|
||||
fProfile = profile;
|
||||
|
||||
fConnectionView->Reload();
|
||||
|
||||
if(!settings || !profile || isNew)
|
||||
return true;
|
||||
|
||||
if(!LoadDeviceSettings())
|
||||
return false;
|
||||
|
||||
if(!LoadAuthenticationSettings())
|
||||
return false;
|
||||
|
||||
fConnectionView->Reload();
|
||||
// reload new settings
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
PPPUpAddon::LoadDeviceSettings()
|
||||
{
|
||||
int32 index = 0;
|
||||
BMessage device;
|
||||
if(!FindMessageParameter(PPP_DEVICE_KEY, *fSettings, &device, &index))
|
||||
return false;
|
||||
|
||||
if(device.FindString(MDSU_VALUES, &fDeviceName) != B_OK)
|
||||
return false;
|
||||
|
||||
device.AddBool(MDSU_VALID, true);
|
||||
fSettings->ReplaceMessage(MDSU_PARAMETERS, index, &device);
|
||||
|
||||
fDeviceAddon = FindDevice(fDeviceName);
|
||||
if(!fDeviceAddon)
|
||||
return false;
|
||||
|
||||
return fDeviceAddon->LoadSettings(fSettings, fProfile, false);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
PPPUpAddon::LoadAuthenticationSettings()
|
||||
{
|
||||
// we only handle the profile (although settings could contain different data)
|
||||
int32 itemIndex = 0;
|
||||
BMessage authentication, item;
|
||||
|
||||
if(!FindMessageParameter(PPP_AUTHENTICATOR_KEY, *fProfile, &item, &itemIndex))
|
||||
return true;
|
||||
|
||||
// find authenticators (though we load all authenticators, we only use one)
|
||||
BString name;
|
||||
for(int32 index = 0; item.FindString(MDSU_VALUES, index, &name) == B_OK; index++) {
|
||||
BMessage authenticator;
|
||||
if(!GetAuthenticator(name, &authenticator))
|
||||
return false;
|
||||
// fatal error: we do not know how to handle this authenticator
|
||||
|
||||
MarkAuthenticatorAsValid(name);
|
||||
authentication.AddString(PPP_UP_AUTHENTICATORS, name);
|
||||
fAuthenticatorName = name;
|
||||
++fAuthenticatorsCount;
|
||||
}
|
||||
|
||||
fSettings->AddMessage(PPP_UP_AUTHENTICATION, &authentication);
|
||||
|
||||
bool hasUsername = false;
|
||||
// a username must be present
|
||||
|
||||
// load username and password
|
||||
BMessage parameter;
|
||||
int32 parameterIndex = 0;
|
||||
if(FindMessageParameter("User", item, ¶meter, ¶meterIndex)
|
||||
&& parameter.FindString(MDSU_VALUES, &fUsername) == B_OK) {
|
||||
hasUsername = true;
|
||||
parameter.AddBool(MDSU_VALID, true);
|
||||
item.ReplaceMessage(MDSU_PARAMETERS, parameterIndex, ¶meter);
|
||||
}
|
||||
|
||||
parameterIndex = 0;
|
||||
if(FindMessageParameter("Password", item, ¶meter, ¶meterIndex)
|
||||
&& parameter.FindString(MDSU_VALUES, &fPassword) == B_OK) {
|
||||
fHasPassword = true;
|
||||
parameter.AddBool(MDSU_VALID, true);
|
||||
item.ReplaceMessage(MDSU_PARAMETERS, parameterIndex, ¶meter);
|
||||
}
|
||||
|
||||
// tell DUN whether everything is valid
|
||||
if(hasUsername)
|
||||
item.AddBool(MDSU_VALID, true);
|
||||
|
||||
fProfile->ReplaceMessage(MDSU_PARAMETERS, itemIndex, &item);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
PPPUpAddon::HasTemporaryProfile() const
|
||||
{
|
||||
return fConnectionView->HasTemporaryProfile();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
PPPUpAddon::IsModified(bool *settings, bool *profile) const
|
||||
{
|
||||
if(!fSettings) {
|
||||
*settings = *profile = false;
|
||||
return;
|
||||
}
|
||||
|
||||
bool deviceSettings, authenticationSettings, deviceProfile, authenticationProfile;
|
||||
|
||||
IsDeviceModified(&deviceSettings, &deviceProfile);
|
||||
IsAuthenticationModified(&authenticationSettings, &authenticationProfile);
|
||||
|
||||
*settings = (deviceSettings || authenticationSettings);
|
||||
*profile = (deviceProfile || authenticationProfile);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
PPPUpAddon::IsDeviceModified(bool *settings, bool *profile) const
|
||||
{
|
||||
fConnectionView->IsDeviceModified(settings, profile);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
PPPUpAddon::IsAuthenticationModified(bool *settings, bool *profile) const
|
||||
{
|
||||
// currently we only support selecting one authenticator
|
||||
*profile = (*settings || fUsername != fConnectionView->Username()
|
||||
|| (fPassword != fConnectionView->Password() && fHasPassword)
|
||||
|| fHasPassword != fConnectionView->DoesSavePassword());
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
PPPUpAddon::SaveSettings(BMessage *settings, BMessage *profile, bool saveTemporary)
|
||||
{
|
||||
if(!fSettings || !settings)
|
||||
return false;
|
||||
// TODO: tell user that a device is needed (if we fail because of this)
|
||||
|
||||
if(!DeviceAddon()->SaveSettings(settings, profile, saveTemporary))
|
||||
return false;
|
||||
|
||||
if(CountAuthenticators() > 0) {
|
||||
BMessage authenticator;
|
||||
authenticator.AddString(MDSU_NAME, PPP_AUTHENTICATOR_KEY);
|
||||
authenticator.AddString(MDSU_VALUES, AuthenticatorName());
|
||||
settings->AddMessage(MDSU_PARAMETERS, &authenticator);
|
||||
|
||||
BMessage username;
|
||||
username.AddString(MDSU_NAME, "User");
|
||||
username.AddString(MDSU_VALUES, fConnectionView->Username());
|
||||
authenticator.AddMessage(MDSU_PARAMETERS, &username);
|
||||
|
||||
if(saveTemporary || fConnectionView->DoesSavePassword()) {
|
||||
// save password, too
|
||||
BMessage password;
|
||||
password.AddString(MDSU_NAME, "Password");
|
||||
password.AddString(MDSU_VALUES, fConnectionView->Password());
|
||||
authenticator.AddMessage(MDSU_PARAMETERS, &password);
|
||||
}
|
||||
|
||||
profile->AddMessage(MDSU_PARAMETERS, &authenticator);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
PPPUpAddon::GetPreferredSize(float *width, float *height) const
|
||||
{
|
||||
// this method is not used, just set values
|
||||
if(width)
|
||||
*width = 200;
|
||||
if(height)
|
||||
*height = 300;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BView*
|
||||
PPPUpAddon::CreateView(BPoint leftTop)
|
||||
{
|
||||
return NULL;
|
||||
// ConnectionView is responsible for our UI
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
PPPUpAddon::GetAuthenticator(const BString& moduleName, BMessage *entry) const
|
||||
{
|
||||
if(!entry)
|
||||
return false;
|
||||
|
||||
BString name;
|
||||
for(int32 index = 0; Addons()->FindMessage(DUN_AUTHENTICATOR_ADDON_TYPE, index,
|
||||
entry) == B_OK; index++) {
|
||||
entry->FindString("KernelModuleName", &name);
|
||||
if(name == moduleName)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
PPPUpAddon::MarkAuthenticatorAsValid(const BString& moduleName)
|
||||
{
|
||||
BMessage authenticator;
|
||||
int32 index = 0;
|
||||
BString name;
|
||||
|
||||
for(; FindMessageParameter(PPP_AUTHENTICATOR_KEY, *fSettings, &authenticator,
|
||||
&index); index++) {
|
||||
authenticator.FindString("KernelModuleName", &name);
|
||||
if(name == moduleName) {
|
||||
authenticator.AddBool(MDSU_VALID, true);
|
||||
fSettings->ReplaceMessage(MDSU_PARAMETERS, index, &authenticator);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright 2003-2004, Waldemar Kornewald <[email protected]>
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
#ifndef PPP_UP_ADDON__H
|
||||
#define PPP_UP_ADDON__H
|
||||
|
||||
#include <DialUpAddon.h>
|
||||
|
||||
#include <CheckBox.h>
|
||||
#include <String.h>
|
||||
#include <TextControl.h>
|
||||
|
||||
class ConnectionView;
|
||||
|
||||
// string constants for information saved in the settings message
|
||||
#define PPP_UP_AUTHENTICATION "Authentication"
|
||||
#define PPP_UP_AUTHENTICATORS "Authenticators"
|
||||
|
||||
|
||||
class PPPUpAddon : public DialUpAddon {
|
||||
public:
|
||||
PPPUpAddon(BMessage *addons, ConnectionView *connectionView);
|
||||
virtual ~PPPUpAddon();
|
||||
|
||||
bool IsNew() const
|
||||
{ return fIsNew; }
|
||||
|
||||
const char *DeviceName() const
|
||||
{ return fDeviceName.String(); }
|
||||
const char *AuthenticatorName() const
|
||||
{ return fAuthenticatorName.String(); }
|
||||
const char *Username() const
|
||||
{ return fUsername.String(); }
|
||||
const char *Password() const
|
||||
{ return fPassword.String(); }
|
||||
bool HasPassword() const
|
||||
{ return fHasPassword; }
|
||||
|
||||
DialUpAddon *FindDevice(const BString& moduleName) const;
|
||||
DialUpAddon *DeviceAddon() const
|
||||
{ return fDeviceAddon; }
|
||||
|
||||
int32 CountAuthenticators() const
|
||||
{ return fAuthenticatorsCount; }
|
||||
|
||||
BMessage *Settings() const
|
||||
{ return fSettings; }
|
||||
BMessage *Profile() const
|
||||
{ return fProfile; }
|
||||
|
||||
virtual int32 Position() const
|
||||
{ return 0; }
|
||||
virtual bool LoadSettings(BMessage *settings, BMessage *profile, bool isNew);
|
||||
bool LoadDeviceSettings();
|
||||
bool LoadAuthenticationSettings();
|
||||
|
||||
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;
|
||||
|
||||
virtual bool SaveSettings(BMessage *settings, BMessage *profile,
|
||||
bool saveTemporary);
|
||||
virtual bool GetPreferredSize(float *width, float *height) const;
|
||||
virtual BView *CreateView(BPoint leftTop);
|
||||
|
||||
private:
|
||||
bool GetAuthenticator(const BString& moduleName, BMessage *entry) const;
|
||||
bool MarkAuthenticatorAsValid(const BString& moduleName);
|
||||
|
||||
private:
|
||||
bool fIsNew, fHasPassword;
|
||||
BString fDeviceName, fAuthenticatorName, fUsername, fPassword;
|
||||
DialUpAddon *fDeviceAddon;
|
||||
int32 fAuthenticatorsCount;
|
||||
BMessage *fSettings, *fProfile;
|
||||
// saves last settings state
|
||||
ConnectionView *fConnectionView;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user