diff -pruN libyahoo2-0.7.5/src/libyahoo2.c libyahoo2-mod/src/libyahoo2.c --- libyahoo2-0.7.5/src/libyahoo2.c 2004-08-09 02:47:59.000000000 +0530 +++ libyahoo2-mod/src/libyahoo2.c 2005-03-09 01:19:52.000000000 +0530 @@ -1348,6 +1348,7 @@ static void yahoo_process_status(struct int away = 0; int idle = 0; char *msg = NULL; + char logoff = FALSE; if(pkt->service == YAHOO_SERVICE_LOGOFF && pkt->status == -1) { YAHOO_CALLBACK(ext_yahoo_login_response)(yd->client_id, YAHOO_LOGIN_DUPL, NULL); @@ -1373,6 +1374,20 @@ static void yahoo_process_status(struct NOTICE(("key %d:%s", pair->key, pair->value)); break; case 7: /* the current buddy */ + if(name) + { + if (state == YAHOO_STATUS_AVAILABLE) { + YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, 0); + } else if (state == YAHOO_STATUS_CUSTOM) { + YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, msg, away); + } else { + YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, idle); + } + + /* reset state variables for next record */ + name = msg = NULL; + state = away = idle = 0; + } name = pair->value; break; case 10: /* state */ @@ -1394,15 +1409,8 @@ static void yahoo_process_status(struct break; case 13: /* in pager? */ if (pkt->service == YAHOO_SERVICE_LOGOFF || strtol(pair->value, NULL, 10) == 0) { + logoff = TRUE; YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, YAHOO_STATUS_OFFLINE, NULL, 1); - break; - } - if (state == YAHOO_STATUS_AVAILABLE) { - YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, 0); - } else if (state == YAHOO_STATUS_CUSTOM) { - YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, msg, away); - } else { - YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, idle); } break; @@ -1418,6 +1426,16 @@ static void yahoo_process_status(struct break; } } + + if(name && logoff == FALSE) { + if (state == YAHOO_STATUS_AVAILABLE) { + YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, 0); + } else if (state == YAHOO_STATUS_CUSTOM) { + YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, msg, away); + } else { + YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, idle); + } + } } static void yahoo_process_list(struct yahoo_input_data *yid, struct yahoo_packet *pkt)