Changeset 2cdd8ce for protocols/oscar
- Timestamp:
- 2005-11-19T15:17:03Z (19 years ago)
- Branches:
- master
- Children:
- 9c8ae50, b20b32f
- Parents:
- c998255 (diff), 94281ef (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- protocols/oscar
- Files:
-
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/oscar/im.c
rc998255 r2cdd8ce 1996 1996 } 1997 1997 1998 /* 1999 * Subtype 0x0014 - Send a mini typing notification (mtn) packet. 2000 * 2001 * This is supported by winaim5 and newer, MacAIM bleh and newer, iChat bleh and newer, 2002 * and Gaim 0.60 and newer. 2003 * 2004 */ 2005 int aim_im_sendmtn(aim_session_t *sess, guint16 type1, const char *sn, guint16 type2) 2006 { 2007 aim_conn_t *conn; 2008 aim_frame_t *fr; 2009 aim_snacid_t snacid; 2010 2011 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0002))) 2012 return -EINVAL; 2013 2014 if (!sn) 2015 return -EINVAL; 2016 2017 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+11+strlen(sn)+2))) 2018 return -ENOMEM; 2019 2020 snacid = aim_cachesnac(sess, 0x0004, 0x0014, 0x0000, NULL, 0); 2021 aim_putsnac(&fr->data, 0x0004, 0x0014, 0x0000, snacid); 2022 2023 /* 2024 * 8 days of light 2025 * Er, that is to say, 8 bytes of 0's 2026 */ 2027 aimbs_put16(&fr->data, 0x0000); 2028 aimbs_put16(&fr->data, 0x0000); 2029 aimbs_put16(&fr->data, 0x0000); 2030 aimbs_put16(&fr->data, 0x0000); 2031 2032 /* 2033 * Type 1 (should be 0x0001 for mtn) 2034 */ 2035 aimbs_put16(&fr->data, type1); 2036 2037 /* 2038 * Dest sn 2039 */ 2040 aimbs_put8(&fr->data, strlen(sn)); 2041 aimbs_putraw(&fr->data, sn, strlen(sn)); 2042 2043 /* 2044 * Type 2 (should be 0x0000, 0x0001, or 0x0002 for mtn) 2045 */ 2046 aimbs_put16(&fr->data, type2); 2047 2048 aim_tx_enqueue(sess, fr); 2049 2050 return 0; 2051 } 2052 2053 /* 2054 * Subtype 0x0014 - Receive a mini typing notification (mtn) packet. 2055 * 2056 * This is supported by winaim5 and newer, MacAIM bleh and newer, iChat bleh and newer, 2057 * and Gaim 0.60 and newer. 2058 * 2059 */ 2060 static int mtn_receive(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) 2061 { 2062 int ret = 0; 2063 aim_rxcallback_t userfunc; 2064 char *sn; 2065 guint8 snlen; 2066 guint16 type1, type2; 2067 2068 aim_bstream_advance(bs, 8); /* Unknown - All 0's */ 2069 type1 = aimbs_get16(bs); 2070 snlen = aimbs_get8(bs); 2071 sn = aimbs_getstr(bs, snlen); 2072 type2 = aimbs_get16(bs); 2073 2074 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype))) 2075 ret = userfunc(sess, rx, type1, sn, type2); 2076 2077 g_free(sn); 2078 2079 return ret; 2080 } 2081 1998 2082 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) 1999 2083 { … … 2011 2095 else if (snac->subtype == 0x000c) 2012 2096 return msgack(sess, mod, rx, snac, bs); 2097 else if (snac->subtype == 0x0014) 2098 return mtn_receive(sess, mod, rx, snac, bs); 2013 2099 2014 2100 return 0; -
protocols/oscar/im.h
rc998255 r2cdd8ce 14 14 #define AIM_CB_MSG_CLIENTAUTORESP 0x000b 15 15 #define AIM_CB_MSG_ACK 0x000c 16 #define AIM_CB_MSG_MTN 0x0014 16 17 #define AIM_CB_MSG_DEFAULT 0xffff 17 18 … … 194 195 195 196 int aim_send_im_ch2_geticqmessage(aim_session_t *sess, const char *sn, int type); 197 int aim_im_sendmtn(aim_session_t *sess, guint16 type1, const char *sn, guint16 type2); 196 198 int aim_send_im_ch2_statusmessage(aim_session_t *sess, const char *sender, const guint8 *cookie, const char *message, const guint8 state, const guint16 dc); 197 199 -
protocols/oscar/oscar.c
rc998255 r2cdd8ce 221 221 static int gaim_ssi_parselist (aim_session_t *, aim_frame_t *, ...); 222 222 static int gaim_ssi_parseack (aim_session_t *, aim_frame_t *, ...); 223 223 static int gaim_parsemtn (aim_session_t *, aim_frame_t *, ...); 224 224 static int gaim_icqinfo (aim_session_t *, aim_frame_t *, ...); 225 225 static int gaim_parseaiminfo (aim_session_t *, aim_frame_t *, ...); … … 556 556 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_SRVACK, gaim_ssi_parseack, 0); 557 557 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parseaiminfo, 0); 558 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parsemtn, 0); 558 559 559 560 ((struct oscar_data *)gc->proto_data)->conn = bosconn; … … 1676 1677 1677 1678 /* Maybe senderwarn and recverwarn should be user preferences... */ 1679 params->flags = 0x0000000b; 1678 1680 params->maxmsglen = 8000; 1679 1681 params->minmsginterval = 0; … … 2433 2435 } 2434 2436 2437 int gaim_parsemtn(aim_session_t *sess, aim_frame_t *fr, ...) 2438 { 2439 struct gaim_connection * gc = sess->aux_data; 2440 va_list ap; 2441 guint16 type1, type2; 2442 char * sn; 2443 2444 va_start(ap, fr); 2445 type1 = va_arg(ap, int); 2446 sn = va_arg(ap, char*); 2447 type2 = va_arg(ap, int); 2448 va_end(ap); 2449 2450 if(type2 == 0x0001 || type2 == 0x0002) 2451 serv_got_typing(gc, sn, 0); 2452 2453 return 1; 2454 } 2455 2435 2456 static char *oscar_get_status_string( struct gaim_connection *gc, int number ) 2436 2457 { … … 2459 2480 return( "Away" ); 2460 2481 } 2482 } 2483 2484 int oscar_send_typing(struct gaim_connection *gc, char * who, int typing) 2485 { 2486 struct oscar_data *od = gc->proto_data; 2487 return( aim_im_sendmtn(od->sess, 1, who, typing ? 0x0002 : 0x0000) ); 2461 2488 } 2462 2489 … … 2482 2509 ret->cmp_buddynames = aim_sncmp; 2483 2510 ret->get_status_string = oscar_get_status_string; 2511 ret->send_typing = oscar_send_typing; 2484 2512 2485 2513 register_protocol(ret);
Note: See TracChangeset
for help on using the changeset viewer.