comparison src/toc.c @ 1145:cd96ca1aed02

[gaim-migrate @ 1155] actually to be quite honest toc has been blocking me so i have no way of knowing that the permit/deny stuff that i'm committing actually works. but i'm sure i'll get a bug report in about 3 hours or so if it's not. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 27 Nov 2000 13:18:11 +0000
parents 028295b1f1b3
children 22f3c32a28f6
comparison
equal deleted inserted replaced
1144:b1454d019277 1145:cd96ca1aed02
45 #include "pixmaps/aol_icon.xpm" 45 #include "pixmaps/aol_icon.xpm"
46 #include "pixmaps/away_icon.xpm" 46 #include "pixmaps/away_icon.xpm"
47 #include "pixmaps/dt_icon.xpm" 47 #include "pixmaps/dt_icon.xpm"
48 #include "pixmaps/free_icon.xpm" 48 #include "pixmaps/free_icon.xpm"
49 49
50 #define REVISION "gaim:$Revision: 1142 $" 50 #define REVISION "gaim:$Revision: 1155 $"
51 51
52 #define TYPE_SIGNON 1 52 #define TYPE_SIGNON 1
53 #define TYPE_DATA 2 53 #define TYPE_DATA 2
54 #define TYPE_ERROR 3 54 #define TYPE_ERROR 3
55 #define TYPE_SIGNOFF 4 55 #define TYPE_SIGNOFF 4
1103 gtk_widget_show(opt); 1103 gtk_widget_show(opt);
1104 if (atoi(user->proto_opt[USEROPT_PROXYTYPE]) == PROXY_HTTP) 1104 if (atoi(user->proto_opt[USEROPT_PROXYTYPE]) == PROXY_HTTP)
1105 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); 1105 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE);
1106 } 1106 }
1107 1107
1108 static void toc_add_permit(struct gaim_connection *gc, char *who) {
1109 char buf2[MSG_LEN];
1110 if (gc->permdeny != 3) return;
1111 g_snprintf(buf2, sizeof(buf2), "toc_add_permit %s", normalize(who));
1112 sflap_send(gc, buf2, -1, TYPE_DATA);
1113 }
1114
1115 static void toc_add_deny(struct gaim_connection *gc, char *who) {
1116 char buf2[MSG_LEN];
1117 if (gc->permdeny != 4) return;
1118 g_snprintf(buf2, sizeof(buf2), "toc_add_permit %s", normalize(who));
1119 sflap_send(gc, buf2, -1, TYPE_DATA);
1120 }
1121
1122 static void toc_set_permit_deny(struct gaim_connection *gc) {
1123 char buf2[MSG_LEN];
1124 GSList *list;
1125 int at;
1126
1127 switch (gc->permdeny) {
1128 case 1:
1129 /* permit all, deny none. to get here reliably we need to have been in permit
1130 * mode, and send an empty toc_add_deny message, which will switch us to deny none */
1131 g_snprintf(buf2, sizeof(buf2), "toc_add_permit ");
1132 sflap_send(gc, buf2, -1, TYPE_DATA);
1133 g_snprintf(buf2, sizeof(buf2), "toc_add_deny ");
1134 sflap_send(gc, buf2, -1, TYPE_DATA);
1135 break;
1136 case 2:
1137 /* deny all, permit none. to get here reliably we need to have been in deny
1138 * mode, and send an empty toc_add_permit message, which will switch us to permit none */
1139 g_snprintf(buf2, sizeof(buf2), "toc_add_deny ");
1140 sflap_send(gc, buf2, -1, TYPE_DATA);
1141 g_snprintf(buf2, sizeof(buf2), "toc_add_permit ");
1142 sflap_send(gc, buf2, -1, TYPE_DATA);
1143 break;
1144 case 3:
1145 /* permit some. we want to switch to deny mode first, then send the toc_add_permit
1146 * message, which will clear and set our permit list. toc sucks. */
1147 g_snprintf(buf2, sizeof(buf2), "toc_add_deny ");
1148 sflap_send(gc, buf2, -1, TYPE_DATA);
1149
1150 at = g_snprintf(buf2, sizeof(buf2), "toc_add_permit ");
1151 list = gc->permit;
1152 while (list) {
1153 at += g_snprintf(buf2 + at, sizeof(buf2) - at, "%s ", normalize(list->data));
1154 if (at > MSG_LEN + 32) /* from out my ass comes greatness */ {
1155 sflap_send(gc, buf2, -1, TYPE_DATA);
1156 at = g_snprintf(buf2, sizeof(buf2), "toc_add_permit ");
1157 }
1158 list = list->next;
1159 }
1160 sflap_send(gc, buf2, -1, TYPE_DATA);
1161 break;
1162 case 4:
1163 /* deny some. we want to switch to permit mode first, then send the toc_add_deny
1164 * message, which will clear and set our deny list. toc sucks. */
1165 g_snprintf(buf2, sizeof(buf2), "toc_add_permit ");
1166 sflap_send(gc, buf2, -1, TYPE_DATA);
1167
1168 at = g_snprintf(buf2, sizeof(buf2), "toc_add_deny ");
1169 list = gc->deny;
1170 while (list) {
1171 at += g_snprintf(buf2 + at, sizeof(buf2) - at, "%s ", normalize(list->data));
1172 if (at > MSG_LEN + 32) /* from out my ass comes greatness */ {
1173 sflap_send(gc, buf2, -1, TYPE_DATA);
1174 at = g_snprintf(buf2, sizeof(buf2), "toc_add_deny ");
1175 }
1176 list = list->next;
1177 }
1178 sflap_send(gc, buf2, -1, TYPE_DATA);
1179 break;
1180 default:
1181 break;
1182 }
1183 }
1184
1185 static void toc_rem_permit(struct gaim_connection *gc, char *who) {
1186 if (gc->permdeny != 3) return;
1187 toc_set_permit_deny(gc);
1188 }
1189
1190 static void toc_rem_deny(struct gaim_connection *gc, char *who) {
1191 if (gc->permdeny != 4) return;
1192 toc_set_permit_deny(gc);
1193 }
1194
1108 void toc_init(struct prpl *ret) { 1195 void toc_init(struct prpl *ret) {
1109 ret->protocol = PROTO_TOC; 1196 ret->protocol = PROTO_TOC;
1110 ret->name = toc_name; 1197 ret->name = toc_name;
1111 ret->list_icon = toc_list_icon; 1198 ret->list_icon = toc_list_icon;
1112 ret->action_menu = toc_action_menu; 1199 ret->action_menu = toc_action_menu;
1124 ret->set_idle = toc_set_idle; 1211 ret->set_idle = toc_set_idle;
1125 ret->change_passwd = toc_change_passwd; 1212 ret->change_passwd = toc_change_passwd;
1126 ret->add_buddy = toc_add_buddy; 1213 ret->add_buddy = toc_add_buddy;
1127 ret->add_buddies = toc_add_buddies; 1214 ret->add_buddies = toc_add_buddies;
1128 ret->remove_buddy = toc_remove_buddy; 1215 ret->remove_buddy = toc_remove_buddy;
1129 ret->add_permit = NULL; /* FIXME */ 1216 ret->add_permit = toc_add_permit;
1130 ret->add_deny = NULL; 1217 ret->add_deny = toc_add_deny;
1131 ret->rem_permit = NULL; 1218 ret->rem_permit = toc_rem_permit;
1132 ret->rem_deny = NULL; 1219 ret->rem_deny = toc_add_deny;
1133 ret->set_permit_deny = NULL; 1220 ret->set_permit_deny = toc_set_permit_deny;
1134 ret->warn = toc_warn; 1221 ret->warn = toc_warn;
1135 ret->accept_chat = toc_accept_chat; 1222 ret->accept_chat = toc_accept_chat;
1136 ret->join_chat = toc_join_chat; 1223 ret->join_chat = toc_join_chat;
1137 ret->chat_invite = toc_chat_invite; 1224 ret->chat_invite = toc_chat_invite;
1138 ret->chat_leave = toc_chat_leave; 1225 ret->chat_leave = toc_chat_leave;