From: Rob F. <rob...@us...> - 2002-03-02 04:52:24
|
Update of /cvsroot/gaim/gaim/src/protocols/msn In directory usw-pr-cvs1:/tmp/cvs-serv16032/src/protocols/msn Modified Files: msn.c Log Message: 0.53 :) Index: msn.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/msn.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -d -r1.52 -r1.53 --- msn.c 17 Feb 2002 22:11:32 -0000 1.52 +++ msn.c 2 Mar 2002 04:52:21 -0000 1.53 @@ -35,6 +35,9 @@ #define USEROPT_HOTMAIL 0 +#define MSN_TYPING_RECV_TIMEOUT 6 +#define MSN_TYPING_SEND_TIMEOUT 4 + struct msn_data { int fd; int trId; @@ -511,8 +514,14 @@ content = strstr(msg, "Content-Type: "); if (!content) return; - if (!g_strncasecmp(content, "Content-Type: text/plain", - strlen("Content-Type: text/plain"))) { + if (!g_strncasecmp(content, "Content-Type: text/x-msmsgscontrol\r\n", + strlen( "Content-Type: text/x-msmsgscontrol\r\n"))) { + if (strstr(content,"TypingUser: ")) { + serv_got_typing(ms->gc, ms->msguser, MSN_TYPING_RECV_TIMEOUT); + return; + } + } else if (!g_strncasecmp(content, "Content-Type: text/plain", + strlen("Content-Type: text/plain"))) { char *skiphead; skiphead = strstr(msg, "\r\n\r\n"); if (!skiphead || !skiphead[4]) { @@ -521,7 +530,7 @@ skiphead += 4; utf = utf8_to_str(skiphead); strip_linefeed(utf); - + if (ms->chat) serv_got_chat_in(ms->gc, ms->chat->id, ms->msguser, flags, utf, time(NULL)); else @@ -1475,6 +1484,24 @@ g_free(md); } +static int msn_send_typing(struct gaim_connection *gc, char *who) { + struct msn_switchboard *ms = msn_find_switch(gc, who); + char header[MSN_BUF_LEN] = "MIME-Version: 1.0\r\n" + "Content-Type: text/x-msmsgscontrol\r\n" + "User-Agent: Gaim/" VERSION "\r\n" + "TypingUser: "; + char buf [MSN_BUF_LEN]; + if (!ms) + return; + g_snprintf(buf, sizeof(buf), "MSG %d N %d\r\n%s%s\r\n\r\n\r\n", + ++ms->trId, + strlen(header) + strlen("\r\n\r\n\r\n") + strlen(gc->username), + header, gc->username); + if (msn_write(ms->fd, buf, strlen(buf)) < 0) + msn_kill_switch(ms); + return MSN_TYPING_SEND_TIMEOUT; +} + static int msn_send_im(struct gaim_connection *gc, char *who, char *message, int flags) { struct msn_data *md = gc->proto_data; @@ -1988,6 +2015,7 @@ ret->login = msn_login; ret->close = msn_close; ret->send_im = msn_send_im; + ret->send_typing = msn_send_typing; ret->away_states = msn_away_states; ret->set_away = msn_set_away; ret->set_idle = msn_set_idle; |