Changeset 5284 for pjproject/trunk/pjsip/src/pjsip/sip_transport_udp.c
- Timestamp:
- May 10, 2016 5:13:57 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsip/sip_transport_udp.c
r5230 r5284 870 870 } 871 871 872 873 /* 874 * Initialize pjsip_udp_transport_cfg structure with default values. 875 */ 876 PJ_DEF(void) pjsip_udp_transport_cfg_default(pjsip_udp_transport_cfg *cfg, 877 int af) 878 { 879 pj_bzero(cfg, sizeof(*cfg)); 880 cfg->af = af; 881 pj_sockaddr_init(cfg->af, &cfg->bind_addr, NULL, 0); 882 cfg->async_cnt = 1; 883 } 884 885 886 /* 887 * pjsip_udp_transport_start2() 888 * 889 * Create a UDP socket in the specified address and start a transport. 890 */ 891 PJ_DEF(pj_status_t) pjsip_udp_transport_start2( 892 pjsip_endpoint *endpt, 893 const pjsip_udp_transport_cfg *cfg, 894 pjsip_transport **p_transport) 895 { 896 pj_sock_t sock; 897 pj_status_t status; 898 pjsip_host_port addr_name; 899 char addr_buf[PJ_INET6_ADDRSTRLEN]; 900 pjsip_transport_type_e transport_type; 901 pj_uint16_t af; 902 int addr_len; 903 904 PJ_ASSERT_RETURN(endpt && cfg && cfg->async_cnt, PJ_EINVAL); 905 906 if (cfg->bind_addr.addr.sa_family == pj_AF_INET()) { 907 af = pj_AF_INET(); 908 transport_type = PJSIP_TRANSPORT_UDP; 909 addr_len = sizeof(pj_sockaddr_in); 910 } else { 911 af = pj_AF_INET6(); 912 transport_type = PJSIP_TRANSPORT_UDP6; 913 addr_len = sizeof(pj_sockaddr_in6); 914 } 915 916 status = create_socket(af, &cfg->bind_addr, addr_len, &sock); 917 if (status != PJ_SUCCESS) 918 return status; 919 920 /* Apply QoS, if specified */ 921 pj_sock_apply_qos2(sock, cfg->qos_type, &cfg->qos_params, 922 2, THIS_FILE, "SIP UDP transport"); 923 924 /* Apply sockopt, if specified */ 925 if (cfg->sockopt_params.cnt) 926 pj_sock_setsockopt_params(sock, &cfg->sockopt_params); 927 928 if (cfg->addr_name.host.slen == 0) { 929 /* Address name is not specified. 930 * Build a name based on bound address. 931 */ 932 status = get_published_name(sock, addr_buf, sizeof(addr_buf), 933 &addr_name); 934 if (status != PJ_SUCCESS) { 935 pj_sock_close(sock); 936 return status; 937 } 938 } else { 939 addr_name = cfg->addr_name; 940 } 941 942 return pjsip_udp_transport_attach2(endpt, transport_type, sock, 943 &addr_name, cfg->async_cnt, 944 p_transport); 945 } 946 872 947 /* 873 948 * pjsip_udp_transport_start() … … 881 956 pjsip_transport **p_transport) 882 957 { 883 pj_sock_t sock; 884 pj_status_t status; 885 char addr_buf[PJ_INET6_ADDRSTRLEN]; 886 pjsip_host_port bound_name; 887 888 PJ_ASSERT_RETURN(endpt && async_cnt, PJ_EINVAL); 889 890 status = create_socket(pj_AF_INET(), local_a, sizeof(pj_sockaddr_in), 891 &sock); 892 if (status != PJ_SUCCESS) 893 return status; 894 895 if (a_name == NULL) { 896 /* Address name is not specified. 897 * Build a name based on bound address. 898 */ 899 status = get_published_name(sock, addr_buf, sizeof(addr_buf), 900 &bound_name); 901 if (status != PJ_SUCCESS) { 902 pj_sock_close(sock); 903 return status; 904 } 905 906 a_name = &bound_name; 907 } 908 909 return pjsip_udp_transport_attach( endpt, sock, a_name, async_cnt, 910 p_transport ); 911 } 912 958 pjsip_udp_transport_cfg cfg; 959 960 pjsip_udp_transport_cfg_default(&cfg, pj_AF_INET()); 961 if (local_a) 962 pj_sockaddr_cp(&cfg.bind_addr, local_a); 963 if (a_name) 964 cfg.addr_name = *a_name; 965 cfg.async_cnt = async_cnt; 966 967 return pjsip_udp_transport_start2(endpt, &cfg, p_transport); 968 } 913 969 914 970 /* … … 923 979 pjsip_transport **p_transport) 924 980 { 925 pj_sock_t sock; 926 pj_status_t status; 927 char addr_buf[PJ_INET6_ADDRSTRLEN]; 928 pjsip_host_port bound_name; 929 930 PJ_ASSERT_RETURN(endpt && async_cnt, PJ_EINVAL); 931 932 status = create_socket(pj_AF_INET6(), local_a, sizeof(pj_sockaddr_in6), 933 &sock); 934 if (status != PJ_SUCCESS) 935 return status; 936 937 if (a_name == NULL) { 938 /* Address name is not specified. 939 * Build a name based on bound address. 940 */ 941 status = get_published_name(sock, addr_buf, sizeof(addr_buf), 942 &bound_name); 943 if (status != PJ_SUCCESS) { 944 pj_sock_close(sock); 945 return status; 946 } 947 948 a_name = &bound_name; 949 } 950 951 return pjsip_udp_transport_attach2(endpt, PJSIP_TRANSPORT_UDP6, 952 sock, a_name, async_cnt, p_transport); 981 pjsip_udp_transport_cfg cfg; 982 983 pjsip_udp_transport_cfg_default(&cfg, pj_AF_INET6()); 984 if (local_a) 985 pj_sockaddr_cp(&cfg.bind_addr, local_a); 986 if (a_name) 987 cfg.addr_name = *a_name; 988 cfg.async_cnt = async_cnt; 989 990 return pjsip_udp_transport_start2(endpt, &cfg, p_transport); 953 991 } 954 992
Note: See TracChangeset
for help on using the changeset viewer.