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

Function add_rtpproxy_socks

modules/rtpproxy/rtpproxy.c:647–750  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

645}
646
647static int add_rtpproxy_socks(struct rtpp_set * rtpp_list, char *rtpproxy){
648 /* Make rtp proxies list. */
649 char *p, *p1, *p2, *p3, *p4, *plim;
650 struct rtpp_node *pnode;
651 int weight;
652
653 p = rtpproxy;
654 plim = p + strlen(p);
655
656 for(;;) {
657 weight = 1;
658 while (*p && isspace((int)*p))
659 ++p;
660 if (p >= plim)
661 break;
662 p1 = p;
663 while (*p && !isspace((int)*p))
664 ++p;
665 if (p <= p1)
666 break; /* may happen??? */
667 /* Have weight specified? If yes, scan it */
668 p2 = memchr(p1, '=', p - p1);
669 if (p2 != NULL) {
670 weight = strtoul(p2 + 1, NULL, 10);
671 } else {
672 p2 = p;
673 }
674 /* check to see if anything was advertised */
675 p3 = q_memrchr(p1, '|', p2 - p1);
676 if (p3) {
677 p4 = p2;
678 p2 = p3;
679 p3++;
680 while (p3 < p2 && isspace((int)*p3))
681 p3++;
682 while (p2 > p1 && isspace((int)*p2))
683 p2--;
684 }
685 pnode = shm_malloc(sizeof(struct rtpp_node) +
686 (p2 - p1 + 1) /* socket */ +
687 (p3 ? (p4 - p3 + 1): 0));
688 if (pnode == NULL) {
689 LM_ERR("no shm memory left\n");
690 return -1;
691 }
692 memset(pnode, 0, sizeof(*pnode));
693 pnode->rn_url.s = (char *)(pnode + 1);
694 pnode->idx = *rtpp_no;
695 *rtpp_no = *rtpp_no + 1;
696 pnode->rn_recheck_ticks = 0;
697 pnode->rn_weight = weight;
698 pnode->rn_umode = CM_UNIX;
699 pnode->rn_disabled = 0;
700 memcpy(pnode->rn_url.s, p1, p2 - p1);
701 pnode->rn_url.s[p2 - p1] = '\0';
702 pnode->rn_url.len = p2-p1;
703 if (p3) {
704 pnode->adv_address = pnode->rn_url.s + pnode->rn_url.len + 1;

Callers 1

Calls 2

q_memrchrFunction · 0.85
shm_mallocFunction · 0.85

Tested by

no test coverage detected