comparison libpurple/protocols/jabber/google.c @ 26476:cd1f3a1750a1

And google session handling (it turns out this workingdir was --disable-vv. whoops...)
author Paul Aurich <paul@darkrain42.org>
date Sat, 04 Apr 2009 08:02:52 +0000
parents 91583903b478
children df9042312063 676494d92262
comparison
equal deleted inserted replaced
26475:bf9438ea308d 26476:cd1f3a1750a1
372 372
373 return (session->media != NULL) ? TRUE : FALSE; 373 return (session->media != NULL) ? TRUE : FALSE;
374 } 374 }
375 375
376 static void 376 static void
377 google_session_handle_initiate(JabberStream *js, GoogleSession *session, xmlnode *packet, xmlnode *sess) 377 google_session_handle_initiate(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id)
378 { 378 {
379 JabberIq *result; 379 JabberIq *result;
380 GList *codecs = NULL; 380 GList *codecs = NULL;
381 xmlnode *desc_element, *codec_element; 381 xmlnode *desc_element, *codec_element;
382 PurpleMediaCodec *codec; 382 PurpleMediaCodec *codec;
438 G_CALLBACK(google_session_stream_info_cb), session); 438 G_CALLBACK(google_session_stream_info_cb), session);
439 439
440 purple_media_codec_list_free(codecs); 440 purple_media_codec_list_free(codecs);
441 441
442 result = jabber_iq_new(js, JABBER_IQ_RESULT); 442 result = jabber_iq_new(js, JABBER_IQ_RESULT);
443 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id")); 443 jabber_iq_set_id(result, iq_id);
444 xmlnode_set_attrib(result->node, "to", session->remote_jid); 444 xmlnode_set_attrib(result->node, "to", session->remote_jid);
445 jabber_iq_send(result); 445 jabber_iq_send(result);
446 } 446 }
447 447
448 static void 448 static void
449 google_session_handle_candidates(JabberStream *js, GoogleSession *session, xmlnode *packet, xmlnode *sess) 449 google_session_handle_candidates(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id)
450 { 450 {
451 JabberIq *result; 451 JabberIq *result;
452 GList *list = NULL; 452 GList *list = NULL;
453 xmlnode *cand; 453 xmlnode *cand;
454 static int name = 0; 454 static int name = 0;
478 478
479 purple_media_add_remote_candidates(session->media, "google-voice", session->remote_jid, list); 479 purple_media_add_remote_candidates(session->media, "google-voice", session->remote_jid, list);
480 purple_media_candidate_list_free(list); 480 purple_media_candidate_list_free(list);
481 481
482 result = jabber_iq_new(js, JABBER_IQ_RESULT); 482 result = jabber_iq_new(js, JABBER_IQ_RESULT);
483 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id")); 483 jabber_iq_set_id(result, iq_id);
484 xmlnode_set_attrib(result->node, "to", session->remote_jid); 484 xmlnode_set_attrib(result->node, "to", session->remote_jid);
485 jabber_iq_send(result); 485 jabber_iq_send(result);
486 } 486 }
487 487
488 static void 488 static void
489 google_session_handle_accept(JabberStream *js, GoogleSession *session, xmlnode *packet, xmlnode *sess) 489 google_session_handle_accept(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id)
490 { 490 {
491 xmlnode *desc_element = xmlnode_get_child(sess, "description"); 491 xmlnode *desc_element = xmlnode_get_child(sess, "description");
492 xmlnode *codec_element = xmlnode_get_child(desc_element, "payload-type"); 492 xmlnode *codec_element = xmlnode_get_child(desc_element, "payload-type");
493 GList *codecs = NULL; 493 GList *codecs = NULL;
494 JabberIq *result = NULL; 494 JabberIq *result = NULL;
512 512
513 purple_media_stream_info(session->media, PURPLE_MEDIA_INFO_ACCEPT, 513 purple_media_stream_info(session->media, PURPLE_MEDIA_INFO_ACCEPT,
514 NULL, NULL, FALSE); 514 NULL, NULL, FALSE);
515 515
516 result = jabber_iq_new(js, JABBER_IQ_RESULT); 516 result = jabber_iq_new(js, JABBER_IQ_RESULT);
517 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id")); 517 jabber_iq_set_id(result, iq_id);
518 xmlnode_set_attrib(result->node, "to", session->remote_jid); 518 xmlnode_set_attrib(result->node, "to", session->remote_jid);
519 jabber_iq_send(result); 519 jabber_iq_send(result);
520 } 520 }
521 521
522 static void 522 static void
523 google_session_handle_reject(JabberStream *js, GoogleSession *session, xmlnode *packet, xmlnode *sess) 523 google_session_handle_reject(JabberStream *js, GoogleSession *session, xmlnode *sess)
524 { 524 {
525 purple_media_end(session->media, NULL, NULL); 525 purple_media_end(session->media, NULL, NULL);
526 } 526 }
527 527
528 static void 528 static void
529 google_session_handle_terminate(JabberStream *js, GoogleSession *session, xmlnode *packet, xmlnode *sess) 529 google_session_handle_terminate(JabberStream *js, GoogleSession *session, xmlnode *sess)
530 { 530 {
531 purple_media_end(session->media, NULL, NULL); 531 purple_media_end(session->media, NULL, NULL);
532 } 532 }
533 533
534 static void 534 static void
535 google_session_parse_iq(JabberStream *js, GoogleSession *session, xmlnode *packet) 535 google_session_parse_iq(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id)
536 { 536 {
537 xmlnode *sess = xmlnode_get_child(packet, "session");
538 const char *type = xmlnode_get_attrib(sess, "type"); 537 const char *type = xmlnode_get_attrib(sess, "type");
539 538
540 if (!strcmp(type, "initiate")) { 539 if (!strcmp(type, "initiate")) {
541 google_session_handle_initiate(js, session, packet, sess); 540 google_session_handle_initiate(js, session, sess, iq_id);
542 } else if (!strcmp(type, "accept")) { 541 } else if (!strcmp(type, "accept")) {
543 google_session_handle_accept(js, session, packet, sess); 542 google_session_handle_accept(js, session, sess, iq_id);
544 } else if (!strcmp(type, "reject")) { 543 } else if (!strcmp(type, "reject")) {
545 google_session_handle_reject(js, session, packet, sess); 544 google_session_handle_reject(js, session, sess);
546 } else if (!strcmp(type, "terminate")) { 545 } else if (!strcmp(type, "terminate")) {
547 google_session_handle_terminate(js, session, packet, sess); 546 google_session_handle_terminate(js, session, sess);
548 } else if (!strcmp(type, "candidates")) { 547 } else if (!strcmp(type, "candidates")) {
549 google_session_handle_candidates(js, session, packet, sess); 548 google_session_handle_candidates(js, session, sess, iq_id);
550 } 549 }
551 } 550 }
552 551
553 void 552 void
554 jabber_google_session_parse(JabberStream *js, xmlnode *packet) 553 jabber_google_session_parse(JabberStream *js, const char *from,
554 JabberIqType type, const char *iq_id,
555 xmlnode *session_node)
555 { 556 {
556 GoogleSession *session = NULL; 557 GoogleSession *session = NULL;
557 GoogleSessionId id; 558 GoogleSessionId id;
558 559
559 xmlnode *session_node;
560 xmlnode *desc_node; 560 xmlnode *desc_node;
561 561
562 GList *iter = NULL; 562 GList *iter = NULL;
563 563
564 if (strcmp(xmlnode_get_attrib(packet, "type"), "set")) 564 if (type != JABBER_IQ_SET)
565 return;
566
567 session_node = xmlnode_get_child(packet, "session");
568 if (!session_node)
569 return; 565 return;
570 566
571 id.id = (gchar*)xmlnode_get_attrib(session_node, "id"); 567 id.id = (gchar*)xmlnode_get_attrib(session_node, "id");
572 if (!id.id) 568 if (!id.id)
573 return; 569 return;
589 if (iter != NULL) { 585 if (iter != NULL) {
590 g_list_free(iter); 586 g_list_free(iter);
591 } 587 }
592 588
593 if (session) { 589 if (session) {
594 google_session_parse_iq(js, session, packet); 590 google_session_parse_iq(js, session, session_node, iq_id);
595 return; 591 return;
596 } 592 }
597 593
598 /* If the session doesn't exist, this has to be an initiate message */ 594 /* If the session doesn't exist, this has to be an initiate message */
599 if (strcmp(xmlnode_get_attrib(session_node, "type"), "initiate")) 595 if (strcmp(xmlnode_get_attrib(session_node, "type"), "initiate"))
606 session->id.initiator = g_strdup(id.initiator); 602 session->id.initiator = g_strdup(id.initiator);
607 session->state = UNINIT; 603 session->state = UNINIT;
608 session->js = js; 604 session->js = js;
609 session->remote_jid = g_strdup(session->id.initiator); 605 session->remote_jid = g_strdup(session->id.initiator);
610 606
611 google_session_parse_iq(js, session, packet); 607 google_session_parse_iq(js, session, session_node, iq_id);
612 } 608 }
613 #endif /* USE_VV */ 609 #endif /* USE_VV */
614 610
615 static void 611 static void
616 jabber_gmail_parse(JabberStream *js, const char *from, 612 jabber_gmail_parse(JabberStream *js, const char *from,