--- a/netwerk/wifi/nsWifiScannerDBus.cpp
+++ b/netwerk/wifi/nsWifiScannerDBus.cpp
@@ -29,88 +29,150 @@ nsWifiScannerDBus::~nsWifiScannerDBus()
}
nsresult
nsWifiScannerDBus::Scan()
{
if (!mConnection) {
return NS_ERROR_NOT_AVAILABLE;
}
- return SendMessage("org.freedesktop.NetworkManager",
- "/org/freedesktop/NetworkManager",
- "GetDevices");
+ return SendGetDevices();
+}
+
+// http://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html
+// Refer to function dbus_connection_send_with_reply_and_block.
+static const uint32_t DBUS_DEFAULT_TIMEOUT = -1;
+
+nsresult
+nsWifiScannerDBus::SendGetDevices()
+{
+ RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>(
+ dbus_message_new_method_call("org.freedesktop.NetworkManager",
+ "/org/freedesktop/NetworkManager",
+ "org.freedesktop.NetworkManager",
+ "GetDevices"));
+ if (!msg) {
+ return NS_ERROR_FAILURE;
+ }
+
+ DBusError err;
+ dbus_error_init(&err);
+
+ RefPtr<DBusMessage> reply = already_AddRefed<DBusMessage>(
+ dbus_connection_send_with_reply_and_block(mConnection, msg,
+ DBUS_DEFAULT_TIMEOUT, &err));
+ if (dbus_error_is_set(&err)) {
+ dbus_error_free(&err);
+ return NS_ERROR_FAILURE;
+ }
+
+ return IdentifyDevices(reply);
}
nsresult
-nsWifiScannerDBus::SendMessage(const char* aInterface,
- const char* aPath,
- const char* aFuncCall)
+nsWifiScannerDBus::SendGetDeviceType(const char* aPath)
{
RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>(
dbus_message_new_method_call("org.freedesktop.NetworkManager",
- aPath, aInterface, aFuncCall));
+ aPath,
+ "org.freedesktop.DBus.Properties",
+ "Get"));
if (!msg) {
return NS_ERROR_FAILURE;
}
DBusMessageIter argsIter;
dbus_message_iter_init_append(msg, &argsIter);
- if (!strcmp(aFuncCall, "Get")) {
- const char* paramInterface = "org.freedesktop.NetworkManager.Device";
- if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING,
- ¶mInterface)) {
- return NS_ERROR_FAILURE;
- }
+ const char* paramInterface = "org.freedesktop.NetworkManager.Device";
+ if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING,
+ ¶mInterface)) {
+ return NS_ERROR_FAILURE;
+ }
+
+ const char* paramDeviceType = "DeviceType";
+ if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING,
+ ¶mDeviceType)) {
+ return NS_ERROR_FAILURE;
+ }
+
+ DBusError err;
+ dbus_error_init(&err);
- const char* paramDeviceType = "DeviceType";
- if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING,
- ¶mDeviceType)) {
- return NS_ERROR_FAILURE;
- }
- } else if (!strcmp(aFuncCall, "GetAll")) {
- const char* param = "";
- if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ¶m)) {
- return NS_ERROR_FAILURE;
- }
+ RefPtr<DBusMessage> reply = already_AddRefed<DBusMessage>(
+ dbus_connection_send_with_reply_and_block(mConnection, msg,
+ DBUS_DEFAULT_TIMEOUT, &err));
+ if (dbus_error_is_set(&err)) {
+ dbus_error_free(&err);
+ return NS_ERROR_FAILURE;
+ }
+
+ return IdentifyDeviceType(reply, aPath);
+}
+
+nsresult
+nsWifiScannerDBus::SendGetAccessPoints(const char* aPath)
+{
+ RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>(
+ dbus_message_new_method_call("org.freedesktop.NetworkManager",
+ aPath,
+ "org.freedesktop.NetworkManager.Device.Wireless",
+ "GetAccessPoints"));
+ if (!msg) {
+ return NS_ERROR_FAILURE;
}
DBusError err;
dbus_error_init(&err);
- // http://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html
- // Refer to function dbus_connection_send_with_reply_and_block.
- const uint32_t DBUS_DEFAULT_TIMEOUT = -1;
RefPtr<DBusMessage> reply = already_AddRefed<DBusMessage>(
dbus_connection_send_with_reply_and_block(mConnection, msg,
DBUS_DEFAULT_TIMEOUT, &err));
if (dbus_error_is_set(&err)) {
dbus_error_free(&err);
-
// In the GetAccessPoints case, if there are no access points, error is set.
// We don't want to error out here.
- if (!strcmp(aFuncCall, "GetAccessPoints")) {
- return NS_OK;
- }
+ return NS_OK;
+ }
+
+ return IdentifyAccessPoints(reply);
+}
+
+nsresult
+nsWifiScannerDBus::SendGetAPProperties(const char* aPath)
+{
+ RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>(
+ dbus_message_new_method_call("org.freedesktop.NetworkManager",
+ aPath,
+ "org.freedesktop.DBus.Properties",
+ "GetAll"));
+ if (!msg) {
return NS_ERROR_FAILURE;
}
- nsresult rv;
- if (!strcmp(aFuncCall, "GetDevices")) {
- rv = IdentifyDevices(reply);
- } else if (!strcmp(aFuncCall, "Get")) {
- rv = IdentifyDeviceType(reply, aPath);
- } else if (!strcmp(aFuncCall, "GetAccessPoints")) {
- rv = IdentifyAccessPoints(reply);
- } else if (!strcmp(aFuncCall, "GetAll")) {
- rv = IdentifyAPProperties(reply);
- } else {
- rv = NS_ERROR_FAILURE;
+ DBusMessageIter argsIter;
+ dbus_message_iter_init_append(msg, &argsIter);
+
+ const char* param = "";
+ if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ¶m)) {
+ return NS_ERROR_FAILURE;
}
- return rv;
+
+ DBusError err;
+ dbus_error_init(&err);
+
+ RefPtr<DBusMessage> reply = already_AddRefed<DBusMessage>(
+ dbus_connection_send_with_reply_and_block(mConnection, msg,
+ DBUS_DEFAULT_TIMEOUT, &err));
+ if (dbus_error_is_set(&err)) {
+ dbus_error_free(&err);
+ return NS_ERROR_FAILURE;
+ }
+
+ return IdentifyAPProperties(reply);
}
nsresult
nsWifiScannerDBus::IdentifyDevices(DBusMessage* aMsg)
{
DBusMessageIter iter;
nsresult rv = GetDBusIterator(aMsg, &iter);
NS_ENSURE_SUCCESS(rv, rv);
@@ -121,17 +183,17 @@ nsWifiScannerDBus::IdentifyDevices(DBusM
return NS_ERROR_FAILURE;
}
dbus_message_iter_get_basic(&iter, &devicePath);
if (!devicePath) {
return NS_ERROR_FAILURE;
}
- rv = SendMessage("org.freedesktop.DBus.Properties", devicePath, "Get");
+ rv = SendGetDeviceType(devicePath);
NS_ENSURE_SUCCESS(rv, rv);
} while (dbus_message_iter_next(&iter));
return NS_OK;
}
nsresult
nsWifiScannerDBus::IdentifyDeviceType(DBusMessage* aMsg, const char* aDevicePath)
@@ -154,18 +216,17 @@ nsWifiScannerDBus::IdentifyDeviceType(DB
uint32_t deviceType;
dbus_message_iter_get_basic(&variantIter, &deviceType);
// http://projects.gnome.org/NetworkManager/developers/api/07/spec-07.html
// Refer to NM_DEVICE_TYPE_WIFI under NM_DEVICE_TYPE.
const uint32_t NM_DEVICE_TYPE_WIFI = 2;
nsresult rv = NS_OK;
if (deviceType == NM_DEVICE_TYPE_WIFI) {
- rv = SendMessage("org.freedesktop.NetworkManager.Device.Wireless",
- aDevicePath, "GetAccessPoints");
+ rv = SendGetAccessPoints(aDevicePath);
}
return rv;
}
nsresult
nsWifiScannerDBus::IdentifyAccessPoints(DBusMessage* aMsg)
{
@@ -178,17 +239,17 @@ nsWifiScannerDBus::IdentifyAccessPoints(
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH) {
return NS_ERROR_FAILURE;
}
dbus_message_iter_get_basic(&iter, &path);
if (!path) {
return NS_ERROR_FAILURE;
}
- rv = SendMessage("org.freedesktop.DBus.Properties", path, "GetAll");
+ rv = SendGetAPProperties(path);
NS_ENSURE_SUCCESS(rv, rv);
} while (dbus_message_iter_next(&iter));
return NS_OK;
}
nsresult
nsWifiScannerDBus::IdentifyAPProperties(DBusMessage* aMsg)
--- a/netwerk/wifi/nsWifiScannerDBus.h
+++ b/netwerk/wifi/nsWifiScannerDBus.h
@@ -20,19 +20,20 @@ class nsWifiScannerDBus final
{
public:
explicit nsWifiScannerDBus(nsCOMArray<nsWifiAccessPoint>* aAccessPoints);
~nsWifiScannerDBus();
nsresult Scan();
private:
- nsresult SendMessage(const char* aInterface,
- const char* aPath,
- const char* aFuncCall);
+ nsresult SendGetDevices();
+ nsresult SendGetDeviceType(const char* aPath);
+ nsresult SendGetAccessPoints(const char* aPath);
+ nsresult SendGetAPProperties(const char* aPath);
nsresult IdentifyDevices(DBusMessage* aMsg);
nsresult IdentifyDeviceType(DBusMessage* aMsg, const char* aDevicePath);
nsresult IdentifyAccessPoints(DBusMessage* aMsg);
nsresult IdentifyAPProperties(DBusMessage* aMsg);
nsresult StoreSsid(DBusMessageIter* aVariant, nsWifiAccessPoint* aAp);
nsresult SetMac(DBusMessageIter* aVariant, nsWifiAccessPoint* aAp);
nsresult GetDBusIterator(DBusMessage* aMsg, DBusMessageIter* aIterArray);