Mercurial > pidgin
changeset 8092:697221d5d0ff
[gaim-migrate @ 8791]
Give a nice little warning if you add an AIM or ICQ buddy with an invalid
name. I'm thinking some of those bug reports on SF about "Could not add
buddy with no name" are caused by this. Hopefully. Sometime before the
next release I'll probably actually remove invalid people from the local
list.
Also recognize the WinAIM Video and Camera caps.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 13 Jan 2004 05:44:37 +0000 |
parents | 56b74730715f |
children | 77af01bc661d |
files | src/protocols/oscar/aim.h src/protocols/oscar/locate.c src/protocols/oscar/msgcookie.c src/protocols/oscar/oscar.c src/protocols/oscar/tlv.c src/protocols/oscar/util.c |
diffstat | 6 files changed, 79 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/protocols/oscar/aim.h Tue Jan 13 03:02:59 2004 +0000 +++ b/src/protocols/oscar/aim.h Tue Jan 13 05:44:37 2004 +0000 @@ -1013,13 +1013,13 @@ } aim_userinfo_t; #define AIM_CAPS_BUDDYICON 0x00000001 -#define AIM_CAPS_VOICE 0x00000002 +#define AIM_CAPS_TALK 0x00000002 #define AIM_CAPS_DIRECTIM 0x00000004 #define AIM_CAPS_CHAT 0x00000008 #define AIM_CAPS_GETFILE 0x00000010 #define AIM_CAPS_SENDFILE 0x00000020 #define AIM_CAPS_GAMES 0x00000040 -#define AIM_CAPS_SAVESTOCKS 0x00000080 +#define AIM_CAPS_ADDINS 0x00000080 #define AIM_CAPS_SENDBUDDYLIST 0x00000100 #define AIM_CAPS_GAMES2 0x00000200 #define AIM_CAPS_ICQ_DIRECT 0x00000400 @@ -1038,7 +1038,9 @@ #define AIM_CAPS_GENERICUNKNOWN 0x00800000 #define AIM_CAPS_VIDEO 0x01000000 #define AIM_CAPS_ICHATAV 0x02000000 -#define AIM_CAPS_LAST 0x04000000 +#define AIM_CAPS_LIVEVIDEO 0x04000000 +#define AIM_CAPS_CAMERA 0x08000000 +#define AIM_CAPS_LAST 0x10000000 #define AIM_SENDMEMBLOCK_FLAG_ISREQUEST 0 #define AIM_SENDMEMBLOCK_FLAG_ISHASH 1 @@ -1472,6 +1474,7 @@ faim_export int aimutil_itemcnt(char *toSearch, char dl); faim_export char *aimutil_itemindex(char *toSearch, int theindex, char dl); +faim_export int aim_snvalid(const char *sn); faim_export int aim_snlen(const char *sn); faim_export int aim_sncmp(const char *sn1, const char *sn2);
--- a/src/protocols/oscar/locate.c Tue Jan 13 03:02:59 2004 +0000 +++ b/src/protocols/oscar/locate.c Tue Jan 13 05:44:37 2004 +0000 @@ -46,6 +46,22 @@ {0x09, 0x46, 0x01, 0x00, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, + /* "Live Video" support in Windows AIM 5.5.3501 and newer */ + {AIM_CAPS_LIVEVIDEO, + {0x09, 0x46, 0x01, 0x01, 0x4c, 0x7f, 0x11, 0xd1, + 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, + + /* "Camera" support in Windows AIM 5.5.3501 and newer */ + {AIM_CAPS_CAMERA, + {0x09, 0x46, 0x01, 0x02, 0x4c, 0x7f, 0x11, 0xd1, + 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, + + /* In Windows AIM 5.5.3501 and newer */ + {AIM_CAPS_GENERICUNKNOWN, + {0x09, 0x46, 0x01, 0x03, 0x4c, 0x7f, 0x11, 0xd1, + 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, + + /* In iChatAV (version numbers...?) */ {AIM_CAPS_ICHATAV, {0x09, 0x46, 0x01, 0x05, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x45, 0x53, 0x54, 0x00}}, @@ -75,7 +91,7 @@ {0x09, 0x46, 0x13, 0x23, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, - {AIM_CAPS_VOICE, + {AIM_CAPS_TALK, {0x09, 0x46, 0x13, 0x41, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, @@ -95,10 +111,7 @@ {0x09, 0x46, 0x13, 0x46, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}, - /* - * Windows AIM calls this "Add-ins," which is probably more accurate - */ - {AIM_CAPS_SAVESTOCKS, + {AIM_CAPS_ADDINS, {0x09, 0x46, 0x13, 0x47, 0x4c, 0x7f, 0x11, 0xd1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
--- a/src/protocols/oscar/msgcookie.c Tue Jan 13 03:02:59 2004 +0000 +++ b/src/protocols/oscar/msgcookie.c Tue Jan 13 05:44:37 2004 +0000 @@ -183,7 +183,7 @@ /* XXX: hokey-assed. needs fixed. */ switch(reqclass) { case AIM_CAPS_BUDDYICON: return AIM_COOKIETYPE_OFTICON; - case AIM_CAPS_VOICE: return AIM_COOKIETYPE_OFTVOICE; + case AIM_CAPS_TALK: return AIM_COOKIETYPE_OFTVOICE; case AIM_CAPS_DIRECTIM: return AIM_COOKIETYPE_OFTIMAGE; case AIM_CAPS_CHAT: return AIM_COOKIETYPE_CHAT; case AIM_CAPS_GETFILE: return AIM_COOKIETYPE_OFTGET;
--- a/src/protocols/oscar/oscar.c Tue Jan 13 03:02:59 2004 +0000 +++ b/src/protocols/oscar/oscar.c Tue Jan 13 05:44:37 2004 +0000 @@ -2383,7 +2383,7 @@ "unknown rendezvous status!\n"); } } else if (args->reqclass & AIM_CAPS_GETFILE) { - } else if (args->reqclass & AIM_CAPS_VOICE) { + } else if (args->reqclass & AIM_CAPS_TALK) { } else if (args->reqclass & AIM_CAPS_BUDDYICON) { gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), userinfo->sn, args->info.icon.icon, @@ -3077,7 +3077,7 @@ case AIM_CAPS_BUDDYICON: tmp = _("Buddy Icon"); break; - case AIM_CAPS_VOICE: + case AIM_CAPS_TALK: tmp = _("Voice"); break; case AIM_CAPS_DIRECTIM: @@ -3096,7 +3096,7 @@ case AIM_CAPS_GAMES2: tmp = _("Games"); break; - case AIM_CAPS_SAVESTOCKS: + case AIM_CAPS_ADDINS: tmp = _("Add-Ins"); break; case AIM_CAPS_SENDBUDDYLIST: @@ -3135,9 +3135,16 @@ case AIM_CAPS_VIDEO: tmp = _("Video Chat"); break; + /* Not actually sure about this one... WinAIM doesn't show anything */ case AIM_CAPS_ICHATAV: tmp = _("iChat AV"); break; + case AIM_CAPS_LIVEVIDEO: + tmp = _("Live Video"); + break; + case AIM_CAPS_CAMERA: + tmp = _("Camera"); + break; default: tmp = NULL; break; @@ -4650,6 +4657,16 @@ static void oscar_add_buddy(GaimConnection *gc, const char *name, GaimGroup *g) { OscarData *od = (OscarData *)gc->proto_data; + + if (!aim_snvalid(name)) { + gchar *buf; + buf = g_strdup_printf(_("Could not add the buddy %s because the screen name is invalid. Screen names must either start with a letter and contain only letters, numbers and spaces, or contain only numbers. The buddy will be removed from your buddy list."), name); + gaim_notify_error(gc, NULL, _("Unable To Add"), buf); + g_free(buf); + /* ABC - Remove from locate list! */ + return; + } + #ifdef NOSSI aim_add_buddy(od->sess, od->conn, name); #else @@ -4684,7 +4701,7 @@ #else if (od->sess->ssi.received_data) { while (buddies) { - oscar_add_buddy(gc, (const char *)buddies->data, NULL); + oscar_add_buddy(gc, buddies->data, NULL); buddies = buddies->next; } } @@ -4978,7 +4995,7 @@ } else { gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: adding buddy %s from local list to server list\n", buddy->name); - aim_ssi_addbuddy(sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); + oscar_add_buddy(gc, buddy->name, group); } } }
--- a/src/protocols/oscar/tlv.c Tue Jan 13 03:02:59 2004 +0000 +++ b/src/protocols/oscar/tlv.c Tue Jan 13 05:44:37 2004 +0000 @@ -464,7 +464,7 @@ * passed in should be a bitwise %OR of any of the %AIM_CAPS constants: * * %AIM_CAPS_BUDDYICON Supports Buddy Icons - * %AIM_CAPS_VOICE Supports Voice Chat + * %AIM_CAPS_TALK Supports Voice Chat * %AIM_CAPS_IMIMAGE Supports DirectIM/IMImage * %AIM_CAPS_CHAT Supports Chat * %AIM_CAPS_GETFILE Supports Get File functions
--- a/src/protocols/oscar/util.c Tue Jan 13 03:02:59 2004 +0000 +++ b/src/protocols/oscar/util.c Tue Jan 13 05:44:37 2004 +0000 @@ -157,6 +157,37 @@ return 0; } +/** + * Check if the given screen name is a valid AIM or ICQ screen name. + * + * @return 1 if the screen name is valid, 0 if not. + */ +faim_export int aim_snvalid(const char *sn) +{ + int isICQ = 0; + int i = 0; + + if (!sn) + return 0; + + if (isdigit(sn[0])) + isICQ = 1; + + while (sn[i] != '\0') { + /* If it started with a digit then it betta be all digits, ho */ + if (isICQ) { + if (!isdigit(sn[i])) + return 0; + } else { + if (!isalnum(sn[i]) && (sn[i] != ' ')) + return 0; + } + i++; + } + + return 1; +} + /* * int snlen(const char *) *