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

Function pv_get_proxy_protocol

pvar.c:2646–2694  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2644}
2645
2646static int pv_get_proxy_protocol(struct sip_msg *msg, pv_param_t *param,
2647 pv_value_t *res)
2648{
2649 if(msg==NULL || res==NULL)
2650 return -1;
2651
2652 if (msg->rcv.real_ep.flags != PP_OK)
2653 return pv_get_null(msg, NULL, res);
2654
2655 switch (param->pvn.u.isname.name.n) {
2656 case PROXY_PROTOCOL_SRC_IP_ID:
2657 res->rs.s = ip_addr2a(&msg->rcv.real_ep.src_ip);
2658 res->rs.len = strlen(res->rs.s);
2659 res->flags = PV_VAL_STR;
2660 break;
2661 case PROXY_PROTOCOL_SRC_PORT_ID:
2662 res->ri = msg->rcv.real_ep.src_port;
2663 res->rs.s = int2str((uint64_t)msg->rcv.real_ep.src_port, &res->rs.len);
2664 res->flags = PV_VAL_STR|PV_VAL_INT|PV_TYPE_INT;
2665 break;
2666 case PROXY_PROTOCOL_DST_IP_ID:
2667 res->rs.s = ip_addr2a(&msg->rcv.real_ep.dst_ip);
2668 res->rs.len = strlen(res->rs.s);
2669 res->flags = PV_VAL_STR;
2670 break;
2671 case PROXY_PROTOCOL_DST_PORT_ID:
2672 res->ri = msg->rcv.real_ep.dst_port;
2673 res->rs.s = int2str((uint64_t)msg->rcv.real_ep.dst_port, &res->rs.len);
2674 res->flags = PV_VAL_STR|PV_VAL_INT|PV_TYPE_INT;
2675 break;
2676 case PROXY_PROTOCOL_AF_ID:
2677 if (msg->rcv.real_ep.src_ip.af == AF_INET) {
2678 res->rs.s = "INET";
2679 res->rs.len = 4;
2680 } else if (msg->rcv.real_ep.src_ip.af == AF_INET6) {
2681 res->rs.s = "INET6";
2682 res->rs.len = 5;
2683 } else {
2684 return pv_get_null(msg, NULL, res);
2685 }
2686 res->flags = PV_VAL_STR;
2687 break;
2688 default:
2689 LM_CRIT("BUG - unsupported proxy_protocol ID %d\n",
2690 param->pvn.u.isname.name.n);
2691 return pv_get_null(NULL, NULL, res);
2692 }
2693 return 0;
2694}
2695
2696
2697

Callers

nothing calls this directly

Calls 3

pv_get_nullFunction · 0.85
ip_addr2aFunction · 0.85
int2strFunction · 0.85

Tested by

no test coverage detected