Added the Network Control Preflet on behalf of Olivier Milla. I have also
added a resource file and updated the Jamfile for the preflets dir. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@762 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
4705ceeccd
commit
d2dc27e079
@ -10,6 +10,7 @@ SubInclude OBOS_TOP src prefs keymap ;
|
||||
SubInclude OBOS_TOP src prefs media ;
|
||||
SubInclude OBOS_TOP src prefs menu ;
|
||||
SubInclude OBOS_TOP src prefs mouse ;
|
||||
SubInclude OBOS_TOP src prefs network ;
|
||||
SubInclude OBOS_TOP src prefs print ;
|
||||
SubInclude OBOS_TOP src prefs screen ;
|
||||
SubInclude OBOS_TOP src prefs screensaver ;
|
||||
|
@ -1,6 +1,6 @@
|
||||
SubDir OBOS_TOP src prefs keymap ;
|
||||
|
||||
#AddResources Keymap : <$(SOURCE_GRIST)>Resource.rsrc ;
|
||||
AddResources Keymap : Keymap.rsrc ;
|
||||
|
||||
Preference Keymap :
|
||||
main.cpp
|
||||
|
7
src/prefs/network/Jamfile
Normal file
7
src/prefs/network/Jamfile
Normal file
@ -0,0 +1,7 @@
|
||||
SubDir OBOS_TOP src prefs network ;
|
||||
|
||||
AddResources Network : Network.rsrc ;
|
||||
|
||||
Preference Network : Network.cpp funcs.cpp ;
|
||||
|
||||
LinkSharedOSLibs Appearance : be ;
|
542
src/prefs/network/Network.cpp
Normal file
542
src/prefs/network/Network.cpp
Normal file
@ -0,0 +1,542 @@
|
||||
#include <Alert.h>
|
||||
#include <image.h>
|
||||
#include <Font.h>
|
||||
#include <Messenger.h>
|
||||
#include <OS.h>
|
||||
#include <Roster.h>
|
||||
#include <ScrollView.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "Network.h"
|
||||
|
||||
#define B_GREY 216,216,216
|
||||
|
||||
int main()
|
||||
{
|
||||
Network app;
|
||||
app.Run();
|
||||
return B_NO_ERROR;
|
||||
}
|
||||
|
||||
Network::Network() : BApplication("application/x-vnd.OBOS-Network")
|
||||
{
|
||||
fwindow = new NetworkWindow();
|
||||
fwindow ->Show();
|
||||
|
||||
fwindow ->Get_Configs_List();
|
||||
fwindow ->GetEverything();
|
||||
}
|
||||
|
||||
|
||||
NetworkWindow::NetworkWindow() : BWindow(BRect(100,100,600,420),"Network",B_TITLED_WINDOW,B_NOT_ANCHORED_ON_ACTIVATE | B_NOT_ZOOMABLE | B_NOT_RESIZABLE,B_CURRENT_WORKSPACE)
|
||||
{
|
||||
BRect bounds = Bounds();
|
||||
fview = new BView(bounds,"View",B_FOLLOW_ALL_SIDES,B_WILL_DRAW);
|
||||
|
||||
frestart = new BButton(BRect(10,285,130,310),"Restart_Networking","Restart Networking",new BMessage(kRestart_Networking_M));
|
||||
frevert = new BButton(BRect(150,285,210,310),"Revert","Revert",new BMessage(kRevert_M));
|
||||
fsave = new BButton(BRect(400,285,480,310),"Save","Save",new BMessage(kSave_M));
|
||||
fsave->MakeDefault(true);
|
||||
fsave->SetEnabled(false);
|
||||
frevert->SetEnabled(false);
|
||||
|
||||
bounds.bottom -= 50;
|
||||
bounds.InsetBy(5,5);
|
||||
ftabview = new BTabView(bounds,"tab_view");
|
||||
|
||||
fidentity = new BTab();
|
||||
bounds.bottom -= ftabview->TabHeight();
|
||||
fidentity_view = new BView(bounds,"Identity",B_FOLLOW_ALL_SIDES,B_WILL_DRAW);
|
||||
fservices_view = new BView(bounds,"Services",B_FOLLOW_ALL_SIDES,B_WILL_DRAW);
|
||||
|
||||
bounds.bottom -= 160;
|
||||
bounds.right -= 20;
|
||||
fnames = new BBox(bounds,"Names",B_FOLLOW_LEFT | B_FOLLOW_TOP,B_WILL_DRAW | B_FRAME_EVENTS);
|
||||
|
||||
fdomain = new BTextControl(BRect(10,15,220,45),"Domain_Name","Domain Name:",NULL,new BMessage(kSOMETHING_HAS_CHANGED_M));
|
||||
fhost = new BTextControl(BRect(10,50,220,90),"Host_Name","Host Name:",NULL,new BMessage(kSOMETHING_HAS_CHANGED_M));
|
||||
fprimary_dns = new BTextControl(BRect(240,15,440,45),"Primary_DNS","Primary DNS:",NULL,new BMessage(kSOMETHING_HAS_CHANGED_M));
|
||||
fsecondary_dns = new BTextControl(BRect(240,50,440,90),"Secondary_DNS","Secondary_DNS:",NULL,new BMessage(kSOMETHING_HAS_CHANGED_M));
|
||||
|
||||
bounds.top = bounds.bottom + 10;
|
||||
bounds.bottom = 220;
|
||||
finterfaces = new BBox(bounds,"Network_Interfaces",B_FOLLOW_LEFT | B_FOLLOW_TOP,B_WILL_DRAW | B_FRAME_EVENTS);
|
||||
|
||||
fsettings = new BButton(BRect(395,17,460,37),"Settings","Settings",new BMessage(kSettings_M));
|
||||
fclear = new BButton(BRect(395,47,460,67),"Clear","Clear",new BMessage(kClear_M));
|
||||
fcustom = new BButton(BRect(395,87,460,107),"Add","Add...",new BMessage(kCustom_M));
|
||||
fsettings ->SetEnabled(false);
|
||||
fclear ->SetEnabled(false);
|
||||
|
||||
bounds = finterfaces->Bounds();
|
||||
bounds.InsetBy(20,20);
|
||||
bounds.bottom += 5;
|
||||
bounds.right -= 70;
|
||||
finterfaces_list = new NetListView(bounds,"Interfaces_List");
|
||||
BScrollView *interfaces_scroller = new BScrollView("Interfaces_Scroller",finterfaces_list);
|
||||
|
||||
fservices = new BTab();
|
||||
fftp_server = new BCheckBox(BRect(10,20,120,40),"FTP_Server","FTP Server",new BMessage(kSOMETHING_HAS_CHANGED_M));
|
||||
ftelnet_server = new BCheckBox(BRect(10,50,120,70),"Telnet_Server","Telnet Server",new BMessage(kSOMETHING_HAS_CHANGED_M));
|
||||
fapple_talk = new BCheckBox(BRect(10,110,120,130),"Apple_Talk","Apple Talk",new BMessage(kSOMETHING_HAS_CHANGED_M));
|
||||
fip_forwarding = new BCheckBox(BRect(10,140,120,160),"IP_Forwarding","IP Forwarding",new BMessage(kSOMETHING_HAS_CHANGED_M));
|
||||
flogin_info = new BButton(BRect(10,80,120,100),"Login_Info","Login Info...",new BMessage(kLogin_Info_M));
|
||||
|
||||
fconfigurations = new BBox(BRect(200,10,460,210),"Configurations",B_FOLLOW_LEFT | B_FOLLOW_TOP,B_WILL_DRAW | B_FRAME_EVENTS);
|
||||
|
||||
bounds = fconfigurations->Bounds();
|
||||
bounds.InsetBy(20,20);
|
||||
bounds.right -= 80;
|
||||
fconfigurations_list = new NetListView(bounds,"Configurations_List");
|
||||
BScrollView *configurations_scroller = new BScrollView("Configurations_Scroller",fconfigurations_list);
|
||||
|
||||
fbackup = new BButton(BRect(170,17,250,37),"Backup","Backup",new BMessage(kBackup_M));
|
||||
frestore = new BButton(BRect(170,47,250,67),"Restore","Restore",new BMessage(kRestore_M));
|
||||
fremove = new BButton(BRect(170,87,250,107),"Delete","Delete",new BMessage(kDelete_M));
|
||||
frestore->SetEnabled(false);
|
||||
fremove->SetEnabled(false);
|
||||
|
||||
fdomain->SetAlignment(B_ALIGN_RIGHT,B_ALIGN_LEFT);
|
||||
fhost->SetAlignment(B_ALIGN_RIGHT,B_ALIGN_LEFT);
|
||||
fprimary_dns->SetAlignment(B_ALIGN_RIGHT,B_ALIGN_LEFT);
|
||||
fsecondary_dns->SetAlignment(B_ALIGN_RIGHT,B_ALIGN_LEFT);
|
||||
|
||||
fnames ->SetLabel("Names");
|
||||
finterfaces ->SetLabel("Network Interfaces");
|
||||
fconfigurations ->SetLabel("Configurations");
|
||||
fidentity_view ->SetViewColor(B_GREY);
|
||||
fservices_view ->SetViewColor(B_GREY);
|
||||
ftabview ->SetViewColor(B_GREY);
|
||||
fview ->SetViewColor(B_GREY);
|
||||
|
||||
//Casts an AddEverything
|
||||
ftabview ->AddTab(fidentity_view,fidentity);
|
||||
ftabview ->AddTab(fservices_view,fservices);
|
||||
|
||||
fnames ->AddChild(fdomain);
|
||||
fnames ->AddChild(fhost);
|
||||
fnames ->AddChild(fprimary_dns);
|
||||
fnames ->AddChild(fsecondary_dns);
|
||||
finterfaces ->AddChild(fsettings);
|
||||
finterfaces ->AddChild(fclear);
|
||||
finterfaces ->AddChild(fcustom);
|
||||
finterfaces ->AddChild(interfaces_scroller);
|
||||
fidentity_view ->AddChild(fnames);
|
||||
fidentity_view ->AddChild(finterfaces);
|
||||
fservices_view ->AddChild(fftp_server);
|
||||
fservices_view ->AddChild(ftelnet_server);
|
||||
fservices_view ->AddChild(flogin_info);
|
||||
fservices_view ->AddChild(fapple_talk);
|
||||
fservices_view ->AddChild(fip_forwarding);
|
||||
fservices_view ->AddChild(fconfigurations);
|
||||
fconfigurations ->AddChild(configurations_scroller);
|
||||
fconfigurations ->AddChild(fbackup);
|
||||
fconfigurations ->AddChild(frestore);
|
||||
fconfigurations ->AddChild(fremove);
|
||||
fview ->AddChild(ftabview);
|
||||
fview ->AddChild(frestart);
|
||||
fview ->AddChild(frevert);
|
||||
fview ->AddChild(fsave);
|
||||
AddChild(fview);
|
||||
}
|
||||
|
||||
void NetworkWindow::MessageReceived(BMessage *message)
|
||||
{
|
||||
switch (message->what){
|
||||
case kRestart_Networking_M:{
|
||||
|
||||
RestartWindow *restartWindow = new RestartWindow();
|
||||
restartWindow->Show();
|
||||
|
||||
BMessenger messenger("application/x-vnd.Be-NETS");
|
||||
if (messenger.IsValid() == true)
|
||||
messenger.SendMessage(B_QUIT_REQUESTED);
|
||||
|
||||
const char **arg_v;
|
||||
int32 argc;
|
||||
thread_id thread;
|
||||
status_t return_value;
|
||||
|
||||
argc = 1;
|
||||
arg_v = (const char **)malloc(sizeof(char *) * (argc + 1));
|
||||
|
||||
arg_v[0] = strdup("/boot/beos/system/servers/net_server");
|
||||
arg_v[1] = NULL;
|
||||
|
||||
thread = load_image(argc,arg_v,(const char **)environ);
|
||||
|
||||
while (--argc >= 0)
|
||||
free((void *)arg_v[argc]);
|
||||
free (arg_v);
|
||||
|
||||
return_value = resume_thread(thread);
|
||||
|
||||
restartWindow->Quit();
|
||||
break;
|
||||
}
|
||||
case kRevert_M:{
|
||||
GetEverything();
|
||||
frevert->SetEnabled(false);
|
||||
fsave->SetEnabled(false);
|
||||
break;
|
||||
}
|
||||
case kSave_M:{
|
||||
BackupWin *bak = new BackupWin();
|
||||
bak->fparent_window = dynamic_cast <NetworkWindow *> (fview->Window());
|
||||
bak->Flatten_bak();
|
||||
bak->Quit();
|
||||
frevert->SetEnabled(false);
|
||||
fsave->SetEnabled(false);
|
||||
break;
|
||||
}
|
||||
case kSettings_M:{
|
||||
InterfaceWin *win = new InterfaceWin();
|
||||
|
||||
win->fparent_window = dynamic_cast <NetworkWindow *> (fview->Window());
|
||||
|
||||
NetListItem *selection = dynamic_cast <NetListItem *> (finterfaces_list->ItemAt(finterfaces_list->CurrentSelection()));
|
||||
|
||||
if (selection->fENABLED == 1)
|
||||
win->finter_enabled->SetValue(1);
|
||||
if (selection->fDHCP == 1)
|
||||
win->finter_dhcp->SetValue(1);
|
||||
else
|
||||
win->finter_manual->SetValue(1);
|
||||
|
||||
win->finter_name->SetText((selection->fPRETTYNAME).String());
|
||||
win->finter_ip->SetText((selection->fIPADDRESS).String());
|
||||
win->finter_mask->SetText((selection->fNETMASK).String());
|
||||
|
||||
win->fhas_something_changed = false;
|
||||
|
||||
win->finter_ip->SetTarget(win);
|
||||
win->finter_mask->SetTarget(win);
|
||||
win->finter_gateway->SetTarget(win);
|
||||
|
||||
win->Show();
|
||||
break;
|
||||
}
|
||||
case kClear_M:{
|
||||
break;
|
||||
}
|
||||
case kCustom_M:{
|
||||
break;
|
||||
}
|
||||
case kLogin_Info_M:{
|
||||
LoginInfo *login_info_pop = new LoginInfo();
|
||||
login_info_pop->fparent_window = dynamic_cast <NetworkWindow *> (fview->Window());
|
||||
login_info_pop->flogin_info_name->SetText(fusername.String());
|
||||
login_info_pop->flogin_info_name->MakeFocus();
|
||||
login_info_pop->Show();
|
||||
break;
|
||||
}
|
||||
case kBackup_M:{
|
||||
BackupWin *backup_pop = new BackupWin();
|
||||
backup_pop->fparent_window = dynamic_cast <NetworkWindow *> (fview->Window());
|
||||
backup_pop->fbak_name->MakeFocus();
|
||||
backup_pop->Show();
|
||||
break;
|
||||
}
|
||||
case kRestore_M:{
|
||||
BStringItem *string_item = dynamic_cast <BStringItem *> (fconfigurations_list->ItemAt(fconfigurations_list->CurrentSelection()));
|
||||
GetEverything(string_item->Text());
|
||||
PostMessage(kSOMETHING_HAS_CHANGED_M);
|
||||
break;
|
||||
}
|
||||
case kDelete_M:{
|
||||
Remove_Config_File();
|
||||
Get_Configs_List();
|
||||
fconfigurations_list->SelectionChanged();
|
||||
break;
|
||||
}
|
||||
case kSOMETHING_HAS_CHANGED_M:{
|
||||
frevert->SetEnabled(true);
|
||||
fsave->SetEnabled(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool NetworkWindow::QuitRequested()
|
||||
{
|
||||
if (fsave->IsEnabled() == true){
|
||||
BAlert *alert = new BAlert("Save Info Alert","Save changes before quitting ?","Don't Save","Cancel","Save",B_WIDTH_FROM_WIDEST,B_INFO_ALERT);
|
||||
int32 result = alert->Go();
|
||||
switch (result){
|
||||
case 0:{
|
||||
be_app->PostMessage(B_QUIT_REQUESTED);
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
case 1:{
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case 2:{
|
||||
BackupWin *sav = new BackupWin();
|
||||
sav->fparent_window = dynamic_cast <NetworkWindow *> (fview->Window());
|
||||
sav->Flatten_bak();
|
||||
sav->Quit();
|
||||
be_app->PostMessage(B_QUIT_REQUESTED);
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
be_app->PostMessage(B_QUIT_REQUESTED);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
LoginInfo::LoginInfo() : BWindow(BRect(410,200,710,335),"Login Info",B_MODAL_WINDOW,B_NOT_ANCHORED_ON_ACTIVATE | B_NOT_RESIZABLE,B_CURRENT_WORKSPACE)
|
||||
{
|
||||
flogin_info_view = new BView(Bounds(),"Login_Info_View",B_FOLLOW_ALL_SIDES,B_WILL_DRAW);
|
||||
|
||||
flogin_info_name = new BTextControl(BRect(10,10,290,30),"User_Name","User Name",NULL,new BMessage());
|
||||
flogin_info_password = new BTextControl(BRect(10,40,290,60),"Password","Password",NULL,new BMessage());
|
||||
flogin_info_confirm = new BTextControl(BRect(10,70,290,90),"Confirm Password","Confirm Password",NULL,new BMessage());
|
||||
flogin_info_cancel = new BButton(BRect(100,100,190,120),"Cancel","Cancel",new BMessage(kLogin_Info_Cancel_M));
|
||||
flogin_info_done = new BButton(BRect(200,100,290,120),"Done","Done",new BMessage(kLogin_Info_Done_M));
|
||||
|
||||
flogin_info_done->MakeDefault(true);
|
||||
flogin_info_view->SetViewColor(B_GREY);
|
||||
flogin_info_view->AddChild(flogin_info_name);
|
||||
flogin_info_view->AddChild(flogin_info_password);
|
||||
flogin_info_view->AddChild(flogin_info_confirm);
|
||||
flogin_info_view->AddChild(flogin_info_cancel);
|
||||
flogin_info_view->AddChild(flogin_info_done);
|
||||
|
||||
AddChild(flogin_info_view);
|
||||
}
|
||||
|
||||
void LoginInfo::MessageReceived(BMessage *message)
|
||||
{
|
||||
switch (message->what)
|
||||
{
|
||||
case kLogin_Info_Cancel_M:
|
||||
{
|
||||
Quit();
|
||||
break;
|
||||
}
|
||||
case kLogin_Info_Done_M:
|
||||
{
|
||||
const char *login_info_name_S = flogin_info_name ->Text();
|
||||
const char *login_info_password_S = flogin_info_password ->Text();
|
||||
const char *login_info_confirm_S = flogin_info_confirm ->Text();
|
||||
|
||||
if (strlen(login_info_name_S) > 0
|
||||
&& strlen(login_info_password_S) > 0
|
||||
&& strlen(login_info_confirm_S) > 0 ){
|
||||
if (strcmp(login_info_password_S,login_info_confirm_S) == 0){
|
||||
fparent_window->flogin_info_S[0] = login_info_name_S;
|
||||
fparent_window->flogin_info_S[1] = login_info_password_S;
|
||||
fparent_window->PostMessage(fparent_window->kSOMETHING_HAS_CHANGED_M);
|
||||
Quit();
|
||||
}
|
||||
else{
|
||||
BAlert *alert = new BAlert("Login Info Alert","Youd didn't enter twice the same password","Oups...",NULL,NULL,B_WIDTH_FROM_WIDEST,B_INFO_ALERT);
|
||||
alert->Go();
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
BAlert *alert = new BAlert("Login Info Alert","You didn't fill all the fields","Oups...",NULL,NULL,B_WIDTH_FROM_WIDEST,B_INFO_ALERT);
|
||||
alert->Go();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BackupWin::BackupWin() : BWindow(BRect(410,200,710,285),"Backup Win",B_MODAL_WINDOW,B_NOT_ANCHORED_ON_ACTIVATE | B_NOT_RESIZABLE,B_CURRENT_WORKSPACE)
|
||||
{
|
||||
fbakview = new BView(Bounds(),"Backup",B_FOLLOW_ALL_SIDES,B_WILL_DRAW);
|
||||
fbak_name = new BTextControl(BRect(10,20,290,40),"Backup As","Backup As:",NULL,new BMessage());
|
||||
fbak_cancel = new BButton(BRect(100,50,190,70),"Cancel","Cancel",new BMessage(kCancel_bak_M));
|
||||
fbak_done = new BButton(BRect(200,50,290,70),"Done","Done",new BMessage(kFlatten_bak_M));
|
||||
|
||||
fbakview->SetViewColor(B_GREY);
|
||||
fbak_done->MakeDefault(true);
|
||||
|
||||
fbakview->AddChild(fbak_name);
|
||||
fbakview->AddChild(fbak_cancel);
|
||||
fbakview->AddChild(fbak_done);
|
||||
|
||||
AddChild(fbakview);
|
||||
}
|
||||
|
||||
void BackupWin::MessageReceived(BMessage *message)
|
||||
{
|
||||
switch (message->what){
|
||||
case kCancel_bak_M:{
|
||||
Quit();
|
||||
break;
|
||||
}
|
||||
case kFlatten_bak_M:{
|
||||
const char *bak_name_S = fbak_name->Text();
|
||||
|
||||
if (strlen(bak_name_S) > 0){
|
||||
Flatten_bak(bak_name_S); //Writes the new config file
|
||||
fparent_window->Lock();
|
||||
fparent_window->Get_Configs_List(); //Update the list
|
||||
fparent_window->fconfigurations_list->SelectionChanged(); //Update the buttons
|
||||
fparent_window->Unlock();
|
||||
Quit();
|
||||
}
|
||||
else{
|
||||
BAlert *alert = new BAlert("Backup Info Alert","You must sprcify a name","Oups...",NULL,NULL,B_WIDTH_FROM_WIDEST,B_INFO_ALERT);
|
||||
alert->Go();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NetListView::NetListView(BRect frame,const char *name) : BListView(frame, name)
|
||||
{} //The NetListView only exists to override the SelectionChanged() function below
|
||||
|
||||
//Buttons are enabled or not depending on the selection in the list
|
||||
//so each time you click in the list, this method is called to update the buttons
|
||||
void NetListView::SelectionChanged(void)
|
||||
{
|
||||
int32 index = CurrentSelection();
|
||||
|
||||
BView *parent = Parent();
|
||||
|
||||
if (index >= 0){
|
||||
if (strcmp(parent->Name(),"Interfaces_Scroller") == 0) //There are 2 lists that are instances of this class,
|
||||
{ //so we have to see in which list you are clicking
|
||||
BButton *settings = dynamic_cast <BButton *> ((parent->Parent())->FindView("Settings"));
|
||||
BButton *clear = dynamic_cast <BButton *> ((parent->Parent())->FindView("Clear"));
|
||||
|
||||
settings ->SetEnabled(true);
|
||||
clear ->SetEnabled(true);
|
||||
}
|
||||
else if (strcmp(parent->Name(),"Configurations_Scroller") == 0){
|
||||
BButton *restore = dynamic_cast <BButton *> ((parent->Parent())->FindView("Restore"));
|
||||
BButton *remove = dynamic_cast <BButton *> ((parent->Parent())->FindView("Delete"));
|
||||
|
||||
restore ->SetEnabled(true);
|
||||
remove ->SetEnabled(true);
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (strcmp(parent->Name(),"Interfaces_Scroller") == 0) //There are 2 lists that are instances of this class,
|
||||
{ //so we have to see in which list you are clicking
|
||||
BButton *settings = dynamic_cast <BButton *> ((parent->Parent())->FindView("Settings"));
|
||||
BButton *clear = dynamic_cast <BButton *> ((parent->Parent())->FindView("Clear"));
|
||||
|
||||
settings ->SetEnabled(false);
|
||||
clear ->SetEnabled(false);
|
||||
}
|
||||
else if (strcmp(parent->Name(),"Configurations_Scroller") == 0){
|
||||
BButton *restore = dynamic_cast <BButton *> ((parent->Parent())->FindView("Restore"));
|
||||
BButton *remove = dynamic_cast <BButton *> ((parent->Parent())->FindView("Delete"));
|
||||
|
||||
restore ->SetEnabled(false);
|
||||
remove ->SetEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
RestartWindow::RestartWindow() : BWindow(BRect(400,300,650,350),"Restart Networking",B_MODAL_WINDOW,B_NOT_ANCHORED_ON_ACTIVATE | B_NOT_RESIZABLE,B_CURRENT_WORKSPACE)
|
||||
{
|
||||
fview = new BView(Bounds(),"Restart_View",B_FOLLOW_ALL_SIDES,B_WILL_DRAW);
|
||||
|
||||
fview->SetViewColor(B_GREY);
|
||||
|
||||
frestarting = new BStringView(BRect(60,5,200,25),"Restarting_Text_1","Restarting Networking");
|
||||
fwhatshappening = new BStringView(BRect(60,30,200,50),"Restarting_Text_2","Please Wait...");
|
||||
|
||||
BFont font(be_bold_font);
|
||||
|
||||
frestarting->SetFont(&font);
|
||||
fwhatshappening->SetFont(&font);
|
||||
|
||||
fview->AddChild(frestarting);
|
||||
fview->AddChild(fwhatshappening);
|
||||
|
||||
AddChild(fview);
|
||||
}
|
||||
|
||||
NetListItem::NetListItem(const char *text) : BStringItem(text)
|
||||
{}
|
||||
|
||||
InterfaceWin::InterfaceWin():BWindow(BRect(410,350,720,600),"Interface Win",B_MODAL_WINDOW,B_NOT_ANCHORED_ON_ACTIVATE | B_NOT_RESIZABLE,B_CURRENT_WORKSPACE)
|
||||
{
|
||||
BRect rect = Bounds();
|
||||
finterview = new BView(rect,"Interface_View",B_FOLLOW_ALL_SIDES,B_WILL_DRAW);
|
||||
finter_name = new BStringView(BRect(10,10,290,20),"Interface_Name",NULL);
|
||||
finter_enabled= new BCheckBox(BRect(10,30,190,40),"Enabled","Interface enabled",new BMessage(kSOMETHING_HAS_CHANGED));
|
||||
finter_dhcp = new BRadioButton(BRect(10,50,290,60),"DHCP","Obtain settings automatically (DHCP)",new BMessage(kSOMETHING_HAS_CHANGED));
|
||||
finter_manual = new BRadioButton(BRect(10,70,290,80),"Manual","Specify settings",new BMessage(kSOMETHING_HAS_CHANGED));
|
||||
finter_config = new BButton(BRect(10,220,100,230),"Config","Config...",new BMessage());
|
||||
finter_cancel = new BButton(BRect(145,220,215,230),"Cancel","Cancel",new BMessage(kCancel_inter_M));
|
||||
finter_done = new BButton(BRect(225,220,295,230),"Done","Done",new BMessage(kDone_inter_M));
|
||||
rect.InsetBy(5,5);
|
||||
rect.top+=95;
|
||||
rect.bottom-=35;
|
||||
finter_box = new BBox(rect,"IP",B_FOLLOW_LEFT | B_FOLLOW_TOP,B_WILL_DRAW | B_FRAME_EVENTS);
|
||||
finter_ip = new BTextControl(BRect(10,15,290,35),"IP address","IP address:",NULL,new BMessage(kSOMETHING_HAS_CHANGED));
|
||||
finter_mask = new BTextControl(BRect(10,45,290,65),"Subnet mask","Subnet mask:",NULL,new BMessage(kSOMETHING_HAS_CHANGED));
|
||||
finter_gateway = new BTextControl(BRect(10,75,290,95),"Gateway","Gateway:",NULL,new BMessage(kSOMETHING_HAS_CHANGED));
|
||||
|
||||
finterview->SetViewColor(B_GREY);
|
||||
finter_done->MakeDefault(true);
|
||||
|
||||
finter_box->AddChild(finter_ip);
|
||||
finter_box->AddChild(finter_mask);
|
||||
finter_box->AddChild(finter_gateway);
|
||||
|
||||
finterview->AddChild(finter_name);
|
||||
finterview->AddChild(finter_enabled);
|
||||
finterview->AddChild(finter_dhcp);
|
||||
finterview->AddChild(finter_manual);
|
||||
finterview->AddChild(finter_config);
|
||||
finterview->AddChild(finter_cancel);
|
||||
finterview->AddChild(finter_done);
|
||||
finterview->AddChild(finter_box);
|
||||
|
||||
AddChild(finterview);
|
||||
}
|
||||
|
||||
void InterfaceWin::MessageReceived(BMessage *message)
|
||||
{
|
||||
switch(message->what){
|
||||
case kCancel_inter_M:{
|
||||
Quit();
|
||||
break;
|
||||
}
|
||||
case kDone_inter_M:{
|
||||
if (fhas_something_changed == true){
|
||||
fparent_window->PostMessage(fparent_window->kSOMETHING_HAS_CHANGED_M);
|
||||
|
||||
NetListItem *item = dynamic_cast <NetListItem *> (fparent_window->finterfaces_list->ItemAt(fparent_window->finterfaces_list->CurrentSelection()));
|
||||
|
||||
item->fIPADDRESS = finter_ip->Text();
|
||||
item->fNETMASK = finter_mask->Text();
|
||||
|
||||
if (finter_enabled->Value() == 0)
|
||||
item->fENABLED = 0;
|
||||
else
|
||||
item->fENABLED = 1;
|
||||
|
||||
if (finter_dhcp->Value() == 0)
|
||||
item->fDHCP = 0;
|
||||
else
|
||||
item->fDHCP = 1;
|
||||
}
|
||||
Quit();
|
||||
break;
|
||||
}
|
||||
case kSOMETHING_HAS_CHANGED:{
|
||||
fhas_something_changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
201
src/prefs/network/Network.h
Normal file
201
src/prefs/network/Network.h
Normal file
@ -0,0 +1,201 @@
|
||||
#include <Application.h>
|
||||
#include <Box.h>
|
||||
#include <Button.h>
|
||||
#include <CheckBox.h>
|
||||
#include <ListItem.h>
|
||||
#include <ListView.h>
|
||||
#include <RadioButton.h>
|
||||
#include <String.h>
|
||||
#include <StringView.h>
|
||||
#include <TabView.h>
|
||||
#include <TextControl.h>
|
||||
#include <View.h>
|
||||
#include <Window.h>
|
||||
|
||||
#ifndef _NETWORK_H_
|
||||
#define _NETWORK_H_
|
||||
/*General notes:
|
||||
_ Generates two warnings when compiling which you don't have to care about.
|
||||
_ The way the net_server is restarted might not be very good as it takes 0.10s
|
||||
contrarely to Be's original ones that takes few seconds and does many more
|
||||
things that I don't know yet. Will be improved ASAP.(As soon as I know how
|
||||
tings are working...)
|
||||
_ Custom button actually add an interface so I changed his label to "Add"
|
||||
which make it clearer.
|
||||
_ Custom/Add button does nothing because of next line.
|
||||
_ Don't know where to find the "interface types".
|
||||
_ Clear button does nothing as I couldn't find his utility.
|
||||
_ Where to find the App's icon ? Ask Creative Design Team ?
|
||||
_ Is there any "OBOS header" to insert on top of each sheet?
|
||||
*/
|
||||
|
||||
|
||||
class NetListView : public BListView
|
||||
{
|
||||
public:
|
||||
NetListView(BRect frame,const char *name);
|
||||
|
||||
virtual void SelectionChanged(void);
|
||||
};
|
||||
|
||||
|
||||
class NetListItem : public BStringItem
|
||||
{
|
||||
public:
|
||||
NetListItem(const char *text);
|
||||
|
||||
BString fIPADDRESS;
|
||||
BString fNETMASK;
|
||||
BString fPRETTYNAME;
|
||||
int fENABLED;
|
||||
int fDHCP;
|
||||
};
|
||||
|
||||
class NetworkWindow : public BWindow
|
||||
{
|
||||
public:
|
||||
NetworkWindow();
|
||||
//The whole GUI which is hierarchized to see 'what is attached to what'
|
||||
BView *fview;
|
||||
BButton *frestart;
|
||||
BButton *frevert;
|
||||
BButton *fsave;
|
||||
BTabView *ftabview;
|
||||
BTab *fidentity;
|
||||
BView *fidentity_view;
|
||||
BBox *fnames;
|
||||
BTextControl *fdomain;
|
||||
BTextControl *fhost;
|
||||
BTextControl *fprimary_dns;
|
||||
BTextControl *fsecondary_dns;
|
||||
BBox *finterfaces;
|
||||
NetListView *finterfaces_list;
|
||||
BButton *fsettings;
|
||||
BButton *fclear;
|
||||
BButton *fcustom;
|
||||
BTab *fservices;
|
||||
BView *fservices_view;
|
||||
BCheckBox *fftp_server;
|
||||
BCheckBox *ftelnet_server;
|
||||
BCheckBox *fapple_talk;
|
||||
BCheckBox *fip_forwarding;
|
||||
BButton *flogin_info;
|
||||
BBox *fconfigurations;
|
||||
NetListView *fconfigurations_list;
|
||||
BButton *fbackup;
|
||||
BButton *frestore;
|
||||
BButton *fremove;
|
||||
|
||||
//Messages
|
||||
static const int32 kRestart_Networking_M = 'ranm' ;
|
||||
static const int32 kRevert_M = 'revm' ;
|
||||
static const int32 kSave_M = 'savm' ;
|
||||
static const int32 kSettings_M = 'setm' ;
|
||||
static const int32 kClear_M = 'clem' ;
|
||||
static const int32 kCustom_M = 'cusm' ;
|
||||
static const int32 kLogin_Info_M = 'logm' ;
|
||||
static const int32 kBackup_M = 'bakm' ;
|
||||
static const int32 kRestore_M = 'resm' ;
|
||||
static const int32 kDelete_M = 'delm' ;
|
||||
|
||||
static const int32 kSOMETHING_HAS_CHANGED_M = 'shcm' ;
|
||||
|
||||
/*As this window is the 'main' one and that at startup it gathers up the
|
||||
infos with the GetEverything() method, some data are kept here and will be passed
|
||||
to who needs it. */
|
||||
BString fusername;
|
||||
BString flogin_info_S[2];
|
||||
|
||||
|
||||
virtual bool QuitRequested();
|
||||
virtual void MessageReceived(BMessage *message);
|
||||
|
||||
//All these are defined in funcs.cpp
|
||||
void Remove_Config_File();
|
||||
void Get_Configs_List();
|
||||
void GetEverything(const char *bakname = NULL); //Gets all the infos of the interfaces at startup, display and store them
|
||||
}; //or get them from a backup file.
|
||||
|
||||
class BackupWin : public BWindow //The window that appears when you press
|
||||
{ //the 'Backup' button
|
||||
public:
|
||||
BackupWin();
|
||||
BView *fbakview;
|
||||
BTextControl *fbak_name;
|
||||
BButton *fbak_cancel;
|
||||
BButton *fbak_done;
|
||||
|
||||
NetworkWindow *fparent_window;
|
||||
|
||||
void Flatten_bak(const char *bak_name = NULL); //Writes the backup or used
|
||||
//when pressing 'save'
|
||||
virtual void MessageReceived(BMessage *message);
|
||||
|
||||
static const int32 kFlatten_bak_M = 'fbam' ;
|
||||
static const int32 kCancel_bak_M = 'cbam' ;
|
||||
};
|
||||
|
||||
class LoginInfo : public BWindow //The window that appears when you press
|
||||
{ //the 'Login Info...' button
|
||||
public:
|
||||
LoginInfo();
|
||||
BView *flogin_info_view;
|
||||
BTextControl *flogin_info_name;
|
||||
BTextControl *flogin_info_password;
|
||||
BTextControl *flogin_info_confirm;
|
||||
BButton *flogin_info_cancel;
|
||||
BButton *flogin_info_done;
|
||||
|
||||
NetworkWindow *fparent_window;
|
||||
|
||||
virtual void MessageReceived(BMessage *message);
|
||||
|
||||
static const int32 kLogin_Info_Cancel_M = 'licm' ;
|
||||
static const int32 kLogin_Info_Done_M = 'lidn' ;
|
||||
};
|
||||
|
||||
class InterfaceWin : public BWindow //The window that appears when you press
|
||||
{ //the 'Settings...' button.
|
||||
public:
|
||||
InterfaceWin();
|
||||
BView *finterview;
|
||||
BStringView *finter_name;
|
||||
BCheckBox *finter_enabled;
|
||||
BRadioButton *finter_dhcp;
|
||||
BRadioButton *finter_manual;
|
||||
BButton *finter_config;
|
||||
BButton *finter_cancel;
|
||||
BButton *finter_done;
|
||||
BBox *finter_box;
|
||||
BTextControl *finter_ip;
|
||||
BTextControl *finter_mask;
|
||||
BTextControl *finter_gateway;
|
||||
|
||||
NetworkWindow *fparent_window;
|
||||
bool fhas_something_changed;
|
||||
|
||||
virtual void MessageReceived(BMessage *message);
|
||||
|
||||
static const int32 kCancel_inter_M = 'caim' ;
|
||||
static const int32 kDone_inter_M = 'doim' ;
|
||||
static const int32 kSOMETHING_HAS_CHANGED = 'sohc' ;
|
||||
};
|
||||
|
||||
class RestartWindow : public BWindow
|
||||
{
|
||||
public:
|
||||
RestartWindow();
|
||||
BView *fview;
|
||||
BStringView *frestarting;
|
||||
BStringView *fwhatshappening;
|
||||
};
|
||||
|
||||
class Network : public BApplication
|
||||
{
|
||||
public:
|
||||
Network();
|
||||
|
||||
NetworkWindow *fwindow;
|
||||
};
|
||||
|
||||
#endif
|
BIN
src/prefs/network/Network.rsrc
Normal file
BIN
src/prefs/network/Network.rsrc
Normal file
Binary file not shown.
300
src/prefs/network/funcs.cpp
Normal file
300
src/prefs/network/funcs.cpp
Normal file
@ -0,0 +1,300 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <Alert.h>
|
||||
#include <Directory.h>
|
||||
#include <Entry.h>
|
||||
#include <File.h>
|
||||
#include <Path.h>
|
||||
|
||||
#include "Network.h"
|
||||
|
||||
#define B_GREY 216,216,216
|
||||
|
||||
|
||||
void BackupWin::Flatten_bak(const char *bak_name = NULL)
|
||||
{
|
||||
/*To understand what follows, u'd better open the
|
||||
/boot/home/config/settings/network textfile */
|
||||
|
||||
//GLOBAL:
|
||||
BString DNS_DOMAIN = "\n\tDNS_DOMAIN = ";
|
||||
DNS_DOMAIN << fparent_window->fdomain->Text();
|
||||
BString HOSTNAME = "\n\tHOSTNAME = ";
|
||||
HOSTNAME << fparent_window->fhost->Text();
|
||||
BString USERNAME = "\n\tUSERNAME = ";
|
||||
USERNAME << fparent_window->flogin_info_S[0];
|
||||
BString PROTOCOLS = "\n\tPROTOCOLS = ";/*where to get that info ??*/
|
||||
BString PASSWORD = "\n\tPASSWORD = ";
|
||||
PASSWORD << fparent_window->flogin_info_S[1];
|
||||
BString FTP_ENABLED = "\n\tFTP_ENABLED = ";
|
||||
if (fparent_window->fftp_server->Value() == 0)
|
||||
FTP_ENABLED << 0;
|
||||
else FTP_ENABLED << 1;
|
||||
BString IP_FORWARD = "\n\tIP_FORWARD = ";
|
||||
if (fparent_window->fip_forwarding->Value() == 0)
|
||||
IP_FORWARD << 0;
|
||||
else IP_FORWARD << 1;
|
||||
BString DNS_ENABLED = "\n\tDNS_ENABLED = ";/*where to get that info ??*/
|
||||
BString TELNETD_ENABLED = "\n\tTELNETD_ENABLED = ";
|
||||
if (fparent_window->ftelnet_server->Value() == 0)
|
||||
TELNETD_ENABLED << 0;
|
||||
else TELNETD_ENABLED << 1;
|
||||
BString DNS_PRIMARY = "\n\tDNS_PRIMARY = ";
|
||||
DNS_PRIMARY << fparent_window->fprimary_dns->Text();
|
||||
BString DNS_SECONDARY = "\n\tDNS_SECONDARY = ";
|
||||
DNS_SECONDARY << fparent_window->fsecondary_dns->Text();
|
||||
BString ROUTER = "\n\tROUTER = ";/*where to get that info ??*/
|
||||
BString VERSION = "\n\tVERSION = ";/*where to get that info ??*/
|
||||
BString INTERFACES = "\n\tINTERFACES = ";/*Unused but kept for background compatibility*/
|
||||
|
||||
//Now let's see how many interfaces there are
|
||||
int32 numb = fparent_window->finterfaces_list->CountItems();
|
||||
BString fields[numb][8]; //Each interface has 8 fields
|
||||
int i;
|
||||
for (i=0;i<numb;i++){ //Let's fill the fields
|
||||
fields[i][0] = "\n\tDEVICECONFIG = "; /*where to get that info ??*/
|
||||
fields[i][1] = "\n\tDEVICELINK = "; /*where to get that info ??*/
|
||||
fields[i][2] = "\n\tDEVICETYPE = "; /*where to get that info ??*/
|
||||
fields[i][3] = "\n\tIPADDRESS = ";
|
||||
fields[i][4] = "\n\tNETMASK = ";
|
||||
fields[i][5] = "\n\tPRETTYNAME = ";
|
||||
fields[i][6] = "\n\tENABLED = ";
|
||||
fields[i][7] = "\n\tDHCP = ";
|
||||
}
|
||||
|
||||
for (i=0;i<numb;i++){ //Now let's put the data
|
||||
NetListItem *item = dynamic_cast <NetListItem *> (fparent_window->finterfaces_list->ItemAt(i));
|
||||
|
||||
fields[i][3] << item->fIPADDRESS;
|
||||
fields[i][4] << item->fNETMASK;
|
||||
fields[i][5] << item->fPRETTYNAME;
|
||||
fields[i][6] << item->fENABLED;
|
||||
fields[i][7] << item->fDHCP;
|
||||
}
|
||||
|
||||
//Now let's write all these stuffs
|
||||
BString path;
|
||||
path = "/boot/home/config/settings/network";
|
||||
|
||||
if (bak_name != NULL) //This Flatten_bak() function is used
|
||||
path<<"."<<bak_name; //for backuping (so a network.<name> file)
|
||||
else { //and for the "Save" button which uses the
|
||||
BEntry entry(path.String()); //network file as the backup file.
|
||||
entry.Remove();
|
||||
}
|
||||
|
||||
FILE *bak_file = fopen(path.String(),"w");
|
||||
fprintf(bak_file,"GLOBAL:"); //The "GLOBAL" part
|
||||
fprintf(bak_file,DNS_DOMAIN.String());
|
||||
fprintf(bak_file,HOSTNAME.String());
|
||||
fprintf(bak_file,USERNAME.String());
|
||||
fprintf(bak_file,PROTOCOLS.String());
|
||||
fprintf(bak_file,PASSWORD.String());
|
||||
fprintf(bak_file,FTP_ENABLED.String());
|
||||
fprintf(bak_file,IP_FORWARD.String());
|
||||
fprintf(bak_file,DNS_ENABLED.String());
|
||||
fprintf(bak_file,TELNETD_ENABLED.String());
|
||||
fprintf(bak_file,DNS_PRIMARY.String());
|
||||
fprintf(bak_file,DNS_SECONDARY.String());
|
||||
fprintf(bak_file,ROUTER.String());
|
||||
fprintf(bak_file,VERSION.String());
|
||||
fprintf(bak_file,INTERFACES.String());
|
||||
|
||||
for (int i=0;i<numb;i++){ //The interfacexx parts
|
||||
BString interfacex = "\ninterface";
|
||||
interfacex << i << ":";
|
||||
fprintf(bak_file,interfacex.String());
|
||||
for (int j=0;j<8;j++){
|
||||
fprintf(bak_file,fields[i][j].String());
|
||||
}
|
||||
}
|
||||
|
||||
fclose(bak_file);
|
||||
}
|
||||
|
||||
void NetworkWindow::Remove_Config_File()
|
||||
{
|
||||
BAlert *alert = new BAlert("Alert","Really delete networking configuration ?"," Delete "," Cancel ",NULL,B_WIDTH_FROM_WIDEST,B_INFO_ALERT);
|
||||
int32 result = alert->Go();
|
||||
if (result == 0){
|
||||
BStringItem *item = dynamic_cast <BStringItem *> (fconfigurations_list->ItemAt(fconfigurations_list->CurrentSelection()));
|
||||
|
||||
BString path;
|
||||
path = "/boot/home/config/settings/network.";
|
||||
path<< item->Text();
|
||||
|
||||
BEntry entry(path.String());
|
||||
entry.Remove();
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkWindow::Get_Configs_List()
|
||||
{
|
||||
fconfigurations_list->MakeEmpty();
|
||||
|
||||
BDirectory settings("/boot/home/config/settings/");
|
||||
BEntry entry;
|
||||
|
||||
if (settings.InitCheck() == B_OK){
|
||||
while (settings.GetNextEntry(&entry) == B_OK){
|
||||
char buffer[9]; //All the config files start with "network."
|
||||
entry.GetName(buffer); //so we only get the 8 first characters
|
||||
buffer[8]='\0'; //to compare.
|
||||
|
||||
if (strcmp(buffer,"network.") == 0){
|
||||
BString string;
|
||||
char name[B_FILE_NAME_LENGTH];
|
||||
entry.GetName(name);
|
||||
string<<name;
|
||||
string = string.Remove(0,8);
|
||||
|
||||
BStringItem *item = new BStringItem(string.String());
|
||||
fconfigurations_list->AddItem(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkWindow::GetEverything(const char *bakname = NULL)
|
||||
{
|
||||
//The configuration is saved in the /boot/home/config/settings/network
|
||||
//text file so the config is static. Maybe we could switch to dynamic by
|
||||
//directly asking the net_server how things are
|
||||
|
||||
if (bakname == NULL
|
||||
&& BEntry("/boot/home/config/settings/network").Exists() == false){
|
||||
BAlert *alert = new BAlert("Network Alert","Your network config file doesn't exists.\n
|
||||
It should be located at/boot/home/config/settings/network "
|
||||
,"Oups...",NULL,NULL,B_WIDTH_FROM_WIDEST,B_INFO_ALERT);
|
||||
alert->Go();
|
||||
}
|
||||
else {
|
||||
/*This function being used when pressing "Revert" so first we need to
|
||||
empty things before setting the new values*/
|
||||
Lock();
|
||||
finterfaces_list->MakeEmpty();
|
||||
fftp_server ->SetValue(0);
|
||||
ftelnet_server ->SetValue(0);
|
||||
fapple_talk ->SetValue(0);
|
||||
fip_forwarding ->SetValue(0);
|
||||
Unlock();
|
||||
|
||||
BString path_S = "/boot/home/config/settings/network";
|
||||
if (bakname != NULL) path_S<<"."<<bakname;
|
||||
|
||||
size_t s = 0;
|
||||
size_t i = 0;
|
||||
|
||||
FILE *cfg_file = fopen(path_S.String(),"r");
|
||||
|
||||
while (fgetc(cfg_file)!=EOF) s++;
|
||||
char buffer[s+1]; //Build a buffer that has the exact size
|
||||
|
||||
fseek(cfg_file,0,SEEK_SET);
|
||||
|
||||
for (i=0;i<s;i++)
|
||||
buffer[i] = fgetc(cfg_file); //Now let's fill it
|
||||
|
||||
buffer[i+1] = '\0';
|
||||
BString cfg_str = buffer; //We parse the buffer which is a char
|
||||
//and we 'cut' the fields in this BString
|
||||
//with the method CopyInto()
|
||||
fclose(cfg_file);
|
||||
|
||||
int field_begin = 0, field_length;
|
||||
BString GLOBAL[14]; //The GLOBAL: part has 14 fields we'll copy here
|
||||
i = 0;
|
||||
|
||||
for (int j=0;j<14;j++){
|
||||
field_length = 0 ;
|
||||
while (buffer[i] != '=')
|
||||
i++;
|
||||
field_begin = i + 2; //Each field begins 2 characters after a '='
|
||||
|
||||
while (buffer[i] != '\n') //Each field ends just before a '\n'
|
||||
i++;
|
||||
field_length = i-field_begin;
|
||||
|
||||
cfg_str.CopyInto(GLOBAL[j],field_begin,field_length);
|
||||
}
|
||||
|
||||
//Now let's see how many interfaces there are and note
|
||||
//where each interface's description begins in the file
|
||||
int number_of_interfaces = 0;
|
||||
bool first = true;
|
||||
|
||||
for (i=0;i<strlen(buffer);i++){
|
||||
if (buffer[i]==':'){ //We recognize an interface
|
||||
if (first == true) //with the ':' of the "interfacexx :".
|
||||
first = false; //bool first is there to make
|
||||
else { //'jump' the ':' of "GLOBAL :"
|
||||
number_of_interfaces++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int starts[number_of_interfaces];
|
||||
first = true;
|
||||
int j =0;
|
||||
for (i=0;i<strlen(buffer);i++){
|
||||
if (buffer[i]==':'){
|
||||
if (first == true)
|
||||
first = false;
|
||||
else {
|
||||
starts[j] = i;
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
//Now let's get the fields of each interface
|
||||
field_begin = 0, field_length;
|
||||
BString INTERFACES[number_of_interfaces][8]; //Each interface has 8 fields
|
||||
|
||||
for (int k=0;k<number_of_interfaces;k++){
|
||||
i = starts[k];
|
||||
for (int j=0;j<8;j++){
|
||||
field_length = 0 ;
|
||||
while (buffer[i] != '=')
|
||||
i++;
|
||||
field_begin = i + 2; //Each field begins 2 characters after a '='
|
||||
|
||||
while (buffer[i] != '\n') //Each field ends just before a '\n'
|
||||
i++;
|
||||
field_length = i-field_begin;
|
||||
|
||||
cfg_str.CopyInto(INTERFACES[k][j],field_begin,field_length);
|
||||
}
|
||||
}
|
||||
|
||||
//Now let's fill up every field everywhere in the app
|
||||
Lock();
|
||||
|
||||
fdomain ->SetText(GLOBAL[0].String()); //The BTextControls
|
||||
fhost ->SetText(GLOBAL[1].String());
|
||||
fprimary_dns ->SetText(GLOBAL[9].String());
|
||||
fsecondary_dns ->SetText(GLOBAL[10].String());
|
||||
|
||||
if (GLOBAL[5]== "1") fftp_server->SetValue(1); //Now the BCheckBoxes
|
||||
if (GLOBAL[6]== "1") fip_forwarding->SetValue(1);
|
||||
if (GLOBAL[8]== "1") ftelnet_server->SetValue(1);
|
||||
|
||||
for (i=0;i<number_of_interfaces;i++){ //Now the interfaces list
|
||||
BString string = INTERFACES[i][3];
|
||||
string<<"->"<<INTERFACES[i][5]<<"->"<<"State(Not implemented yet)";
|
||||
NetListItem *item = new NetListItem(string.String());
|
||||
|
||||
item->fIPADDRESS = INTERFACES[i][3];
|
||||
item->fNETMASK = INTERFACES[i][4];
|
||||
item->fPRETTYNAME = INTERFACES[i][5];
|
||||
item->fENABLED = atoi(INTERFACES[i][6].String());
|
||||
item->fDHCP = atoi(INTERFACES[i][7].String());
|
||||
|
||||
finterfaces_list->AddItem(item);
|
||||
}
|
||||
|
||||
Unlock();
|
||||
|
||||
//And save some of them
|
||||
fusername = GLOBAL[2];
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
SubDir OBOS_TOP src prefs screensaver ;
|
||||
|
||||
AddResources ScreenSaver : ScreenSaver.rsrc ;
|
||||
|
||||
local sources =
|
||||
OBOSScreenSaverPreferences.cpp
|
||||
ScreenSaver.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user