BNetworkSettings: added Get*() by name methods.

This commit is contained in:
Axel Dörfler
2015-03-27 13:21:46 +01:00
parent fd55fb6615
commit d880e2d91f
2 changed files with 64 additions and 15 deletions
@@ -28,18 +28,23 @@ public:
status_t GetNextInterface(uint32& cookie, status_t GetNextInterface(uint32& cookie,
BMessage& interface); BMessage& interface);
status_t GetInterface(const char* name,
BMessage& interface);
status_t AddInterface(const BMessage& interface); status_t AddInterface(const BMessage& interface);
status_t RemoveInterface(const char* name); status_t RemoveInterface(const char* name);
int32 CountNetworks() const; int32 CountNetworks() const;
status_t GetNextNetwork(uint32& cookie, status_t GetNextNetwork(uint32& cookie,
BMessage& network) const; BMessage& network) const;
status_t GetNetwork(const char* name,
BMessage& network);
status_t AddNetwork(const BMessage& network); status_t AddNetwork(const BMessage& network);
status_t RemoveNetwork(const char* name); status_t RemoveNetwork(const char* name);
const BMessage& Services() const;
status_t GetNextService(uint32& cookie, status_t GetNextService(uint32& cookie,
BMessage& service); BMessage& service);
const BMessage& Services() const; status_t GetService(const char* name, BMessage& service);
status_t AddService(const BMessage& service); status_t AddService(const BMessage& service);
status_t RemoveService(const char* name); status_t RemoveService(const char* name);
@@ -65,9 +70,15 @@ private:
status_t _ConvertNetworkToSettings(BMessage& message); status_t _ConvertNetworkToSettings(BMessage& message);
status_t _ConvertNetworkFromSettings(BMessage& message); status_t _ConvertNetworkFromSettings(BMessage& message);
status_t _GetItem(BMessage& container,
const char* itemField,
const char* nameField, const char* name,
int32& _index, BMessage& item);
status_t _RemoveItem(BMessage& container, status_t _RemoveItem(BMessage& container,
const char* itemField,const char* nameField, const char* itemField,
const char* name, const char* store); const char* nameField, const char* name,
const char* store = NULL);
private: private:
BMessenger fListener; BMessenger fListener;
+50 -12
View File
@@ -138,6 +138,14 @@ BNetworkSettings::GetNextInterface(uint32& cookie, BMessage& interface)
} }
status_t
BNetworkSettings::GetInterface(const char* name, BMessage& interface)
{
int32 index;
return _GetItem(fInterfaces, "interface", "device", name, index, interface);
}
status_t status_t
BNetworkSettings::AddInterface(const BMessage& interface) BNetworkSettings::AddInterface(const BMessage& interface)
{ {
@@ -145,7 +153,7 @@ BNetworkSettings::AddInterface(const BMessage& interface)
if (interface.FindString("device", &name) != B_OK) if (interface.FindString("device", &name) != B_OK)
return B_BAD_VALUE; return B_BAD_VALUE;
_RemoveItem(fInterfaces, "interface", "device", name, NULL); _RemoveItem(fInterfaces, "interface", "device", name);
status_t result = fInterfaces.AddMessage("interface", &interface); status_t result = fInterfaces.AddMessage("interface", &interface);
if (result != B_OK) if (result != B_OK)
@@ -186,6 +194,14 @@ BNetworkSettings::GetNextNetwork(uint32& cookie, BMessage& network) const
} }
status_t
BNetworkSettings::GetNetwork(const char* name, BMessage& network)
{
int32 index;
return _GetItem(fNetworks, "network", "name", name, index, network);
}
status_t status_t
BNetworkSettings::AddNetwork(const BMessage& network) BNetworkSettings::AddNetwork(const BMessage& network)
{ {
@@ -193,7 +209,7 @@ BNetworkSettings::AddNetwork(const BMessage& network)
if (network.FindString("name", &name) != B_OK) if (network.FindString("name", &name) != B_OK)
return B_BAD_VALUE; return B_BAD_VALUE;
_RemoveItem(fNetworks, "network", "name", name, NULL); _RemoveItem(fNetworks, "network", "name", name);
status_t result = fNetworks.AddMessage("network", &network); status_t result = fNetworks.AddMessage("network", &network);
if (result != B_OK) if (result != B_OK)
@@ -211,6 +227,13 @@ BNetworkSettings::RemoveNetwork(const char* name)
} }
const BMessage&
BNetworkSettings::Services() const
{
return fServices;
}
status_t status_t
BNetworkSettings::GetNextService(uint32& cookie, BMessage& service) BNetworkSettings::GetNextService(uint32& cookie, BMessage& service)
{ {
@@ -223,10 +246,11 @@ BNetworkSettings::GetNextService(uint32& cookie, BMessage& service)
} }
const BMessage& status_t
BNetworkSettings::Services() const BNetworkSettings::GetService(const char* name, BMessage& service)
{ {
return fServices; int32 index;
return _GetItem(fServices, "service", "name", name, index, service);
} }
@@ -237,7 +261,7 @@ BNetworkSettings::AddService(const BMessage& service)
if (service.FindString("name", &name) != B_OK) if (service.FindString("name", &name) != B_OK)
return B_BAD_VALUE; return B_BAD_VALUE;
_RemoveItem(fServices, "service", "name", name, NULL); _RemoveItem(fServices, "service", "name", name);
status_t result = fServices.AddMessage("service", &service); status_t result = fServices.AddMessage("service", &service);
if (result != B_OK) if (result != B_OK)
@@ -614,18 +638,15 @@ BNetworkSettings::_ConvertNetworkFromSettings(BMessage& message)
status_t status_t
BNetworkSettings::_RemoveItem(BMessage& container, const char* itemField, BNetworkSettings::_GetItem(BMessage& container, const char* itemField,
const char* nameField, const char* name, const char* store) const char* nameField, const char* name, int32& _index, BMessage& item)
{ {
int32 index = 0; int32 index = 0;
BMessage item;
while (container.FindMessage(itemField, index, &item) == B_OK) { while (container.FindMessage(itemField, index, &item) == B_OK) {
const char* itemName = NULL; const char* itemName = NULL;
if (item.FindString(nameField, &itemName) == B_OK if (item.FindString(nameField, &itemName) == B_OK
&& strcmp(itemName, name) == 0) { && strcmp(itemName, name) == 0) {
container.RemoveData(itemField, index); _index = index;
if (store != NULL)
return _Save(store);
return B_OK; return B_OK;
} }
@@ -634,3 +655,20 @@ BNetworkSettings::_RemoveItem(BMessage& container, const char* itemField,
return B_ENTRY_NOT_FOUND; return B_ENTRY_NOT_FOUND;
} }
status_t
BNetworkSettings::_RemoveItem(BMessage& container, const char* itemField,
const char* nameField, const char* name, const char* store)
{
BMessage item;
int32 index;
if (_GetItem(container, itemField, nameField, name, index, item) == B_OK) {
container.RemoveData(itemField, index);
if (store != NULL)
return _Save(store);
return B_OK;
}
return B_ENTRY_NOT_FOUND;
}