| 1983 } |
1983 } |
| 1984 } break; |
1984 } break; |
| 1985 |
1985 |
| 1986 case 0x1a: { /* Handle SMS or someone has sent you a greeting card or requested buddies? */ |
1986 case 0x1a: { /* Handle SMS or someone has sent you a greeting card or requested buddies? */ |
| 1987 ByteStream qbs; |
1987 ByteStream qbs; |
| 1988 int smstype, taglen, smslen; |
1988 guint16 smstype; |
| |
1989 guint32 taglen, smslen; |
| 1989 char *tagstr = NULL, *smsmsg = NULL; |
1990 char *tagstr = NULL, *smsmsg = NULL; |
| 1990 xmlnode *xmlroot = NULL, *xmltmp = NULL; |
1991 xmlnode *xmlroot = NULL, *xmltmp = NULL; |
| 1991 gchar *uin = NULL, *message = NULL; |
1992 gchar *uin = NULL, *message = NULL; |
| 1992 |
1993 |
| 1993 /* From libicq2000-0.3.2/src/ICQ.cpp */ |
1994 /* From libicq2000-0.3.2/src/ICQ.cpp */ |
| 1997 /* unexpected: 00 00 26 00 81 1a 18 bc 0e 6c 18 47 a5 91 6f 18 dc c7 6f 1a | 00 00 | 0d 00 00 00 | 49 43 51 57 65 62 4d 65 73 73 61 67 65 ... */ |
1998 /* unexpected: 00 00 26 00 81 1a 18 bc 0e 6c 18 47 a5 91 6f 18 dc c7 6f 1a | 00 00 | 0d 00 00 00 | 49 43 51 57 65 62 4d 65 73 73 61 67 65 ... */ |
| 1998 smstype = byte_stream_getle16(&qbs); |
1999 smstype = byte_stream_getle16(&qbs); |
| 1999 if (smstype != 0) |
2000 if (smstype != 0) |
| 2000 break; |
2001 break; |
| 2001 taglen = byte_stream_getle32(&qbs); |
2002 taglen = byte_stream_getle32(&qbs); |
| |
2003 if (taglen > 2000) { |
| |
2004 /* Avoid trying to allocate large amounts of memory, in |
| |
2005 case we get something unexpected. */ |
| |
2006 break; |
| |
2007 } |
| 2002 tagstr = byte_stream_getstr(&qbs, taglen); |
2008 tagstr = byte_stream_getstr(&qbs, taglen); |
| 2003 if (tagstr == NULL) |
2009 if (tagstr == NULL) |
| 2004 break; |
2010 break; |
| 2005 byte_stream_advance(&qbs, 3); |
2011 byte_stream_advance(&qbs, 3); |
| 2006 byte_stream_advance(&qbs, 4); |
2012 byte_stream_advance(&qbs, 4); |
| 2007 smslen = byte_stream_getle32(&qbs); |
2013 smslen = byte_stream_getle32(&qbs); |
| |
2014 if (smslen > 2000) { |
| |
2015 /* Avoid trying to allocate large amounts of memory, in |
| |
2016 case we get something unexpected. */ |
| |
2017 g_free(tagstr); |
| |
2018 break; |
| |
2019 } |
| 2008 smsmsg = byte_stream_getstr(&qbs, smslen); |
2020 smsmsg = byte_stream_getstr(&qbs, smslen); |
| 2009 |
2021 |
| 2010 /* Check if this is an SMS being sent from server */ |
2022 /* Check if this is an SMS being sent from server */ |
| 2011 if ((smstype == 0) && (!strcmp(tagstr, "ICQSMS")) && (smsmsg != NULL)) |
2023 if ((smstype == 0) && (!strcmp(tagstr, "ICQSMS")) && (smsmsg != NULL)) |
| 2012 { |
2024 { |