diff --git a/headers/os/add-ons/network_settings/NetworkSettings.h b/headers/os/add-ons/network_settings/NetworkSettings.h index f90ecc5574..0f2d2e8ede 100644 --- a/headers/os/add-ons/network_settings/NetworkSettings.h +++ b/headers/os/add-ons/network_settings/NetworkSettings.h @@ -38,28 +38,33 @@ public: status_t GetNextInterface(uint32& cookie, BMessage& interface); status_t GetInterface(const char* name, - BMessage& interface); + BMessage& interface) const; status_t AddInterface(const BMessage& interface); status_t RemoveInterface(const char* name); BNetworkInterfaceSettings Interface(const char* name); + const BNetworkInterfaceSettings + Interface(const char* name) const; int32 CountNetworks() const; status_t GetNextNetwork(uint32& cookie, BMessage& network) const; status_t GetNetwork(const char* name, - BMessage& network); + BMessage& network) const; status_t AddNetwork(const BMessage& network); status_t RemoveNetwork(const char* name); const BMessage& Services() const; status_t GetNextService(uint32& cookie, BMessage& service); - status_t GetService(const char* name, BMessage& service); + status_t GetService(const char* name, + BMessage& service) const; status_t AddService(const BMessage& service); status_t RemoveService(const char* name); BNetworkServiceSettings Service(const char* name); + const BNetworkServiceSettings + Service(const char* name) const; status_t StartMonitoring(const BMessenger& target); status_t StopMonitoring(const BMessenger& target); @@ -84,10 +89,10 @@ private: status_t _ConvertNetworkToSettings(BMessage& message); status_t _ConvertNetworkFromSettings(BMessage& message); - status_t _GetItem(BMessage& container, + status_t _GetItem(const BMessage& container, const char* itemField, const char* nameField, const char* name, - int32& _index, BMessage& item); + int32& _index, BMessage& item) const; status_t _RemoveItem(BMessage& container, const char* itemField, const char* nameField, const char* name, @@ -262,6 +267,8 @@ public: BNetworkServiceAddressSettings& address); void RemoveAddress(int32 index); + bool IsRunning() const; + status_t GetMessage(BMessage& data) const; private: diff --git a/src/kits/network/libnetapi/NetworkSettings.cpp b/src/kits/network/libnetapi/NetworkSettings.cpp index 86589be06a..85161f4011 100644 --- a/src/kits/network/libnetapi/NetworkSettings.cpp +++ b/src/kits/network/libnetapi/NetworkSettings.cpp @@ -25,6 +25,7 @@ #include #include +#include using namespace BNetworkKit; @@ -318,7 +319,7 @@ BNetworkSettings::GetNextInterface(uint32& cookie, BMessage& interface) status_t -BNetworkSettings::GetInterface(const char* name, BMessage& interface) +BNetworkSettings::GetInterface(const char* name, BMessage& interface) const { int32 index; return _GetItem(fInterfaces, "interface", "device", name, index, interface); @@ -359,6 +360,15 @@ BNetworkSettings::Interface(const char* name) } +const BNetworkInterfaceSettings +BNetworkSettings::Interface(const char* name) const +{ + BMessage interface; + GetInterface(name, interface); + return BNetworkInterfaceSettings(interface); +} + + int32 BNetworkSettings::CountNetworks() const { @@ -383,7 +393,7 @@ BNetworkSettings::GetNextNetwork(uint32& cookie, BMessage& network) const status_t -BNetworkSettings::GetNetwork(const char* name, BMessage& network) +BNetworkSettings::GetNetwork(const char* name, BMessage& network) const { int32 index; return _GetItem(fNetworks, "network", "name", name, index, network); @@ -435,7 +445,7 @@ BNetworkSettings::GetNextService(uint32& cookie, BMessage& service) status_t -BNetworkSettings::GetService(const char* name, BMessage& service) +BNetworkSettings::GetService(const char* name, BMessage& service) const { int32 index; return _GetItem(fServices, "service", "name", name, index, service); @@ -476,6 +486,15 @@ BNetworkSettings::Service(const char* name) } +const BNetworkServiceSettings +BNetworkSettings::Service(const char* name) const +{ + BMessage service; + GetService(name, service); + return BNetworkServiceSettings(service); +} + + status_t BNetworkSettings::StartMonitoring(const BMessenger& target) { @@ -835,8 +854,9 @@ BNetworkSettings::_ConvertNetworkFromSettings(BMessage& message) status_t -BNetworkSettings::_GetItem(BMessage& container, const char* itemField, - const char* nameField, const char* name, int32& _index, BMessage& item) +BNetworkSettings::_GetItem(const BMessage& container, const char* itemField, + const char* nameField, const char* name, int32& _index, + BMessage& item) const { int32 index = 0; while (container.FindMessage(itemField, index, &item) == B_OK) { @@ -1662,6 +1682,25 @@ BNetworkServiceSettings::RemoveAddress(int32 index) } +/*! This is a convenience method that returns the current state of the + service, independent of the current settings. +*/ +bool +BNetworkServiceSettings::IsRunning() const +{ + BMessage request(kMsgIsServiceRunning); + request.AddString("name", fName); + + BMessenger networkServer(kNetServerSignature); + BMessage reply; + status_t status = networkServer.SendMessage(&request, &reply); + if (status == B_OK) + return reply.GetBool("running"); + + return false; +} + + status_t BNetworkServiceSettings::GetMessage(BMessage& data) const {