Changeset 5ebff60 for protocols/yahoo/yahoo.c
- Timestamp:
- 2015-02-20T22:50:54Z (9 years ago)
- Branches:
- master
- Children:
- 0b9daac, 3d45471, 7733b8c
- Parents:
- af359b4
- git-author:
- Indent <please@…> (19-02-15 05:47:20)
- git-committer:
- dequis <dx@…> (20-02-15 22:50:54)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/yahoo/yahoo.c
raf359b4 r5ebff60 35 35 36 36 /* A hack to handle removal of buddies not in the group "Buddies" correctly */ 37 struct byahoo_buddygroups 38 { 37 struct byahoo_buddygroups { 39 38 char *buddy; 40 39 char *group; 41 40 }; 42 41 43 struct byahoo_data 44 { 42 struct byahoo_data { 45 43 int y2_id; 46 44 int current_status; … … 49 47 }; 50 48 51 struct byahoo_input_data 52 { 49 struct byahoo_input_data { 53 50 int h; 54 51 void *d; 55 52 }; 56 53 57 struct byahoo_conf_invitation 58 { 54 struct byahoo_conf_invitation { 59 55 char *name; 60 56 struct groupchat *c; … … 67 63 static int byahoo_chat_id = 0; 68 64 69 static char *byahoo_strip( const char *in)65 static char *byahoo_strip(const char *in) 70 66 { 71 67 int len; 72 68 73 69 /* This should get rid of the markup noise at the beginning of the string. */ 74 while( *in ) 75 { 76 if( g_strncasecmp( in, "<font", 5 ) == 0 || 77 g_strncasecmp( in, "<fade", 5 ) == 0 || 78 g_strncasecmp( in, "<alt", 4 ) == 0 ) 79 { 80 char *s = strchr( in, '>' ); 81 if( !s ) 70 while (*in) { 71 if (g_strncasecmp(in, "<font", 5) == 0 || 72 g_strncasecmp(in, "<fade", 5) == 0 || 73 g_strncasecmp(in, "<alt", 4) == 0) { 74 char *s = strchr(in, '>'); 75 if (!s) { 82 76 break; 83 77 } 78 84 79 in = s + 1; 85 } 86 else if( strncmp( in, "\e[", 2 ) == 0 ) 87 { 80 } else if (strncmp(in, "\e[", 2) == 0) { 88 81 const char *s; 89 90 for( s = in + 2; *s && *s != 'm'; s ++ ); 91 92 if( *s != 'm' ) 82 83 for (s = in + 2; *s && *s != 'm'; s++) { 84 ; 85 } 86 87 if (*s != 'm') { 93 88 break; 94 89 } 90 95 91 in = s + 1; 96 } 97 else 98 { 92 } else { 99 93 break; 100 94 } 101 95 } 102 96 103 97 /* This is supposed to get rid of the noise at the end of the line. */ 104 len = strlen( in ); 105 while( len > 0 && ( in[len-1] == '>' || in[len-1] == 'm' ) ) 106 { 98 len = strlen(in); 99 while (len > 0 && (in[len - 1] == '>' || in[len - 1] == 'm')) { 107 100 int blen = len; 108 101 const char *search; 109 110 if ( in[len-1] == '>' )102 103 if (in[len - 1] == '>') { 111 104 search = "</"; 112 else105 } else { 113 106 search = "\e["; 114 107 } 108 115 109 len -= 3; 116 while ( len > 0 && strncmp( in + len, search, 2 ) != 0 )117 len 118 119 if( len <= 0 && strncmp( in, search, 2 ) != 0 ) 120 {110 while (len > 0 && strncmp(in + len, search, 2) != 0) { 111 len--; 112 } 113 114 if (len <= 0 && strncmp(in, search, 2) != 0) { 121 115 len = blen; 122 116 break; 123 117 } 124 118 } 125 126 return( g_strndup( in, len ));127 } 128 129 static void byahoo_init( account_t *acc)130 { 131 set_add( &acc->set, "mail_notifications", "false", set_eval_bool, acc);132 119 120 return(g_strndup(in, len)); 121 } 122 123 static void byahoo_init(account_t *acc) 124 { 125 set_add(&acc->set, "mail_notifications", "false", set_eval_bool, acc); 126 133 127 acc->flags |= ACC_FLAG_AWAY_MESSAGE | ACC_FLAG_STATUS_MESSAGE; 134 128 } 135 129 136 static void byahoo_login( account_t *acc)137 { 138 struct im_connection *ic = imcb_new( acc);139 struct byahoo_data *yd = ic->proto_data = g_new0( struct byahoo_data, 1);130 static void byahoo_login(account_t *acc) 131 { 132 struct im_connection *ic = imcb_new(acc); 133 struct byahoo_data *yd = ic->proto_data = g_new0(struct byahoo_data, 1); 140 134 char *s; 141 135 142 136 yd->logged_in = FALSE; 143 137 yd->current_status = YAHOO_STATUS_AVAILABLE; 144 145 if( ( s = strchr( acc->user, '@' ) ) && g_strcasecmp( s, "@yahoo.com" ) == 0 ) 146 imcb_error( ic, "Your Yahoo! username should just be a username. " 147 "Do not include any @domain part." ); 148 149 imcb_log( ic, "Connecting" ); 150 yd->y2_id = yahoo_init( acc->user, acc->pass ); 151 yahoo_login( yd->y2_id, yd->current_status ); 152 } 153 154 static void byahoo_logout( struct im_connection *ic ) 138 139 if ((s = strchr(acc->user, '@')) && g_strcasecmp(s, "@yahoo.com") == 0) { 140 imcb_error(ic, "Your Yahoo! username should just be a username. " 141 "Do not include any @domain part."); 142 } 143 144 imcb_log(ic, "Connecting"); 145 yd->y2_id = yahoo_init(acc->user, acc->pass); 146 yahoo_login(yd->y2_id, yd->current_status); 147 } 148 149 static void byahoo_logout(struct im_connection *ic) 155 150 { 156 151 struct byahoo_data *yd = (struct byahoo_data *) ic->proto_data; 157 152 GSList *l; 158 159 while ( ic->groupchats )160 imcb_chat_free( ic->groupchats->data);161 162 for( l = yd->buddygroups; l; l = l->next ) 163 {153 154 while (ic->groupchats) { 155 imcb_chat_free(ic->groupchats->data); 156 } 157 158 for (l = yd->buddygroups; l; l = l->next) { 164 159 struct byahoo_buddygroups *bg = l->data; 165 166 g_free( bg->buddy);167 g_free( bg->group);168 g_free( bg);169 } 170 g_slist_free( yd->buddygroups);171 172 yahoo_logoff( yd->y2_id);173 174 g_free( yd);175 } 176 177 static void byahoo_get_info(struct im_connection *ic, char *who) 160 161 g_free(bg->buddy); 162 g_free(bg->group); 163 g_free(bg); 164 } 165 g_slist_free(yd->buddygroups); 166 167 yahoo_logoff(yd->y2_id); 168 169 g_free(yd); 170 } 171 172 static void byahoo_get_info(struct im_connection *ic, char *who) 178 173 { 179 174 /* Just make an URL and let the user fetch the info */ 180 imcb_log(ic, "%s\n%s: %s%s", _("User Info"), 181 182 183 } 184 185 static int byahoo_buddy_msg( struct im_connection *ic, char *who, char *what, int flags)175 imcb_log(ic, "%s\n%s: %s%s", _("User Info"), 176 _("For now, fetch yourself"), yahoo_get_profile_url(), 177 who); 178 } 179 180 static int byahoo_buddy_msg(struct im_connection *ic, char *who, char *what, int flags) 186 181 { 187 182 struct byahoo_data *yd = ic->proto_data; 188 189 yahoo_send_im( yd->y2_id, NULL, who, what, 1, 0);190 183 184 yahoo_send_im(yd->y2_id, NULL, who, what, 1, 0); 185 191 186 return 1; 192 187 } 193 188 194 static int byahoo_send_typing( struct im_connection *ic, char *who, int typing)189 static int byahoo_send_typing(struct im_connection *ic, char *who, int typing) 195 190 { 196 191 struct byahoo_data *yd = ic->proto_data; 197 198 yahoo_send_typing( yd->y2_id, NULL, who, ( typing & OPT_TYPING ) != 0);199 192 193 yahoo_send_typing(yd->y2_id, NULL, who, (typing & OPT_TYPING) != 0); 194 200 195 return 1; 201 196 } 202 197 203 static void byahoo_set_away( struct im_connection *ic, char *state, char *msg)198 static void byahoo_set_away(struct im_connection *ic, char *state, char *msg) 204 199 { 205 200 struct byahoo_data *yd = (struct byahoo_data *) ic->proto_data; 206 207 if( state && msg == NULL ) 208 { 201 202 if (state && msg == NULL) { 209 203 /* Use these states only if msg doesn't contain additional 210 204 info since away messages are only supported with CUSTOM. */ 211 if ( g_strcasecmp( state, "Be Right Back" ) == 0 )205 if (g_strcasecmp(state, "Be Right Back") == 0) { 212 206 yd->current_status = YAHOO_STATUS_BRB; 213 else if( g_strcasecmp( state, "Busy" ) == 0 )207 } else if (g_strcasecmp(state, "Busy") == 0) { 214 208 yd->current_status = YAHOO_STATUS_BUSY; 215 else if( g_strcasecmp( state, "Not At Home" ) == 0 )209 } else if (g_strcasecmp(state, "Not At Home") == 0) { 216 210 yd->current_status = YAHOO_STATUS_NOTATHOME; 217 else if( g_strcasecmp( state, "Not At Desk" ) == 0 )211 } else if (g_strcasecmp(state, "Not At Desk") == 0) { 218 212 yd->current_status = YAHOO_STATUS_NOTATDESK; 219 else if( g_strcasecmp( state, "Not In Office" ) == 0 )213 } else if (g_strcasecmp(state, "Not In Office") == 0) { 220 214 yd->current_status = YAHOO_STATUS_NOTINOFFICE; 221 else if( g_strcasecmp( state, "On Phone" ) == 0 )215 } else if (g_strcasecmp(state, "On Phone") == 0) { 222 216 yd->current_status = YAHOO_STATUS_ONPHONE; 223 else if( g_strcasecmp( state, "On Vacation" ) == 0 )217 } else if (g_strcasecmp(state, "On Vacation") == 0) { 224 218 yd->current_status = YAHOO_STATUS_ONVACATION; 225 else if( g_strcasecmp( state, "Out To Lunch" ) == 0 )219 } else if (g_strcasecmp(state, "Out To Lunch") == 0) { 226 220 yd->current_status = YAHOO_STATUS_OUTTOLUNCH; 227 else if( g_strcasecmp( state, "Stepped Out" ) == 0 )221 } else if (g_strcasecmp(state, "Stepped Out") == 0) { 228 222 yd->current_status = YAHOO_STATUS_STEPPEDOUT; 229 else if( g_strcasecmp( state, "Invisible" ) == 0 )223 } else if (g_strcasecmp(state, "Invisible") == 0) { 230 224 yd->current_status = YAHOO_STATUS_INVISIBLE; 231 else225 } else { 232 226 yd->current_status = YAHOO_STATUS_CUSTOM; 233 }234 else if( msg )227 } 228 } else if (msg) { 235 229 yd->current_status = YAHOO_STATUS_CUSTOM; 236 else230 } else { 237 231 yd->current_status = YAHOO_STATUS_AVAILABLE; 238 239 yahoo_set_away( yd->y2_id, yd->current_status, msg, state ? 2 : 0 ); 240 } 241 242 static GList *byahoo_away_states( struct im_connection *ic ) 232 } 233 234 yahoo_set_away(yd->y2_id, yd->current_status, msg, state ? 2 : 0); 235 } 236 237 static GList *byahoo_away_states(struct im_connection *ic) 243 238 { 244 239 static GList *m = NULL; 245 240 246 if( m == NULL ) 247 { 248 m = g_list_append( m, "Be Right Back" ); 249 m = g_list_append( m, "Busy" ); 250 m = g_list_append( m, "Not At Home" ); 251 m = g_list_append( m, "Not At Desk" ); 252 m = g_list_append( m, "Not In Office" ); 253 m = g_list_append( m, "On Phone" ); 254 m = g_list_append( m, "On Vacation" ); 255 m = g_list_append( m, "Out To Lunch" ); 256 m = g_list_append( m, "Stepped Out" ); 257 m = g_list_append( m, "Invisible" ); 258 } 259 241 if (m == NULL) { 242 m = g_list_append(m, "Be Right Back"); 243 m = g_list_append(m, "Busy"); 244 m = g_list_append(m, "Not At Home"); 245 m = g_list_append(m, "Not At Desk"); 246 m = g_list_append(m, "Not In Office"); 247 m = g_list_append(m, "On Phone"); 248 m = g_list_append(m, "On Vacation"); 249 m = g_list_append(m, "Out To Lunch"); 250 m = g_list_append(m, "Stepped Out"); 251 m = g_list_append(m, "Invisible"); 252 } 253 260 254 return m; 261 255 } 262 256 263 static void byahoo_keepalive( struct im_connection *ic)257 static void byahoo_keepalive(struct im_connection *ic) 264 258 { 265 259 struct byahoo_data *yd = ic->proto_data; 266 267 yahoo_keepalive( yd->y2_id);268 } 269 270 static void byahoo_add_buddy( struct im_connection *ic, char *who, char *group)260 261 yahoo_keepalive(yd->y2_id); 262 } 263 264 static void byahoo_add_buddy(struct im_connection *ic, char *who, char *group) 271 265 { 272 266 struct byahoo_data *yd = (struct byahoo_data *) ic->proto_data; 273 267 bee_user_t *bu; 274 275 if( group && ( bu = bee_user_by_handle( ic->bee, ic, who ) ) && bu->group ) 276 { 268 269 if (group && (bu = bee_user_by_handle(ic->bee, ic, who)) && bu->group) { 277 270 GSList *bgl; 278 271 279 272 /* If the person is in our list already, this is a group change. */ 280 yahoo_change_buddy_group( yd->y2_id, who, bu->group->name, group);281 273 yahoo_change_buddy_group(yd->y2_id, who, bu->group->name, group); 274 282 275 /* No idea how often people have people in multiple groups and 283 276 BitlBee doesn't currently support this anyway .. but keep 284 277 this struct up-to-date for now. */ 285 for( bgl = yd->buddygroups; bgl; bgl = bgl->next ) 286 { 278 for (bgl = yd->buddygroups; bgl; bgl = bgl->next) { 287 279 struct byahoo_buddygroups *bg = bgl->data; 288 289 if( g_strcasecmp( bg->buddy, who ) == 0 && 290 g_strcasecmp( bg->group, bu->group->name ) == 0 ) 291 { 292 g_free( bg->group ); 293 bg->group = g_strdup( group ); 280 281 if (g_strcasecmp(bg->buddy, who) == 0 && 282 g_strcasecmp(bg->group, bu->group->name) == 0) { 283 g_free(bg->group); 284 bg->group = g_strdup(group); 294 285 } 295 286 } 296 } 297 else298 yahoo_add_buddy( yd->y2_id, who, group ? group : BYAHOO_DEFAULT_GROUP, NULL );299 } 300 301 static void byahoo_remove_buddy( struct im_connection *ic, char *who, char *group)287 } else { 288 yahoo_add_buddy(yd->y2_id, who, group ? group : BYAHOO_DEFAULT_GROUP, NULL); 289 } 290 } 291 292 static void byahoo_remove_buddy(struct im_connection *ic, char *who, char *group) 302 293 { 303 294 struct byahoo_data *yd = (struct byahoo_data *) ic->proto_data; 304 295 GSList *bgl; 305 306 yahoo_remove_buddy( yd->y2_id, who, BYAHOO_DEFAULT_GROUP ); 307 308 for( bgl = yd->buddygroups; bgl; bgl = bgl->next ) 309 { 296 297 yahoo_remove_buddy(yd->y2_id, who, BYAHOO_DEFAULT_GROUP); 298 299 for (bgl = yd->buddygroups; bgl; bgl = bgl->next) { 310 300 struct byahoo_buddygroups *bg = bgl->data; 311 312 if( g_strcasecmp( bg->buddy, who ) == 0 ) 313 yahoo_remove_buddy( yd->y2_id, who, bg->group ); 314 } 315 } 316 317 static void byahoo_chat_msg( struct groupchat *c, char *message, int flags ) 301 302 if (g_strcasecmp(bg->buddy, who) == 0) { 303 yahoo_remove_buddy(yd->y2_id, who, bg->group); 304 } 305 } 306 } 307 308 static void byahoo_chat_msg(struct groupchat *c, char *message, int flags) 318 309 { 319 310 struct byahoo_data *yd = (struct byahoo_data *) c->ic->proto_data; 320 321 yahoo_conference_message( yd->y2_id, NULL, c->data, c->title, message, 1);322 } 323 324 static void byahoo_chat_invite( struct groupchat *c, char *who, char *msg)311 312 yahoo_conference_message(yd->y2_id, NULL, c->data, c->title, message, 1); 313 } 314 315 static void byahoo_chat_invite(struct groupchat *c, char *who, char *msg) 325 316 { 326 317 struct byahoo_data *yd = (struct byahoo_data *) c->ic->proto_data; 327 328 yahoo_conference_invite( yd->y2_id, NULL, c->data, c->title, msg ? msg : "");329 } 330 331 static void byahoo_chat_leave( struct groupchat *c)318 319 yahoo_conference_invite(yd->y2_id, NULL, c->data, c->title, msg ? msg : ""); 320 } 321 322 static void byahoo_chat_leave(struct groupchat *c) 332 323 { 333 324 struct byahoo_data *yd = (struct byahoo_data *) c->ic->proto_data; 334 335 yahoo_conference_logoff( yd->y2_id, NULL, c->data, c->title);336 imcb_chat_free( c);337 } 338 339 static struct groupchat *byahoo_chat_with( struct im_connection *ic, char *who)325 326 yahoo_conference_logoff(yd->y2_id, NULL, c->data, c->title); 327 imcb_chat_free(c); 328 } 329 330 static struct groupchat *byahoo_chat_with(struct im_connection *ic, char *who) 340 331 { 341 332 struct byahoo_data *yd = (struct byahoo_data *) ic->proto_data; … … 343 334 char *roomname; 344 335 YList *members; 345 346 roomname = g_strdup_printf( "%s-Bee-%d", ic->acc->user, byahoo_chat_id);347 348 c = imcb_chat_new( ic, roomname);349 imcb_chat_add_buddy( c, ic->acc->user);350 336 337 roomname = g_strdup_printf("%s-Bee-%d", ic->acc->user, byahoo_chat_id); 338 339 c = imcb_chat_new(ic, roomname); 340 imcb_chat_add_buddy(c, ic->acc->user); 341 351 342 /* FIXME: Free this thing when the chat's destroyed. We can't *always* 352 343 do this because it's not always created here. */ 353 c->data = members = g_new0( YList, 1);354 members->data = g_strdup( who);355 356 yahoo_conference_invite( yd->y2_id, NULL, members, roomname, "Please join my groupchat...");357 358 g_free( roomname);359 344 c->data = members = g_new0(YList, 1); 345 members->data = g_strdup(who); 346 347 yahoo_conference_invite(yd->y2_id, NULL, members, roomname, "Please join my groupchat..."); 348 349 g_free(roomname); 350 360 351 return c; 361 352 } 362 353 363 static void byahoo_auth_allow( struct im_connection *ic, const char *who)354 static void byahoo_auth_allow(struct im_connection *ic, const char *who) 364 355 { 365 356 struct byahoo_data *yd = (struct byahoo_data *) ic->proto_data; 366 367 yahoo_confirm_buddy( yd->y2_id, who, 0, "");368 } 369 370 static void byahoo_auth_deny( struct im_connection *ic, const char *who)357 358 yahoo_confirm_buddy(yd->y2_id, who, 0, ""); 359 } 360 361 static void byahoo_auth_deny(struct im_connection *ic, const char *who) 371 362 { 372 363 struct byahoo_data *yd = (struct byahoo_data *) ic->proto_data; 373 374 yahoo_confirm_buddy( yd->y2_id, who, 1, "");375 } 376 377 void byahoo_initmodule( 364 365 yahoo_confirm_buddy(yd->y2_id, who, 1, ""); 366 } 367 368 void byahoo_initmodule() 378 369 { 379 370 struct prpl *ret = g_new0(struct prpl, 1); 371 380 372 ret->name = "yahoo"; 381 ret->mms = 832;/* this guess taken from libotr UPGRADING file */373 ret->mms = 832; /* this guess taken from libotr UPGRADING file */ 382 374 ret->init = byahoo_init; 383 375 384 376 ret->login = byahoo_login; 385 377 ret->keepalive = byahoo_keepalive; 386 378 ret->logout = byahoo_logout; 387 379 388 380 ret->buddy_msg = byahoo_buddy_msg; 389 381 ret->get_info = byahoo_get_info; … … 393 385 ret->remove_buddy = byahoo_remove_buddy; 394 386 ret->send_typing = byahoo_send_typing; 395 387 396 388 ret->chat_msg = byahoo_chat_msg; 397 389 ret->chat_invite = byahoo_chat_invite; … … 400 392 401 393 ret->handle_cmp = g_strcasecmp; 402 394 403 395 ret->auth_allow = byahoo_auth_allow; 404 396 ret->auth_deny = byahoo_auth_deny; 405 397 406 398 register_protocol(ret); 407 399 } 408 400 409 static struct im_connection *byahoo_get_ic_by_id( int id)401 static struct im_connection *byahoo_get_ic_by_id(int id) 410 402 { 411 403 GSList *l; 412 404 struct im_connection *ic; 413 405 struct byahoo_data *yd; 414 415 for( l = get_connections(); l; l = l->next ) 416 { 406 407 for (l = get_connections(); l; l = l->next) { 417 408 ic = l->data; 418 409 yd = ic->proto_data; 419 420 if( strcmp( ic->acc->prpl->name, "yahoo" ) == 0 && yd->y2_id == id ) 421 return( ic ); 422 } 423 424 return( NULL ); 410 411 if (strcmp(ic->acc->prpl->name, "yahoo") == 0 && yd->y2_id == id) { 412 return(ic); 413 } 414 } 415 416 return(NULL); 425 417 } 426 418 … … 428 420 /* Now it's callback time! */ 429 421 430 struct byahoo_connect_callback_data 431 { 422 struct byahoo_connect_callback_data { 432 423 int fd; 433 424 yahoo_connect_callback callback; … … 436 427 }; 437 428 438 void byahoo_connect_callback( gpointer data, gint source, b_input_condition cond)429 void byahoo_connect_callback(gpointer data, gint source, b_input_condition cond) 439 430 { 440 431 struct byahoo_connect_callback_data *d = data; 441 442 if( !byahoo_get_ic_by_id( d->id ) ) 443 { 444 g_free( d ); 432 433 if (!byahoo_get_ic_by_id(d->id)) { 434 g_free(d); 445 435 return; 446 436 } 447 448 d->callback( NULL + d->fd, 0, d->data ); 449 g_free( d ); 450 } 451 452 struct byahoo_read_ready_data 453 { 437 438 d->callback(NULL + d->fd, 0, d->data); 439 g_free(d); 440 } 441 442 struct byahoo_read_ready_data { 454 443 int id; 455 444 int fd; … … 458 447 }; 459 448 460 gboolean byahoo_read_ready_callback( gpointer data, gint source, b_input_condition cond)449 gboolean byahoo_read_ready_callback(gpointer data, gint source, b_input_condition cond) 461 450 { 462 451 struct byahoo_read_ready_data *d = data; 463 464 if ( !byahoo_get_ic_by_id( d->id ) )452 453 if (!byahoo_get_ic_by_id(d->id)) { 465 454 /* WTF doesn't libyahoo clean this up? */ 466 455 return FALSE; 467 468 yahoo_read_ready( d->id, NULL + d->fd, d->data ); 469 456 } 457 458 yahoo_read_ready(d->id, NULL + d->fd, d->data); 459 470 460 return TRUE; 471 461 } 472 462 473 struct byahoo_write_ready_data 474 { 463 struct byahoo_write_ready_data { 475 464 int id; 476 465 int fd; … … 479 468 }; 480 469 481 gboolean byahoo_write_ready_callback( gpointer data, gint source, b_input_condition cond)470 gboolean byahoo_write_ready_callback(gpointer data, gint source, b_input_condition cond) 482 471 { 483 472 struct byahoo_write_ready_data *d = data; 484 485 return yahoo_write_ready( d->id, NULL + d->fd, d->data);486 } 487 488 void ext_yahoo_login_response( int id, int succ, const char *url)489 { 490 struct im_connection *ic = byahoo_get_ic_by_id( id);473 474 return yahoo_write_ready(d->id, NULL + d->fd, d->data); 475 } 476 477 void ext_yahoo_login_response(int id, int succ, const char *url) 478 { 479 struct im_connection *ic = byahoo_get_ic_by_id(id); 491 480 struct byahoo_data *yd = NULL; 492 493 if( ic == NULL ) 494 { 481 482 if (ic == NULL) { 495 483 /* libyahoo2 seems to call this one twice when something 496 484 went wrong sometimes. Don't know why. Because we clean 497 485 up the connection on the first failure, the second 498 486 should be ignored. */ 499 487 500 488 return; 501 489 } 502 490 503 491 yd = (struct byahoo_data *) ic->proto_data; 504 505 if( succ == YAHOO_LOGIN_OK ) 506 { 507 imcb_connected( ic ); 508 492 493 if (succ == YAHOO_LOGIN_OK) { 494 imcb_connected(ic); 495 509 496 yd->logged_in = TRUE; 510 } 511 else 512 { 497 } else { 513 498 char *errstr; 514 499 int allow_reconnect = FALSE; 515 500 516 501 yd->logged_in = FALSE; 517 518 if ( succ == YAHOO_LOGIN_UNAME )502 503 if (succ == YAHOO_LOGIN_UNAME) { 519 504 errstr = "Incorrect Yahoo! username"; 520 else if( succ == YAHOO_LOGIN_PASSWD )505 } else if (succ == YAHOO_LOGIN_PASSWD) { 521 506 errstr = "Incorrect Yahoo! password"; 522 else if( succ == YAHOO_LOGIN_LOCK )507 } else if (succ == YAHOO_LOGIN_LOCK) { 523 508 errstr = "Yahoo! account locked"; 524 else if( succ == 1236 )509 } else if (succ == 1236) { 525 510 errstr = "Yahoo! account locked or machine temporarily banned"; 526 else if( succ == YAHOO_LOGIN_DUPL )511 } else if (succ == YAHOO_LOGIN_DUPL) { 527 512 errstr = "Logged in on a different machine or device"; 528 else if( succ == YAHOO_LOGIN_SOCK ) 529 { 513 } else if (succ == YAHOO_LOGIN_SOCK) { 530 514 errstr = "Socket problem"; 531 515 allow_reconnect = TRUE; 532 } 533 else 516 } else { 534 517 errstr = "Unknown error"; 535 536 if( url && *url ) 537 imcb_error( ic, "Error %d (%s). See %s for more information.", succ, errstr, url ); 538 else 539 imcb_error( ic, "Error %d (%s)", succ, errstr ); 540 541 imc_logout( ic, allow_reconnect ); 542 } 543 } 544 545 void ext_yahoo_got_buddies( int id, YList *buds ) 546 { 547 struct im_connection *ic = byahoo_get_ic_by_id( id ); 518 } 519 520 if (url && *url) { 521 imcb_error(ic, "Error %d (%s). See %s for more information.", succ, errstr, url); 522 } else { 523 imcb_error(ic, "Error %d (%s)", succ, errstr); 524 } 525 526 imc_logout(ic, allow_reconnect); 527 } 528 } 529 530 void ext_yahoo_got_buddies(int id, YList *buds) 531 { 532 struct im_connection *ic = byahoo_get_ic_by_id(id); 548 533 struct byahoo_data *yd = ic->proto_data; 549 534 YList *bl = buds; 550 551 while( bl ) 552 { 535 536 while (bl) { 553 537 struct yahoo_buddy *b = bl->data; 554 538 struct byahoo_buddygroups *bg; 555 556 if( strcmp( b->group, BYAHOO_DEFAULT_GROUP ) != 0 ) 557 { 558 bg = g_new0( struct byahoo_buddygroups, 1 ); 559 560 bg->buddy = g_strdup( b->id ); 561 bg->group = g_strdup( b->group ); 562 yd->buddygroups = g_slist_append( yd->buddygroups, bg ); 563 } 564 565 imcb_add_buddy( ic, b->id, b->group ); 566 imcb_rename_buddy( ic, b->id, b->real_name ); 567 539 540 if (strcmp(b->group, BYAHOO_DEFAULT_GROUP) != 0) { 541 bg = g_new0(struct byahoo_buddygroups, 1); 542 543 bg->buddy = g_strdup(b->id); 544 bg->group = g_strdup(b->group); 545 yd->buddygroups = g_slist_append(yd->buddygroups, bg); 546 } 547 548 imcb_add_buddy(ic, b->id, b->group); 549 imcb_rename_buddy(ic, b->id, b->real_name); 550 568 551 bl = bl->next; 569 552 } 570 553 } 571 554 572 void ext_yahoo_got_identities( int id, YList *ids)573 { 574 } 575 576 void ext_yahoo_got_cookies( int id)577 { 578 } 579 580 void ext_yahoo_status_changed( int id, const char *who, int stat, const char *msg, int away, int idle, int mobile)581 { 582 struct im_connection *ic = byahoo_get_ic_by_id( id);555 void ext_yahoo_got_identities(int id, YList *ids) 556 { 557 } 558 559 void ext_yahoo_got_cookies(int id) 560 { 561 } 562 563 void ext_yahoo_status_changed(int id, const char *who, int stat, const char *msg, int away, int idle, int mobile) 564 { 565 struct im_connection *ic = byahoo_get_ic_by_id(id); 583 566 char *state_string = NULL; 584 567 int flags = OPT_LOGGED_IN; 585 586 if ( away )568 569 if (away) { 587 570 flags |= OPT_AWAY; 588 if( mobile ) 571 } 572 if (mobile) { 589 573 flags |= OPT_MOBILE; 590 591 switch (stat) 592 {574 } 575 576 switch (stat) { 593 577 case YAHOO_STATUS_BRB: 594 578 state_string = "Be Right Back"; … … 632 616 break; 633 617 } 634 635 imcb_buddy_status( ic, who, flags, state_string, msg ); 636 637 if( stat == YAHOO_STATUS_IDLE ) 638 imcb_buddy_times( ic, who, 0, idle ); 639 } 640 641 void ext_yahoo_got_buzz( int id, const char *me, const char *who, long tm ) 642 { 643 } 644 645 void ext_yahoo_got_im( int id, const char *me, const char *who, const char *msg, long tm, int stat, int utf8 ) 646 { 647 struct im_connection *ic = byahoo_get_ic_by_id( id ); 618 619 imcb_buddy_status(ic, who, flags, state_string, msg); 620 621 if (stat == YAHOO_STATUS_IDLE) { 622 imcb_buddy_times(ic, who, 0, idle); 623 } 624 } 625 626 void ext_yahoo_got_buzz(int id, const char *me, const char *who, long tm) 627 { 628 } 629 630 void ext_yahoo_got_im(int id, const char *me, const char *who, const char *msg, long tm, int stat, int utf8) 631 { 632 struct im_connection *ic = byahoo_get_ic_by_id(id); 648 633 char *m; 649 650 if ( msg )651 {652 m = byahoo_strip( msg);653 imcb_buddy_msg( ic, (char*) who, (char*) m, 0, 0);654 g_free( m );655 656 } 657 658 void ext_yahoo_got_file( int id, const char *ignored, const char *who, const char *msg, 659 const char *fname, unsigned long fesize, char *trid ) 660 { 661 struct im_connection *ic = byahoo_get_ic_by_id( id ); 662 663 imcb_log( ic, "Got a file transfer (file = %s) from %s. Ignoring for now due to lack of support.", fname, who ); 664 } 665 666 void ext_yahoo_got_ft_data( int id, const unsigned char *in, int len, void *data ) 667 { 668 } 669 670 void ext_yahoo_file_transfer_done( int id, int result, void *data ) 671 { 672 } 673 674 void ext_yahoo_typing_notify( int id, const char *ignored, const char *who, int stat ) 675 { 676 struct im_connection *ic = byahoo_get_ic_by_id( id ); 677 678 if( stat == 1 )679 imcb_buddy_typing( ic, (char*) who, OPT_TYPING );680 else681 imcb_buddy_typing( ic, (char*) who, 0 );682 } 683 684 void ext_yahoo_system_message( int id, const char *me, const char *who, const char *msg)685 { 686 struct im_connection *ic = byahoo_get_ic_by_id( id);687 688 imcb_log( ic, "Yahoo! system message: %s", msg);689 } 690 691 void ext_yahoo_webcam_invite( int id, const char *ignored, const char *from)692 { 693 struct im_connection *ic = byahoo_get_ic_by_id( id);694 695 imcb_log( ic, "Got a webcam invitation from %s. IRC+webcams is a no-no though...", from);696 } 697 698 void ext_yahoo_error( int id, const char *err, int fatal, int num)699 { 700 struct im_connection *ic = byahoo_get_ic_by_id( id);701 702 imcb_error( ic, "%s", err);634 635 if (msg) { 636 m = byahoo_strip(msg); 637 imcb_buddy_msg(ic, (char *) who, (char *) m, 0, 0); 638 g_free(m); 639 } 640 } 641 642 void ext_yahoo_got_file(int id, const char *ignored, const char *who, const char *msg, 643 const char *fname, unsigned long fesize, char *trid) 644 { 645 struct im_connection *ic = byahoo_get_ic_by_id(id); 646 647 imcb_log(ic, "Got a file transfer (file = %s) from %s. Ignoring for now due to lack of support.", fname, who); 648 } 649 650 void ext_yahoo_got_ft_data(int id, const unsigned char *in, int len, void *data) 651 { 652 } 653 654 void ext_yahoo_file_transfer_done(int id, int result, void *data) 655 { 656 } 657 658 void ext_yahoo_typing_notify(int id, const char *ignored, const char *who, int stat) 659 { 660 struct im_connection *ic = byahoo_get_ic_by_id(id); 661 662 if (stat == 1) { 663 imcb_buddy_typing(ic, (char *) who, OPT_TYPING); 664 } else { 665 imcb_buddy_typing(ic, (char *) who, 0); 666 } 667 } 668 669 void ext_yahoo_system_message(int id, const char *me, const char *who, const char *msg) 670 { 671 struct im_connection *ic = byahoo_get_ic_by_id(id); 672 673 imcb_log(ic, "Yahoo! system message: %s", msg); 674 } 675 676 void ext_yahoo_webcam_invite(int id, const char *ignored, const char *from) 677 { 678 struct im_connection *ic = byahoo_get_ic_by_id(id); 679 680 imcb_log(ic, "Got a webcam invitation from %s. IRC+webcams is a no-no though...", from); 681 } 682 683 void ext_yahoo_error(int id, const char *err, int fatal, int num) 684 { 685 struct im_connection *ic = byahoo_get_ic_by_id(id); 686 687 imcb_error(ic, "%s", err); 703 688 } 704 689 705 690 /* TODO: Clear up the mess of inp and d structures */ 706 int ext_yahoo_add_handler( int id, void *fd_, yahoo_input_condition cond, void *data)707 { 708 struct byahoo_input_data *inp = g_new0( struct byahoo_input_data, 1);691 int ext_yahoo_add_handler(int id, void *fd_, yahoo_input_condition cond, void *data) 692 { 693 struct byahoo_input_data *inp = g_new0(struct byahoo_input_data, 1); 709 694 int fd = (long) fd_; 710 711 if( cond == YAHOO_INPUT_READ ) 712 { 713 struct byahoo_read_ready_data *d = g_new0( struct byahoo_read_ready_data, 1 ); 714 695 696 if (cond == YAHOO_INPUT_READ) { 697 struct byahoo_read_ready_data *d = g_new0(struct byahoo_read_ready_data, 1); 698 715 699 d->id = id; 716 700 d->fd = fd; 717 701 d->data = data; 718 702 719 703 inp->d = d; 720 d->tag = inp->h = b_input_add( fd, B_EV_IO_READ, (b_event_handler) byahoo_read_ready_callback, (gpointer) d ); 721 } 722 else if( cond == YAHOO_INPUT_WRITE ) 723 { 724 struct byahoo_write_ready_data *d = g_new0( struct byahoo_write_ready_data, 1 ); 725 704 d->tag = inp->h = b_input_add(fd, B_EV_IO_READ, (b_event_handler) byahoo_read_ready_callback, 705 (gpointer) d); 706 } else if (cond == YAHOO_INPUT_WRITE) { 707 struct byahoo_write_ready_data *d = g_new0(struct byahoo_write_ready_data, 1); 708 726 709 d->id = id; 727 710 d->fd = fd; 728 711 d->data = data; 729 712 730 713 inp->d = d; 731 d->tag = inp->h = b_input_add( fd, B_EV_IO_WRITE, (b_event_handler) byahoo_write_ready_callback, (gpointer) d );732 }733 else734 {735 g_free( inp);714 d->tag = inp->h = 715 b_input_add(fd, B_EV_IO_WRITE, (b_event_handler) byahoo_write_ready_callback, 716 (gpointer) d); 717 } else { 718 g_free(inp); 736 719 return -1; 737 720 /* Panic... */ 738 721 } 739 740 byahoo_inputs = g_slist_append( byahoo_inputs, inp);722 723 byahoo_inputs = g_slist_append(byahoo_inputs, inp); 741 724 return inp->h; 742 725 } 743 726 744 void ext_yahoo_remove_handler( int id, int tag)727 void ext_yahoo_remove_handler(int id, int tag) 745 728 { 746 729 struct byahoo_input_data *inp; 747 730 GSList *l = byahoo_inputs; 748 749 while( l ) 750 { 731 732 while (l) { 751 733 inp = l->data; 752 if( inp->h == tag ) 753 { 754 g_free( inp->d ); 755 g_free( inp ); 756 byahoo_inputs = g_slist_remove( byahoo_inputs, inp ); 734 if (inp->h == tag) { 735 g_free(inp->d); 736 g_free(inp); 737 byahoo_inputs = g_slist_remove(byahoo_inputs, inp); 757 738 break; 758 739 } 759 740 l = l->next; 760 741 } 761 762 b_event_remove( tag ); 763 } 764 765 int ext_yahoo_connect_async( int id, const char *host, int port, yahoo_connect_callback callback, void *data, int use_ssl ) 742 743 b_event_remove(tag); 744 } 745 746 int ext_yahoo_connect_async(int id, const char *host, int port, yahoo_connect_callback callback, void *data, 747 int use_ssl) 766 748 { 767 749 struct byahoo_connect_callback_data *d; 768 750 int fd; 769 770 d = g_new0( struct byahoo_connect_callback_data, 1 ); 771 if( ( fd = proxy_connect( host, port, (b_event_handler) byahoo_connect_callback, (gpointer) d ) ) < 0 ) 772 { 773 g_free( d ); 774 return( fd ); 751 752 d = g_new0(struct byahoo_connect_callback_data, 1); 753 if ((fd = proxy_connect(host, port, (b_event_handler) byahoo_connect_callback, (gpointer) d)) < 0) { 754 g_free(d); 755 return(fd); 775 756 } 776 757 d->fd = fd; … … 778 759 d->data = data; 779 760 d->id = id; 780 761 781 762 return fd; 782 763 } 783 764 784 char *ext_yahoo_get_ip_addr( const char *domain)765 char *ext_yahoo_get_ip_addr(const char *domain) 785 766 { 786 767 return NULL; 787 768 } 788 769 789 int ext_yahoo_write( void *fd, char *buf, int len)790 { 791 return write( (long) fd, buf, len);792 } 793 794 int ext_yahoo_read( void *fd, char *buf, int len)795 { 796 return read( (long) fd, buf, len);797 } 798 799 void ext_yahoo_close( void *fd)800 { 801 close( (long) fd);802 } 803 804 void ext_yahoo_got_buddy_change_group( 805 const char *old_group, const char *new_group)806 { 807 struct im_connection *ic = byahoo_get_ic_by_id( id);808 809 imcb_add_buddy( ic, who, new_group);810 } 811 812 static void byahoo_accept_conf( void *data)770 int ext_yahoo_write(void *fd, char *buf, int len) 771 { 772 return write((long) fd, buf, len); 773 } 774 775 int ext_yahoo_read(void *fd, char *buf, int len) 776 { 777 return read((long) fd, buf, len); 778 } 779 780 void ext_yahoo_close(void *fd) 781 { 782 close((long) fd); 783 } 784 785 void ext_yahoo_got_buddy_change_group(int id, const char *me, const char *who, 786 const char *old_group, const char *new_group) 787 { 788 struct im_connection *ic = byahoo_get_ic_by_id(id); 789 790 imcb_add_buddy(ic, who, new_group); 791 } 792 793 static void byahoo_accept_conf(void *data) 813 794 { 814 795 struct byahoo_conf_invitation *inv = data; 815 796 struct groupchat *b = NULL; 816 797 GSList *l; 817 818 for( l = inv->ic->groupchats; l; l = l->next ) 819 { 798 799 for (l = inv->ic->groupchats; l; l = l->next) { 820 800 b = l->data; 821 if ( b == inv->c )801 if (b == inv->c) { 822 802 break; 823 } 824 825 if( b != NULL ) 826 { 827 yahoo_conference_logon( inv->yid, NULL, inv->members, inv->name ); 828 imcb_chat_add_buddy( inv->c, inv->ic->acc->user ); 829 } 830 else 831 { 832 imcb_log( inv->ic, "Duplicate/corrupted invitation to `%s'.", inv->name ); 833 } 834 835 g_free( inv->name ); 836 g_free( inv ); 837 } 838 839 static void byahoo_reject_conf( void *data ) 803 } 804 } 805 806 if (b != NULL) { 807 yahoo_conference_logon(inv->yid, NULL, inv->members, inv->name); 808 imcb_chat_add_buddy(inv->c, inv->ic->acc->user); 809 } else { 810 imcb_log(inv->ic, "Duplicate/corrupted invitation to `%s'.", inv->name); 811 } 812 813 g_free(inv->name); 814 g_free(inv); 815 } 816 817 static void byahoo_reject_conf(void *data) 840 818 { 841 819 struct byahoo_conf_invitation *inv = data; 842 843 yahoo_conference_decline( inv->yid, NULL, inv->members, inv->name, "User rejected groupchat");844 imcb_chat_free( inv->c);845 g_free( inv->name);846 g_free( inv);847 } 848 849 void ext_yahoo_got_conf_invite( 850 const char *who, const char *room, const char *msg, YList *members)851 { 852 struct im_connection *ic = byahoo_get_ic_by_id( id);820 821 yahoo_conference_decline(inv->yid, NULL, inv->members, inv->name, "User rejected groupchat"); 822 imcb_chat_free(inv->c); 823 g_free(inv->name); 824 g_free(inv); 825 } 826 827 void ext_yahoo_got_conf_invite(int id, const char *ignored, 828 const char *who, const char *room, const char *msg, YList *members) 829 { 830 struct im_connection *ic = byahoo_get_ic_by_id(id); 853 831 struct byahoo_conf_invitation *inv; 854 832 char txt[1024]; 855 833 YList *m; 856 857 if ( g_strcasecmp( who, ic->acc->user ) == 0 )834 835 if (g_strcasecmp(who, ic->acc->user) == 0) { 858 836 /* WTF, Yahoo! seems to echo these now? */ 859 837 return; 860 861 inv = g_malloc( sizeof( struct byahoo_conf_invitation ) ); 862 memset( inv, 0, sizeof( struct byahoo_conf_invitation ) ); 863 inv->name = g_strdup( room ); 864 inv->c = imcb_chat_new( ic, (char*) room ); 838 } 839 840 inv = g_malloc(sizeof(struct byahoo_conf_invitation)); 841 memset(inv, 0, sizeof(struct byahoo_conf_invitation)); 842 inv->name = g_strdup(room); 843 inv->c = imcb_chat_new(ic, (char *) room); 865 844 inv->c->data = members; 866 845 inv->yid = id; 867 846 inv->members = members; 868 847 inv->ic = ic; 869 870 for( m = members; m; m = m->next ) 871 if( g_strcasecmp( m->data, ic->acc->user ) != 0 ) 872 imcb_chat_add_buddy( inv->c, m->data ); 873 874 g_snprintf( txt, 1024, "Got an invitation to chatroom %s from %s: %s", room, who, msg ); 875 876 imcb_ask( ic, txt, inv, byahoo_accept_conf, byahoo_reject_conf ); 877 } 878 879 void ext_yahoo_conf_userdecline( int id, const char *ignored, const char *who, const char *room, const char *msg ) 880 { 881 struct im_connection *ic = byahoo_get_ic_by_id( id ); 882 883 imcb_log( ic, "Invite to chatroom %s rejected by %s: %s", room, who, msg ); 884 } 885 886 void ext_yahoo_conf_userjoin( int id, const char *ignored, const char *who, const char *room ) 887 { 888 struct im_connection *ic = byahoo_get_ic_by_id( id ); 889 struct groupchat *c = bee_chat_by_title( ic->bee, ic, room ); 890 891 if( c ) 892 imcb_chat_add_buddy( c, (char*) who ); 893 } 894 895 void ext_yahoo_conf_userleave( int id, const char *ignored, const char *who, const char *room ) 896 897 { 898 struct im_connection *ic = byahoo_get_ic_by_id( id ); 899 struct groupchat *c = bee_chat_by_title( ic->bee, ic, room ); 900 901 if( c ) 902 imcb_chat_remove_buddy( c, (char*) who, "" ); 903 } 904 905 void ext_yahoo_conf_message( int id, const char *ignored, const char *who, const char *room, const char *msg, int utf8 ) 906 { 907 struct im_connection *ic = byahoo_get_ic_by_id( id ); 908 char *m = byahoo_strip( msg ); 909 struct groupchat *c = bee_chat_by_title( ic->bee, ic, room ); 910 911 if( c ) 912 imcb_chat_msg( c, (char*) who, (char*) m, 0, 0 ); 913 g_free( m ); 914 } 915 916 void ext_yahoo_chat_cat_xml( int id, const char *xml ) 917 { 918 } 919 920 void ext_yahoo_chat_join( int id, const char *who, const char *room, const char *topic, YList *members, void *fd ) 921 { 922 } 923 924 void ext_yahoo_chat_userjoin( int id, const char *me, const char *room, struct yahoo_chat_member *who ) 848 849 for (m = members; m; m = m->next) { 850 if (g_strcasecmp(m->data, ic->acc->user) != 0) { 851 imcb_chat_add_buddy(inv->c, m->data); 852 } 853 } 854 855 g_snprintf(txt, 1024, "Got an invitation to chatroom %s from %s: %s", room, who, msg); 856 857 imcb_ask(ic, txt, inv, byahoo_accept_conf, byahoo_reject_conf); 858 } 859 860 void ext_yahoo_conf_userdecline(int id, const char *ignored, const char *who, const char *room, const char *msg) 861 { 862 struct im_connection *ic = byahoo_get_ic_by_id(id); 863 864 imcb_log(ic, "Invite to chatroom %s rejected by %s: %s", room, who, msg); 865 } 866 867 void ext_yahoo_conf_userjoin(int id, const char *ignored, const char *who, const char *room) 868 { 869 struct im_connection *ic = byahoo_get_ic_by_id(id); 870 struct groupchat *c = bee_chat_by_title(ic->bee, ic, room); 871 872 if (c) { 873 imcb_chat_add_buddy(c, (char *) who); 874 } 875 } 876 877 void ext_yahoo_conf_userleave(int id, const char *ignored, const char *who, const char *room) 878 879 { 880 struct im_connection *ic = byahoo_get_ic_by_id(id); 881 struct groupchat *c = bee_chat_by_title(ic->bee, ic, room); 882 883 if (c) { 884 imcb_chat_remove_buddy(c, (char *) who, ""); 885 } 886 } 887 888 void ext_yahoo_conf_message(int id, const char *ignored, const char *who, const char *room, const char *msg, int utf8) 889 { 890 struct im_connection *ic = byahoo_get_ic_by_id(id); 891 char *m = byahoo_strip(msg); 892 struct groupchat *c = bee_chat_by_title(ic->bee, ic, room); 893 894 if (c) { 895 imcb_chat_msg(c, (char *) who, (char *) m, 0, 0); 896 } 897 g_free(m); 898 } 899 900 void ext_yahoo_chat_cat_xml(int id, const char *xml) 901 { 902 } 903 904 void ext_yahoo_chat_join(int id, const char *who, const char *room, const char *topic, YList *members, void *fd) 905 { 906 } 907 908 void ext_yahoo_chat_userjoin(int id, const char *me, const char *room, struct yahoo_chat_member *who) 925 909 { 926 910 free(who->id); 927 911 free(who->alias); 928 912 free(who->location); 929 free(who); 930 } 931 932 void ext_yahoo_chat_userleave( int id, const char *me, const char *room, const char *who ) 933 { 934 } 935 936 void ext_yahoo_chat_message( int id, const char *me, const char *who, const char *room, const char *msg, int msgtype, int utf8 ) 937 { 938 } 939 940 void ext_yahoo_chat_yahoologout( int id, const char *me ) 941 { 942 } 943 944 void ext_yahoo_chat_yahooerror( int id, const char *me ) 945 { 946 } 947 948 void ext_yahoo_contact_added( int id, const char *myid, const char *who, const char *msg ) 949 { 950 struct im_connection *ic = byahoo_get_ic_by_id( id ); 951 952 imcb_ask_auth( ic, who, msg ); 953 } 954 955 void ext_yahoo_rejected( int id, const char *who, const char *msg ) 956 { 957 } 958 959 void ext_yahoo_game_notify( int id, const char *me, const char *who, int stat, const char *msg ) 960 { 961 } 962 963 void ext_yahoo_mail_notify( int id, const char *from, const char *subj, int cnt ) 964 { 965 struct im_connection *ic = byahoo_get_ic_by_id( id ); 966 967 if( !set_getbool( &ic->acc->set, "mail_notifications" ) ) 913 free(who); 914 } 915 916 void ext_yahoo_chat_userleave(int id, const char *me, const char *room, const char *who) 917 { 918 } 919 920 void ext_yahoo_chat_message(int id, const char *me, const char *who, const char *room, const char *msg, int msgtype, 921 int utf8) 922 { 923 } 924 925 void ext_yahoo_chat_yahoologout(int id, const char *me) 926 { 927 } 928 929 void ext_yahoo_chat_yahooerror(int id, const char *me) 930 { 931 } 932 933 void ext_yahoo_contact_added(int id, const char *myid, const char *who, const char *msg) 934 { 935 struct im_connection *ic = byahoo_get_ic_by_id(id); 936 937 imcb_ask_auth(ic, who, msg); 938 } 939 940 void ext_yahoo_rejected(int id, const char *who, const char *msg) 941 { 942 } 943 944 void ext_yahoo_game_notify(int id, const char *me, const char *who, int stat, const char *msg) 945 { 946 } 947 948 void ext_yahoo_mail_notify(int id, const char *from, const char *subj, int cnt) 949 { 950 struct im_connection *ic = byahoo_get_ic_by_id(id); 951 952 if (!set_getbool(&ic->acc->set, "mail_notifications")) { 968 953 ; /* The user doesn't care. */ 969 else if( from && subj ) 970 imcb_log( ic, "Received e-mail message from %s with subject `%s'", from, subj ); 971 else if( cnt > 0 ) 972 imcb_log( ic, "Received %d new e-mails", cnt ); 973 } 974 975 void ext_yahoo_webcam_invite_reply( int id, const char *me, const char *from, int accept ) 976 { 977 } 978 979 void ext_yahoo_webcam_closed( int id, const char *who, int reason ) 980 { 981 } 982 983 void ext_yahoo_got_search_result( int id, int found, int start, int total, YList *contacts ) 984 { 985 } 986 987 void ext_yahoo_webcam_viewer( int id, const char *who, int connect ) 988 { 989 } 990 991 void ext_yahoo_webcam_data_request( int id, int send ) 992 { 993 } 994 995 int ext_yahoo_log( const char *fmt, ... ) 996 { 997 return( 0 ); 998 } 999 1000 void ext_yahoo_got_webcam_image( int id, const char * who, const unsigned char *image, unsigned int image_size, unsigned int real_size, unsigned int timestamp ) 1001 { 1002 } 1003 1004 void ext_yahoo_got_ping( int id, const char *msg ) 1005 { 1006 } 1007 1008 void ext_yahoo_got_buddyicon (int id, const char *me, const char *who, const char *url, int checksum) {} 1009 void ext_yahoo_got_buddyicon_checksum (int id, const char *me,const char *who, int checksum) {} 1010 1011 void ext_yahoo_got_buddyicon_request(int id, const char *me, const char *who){} 1012 void ext_yahoo_buddyicon_uploaded(int id, const char *url){} 954 } else if (from && subj) { 955 imcb_log(ic, "Received e-mail message from %s with subject `%s'", from, subj); 956 } else if (cnt > 0) { 957 imcb_log(ic, "Received %d new e-mails", cnt); 958 } 959 } 960 961 void ext_yahoo_webcam_invite_reply(int id, const char *me, const char *from, int accept) 962 { 963 } 964 965 void ext_yahoo_webcam_closed(int id, const char *who, int reason) 966 { 967 } 968 969 void ext_yahoo_got_search_result(int id, int found, int start, int total, YList *contacts) 970 { 971 } 972 973 void ext_yahoo_webcam_viewer(int id, const char *who, int connect) 974 { 975 } 976 977 void ext_yahoo_webcam_data_request(int id, int send) 978 { 979 } 980 981 int ext_yahoo_log(const char *fmt, ...) 982 { 983 return(0); 984 } 985 986 void ext_yahoo_got_webcam_image(int id, const char * who, const unsigned char *image, unsigned int image_size, 987 unsigned int real_size, unsigned int timestamp) 988 { 989 } 990 991 void ext_yahoo_got_ping(int id, const char *msg) 992 { 993 } 994 995 void ext_yahoo_got_buddyicon(int id, const char *me, const char *who, const char *url, int checksum) 996 { 997 } 998 void ext_yahoo_got_buddyicon_checksum(int id, const char *me, const char *who, int checksum) 999 { 1000 } 1001 1002 void ext_yahoo_got_buddyicon_request(int id, const char *me, const char *who) 1003 { 1004 } 1005 void ext_yahoo_buddyicon_uploaded(int id, const char *url) 1006 { 1007 }
Note: See TracChangeset
for help on using the changeset viewer.