| 744 | /*********** INFRASTRUCTURE ENUM ***************/ |
| 745 | |
| 746 | int i_enum_query(struct sip_msg* _msg, str* suffix, str* service) |
| 747 | { |
| 748 | char *user_s; |
| 749 | int user_len, i, j; |
| 750 | char name[MAX_DOMAIN_SIZE]; |
| 751 | char apex[MAX_COMPONENT_SIZE + 1]; |
| 752 | char separator[MAX_COMPONENT_SIZE + 1]; |
| 753 | int sdl = 0; /* subdomain location: infrastructure enum offset */ |
| 754 | int cc_len; |
| 755 | struct rdata* head; |
| 756 | |
| 757 | char string[17]; |
| 758 | |
| 759 | if (parse_sip_msg_uri(_msg) < 0) { |
| 760 | LM_ERR("Parsing of R-URI failed\n"); |
| 761 | return -1; |
| 762 | } |
| 763 | |
| 764 | if (is_e164(&(_msg->parsed_uri.user)) == -1) { |
| 765 | LM_ERR("R-URI user is not an E164 number\n"); |
| 766 | return -1; |
| 767 | } |
| 768 | |
| 769 | user_s = _msg->parsed_uri.user.s; |
| 770 | user_len = _msg->parsed_uri.user.len; |
| 771 | |
| 772 | /* make sure we don't run out of space in strings */ |
| 773 | if (( 2*user_len + MAX_COMPONENT_SIZE + MAX_COMPONENT_SIZE + 4) > MAX_DOMAIN_SIZE) { |
| 774 | LM_ERR("Strings too long\n"); |
| 775 | return -1; |
| 776 | } |
| 777 | if ( i_branchlabel.len > MAX_COMPONENT_SIZE ) { |
| 778 | LM_ERR("i_branchlabel too long\n"); |
| 779 | return -1; |
| 780 | } |
| 781 | if ( suffix->len > MAX_COMPONENT_SIZE ) { |
| 782 | LM_ERR("Suffix too long\n"); |
| 783 | return -1; |
| 784 | } |
| 785 | |
| 786 | |
| 787 | memcpy(&(string[0]), user_s, user_len); |
| 788 | string[user_len] = (char)0; |
| 789 | |
| 790 | /* Set up parameters as for user-enum */ |
| 791 | memcpy(apex, suffix->s , suffix->len); |
| 792 | apex[suffix->len] = (char)0; |
| 793 | sdl = 0; /* where to insert i-enum separator */ |
| 794 | separator[0] = 0; /* don't insert anything */ |
| 795 | |
| 796 | cc_len = cclen(string + 1); |
| 797 | |
| 798 | if (!strncasecmp(i_bl_alg.s,"ebl",i_bl_alg.len)) { |
| 799 | sdl = cc_len; /* default */ |
| 800 | |
| 801 | j = 0; |
| 802 | memcpy(name, i_branchlabel.s, i_branchlabel.len); |
| 803 | j += i_branchlabel.len; |
nothing calls this directly
no test coverage detected