25 #include "dbus-server.h"
26 #include "dbus-server-unix.h"
27 #include "dbus-server-socket.h"
28 #include "dbus-string.h"
29 #ifdef DBUS_BUILD_TESTS
30 #include "dbus-server-debug-pipe.h"
32 #include "dbus-address.h"
33 #include "dbus-protocol.h"
60 copy_address_with_guid_appended (
const DBusString *address,
117 server->
address = copy_address_with_guid_appended (address,
136 _dbus_verbose (
"Initialized server on address %s\n", server->
address);
175 #ifndef DBUS_DISABLE_CHECKS
220 HAVE_LOCK_CHECK (server);
232 SERVER_UNLOCK (server);
235 retval = (* add_function) (watches, watch);
236 else if (remove_function)
239 (* remove_function) (watches, watch);
244 (* toggle_function) (watches, watch, enabled);
247 SERVER_LOCK (server);
268 HAVE_LOCK_CHECK (server);
269 return protected_change_watch (server, watch,
284 HAVE_LOCK_CHECK (server);
285 protected_change_watch (server, watch,
307 HAVE_LOCK_CHECK (server);
308 protected_change_watch (server, watch,
337 HAVE_LOCK_CHECK (server);
348 SERVER_UNLOCK (server);
351 retval = (* add_function) (timeouts, timeout);
352 else if (remove_function)
355 (* remove_function) (timeouts, timeout);
360 (* toggle_function) (timeouts, timeout, enabled);
363 SERVER_LOCK (server);
386 return protected_change_timeout (server, timeout,
401 protected_change_timeout (server, timeout,
421 protected_change_timeout (server, timeout,
439 HAVE_LOCK_CHECK (server);
441 #ifdef DBUS_HAVE_ATOMIC_INT
465 HAVE_LOCK_CHECK (server);
467 #ifdef DBUS_HAVE_ATOMIC_INT
480 SERVER_UNLOCK (server);
509 static const struct {
516 #ifdef DBUS_BUILD_TESTS
517 , { _dbus_server_listen_debug_pipe }
551 _dbus_return_val_if_fail (address !=
NULL,
NULL);
552 _dbus_return_val_if_error_is_set (error,
NULL);
558 handled_once =
FALSE;
560 for (i = 0; i < len; i++)
566 DBusServerListenResult result;
569 result = (* listen_funcs[j].func) (entries[i],
573 if (result == DBUS_SERVER_LISTEN_OK)
576 _DBUS_ASSERT_ERROR_IS_CLEAR (&tmp_error);
580 else if (result == DBUS_SERVER_LISTEN_ADDRESS_ALREADY_USED)
585 "Address '%s' already used",
590 else if (result == DBUS_SERVER_LISTEN_BAD_ADDRESS)
593 _DBUS_ASSERT_ERROR_IS_SET (&tmp_error);
598 else if (result == DBUS_SERVER_LISTEN_NOT_HANDLED)
601 _DBUS_ASSERT_ERROR_IS_CLEAR (&tmp_error);
605 else if (result == DBUS_SERVER_LISTEN_DID_NOT_CONNECT)
608 _DBUS_ASSERT_ERROR_IS_SET (&tmp_error);
621 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
628 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
632 "Unknown address type '%s'",
637 "Empty address '%s'",
661 _DBUS_ASSERT_ERROR_IS_CLEAR (&first_connect_error);
662 _DBUS_ASSERT_ERROR_IS_SET (error);
668 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
682 _dbus_return_val_if_fail (server !=
NULL,
NULL);
685 #ifdef DBUS_HAVE_ATOMIC_INT
688 SERVER_LOCK (server);
692 SERVER_UNLOCK (server);
713 _dbus_return_if_fail (server !=
NULL);
716 #ifdef DBUS_HAVE_ATOMIC_INT
719 SERVER_LOCK (server);
726 SERVER_UNLOCK (server);
751 _dbus_return_if_fail (server !=
NULL);
754 SERVER_LOCK (server);
767 SERVER_UNLOCK (server);
781 _dbus_return_val_if_fail (server !=
NULL,
FALSE);
783 SERVER_LOCK (server);
785 SERVER_UNLOCK (server);
802 _dbus_return_val_if_fail (server !=
NULL,
NULL);
804 SERVER_LOCK (server);
806 SERVER_UNLOCK (server);
838 _dbus_return_val_if_fail (server !=
NULL,
NULL);
840 SERVER_LOCK (server);
843 SERVER_UNLOCK (server);
877 _dbus_return_if_fail (server !=
NULL);
879 SERVER_LOCK (server);
886 SERVER_UNLOCK (server);
888 if (old_free_function !=
NULL)
889 (* old_free_function) (old_data);
919 _dbus_return_val_if_fail (server !=
NULL,
FALSE);
921 SERVER_LOCK (server);
926 SERVER_UNLOCK (server);
933 SERVER_LOCK (server);
941 SERVER_UNLOCK (server);
972 _dbus_return_val_if_fail (server !=
NULL,
FALSE);
974 SERVER_LOCK (server);
979 SERVER_UNLOCK (server);
986 SERVER_LOCK (server);
994 SERVER_UNLOCK (server);
1014 const char **mechanisms)
1018 _dbus_return_val_if_fail (server !=
NULL,
FALSE);
1020 SERVER_LOCK (server);
1022 if (mechanisms !=
NULL)
1034 SERVER_UNLOCK (server);
1079 _dbus_return_if_fail (*slot_p >= 0);
1107 _dbus_return_val_if_fail (server !=
NULL,
FALSE);
1109 SERVER_LOCK (server);
1113 slot, data, free_data_func,
1114 &old_free_func, &old_data);
1117 SERVER_UNLOCK (server);
1123 (* old_free_func) (old_data);
1143 _dbus_return_val_if_fail (server !=
NULL,
NULL);
1145 SERVER_LOCK (server);
1151 SERVER_UNLOCK (server);
1158 #ifdef DBUS_BUILD_TESTS
1159 #include "dbus-test.h"
1163 _dbus_server_test (
void)
1165 const char *valid_addresses[] = {
1167 "tcp:host=localhost,port=1234",
1168 "tcp:host=localhost,port=1234;tcp:port=5678",
1170 "unix:path=./boogie",
1171 "tcp:port=1234;unix:path=./boogie",
1197 if (strstr (address,
id) ==
NULL)
1199 _dbus_warn (
"server id '%s' is not in the server address '%s'\n",