comparison libfaim/aim_rxhandlers.c @ 445:e4c34ca88d9b

[gaim-migrate @ 455] Hehehehehe Libfaim got updated, gaim got updated. btw, gaim/faim can't sign in yet, don't ask me why. it's not my fault. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Thu, 29 Jun 2000 20:40:28 +0000
parents f3c8d79688db
children 6d78b988b479
comparison
equal deleted inserted replaced
444:e7885c54ed2f 445:e4c34ca88d9b
175 175
176 family = aimutil_get16(workingPtr->data+0); 176 family = aimutil_get16(workingPtr->data+0);
177 subtype= aimutil_get16(workingPtr->data+2); 177 subtype= aimutil_get16(workingPtr->data+2);
178 178
179 if((family < maxf) && (subtype+1 < maxs) && (literals[family][subtype] != NULL)) 179 if((family < maxf) && (subtype+1 < maxs) && (literals[family][subtype] != NULL))
180 faimdprintf(1, "bleck: null handler for %04x/%04x (%s)\n", family, subtype, literals[family][subtype+1]); 180 faimdprintf("bleck: null handler for %04x/%04x (%s)\n", family, subtype, literals[family][subtype+1]);
181 else 181 else
182 faimdprintf(1, "bleck: null handler for %04x/%04x (no literal)\n",family,subtype); 182 faimdprintf("bleck: null handler for %04x/%04x (no literal)\n",family,subtype);
183 183
184 return 1; 184 return 1;
185 } 185 }
186 186
187 int aim_conn_addhandler(struct aim_session_t *sess, 187 int aim_conn_addhandler(struct aim_session_t *sess,
311 /* 311 /*
312 * XXX: This is still fairly ugly. 312 * XXX: This is still fairly ugly.
313 */ 313 */
314 if (workingPtr->handled) 314 if (workingPtr->handled)
315 continue; 315 continue;
316
317 /*
318 * This is a debugging/sanity check only and probably could/should be removed
319 * for stable code.
320 */
321 if (((workingPtr->hdrtype == AIM_FRAMETYPE_OFT) &&
322 (workingPtr->conn->type != AIM_CONN_TYPE_RENDEZVOUS)) ||
323 ((workingPtr->hdrtype == AIM_FRAMETYPE_OSCAR) &&
324 (workingPtr->conn->type == AIM_CONN_TYPE_RENDEZVOUS))) {
325 printf("faim: rxhandlers: incompatible frame type %d on connection type 0x%04x\n", workingPtr->hdrtype, workingPtr->conn->type);
326 workingPtr->handled = 1;
327 continue;
328 }
316 329
317 switch(workingPtr->conn->type) { 330 switch(workingPtr->conn->type) {
318 case -1: 331 case -1:
319 /* 332 /*
320 * This can happen if we have a queued command 333 * This can happen if we have a queued command
330 343
331 head = aimutil_get32(workingPtr->data); 344 head = aimutil_get32(workingPtr->data);
332 if (head == 0x00000001) { 345 if (head == 0x00000001) {
333 faimdprintf(1, "got connection ack on auth line\n"); 346 faimdprintf(1, "got connection ack on auth line\n");
334 workingPtr->handled = 1; 347 workingPtr->handled = 1;
335 } else { 348 } else if (workingPtr->hdr.oscar.type == 0x0004) {
349 workingPtr->handled = aim_authparse(sess, workingPtr);
350 } else {
336 u_short family,subtype; 351 u_short family,subtype;
337 352
338 family = aimutil_get16(workingPtr->data); 353 family = aimutil_get16(workingPtr->data);
339 subtype = aimutil_get16(workingPtr->data+2); 354 subtype = aimutil_get16(workingPtr->data+2);
340 355
352 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0017, 0xffff, workingPtr); 367 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0017, 0xffff, workingPtr);
353 break; 368 break;
354 #else 369 #else
355 /* XXX: this isnt foolproof */ 370 /* XXX: this isnt foolproof */
356 case 0x0001: 371 case 0x0001:
357 if (subtype == 0x0003) 372 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_GEN, AIM_CB_GEN_SERVERREADY, workingPtr);
358 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_GEN, AIM_CB_GEN_SERVERREADY, workingPtr);
359 else
360 workingPtr->handled = aim_authparse(sess, workingPtr);
361 break; 373 break;
362 case 0x0007: 374 case 0x0007:
363 if (subtype == 0x0005) 375 if (subtype == 0x0005)
364 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_ADM, AIM_CB_ADM_INFOCHANGE_REPLY, workingPtr); 376 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_ADM, AIM_CB_ADM_INFOCHANGE_REPLY, workingPtr);
365 break; 377 break;
378 case AIM_CB_FAM_SPECIAL:
379 if (subtype == AIM_CB_SPECIAL_DEBUGCONN_CONNECT) {
380 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, family, subtype, workingPtr);
381 break;
382 } /* others fall through */
366 default: 383 default:
367 /* Old login protocol */ 384 /* Old login protocol */
368 /* any user callbacks will be called from here */ 385 /* any user callbacks will be called from here */
369 workingPtr->handled = aim_authparse(sess, workingPtr); 386 workingPtr->handled = aim_authparse(sess, workingPtr);
370 #endif 387 #endif
374 } 391 }
375 case AIM_CONN_TYPE_BOS: { 392 case AIM_CONN_TYPE_BOS: {
376 u_short family; 393 u_short family;
377 u_short subtype; 394 u_short subtype;
378 395
379 if (workingPtr->type == 0x04) { 396 if (workingPtr->hdr.oscar.type == 0x04) {
380 workingPtr->handled = aim_negchan_middle(sess, workingPtr); 397 workingPtr->handled = aim_negchan_middle(sess, workingPtr);
381 break; 398 break;
382 } 399 }
383 400
384 family = aimutil_get16(workingPtr->data); 401 family = aimutil_get16(workingPtr->data);
457 workingPtr->handled = aim_parse_msgerror_middle(sess, workingPtr); 474 workingPtr->handled = aim_parse_msgerror_middle(sess, workingPtr);
458 break; 475 break;
459 case 0x0005: 476 case 0x0005:
460 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0004, 0x0005, workingPtr); 477 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0004, 0x0005, workingPtr);
461 break; 478 break;
479 case 0x0006:
480 workingPtr->handled = aim_parse_outgoing_im_middle(sess, workingPtr);
481 break;
462 case 0x0007: 482 case 0x0007:
463 workingPtr->handled = aim_parse_incoming_im_middle(sess, workingPtr); 483 workingPtr->handled = aim_parse_incoming_im_middle(sess, workingPtr);
464 break; 484 break;
465 case 0x000a: 485 case 0x000a:
466 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0004, 0x000a, workingPtr); 486 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0004, 0x000a, workingPtr);
495 else if (subtype == 0x0002) 515 else if (subtype == 0x0002)
496 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x000b, 0x0002, workingPtr); 516 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x000b, 0x0002, workingPtr);
497 else 517 else
498 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_STS, AIM_CB_STS_DEFAULT, workingPtr); 518 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_STS, AIM_CB_STS_DEFAULT, workingPtr);
499 break; 519 break;
520 case AIM_CB_FAM_SPECIAL:
521 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, family, subtype, workingPtr);
522 break;
500 default: 523 default:
501 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_UNKNOWN, workingPtr); 524 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_UNKNOWN, workingPtr);
502 break; 525 break;
503 } 526 }
504 break; 527 break;
551 printf("Chat: unknown snac %04x/%04x\n", family, subtype); 574 printf("Chat: unknown snac %04x/%04x\n", family, subtype);
552 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_DEFAULT, workingPtr); 575 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_DEFAULT, workingPtr);
553 } 576 }
554 break; 577 break;
555 } 578 }
579 case AIM_CONN_TYPE_RENDEZVOUS: {
580 /* make sure that we only get OFT frames on these connections */
581 if (workingPtr->hdrtype != AIM_FRAMETYPE_OFT) {
582 printf("faim: internal error: non-OFT frames on OFT connection\n");
583 workingPtr->handled = 1; /* get rid of it */
584 break;
585 }
586
587 /* XXX: implement this */
588 printf("faim: OFT frame!\n");
589
590 break;
591 }
556 default: 592 default:
557 printf("\ninternal error: unknown connection type (very bad.) (type = %d, fd = %d, channel = %02x, commandlen = %02x)\n\n", workingPtr->conn->type, workingPtr->conn->fd, workingPtr->type, workingPtr->commandlen); 593 printf("\ninternal error: unknown connection type (very bad.) (type = %d, fd = %d, commandlen = %02x)\n\n", workingPtr->conn->type, workingPtr->conn->fd, workingPtr->commandlen);
558 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_UNKNOWN, workingPtr); 594 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_UNKNOWN, workingPtr);
559 break; 595 break;
560 } 596 }
561 } 597 }
562 } 598 }
678 faimdprintf(1, "\nRecieved unknown packet:"); 714 faimdprintf(1, "\nRecieved unknown packet:");
679 715
680 for (i = 0; i < command->commandlen; i++) 716 for (i = 0; i < command->commandlen; i++)
681 { 717 {
682 if ((i % 8) == 0) 718 if ((i % 8) == 0)
683 printf("\n\t"); 719 faimdprintf(1, "\n\t");
684 720
685 printf("0x%2x ", command->data[i]); 721 faimdprintf(1, "0x%2x ", command->data[i]);
686 } 722 }
687 723
688 printf("\n\n"); 724 faimdprintf(1, "\n\n");
689 725
690 return 1; 726 return 1;
691 } 727 }
692 728
693 729