diff options
author | Havoc Pennington <hp@redhat.com> | 2003-03-25 04:37:08 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2003-03-25 04:37:08 +0000 |
commit | ce4fd314c6be9bfee16a172d5ca34e5097d309fc (patch) | |
tree | 744b8524f183a0fbb009d917029c9a129b34da9e /dbus/dbus-server.c | |
parent | 44fff656885ac32e319feb98fd0d06680d602977 (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.c | 65 |
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; } |