| 665 | } |
| 666 | |
| 667 | static int pv_get_xuri_attr(struct sip_msg *msg, struct sip_uri *parsed_uri, |
| 668 | pv_param_t *param, pv_value_t *res) |
| 669 | { |
| 670 | unsigned short proto; |
| 671 | str proto_s; |
| 672 | |
| 673 | if(param->pvn.u.isname.name.n==1) /* username */ |
| 674 | { |
| 675 | if(parsed_uri->user.s==NULL || parsed_uri->user.len<=0) |
| 676 | return pv_get_null(msg, param, res); |
| 677 | return pv_get_strval(msg, param, res, &parsed_uri->user); |
| 678 | } else if(param->pvn.u.isname.name.n==2) /* domain */ { |
| 679 | if(parsed_uri->host.s==NULL || parsed_uri->host.len<=0) |
| 680 | return pv_get_null(msg, param, res); |
| 681 | return pv_get_strval(msg, param, res, &parsed_uri->host); |
| 682 | } else if(param->pvn.u.isname.name.n==3) /* port */ { |
| 683 | if(parsed_uri->port.s==NULL) |
| 684 | return pv_get_uintval(msg, param, res, |
| 685 | get_uri_port( parsed_uri, &proto)); |
| 686 | return pv_get_strintval(msg, param, res, &parsed_uri->port, |
| 687 | (int)parsed_uri->port_no); |
| 688 | } else if(param->pvn.u.isname.name.n==4) /* protocol */ { |
| 689 | if(parsed_uri->transport_val.s==NULL) { |
| 690 | get_uri_port(parsed_uri, &proto); |
| 691 | proto_s.s = protos[proto].name; |
| 692 | proto_s.len = proto_s.s ? strlen(proto_s.s) : 0; |
| 693 | return pv_get_strintval(msg, param, res, &proto_s, (int)proto); |
| 694 | } |
| 695 | return pv_get_strintval(msg, param, res, &parsed_uri->transport_val, |
| 696 | (int)parsed_uri->proto); |
| 697 | } |
| 698 | LM_ERR("unknown specifier\n"); |
| 699 | return pv_get_null(msg, param, res); |
| 700 | } |
| 701 | |
| 702 | static int pv_get_ruri_attr(struct sip_msg *msg, pv_param_t *param, |
| 703 | pv_value_t *res) |
no test coverage detected