X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Fentry.c;h=d953f7b33000844fe4bb61948f71153bf2520877;hb=7ba2b1fcc731085127c9976b1bae4aaaa5b8b7a7;hp=f65f7b145e36f5d088a5afe2c48378fb00811440;hpb=fbce111b069aa1e4c701ed37ee1d9f6d6cefaac5;p=catta diff --git a/avahi-core/entry.c b/avahi-core/entry.c index f65f7b1..d953f7b 100644 --- a/avahi-core/entry.c +++ b/avahi-core/entry.c @@ -187,6 +187,7 @@ static AvahiEntry * server_add_internal( assert(s); assert(r); + AVAHI_CHECK_VALIDITY_RETURN_NULL(s, s->state != AVAHI_SERVER_FAILURE && s->state != AVAHI_SERVER_INVALID, AVAHI_ERR_BAD_STATE); AVAHI_CHECK_VALIDITY_RETURN_NULL(s, AVAHI_IF_VALID(interface), AVAHI_ERR_INVALID_INTERFACE); AVAHI_CHECK_VALIDITY_RETURN_NULL(s, AVAHI_PROTO_VALID(protocol), AVAHI_ERR_INVALID_PROTOCOL); AVAHI_CHECK_VALIDITY_RETURN_NULL(s, AVAHI_FLAGS_VALID( @@ -215,6 +216,10 @@ static AvahiEntry * server_add_internal( transport_flags_from_domain(s, &flags, r->key->name); AVAHI_CHECK_VALIDITY_RETURN_NULL(s, flags & AVAHI_PUBLISH_USE_MULTICAST, AVAHI_ERR_NOT_SUPPORTED); AVAHI_CHECK_VALIDITY_RETURN_NULL(s, !s->config.disable_publishing, AVAHI_ERR_NOT_PERMITTED); + AVAHI_CHECK_VALIDITY_RETURN_NULL(s, + !g || + (g->state != AVAHI_ENTRY_GROUP_ESTABLISHED && g->state != AVAHI_ENTRY_GROUP_REGISTERING) || + (flags & AVAHI_PUBLISH_UPDATE), AVAHI_ERR_BAD_STATE); if (flags & AVAHI_PUBLISH_UPDATE) { AvahiRecord *old_record; @@ -1081,18 +1086,17 @@ static void entry_group_commit_real(AvahiSEntryGroup *g) { avahi_s_entry_group_change_state(g, AVAHI_ENTRY_GROUP_REGISTERING); - if (!g->dead) { - avahi_announce_group(g->server, g); - avahi_s_entry_group_check_probed(g, 0); - } + if (g->dead) + return; + + avahi_announce_group(g->server, g); + avahi_s_entry_group_check_probed(g, 0); } static void entry_group_register_time_event_callback(AVAHI_GCC_UNUSED AvahiTimeEvent *e, void* userdata) { AvahiSEntryGroup *g = userdata; assert(g); -/* avahi_log_debug("Holdoff passed, waking up and going on."); */ - avahi_time_event_free(g->register_time_event); g->register_time_event = NULL; @@ -1109,6 +1113,9 @@ int avahi_s_entry_group_commit(AvahiSEntryGroup *g) { if (g->state != AVAHI_ENTRY_GROUP_UNCOMMITED && g->state != AVAHI_ENTRY_GROUP_COLLISION) return avahi_server_set_errno(g->server, AVAHI_ERR_BAD_STATE); + if (avahi_s_entry_group_is_empty(g)) + return avahi_server_set_errno(g->server, AVAHI_ERR_IS_EMPTY); + g->n_register_try++; avahi_timeval_add(&g->register_time, @@ -1119,12 +1126,10 @@ int avahi_s_entry_group_commit(AvahiSEntryGroup *g) { gettimeofday(&now, NULL); if (avahi_timeval_compare(&g->register_time, &now) <= 0) { - /* Holdoff time passed, so let's start probing */ -/* avahi_log_debug("Holdoff passed, directly going on."); */ + /* Holdoff time passed, so let's start probing */ entry_group_commit_real(g); } else { -/* avahi_log_debug("Holdoff not passed, sleeping."); */ /* Holdoff time has not yet passed, so let's wait */ assert(!g->register_time_event);