int session_send_notify(Session *s){ GList *it; uin_t *userlist; char *types; int userlist_len; int i; g_assert(s!=NULL); userlist_len=g_list_length(s->user->contacts); userlist=g_new(uin_t,userlist_len+1); types=g_new(char,userlist_len+1); i=0; for(it=g_list_first(s->user->contacts);it;it=g_list_next(it)){ Contact *c=(Contact *)it->data; c->gg_notify_type=compute_notify_type(c); if(c->gg_notify_type){ userlist[i]=c->uin; types[i]=c->gg_notify_type; i++; } } userlist[i]=0; types[i]=0; debug("gg_notify_ex(%p,%p,%p,%i)",s->ggs,userlist,types,userlist_len); gg_notify_ex(s->ggs,userlist,types,userlist_len); g_free(userlist); g_free(types); return 0; }
/* this is for for notify purposes, not synchronizing buddy list */ void ggp_buddylist_send(PurpleConnection *gc) { GGPInfo *info = purple_connection_get_protocol_data(gc); PurpleAccount *account = purple_connection_get_account(gc); GSList *buddies; uin_t *userlist; gchar *types; int i = 0, ret = 0; int size; buddies = purple_blist_find_buddies(account, NULL); size = g_slist_length(buddies); userlist = g_new(uin_t, size); types = g_new(gchar, size); for (buddies = purple_blist_find_buddies(account, NULL); buddies; buddies = g_slist_delete_link(buddies, buddies), ++i) { PurpleBuddy *buddy = buddies->data; const gchar *name = purple_buddy_get_name(buddy); userlist[i] = ggp_str_to_uin(name); types[i] = GG_USER_NORMAL; purple_debug_info("gg", "ggp_buddylist_send: adding %d\n", userlist[i]); } ret = gg_notify_ex(info->session, userlist, types, size); purple_debug_info("gg", "send: ret=%d; size=%d\n", ret, size); if (userlist) { g_free(userlist); g_free(types); } }