MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / add_rtpengine_socks

Function add_rtpengine_socks

modules/rtpengine/rtpengine.c:1031–1119  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1029}
1030
1031static 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;

Callers 1

Calls 3

shm_mallocFunction · 0.85
shm_freeFunction · 0.85
lookup_rtpe_nodeFunction · 0.85

Tested by

no test coverage detected