| 1029 | } |
| 1030 | |
| 1031 | static int add_rtpengine_socks(struct rtpe_set * rtpe_list, |
| 1032 | char * rtpengine){ |
| 1033 | /* Make rtp proxies list. */ |
| 1034 | char *p, *p1, *p2, *plim; |
| 1035 | struct rtpe_node *pnode, *tmpnode; |
| 1036 | int weight; |
| 1037 | |
| 1038 | p = rtpengine; |
| 1039 | plim = p + strlen(p); |
| 1040 | |
| 1041 | for(;;) { |
| 1042 | weight = 1; |
| 1043 | while (*p && isspace((int)*p)) |
| 1044 | ++p; |
| 1045 | if (p >= plim) |
| 1046 | break; |
| 1047 | p1 = p; |
| 1048 | while (*p && !isspace((int)*p)) |
| 1049 | ++p; |
| 1050 | if (p <= p1) |
| 1051 | break; /* may happen??? */ |
| 1052 | /* Have weight specified? If yes, scan it */ |
| 1053 | p2 = memchr(p1, '=', p - p1); |
| 1054 | if (p2 != NULL) { |
| 1055 | weight = strtoul(p2 + 1, NULL, 10); |
| 1056 | } else { |
| 1057 | p2 = p; |
| 1058 | } |
| 1059 | pnode = shm_malloc(sizeof(struct rtpe_node)); |
| 1060 | if (pnode == NULL) { |
| 1061 | LM_ERR("no shm memory left\n"); |
| 1062 | return -1; |
| 1063 | } |
| 1064 | memset(pnode, 0, sizeof(*pnode)); |
| 1065 | pnode->set = rtpe_list->id_set; |
| 1066 | pnode->rn_recheck_ticks = 0; |
| 1067 | pnode->rn_weight = weight; |
| 1068 | pnode->rn_umode = 0; |
| 1069 | pnode->rn_disabled = 0; |
| 1070 | pnode->rn_flags = 0; |
| 1071 | pnode->rn_url.s = shm_malloc(p2 - p1 + 1); |
| 1072 | if (pnode->rn_url.s == NULL) { |
| 1073 | shm_free(pnode); |
| 1074 | LM_ERR("no shm memory left\n"); |
| 1075 | return -1; |
| 1076 | } |
| 1077 | memmove(pnode->rn_url.s, p1, p2 - p1); |
| 1078 | pnode->rn_url.s[p2 - p1] = 0; |
| 1079 | pnode->rn_url.len = p2-p1; |
| 1080 | |
| 1081 | LM_DBG("url is %s, len is %i\n", pnode->rn_url.s, pnode->rn_url.len); |
| 1082 | |
| 1083 | if ((tmpnode = lookup_rtpe_node(rtpe_list, &pnode->rn_url)) != NULL) { |
| 1084 | LM_DBG("node with url %s already exists in set %d, not adding new node\n", pnode->rn_url.s, rtpe_list->id_set); |
| 1085 | tmpnode->rn_flags &= ~RTPE_TEARDOWN_NODE; |
| 1086 | shm_free(pnode->rn_url.s); |
| 1087 | shm_free(pnode); |
| 1088 | return 0; |
no test coverage detected