Changeset 4580 for pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c
- Timestamp:
- Aug 6, 2013 8:02:24 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c
r4579 r4580 686 686 /* Get config */ 687 687 PJ_DEF(pj_status_t) pjsua_acc_get_config(pjsua_acc_id acc_id, 688 pj_pool_t *pool, 688 689 pjsua_acc_config *acc_cfg) 689 690 { 690 691 PJ_ASSERT_RETURN(acc_id>=0 && acc_id<(int)PJ_ARRAY_SIZE(pjsua_var.acc) 691 692 && pjsua_var.acc[acc_id].valid, PJ_EINVAL); 692 pj_memcpy(acc_cfg, &pjsua_var.acc[acc_id].cfg, sizeof(*acc_cfg)); 693 //this now would not work due to corrupt header list 694 //pj_memcpy(acc_cfg, &pjsua_var.acc[acc_id].cfg, sizeof(*acc_cfg)); 695 pjsua_acc_config_dup(pool, acc_cfg, &pjsua_var.acc[acc_id].cfg); 693 696 return PJ_SUCCESS; 697 } 698 699 /* Compare two SIP headers. Return zero if equal */ 700 static int pjsip_hdr_cmp(const pjsip_hdr *h1, const pjsip_hdr *h2) 701 { 702 char buf1[PJSIP_MAX_URL_SIZE]; 703 char buf2[PJSIP_MAX_URL_SIZE]; 704 pj_str_t p1, p2; 705 706 p1.ptr = buf1; 707 p1.slen = 0; 708 p2.ptr = buf2; 709 p2.slen = 0; 710 711 p1.slen = pjsip_hdr_print_on((void*)h1, buf1, sizeof(buf1)); 712 if (p1.slen < 0) 713 p1.slen = 0; 714 p2.slen = pjsip_hdr_print_on((void*)h2, buf2, sizeof(buf2)); 715 if (p2.slen < 0) 716 p2.slen = 0; 717 718 return pj_strcmp(&p1, &p2); 719 } 720 721 /* Update SIP header list from another list. Return PJ_TRUE if 722 * the list has been updated */ 723 static pj_bool_t update_hdr_list(pj_pool_t *pool, pjsip_hdr *dst, 724 const pjsip_hdr *src) 725 { 726 pjsip_hdr *dst_i; 727 const pjsip_hdr *src_i; 728 pj_bool_t changed = PJ_FALSE; 729 730 /* Remove header that's no longer needed */ 731 for (dst_i = dst->next; dst_i != dst; ) { 732 for (src_i = src->next; src_i != src; src_i = src_i->next) { 733 if (pjsip_hdr_cmp(dst_i, src_i) == 0) 734 break; 735 } 736 if (src_i == src) { 737 pjsip_hdr *next = dst_i->next; 738 pj_list_erase(dst_i); 739 changed = PJ_TRUE; 740 dst_i = next; 741 } else { 742 dst_i = dst_i->next; 743 } 744 } 745 746 /* Add new header */ 747 for (src_i = src->next; src_i != src; src_i = src_i->next) { 748 for (dst_i = dst->next; dst_i != dst; dst_i = dst_i->next) { 749 if (pjsip_hdr_cmp(dst_i, src_i) == 0) 750 break; 751 } 752 if (dst_i == dst) { 753 dst_i = pjsip_hdr_clone(pool, src_i); 754 pj_list_push_back(dst, dst_i); 755 changed = PJ_TRUE; 756 } 757 } 758 759 return changed; 694 760 } 695 761 … … 778 844 reg_sip_uri = (pjsip_sip_uri*) pjsip_uri_get_uri(reg_uri); 779 845 } 846 847 /* REGISTER header list */ 848 if (update_hdr_list(acc->pool, &acc->cfg.reg_hdr_list, &cfg->reg_hdr_list)) { 849 update_reg = PJ_TRUE; 850 unreg_first = PJ_TRUE; 851 } 852 853 /* SUBSCRIBE header list */ 854 update_hdr_list(acc->pool, &acc->cfg.sub_hdr_list, &cfg->sub_hdr_list); 780 855 781 856 /* Global outbound proxy */
Note: See TracChangeset
for help on using the changeset viewer.