Changeset 386042c for protocols/oscar
- Timestamp:
- 2012-10-19T23:16:52Z (12 years ago)
- Branches:
- master
- Children:
- 6042a54
- Parents:
- 0eb971a
- Location:
- protocols/oscar
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/oscar/aim.h
r0eb971a r386042c 626 626 #define AIM_CLIENTTYPE_WINAIM41 0x0003 627 627 #define AIM_CLIENTTYPE_AOL_TOC 0x0004 628 unsigned short aim_fingerprintclient(unsigned char *msghdr, int len);629 628 630 629 #define AIM_RATE_CODE_CHANGE 0x0001 -
protocols/oscar/im.c
r0eb971a r386042c 23 23 #include "im.h" 24 24 #include "info.h" 25 26 /*27 * Takes a msghdr (and a length) and returns a client type28 * code. Note that this is *only a guess* and has a low likelihood29 * of actually being accurate.30 *31 * Its based on experimental data, with the help of Eric Warmenhoven32 * who seems to have collected a wide variety of different AIM clients.33 *34 *35 * Heres the current collection:36 * 0501 0003 0101 0101 01 AOL Mobile Communicator, WinAIM 1.0.41437 * 0501 0003 0101 0201 01 WinAIM 2.0.847, 2.1.1187, 3.0.1464,38 * 4.3.2229, 4.4.228639 * 0501 0004 0101 0102 0101 WinAIM 4.1.2010, libfaim (right here)40 * 0501 0001 0101 01 AOL v6.0, CompuServe 2000 v6.0, any41 * TOC client42 *43 * Note that in this function, only the feature bytes are tested, since44 * the rest will always be the same.45 *46 */47 guint16 aim_fingerprintclient(guint8 *msghdr, int len)48 {49 static const struct {50 guint16 clientid;51 int len;52 guint8 data[10];53 } fingerprints[] = {54 /* AOL Mobile Communicator, WinAIM 1.0.414 */55 { AIM_CLIENTTYPE_MC,56 3, {0x01, 0x01, 0x01}},57 58 /* WinAIM 2.0.847, 2.1.1187, 3.0.1464, 4.3.2229, 4.4.2286 */59 { AIM_CLIENTTYPE_WINAIM,60 3, {0x01, 0x01, 0x02}},61 62 /* WinAIM 4.1.2010, libfaim */63 { AIM_CLIENTTYPE_WINAIM41,64 4, {0x01, 0x01, 0x01, 0x02}},65 66 /* AOL v6.0, CompuServe 2000 v6.0, any TOC client */67 { AIM_CLIENTTYPE_AOL_TOC,68 1, {0x01}},69 70 { 0, 0}71 };72 int i;73 74 if (!msghdr || (len <= 0))75 return AIM_CLIENTTYPE_UNKNOWN;76 77 for (i = 0; fingerprints[i].len; i++) {78 if (fingerprints[i].len != len)79 continue;80 if (memcmp(fingerprints[i].data, msghdr, fingerprints[i].len) == 0)81 return fingerprints[i].clientid;82 }83 84 return AIM_CLIENTTYPE_UNKNOWN;85 }86 25 87 26 /* This should be endian-safe now... but who knows... */
Note: See TracChangeset
for help on using the changeset viewer.