X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-daemon%2Fdbus-protocol.c;h=eb8a6629a4c2541ee0ae34044b808ce8a041af54;hb=7a5b2f69af7d36d6cd4153142f125fa011784e03;hp=d0cb4addaf5a8b6e506f52735df1e77c115c35cf;hpb=a97605e07ad7f44f2f65e15be64880e61a39ab43;p=catta diff --git a/avahi-daemon/dbus-protocol.c b/avahi-daemon/dbus-protocol.c index d0cb4ad..eb8a662 100644 --- a/avahi-daemon/dbus-protocol.c +++ b/avahi-daemon/dbus-protocol.c @@ -1,5 +1,3 @@ -/* $Id$ */ - /*** This file is part of avahi. @@ -65,8 +63,6 @@ Server *server = NULL; -static int disable_user_service_publishing = 0; - static int dbus_connect(void); static void dbus_disconnect(void); @@ -114,8 +110,8 @@ static void client_free(Client *c) { AVAHI_LLIST_REMOVE(Client, clients, server->clients, c); avahi_free(c); + assert(server->n_clients >= 1); server->n_clients --; - assert(server->n_clients >= 0); } static Client *client_get(const char *name, int create) { @@ -131,7 +127,7 @@ static Client *client_get(const char *name, int create) { if (!create) return NULL; - if (server->n_clients >= CLIENTS_MAX) + if (server->n_clients >= server->n_clients_max) return NULL; /* If not existent yet, create a new entry */ @@ -201,7 +197,7 @@ static DBusHandlerResult msg_signal_filter_impl(AVAHI_GCC_UNUSED DBusConnection server->reconnect_timeout = server->poll_api->timeout_new(server->poll_api, &tv, reconnect_callback, NULL); } else { avahi_log_warn("Disconnected from D-Bus, exiting."); - raise(SIGQUIT); + raise(SIGTERM); } return DBUS_HANDLER_RESULT_HANDLED; @@ -253,7 +249,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH dbus_message_get_member(m)); if (dbus_message_is_method_call(m, DBUS_INTERFACE_INTROSPECTABLE, "Introspect")) - return avahi_dbus_handle_introspect(c, m, "Server.introspect"); + return avahi_dbus_handle_introspect(c, m, "org.freedesktop.Avahi.Server.xml"); else if (dbus_message_is_method_call(m, AVAHI_DBUS_INTERFACE_SERVER, "GetHostName")) { @@ -346,7 +342,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH } else if (dbus_message_is_method_call(m, AVAHI_DBUS_INTERFACE_SERVER, "GetNetworkInterfaceNameByIndex")) { int32_t idx; - char name[IF_NAMESIZE]; + char name[IF_NAMESIZE]; if (!(dbus_message_get_args(m, &error, DBUS_TYPE_INT32, &idx, DBUS_TYPE_INVALID))) { avahi_log_warn("Error parsing Server::GetNetworkInterfaceNameByIndex message"); @@ -431,7 +427,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH goto fail; } - if (disable_user_service_publishing) + if (server->disable_user_service_publishing) return avahi_dbus_respond_error(c, m, AVAHI_ERR_NOT_PERMITTED, NULL); if (!(client = client_get(dbus_message_get_sender(m), TRUE))) { @@ -439,7 +435,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn("Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -485,7 +481,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn("Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -530,7 +526,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn("Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -580,7 +576,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn("Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -635,7 +631,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn("Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -691,7 +687,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn("Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -741,7 +737,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn("Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -799,7 +795,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn(__FILE__": Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -860,7 +856,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn(__FILE__": Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -916,7 +912,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn(__FILE__": Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -975,7 +971,7 @@ static DBusHandlerResult msg_server_impl(DBusConnection *c, DBusMessage *m, AVAH return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_CLIENTS, NULL); } - if (client->n_objects >= OBJECTS_PER_CLIENT_MAX) { + if (client->n_objects >= server->n_objects_per_client_max) { avahi_log_warn("Too many objects for client '%s', client request failed.", client->name); return avahi_dbus_respond_error(c, m, AVAHI_ERR_TOO_MANY_OBJECTS, NULL); } @@ -1021,6 +1017,12 @@ void dbus_protocol_server_state_changed(AvahiServerState state) { return; m = dbus_message_new_signal(AVAHI_DBUS_PATH_SERVER, AVAHI_DBUS_INTERFACE_SERVER, "StateChanged"); + + if (!m) { + avahi_log_error("Failed allocate message"); + return; + } + t = (int32_t) state; if (state == AVAHI_SERVER_COLLISION) @@ -1159,9 +1161,13 @@ static void dbus_disconnect(void) { } } -int dbus_protocol_setup(const AvahiPoll *poll_api, int _disable_user_service_publishing, int force) { +int dbus_protocol_setup(const AvahiPoll *poll_api, + int _disable_user_service_publishing, + int _n_clients_max, + int _n_objects_per_client_max, + int _n_entries_per_entry_group_max, + int force) { - disable_user_service_publishing = _disable_user_service_publishing; server = avahi_new(Server, 1); AVAHI_LLIST_HEAD_INIT(Clients, server->clients); @@ -1171,6 +1177,10 @@ int dbus_protocol_setup(const AvahiPoll *poll_api, int _disable_user_service_pub server->poll_api = poll_api; server->reconnect_timeout = NULL; server->reconnect = force; + server->disable_user_service_publishing = _disable_user_service_publishing; + server->n_clients_max = _n_clients_max > 0 ? _n_clients_max : DEFAULT_CLIENTS_MAX; + server->n_objects_per_client_max = _n_objects_per_client_max > 0 ? _n_objects_per_client_max : DEFAULT_OBJECTS_PER_CLIENT_MAX; + server->n_entries_per_entry_group_max = _n_entries_per_entry_group_max > 0 ? _n_entries_per_entry_group_max : DEFAULT_ENTRIES_PER_ENTRY_GROUP_MAX; if (dbus_connect() < 0) { struct timeval tv;