Mercurial > pidgin
diff src/server.c @ 678:c72f58814e9f
[gaim-migrate @ 688]
permit/deny stuff moved to prefs; permit/deny stuff works *properly* now, permit/deny stuff much more logical in preferences.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Tue, 15 Aug 2000 01:29:35 +0000 |
| parents | b3b5d9d18eea |
| children | 71b2477033cb |
line wrap: on
line diff
--- a/src/server.c Tue Aug 15 00:04:14 2000 +0000 +++ b/src/server.c Tue Aug 15 01:29:35 2000 +0000 @@ -378,78 +378,178 @@ void serv_set_permit_deny() { if (!USE_OSCAR) { - char buf[MSG_LEN]; - int at; - GList *list; - - if (permdeny == 1 || permdeny == 4) { - g_snprintf(buf, sizeof(buf), "toc_add_deny"); - sflap_send(buf, -1, TYPE_DATA); - } else { - g_snprintf(buf, sizeof(buf), "toc_add_permit"); - sflap_send(buf, -1, TYPE_DATA); - } - + char buf[MSG_LEN]; + int at; + int cnt; + GList *list; + GList *mem; + struct buddy *b; + struct group *g; - if (permit) { - at = g_snprintf(buf, sizeof(buf), "toc_add_permit"); - list = permit; - while(list) { - at += g_snprintf(&buf[at], sizeof(buf) - at, " %s", normalize(list->data)); - list = list->next; + switch (permdeny) { + case PERMIT_ALL: + /* toc_add_permit current_user to go to permit mode, + toc_add_deny <none> to deny none */ + sprintf(buf, "toc_add_deny %s", current_user->username); + sflap_send(buf, -1, TYPE_DATA); + break; + case PERMIT_NONE: + /* toc_add_deny current_user to go to deny mode, + toc_add_permit <none> to permit none */ + sprintf(buf, "toc_add_permit %s", current_user->username); + sflap_send(buf, -1, TYPE_DATA); + break; + case PERMIT_SOME: + /* toc_add_permit <permit> */ + /* if permit is empty this is the same as PERMIT_NONE */ + if (permit) { + at = g_snprintf(buf, sizeof(buf), "toc_add_permit"); + list = permit; + while (list) { + at += g_snprintf(&buf[at], sizeof(buf) - at, " %s", normalize(list->data)); + list = list->next; + } + buf[at] = 0; /* is this necessary? */ + sflap_send(buf, -1, TYPE_DATA); + } else { + sprintf(buf, "toc_add_deny %s", current_user->username); + sflap_send(buf, -1, TYPE_DATA); + sprintf(buf, "toc_add_permit"); + sflap_send(buf, -1, TYPE_DATA); + } + break; + case DENY_SOME: + /* toc_add_deny <deny> */ + /* if deny is empty this is the same as PERMIT_ALL */ + if (deny) { + at = g_snprintf(buf, sizeof(buf), "toc_add_deny"); + list = deny; + while (list) { + at += g_snprintf(&buf[at], sizeof(buf) - at, " %s", normalize(list->data)); + list = list->next; + } + buf[at] = 0; /* is this necessary? */ + sflap_send(buf, -1, TYPE_DATA); + } else { + sprintf(buf, "toc_add_permit %s", current_user->username); + sflap_send(buf, -1, TYPE_DATA); + sprintf(buf, "toc_add_deny"); + sflap_send(buf, -1, TYPE_DATA); + } + break; + case PERMIT_BUDDY: + /* toc_add_permit <bud> */ + /* if there are no buddies this is the same as PERMIT_NONE */ + at = g_snprintf(buf, sizeof(buf), "toc_add_permit"); + list = groups; + cnt = 0; + while (list) { + g = (struct group *)list->data; + mem = g->members; + while (mem) { + b = (struct buddy *)mem->data; + at += g_snprintf(&buf[at], sizeof(buf) - at, " %s", normalize(b->name)); + cnt++; + mem = mem->next; + } + list = list->next; + } + if (cnt) { + sflap_send(buf, -1, TYPE_DATA); + } else { + sprintf(buf, "toc_add_deny %s", current_user->username); + sflap_send(buf, -1, TYPE_DATA); + sprintf(buf, "toc_add_permit"); + sflap_send(buf, -1, TYPE_DATA); + } } - buf[at] = 0; - sflap_send(buf, -1, TYPE_DATA); - } - - if (deny) { - at = g_snprintf(buf, sizeof(buf), "toc_add_deny"); - list = deny; - while(list) { - at += g_snprintf(&buf[at], sizeof(buf) - at, " %s", normalize(list->data)); - list = list->next; - } - buf[at] = 0; - sflap_send(buf, -1, TYPE_DATA); - } } else { - /* oscar requires us to do everyone at once (?) */ - /* I think this code is OK now. */ - char buf[BUF_LONG]; int at; GList *list, *grp, *bud; - if (permdeny == 3) { /* Permit Some : Only people on buddy list and - on permit list */ - struct group *g; struct buddy *b; - at = 0; list = permit; grp = groups; - debug_print("Setting permit list...\n"); - while (grp) { - g = (struct group *)grp->data; - bud = g->members; - while (bud) { - b = (struct buddy *)bud->data; - at += g_snprintf(&buf[at], sizeof(buf) - at, - "%s&", b->name); - bud = bud->next; + int at; + GList *list; + GList *mem; + struct buddy *b; + struct group *g; + char buf[MSG_LEN]; + int cnt; + + switch (permdeny) { + /* aim_bos_changevisibility(gaim_sess, gaim_conn, type, list) */ + case PERMIT_ALL: + /* AIM_VISIBILITYCHANGE_DENYADD current_user */ + aim_bos_changevisibility(gaim_sess, gaim_conn, + AIM_VISIBILITYCHANGE_DENYADD, current_user->username); + break; + case PERMIT_NONE: + /* AIM_VISIBILITY_PERMITADD current_user */ + aim_bos_changevisibility(gaim_sess, gaim_conn, + AIM_VISIBILITYCHANGE_PERMITADD, current_user->username); + break; + case PERMIT_SOME: + /* PERMIT <permit> */ + /* if permit is empty this is the same as PERMIT_NONE */ + if (permit) { + at = 0; + list = permit; + while (list) { + at += g_snprintf(&buf[at], sizeof(buf) - at, "%s", list->data); + list = list->next; + if (list) + at += g_snprintf(&buf[at], sizeof(buf) - at, "&"); + } + aim_bos_changevisibility(gaim_sess, gaim_conn, + AIM_VISIBILITYCHANGE_PERMITADD, buf); + } else { + aim_bos_changevisibility(gaim_sess, gaim_conn, + AIM_VISIBILITYCHANGE_PERMITADD, current_user->username); } - grp = grp->next; + break; + case DENY_SOME: + /* DENY <deny> */ + /* if deny is empty this is the same as PERMIT_ALL */ + if (deny) { + at = 0; + list = permit; + while (list) { + at += g_snprintf(&buf[at], sizeof(buf) - at, "%s", list->data); + list = list->next; + if (list) + at += g_snprintf(&buf[at], sizeof(buf) - at, "&"); + } + aim_bos_changevisibility(gaim_sess, gaim_conn, + AIM_VISIBILITYCHANGE_DENYADD, buf); + } else { + aim_bos_changevisibility(gaim_sess, gaim_conn, + AIM_VISIBILITYCHANGE_DENYADD, current_user->username); + } + break; + case PERMIT_BUDDY: + /* PERMIT <bud> */ + /* if there are no buddies this is the same as PERMIT_NONE */ + at = 0; + list = groups; + cnt = 0; + while (list) { + g = (struct group *)list->data; + mem = g->members; + while (mem) { + b = (struct buddy *)mem->data; + if (at) + at += g_snprintf(&buf[at], sizeof(buf) - at, "&"); + at += g_snprintf(&buf[at], sizeof(buf) - at, "%s", b->name); + cnt++; + mem = mem->next; + } + list = list->next; + } + if (cnt) { + aim_bos_changevisibility(gaim_sess, gaim_conn, + AIM_VISIBILITYCHANGE_PERMITADD, buf); + } else { + aim_bos_changevisibility(gaim_sess, gaim_conn, + AIM_VISIBILITYCHANGE_PERMITADD, current_user->username); + } + break; } - while (list) { - at += g_snprintf(&buf[at], sizeof(buf) - at, "%s&", - (char *)list->data); - list = list->next; - } - aim_bos_changevisibility(gaim_sess, gaim_conn, - AIM_VISIBILITYCHANGE_PERMITADD, buf); - } else { /* Deny Some : Deny people on deny list */ - list = deny; at = 0; - if (list == NULL) return; - while (list) { - at += g_snprintf(&buf[at], sizeof(buf) - at, "%s&", - (char *)list->data); - list = list->next; - } - aim_bos_changevisibility(gaim_sess, gaim_conn, - AIM_VISIBILITYCHANGE_DENYADD, buf); - } } }
