summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-server.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-03-25 04:37:08 +0000
committerHavoc Pennington <hp@redhat.com>2003-03-25 04:37:08 +0000
commitce4fd314c6be9bfee16a172d5ca34e5097d309fc (patch)
tree744b8524f183a0fbb009d917029c9a129b34da9e /dbus/dbus-server.c
parent44fff656885ac32e319feb98fd0d06680d602977 (diff)
2003-03-24 Havoc Pennington <hp@redhat.com>
* dbus/dbus-sysdeps.c (_dbus_set_fd_nonblocking): move to this file * dbus/dbus-errors.c (dbus_set_error, dbus_set_error_const): allow NULL argument for "message" if the error is a well-known one, fill in a generic message in this case. * dbus/dbus-errors.h (DBusResultCode): Kill DBusResultCode in favor of DBusError * bus/test.c (bus_test_flush_bus): add * bus/policy.c (bus_policy_test): test code stub
Diffstat (limited to 'dbus/dbus-server.c')
-rw-r--r--dbus/dbus-server.c65
1 files changed, 51 insertions, 14 deletions
diff --git a/dbus/dbus-server.c b/dbus/dbus-server.c
index e717096e..6b9f17e8 100644
--- a/dbus/dbus-server.c
+++ b/dbus/dbus-server.c
@@ -246,22 +246,30 @@ _dbus_server_toggle_timeout (DBusServer *server,
* DBusResultCode is a bit limiting here.
*
* @param address the address of this server.
- * @param result location to store rationale for failure.
+ * @param error location to store rationale for failure.
* @returns a new DBusServer, or #NULL on failure.
*
*/
DBusServer*
dbus_server_listen (const char *address,
- DBusResultCode *result)
+ DBusError *error)
{
DBusServer *server;
DBusAddressEntry **entries;
int len, i;
+ const char *address_problem_type;
+ const char *address_problem_field;
+ const char *address_problem_other;
+
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
- if (!dbus_parse_address (address, &entries, &len, result))
+ if (!dbus_parse_address (address, &entries, &len, error))
return NULL;
server = NULL;
+ address_problem_type = NULL;
+ address_problem_field = NULL;
+ address_problem_other = NULL;
for (i = 0; i < len; i++)
{
@@ -272,9 +280,13 @@ dbus_server_listen (const char *address,
const char *path = dbus_address_entry_get_value (entries[i], "path");
if (path == NULL)
- goto bad_address;
+ {
+ address_problem_type = "unix";
+ address_problem_field = "path";
+ goto bad_address;
+ }
- server = _dbus_server_new_for_domain_socket (path, result);
+ server = _dbus_server_new_for_domain_socket (path, error);
if (server)
break;
@@ -288,16 +300,23 @@ dbus_server_listen (const char *address,
dbus_bool_t sresult;
if (port == NULL)
- goto bad_address;
+ {
+ address_problem_type = "tcp";
+ address_problem_field = "port";
+ goto bad_address;
+ }
_dbus_string_init_const (&str, port);
sresult = _dbus_string_parse_int (&str, 0, &lport, NULL);
_dbus_string_free (&str);
if (sresult == FALSE || lport <= 0 || lport > 65535)
- goto bad_address;
+ {
+ address_problem_other = "Port is not an integer between 0 and 65535";
+ goto bad_address;
+ }
- server = _dbus_server_new_for_tcp_socket (host, lport, result);
+ server = _dbus_server_new_for_tcp_socket (host, lport, error);
if (server)
break;
@@ -308,9 +327,13 @@ dbus_server_listen (const char *address,
const char *name = dbus_address_entry_get_value (entries[i], "name");
if (name == NULL)
- goto bad_address;
+ {
+ address_problem_type = "debug";
+ address_problem_field = "name";
+ goto bad_address;
+ }
- server = _dbus_server_debug_new (name, result);
+ server = _dbus_server_debug_new (name, error);
if (server)
break;
@@ -320,16 +343,23 @@ dbus_server_listen (const char *address,
const char *name = dbus_address_entry_get_value (entries[i], "name");
if (name == NULL)
- goto bad_address;
+ {
+ address_problem_type = "debug-pipe";
+ address_problem_field = "name";
+ goto bad_address;
+ }
- server = _dbus_server_debug_pipe_new (name, result);
+ server = _dbus_server_debug_pipe_new (name, error);
if (server)
break;
}
#endif
else
- goto bad_address;
+ {
+ address_problem_other = "Unknown address type (examples of valid types are \"unix\" and \"tcp\")";
+ goto bad_address;
+ }
}
dbus_address_entries_free (entries);
@@ -337,7 +367,14 @@ dbus_server_listen (const char *address,
bad_address:
dbus_address_entries_free (entries);
- dbus_set_result (result, DBUS_RESULT_BAD_ADDRESS);
+ if (address_problem_type != NULL)
+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
+ "Server address of type %s was missing argument %s",
+ address_problem_type, address_problem_field);
+ else
+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
+ "Could not parse server address: %s",
+ address_problem_other);
return NULL;
}