Example #1
0
static void send_goodbye_callback(AvahiInterfaceMonitor *m, AvahiInterface *i, void* userdata) {
    AvahiEntry *e = userdata;
    AvahiRecord *g;

    assert(m);
    assert(i);
    assert(e);
    assert(!e->dead);

    if (!avahi_interface_match(i, e->interface, e->protocol))
        return;

    if (e->flags & AVAHI_PUBLISH_NO_ANNOUNCE)
        return;

    if (!avahi_entry_is_registered(m->server, e, i))
        return;

    if (is_duplicate_entry(m->server, e))
        return;

    if (!(g = make_goodbye_record(e->record)))
        return; /* OOM */

    avahi_interface_post_response(i, g, e->flags & AVAHI_PUBLISH_UNIQUE, NULL, 1);
    avahi_record_unref(g);
}
Example #2
0
static void new_verifier(AvahiServer *s, AvahiInterface *i, AvahiEntry *e) {
    AvahiLLMNREntryVerify *ev;

    assert(s);
    assert(i);
    assert(e);
    assert(!e->dead);
    assert(e->type == AVAHI_ENTRY_LLMNR);

    if( !avahi_interface_match (i, e->interface, e->protocol) ||
        !i->llmnr.verifying ||
        !avahi_entry_is_commited(e) )
    /* start verifying rr's only when group has been commited */
        return;

    if(get_verifier(s, i, e))
        return;

    if(!(ev = avahi_new(AvahiLLMNREntryVerify, 1)))
        return;

    ev->s= s;
    ev->interface = i;
    ev->e = e;
    ev->lq = NULL;

    AVAHI_LLIST_PREPEND(AvahiLLMNREntryVerify, by_interface, i->llmnr.verifiers, ev);
    AVAHI_LLIST_PREPEND(AvahiLLMNREntryVerify, by_entry, e->proto.llmnr.verifiers, ev);

    set_state(ev);
}
Example #3
0
static void new_announcer(AvahiServer *s, AvahiInterface *i, AvahiEntry *e) {
    AvahiAnnouncer *a;

    assert(s);
    assert(i);
    assert(e);
    assert(!e->dead);

    if (!avahi_interface_match(i, e->interface, e->protocol) || !i->announcing || !avahi_entry_is_commited(e))
        return;

    /* We don't want duplicate announcers */
    if (get_announcer(s, e, i))
        return;

    if ((!(a = avahi_new(AvahiAnnouncer, 1)))) {
        avahi_log_error(__FILE__": Out of memory.");
        return;
    }

    a->server = s;
    a->interface = i;
    a->entry = e;
    a->time_event = NULL;

    AVAHI_LLIST_PREPEND(AvahiAnnouncer, by_interface, i->announcers, a);
    AVAHI_LLIST_PREPEND(AvahiAnnouncer, by_entry, e->announcers, a);

    go_to_initial_state(a);
}