void contact_set_presence(struct contact *c, enum presence_status status) { if (!c) return; if (c->status != PRESENCE_UNKNOWN && c->status != status) { info("<%r> changed status from %s to %s\n", &c->addr.auri, contact_presence_str(c->status), contact_presence_str(status)); } c->status = status; }
int contacts_print(struct re_printf *pf, const struct contacts *contacts) { const struct list *lst; struct le *le; int err; if (!contacts) return 0; lst = contact_list(contacts); err = re_hprintf(pf, "\n--- Contacts: (%u) ---\n", list_count(lst)); for (le = list_head(lst); le && !err; le = le->next) { const struct contact *c = le->data; const struct sip_addr *addr = &c->addr; err = re_hprintf(pf, "%20s %r <%r>\n", contact_presence_str(c->status), &addr->dname, &addr->auri); } err |= re_hprintf(pf, "\n"); return err; }
static void notifier_update_status(enum presence_status status) { struct le *le; if (status == my_status) return; info("presence: update my status from '%s' to '%s'\n", contact_presence_str(my_status), contact_presence_str(status)); my_status = status; for (le = notifierl.head; le; le = le->next) { struct notifier *not = le->data; (void)notify(not, status); } }
int contacts_print(struct re_printf *pf, void *unused) { struct le *le; int err; (void)unused; err = re_hprintf(pf, "\n--- Contacts: (%u) ---\n", list_count(contact_list())); for (le = list_head(contact_list()); le && !err; le = le->next) { const struct contact *c = le->data; const struct sip_addr *addr = &c->addr; err = re_hprintf(pf, "%20s %r <%r>\n", contact_presence_str(c->status), &addr->dname, &addr->auri); } err |= re_hprintf(pf, "\n"); return err; }