added *basic* ability for services addon to parse xinetd, now we can list active network services in the services view

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40317 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alexander von Gluck IV
2011-01-29 20:36:01 +00:00
parent 3aeae97f65
commit 83dbb57171
2 changed files with 89 additions and 25 deletions
@@ -2,6 +2,8 @@
* Copyright 2004-2011 Haiku Inc. All rights reserved. * Copyright 2004-2011 Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors:
* Alexander von Gluck, [email protected]
*/ */
#include <stdio.h> #include <stdio.h>
@@ -12,14 +14,7 @@
#include <ScrollView.h> #include <ScrollView.h>
#include <String.h> #include <String.h>
#include "NetworkSetupAddOn.h" #include "ServicesAddOn.h"
class ServicesAddOn : public NetworkSetupAddOn {
public:
ServicesAddOn(image_id addon_image);
BView* CreateView(BRect* bounds);
const char* Name() { return "Services"; };
};
NetworkSetupAddOn* NetworkSetupAddOn*
@@ -31,6 +26,7 @@ get_nth_addon(image_id image, int index)
return new ServicesAddOn(image); return new ServicesAddOn(image);
} }
// #pragma mark - // #pragma mark -
ServicesAddOn::ServicesAddOn(image_id image) ServicesAddOn::ServicesAddOn(image_id image)
: :
@@ -48,12 +44,24 @@ ServicesAddOn::CreateView(BRect* bounds)
BRect rlv = r.InsetByCopy(2, 2); BRect rlv = r.InsetByCopy(2, 2);
rlv.right -= B_V_SCROLL_BAR_WIDTH; rlv.right -= B_V_SCROLL_BAR_WIDTH;
BListView* lv = new BListView(rlv, "inetd_services", fServicesListView = new BListView(rlv, "system_services",
B_SINGLE_SELECTION_LIST, B_FOLLOW_ALL_SIDES); B_SINGLE_SELECTION_LIST, B_FOLLOW_ALL_SIDES);
BScrollView* sv = new BScrollView( "inetd_services_scrollview", lv, BScrollView* sv = new BScrollView( "system_services_scrollview",
B_FOLLOW_ALL_SIDES, B_WILL_DRAW | B_FRAME_EVENTS, false, true); fServicesListView, B_FOLLOW_ALL_SIDES,
B_WILL_DRAW | B_FRAME_EVENTS, false, true);
if (ParseInetd() == B_ERROR)
ParseXinetd();
*bounds = r;
return sv;
}
status_t
ServicesAddOn::ParseInetd()
{
FILE *f = fopen("/etc/inetd.conf", "r"); FILE *f = fopen("/etc/inetd.conf", "r");
if (f) { if (f) {
char line[1024], *l; char line[1024], *l;
@@ -81,11 +89,47 @@ ServicesAddOn::CreateView(BRect* bounds)
token = strtok(NULL, " \t"); // protocol token = strtok(NULL, " \t"); // protocol
label << " " << token; label << " " << token;
lv->AddItem(new BStringItem(label.String())); fServicesListView->AddItem(new BStringItem(label.String()));
} }
fclose(f); fclose(f);
return B_OK;
} else
return B_ERROR;
} }
*bounds = r;
return sv; status_t
ServicesAddOn::ParseXinetd()
{
FILE *f = fopen("/boot/common/settings/network/services", "r");
if (f) {
char line[1024], *l;
char *token;
char *loc;
while (fgets(line, sizeof(line), f)) {
l = line;
if (! *l)
continue;
if (line[0] == '#' || line[0] == '\n')
continue;
// Skip commented out lines
loc = strstr(l, "service ");
if (loc) {
BString label;
token = strtok(loc, " ");
token = strtok(NULL, " ");
label << token;
fServicesListView->AddItem(new BStringItem(label.String()));
}
}
fclose(f);
return B_OK;
} else
return B_ERROR;
} }
@@ -0,0 +1,20 @@
/*
* Copyright 2004-2011 Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Alexander von Gluck, [email protected]
*/
#include "NetworkSetupAddOn.h"
class ServicesAddOn : public NetworkSetupAddOn {
protected:
BListView* fServicesListView;
public:
ServicesAddOn(image_id addon_image);
BView* CreateView(BRect* bounds);
const char* Name() { return "Services"; };
status_t ParseInetd();
status_t ParseXinetd();
};