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

Function rtpengine_manage

modules/rtpengine/rtpengine.c:3901–3970  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3899}
3900
3901static int
3902rtpengine_manage(struct sip_msg *msg, str *flags, pv_spec_t *spvar,
3903 pv_spec_t *bpvar, str *body)
3904{
3905 int method;
3906 int nosdp;
3907 int op = OP_ANSWER;
3908 struct cell *t;
3909
3910 if(msg->cseq==NULL && ((parse_headers(msg, HDR_CSEQ_F, 0)==-1)
3911 || (msg->cseq==NULL)))
3912 {
3913 LM_ERR("no CSEQ header\n");
3914 return -1;
3915 }
3916
3917 method = get_cseq(msg)->method_id;
3918
3919 if(!(method==METHOD_INVITE || method==METHOD_ACK || method==METHOD_CANCEL
3920 || method==METHOD_BYE || method==METHOD_UPDATE || method==METHOD_PRACK))
3921 return -1;
3922
3923 if(method==METHOD_CANCEL || method==METHOD_BYE)
3924 return rtpengine_delete(msg, flags, NULL, NULL, spvar);
3925
3926 if (body)
3927 nosdp = body->len != 0;
3928 else if(has_body_part(msg, TYPE_APPLICATION, SUBTYPE_SDP))
3929 nosdp = 0;
3930 else
3931 nosdp = parse_sdp(msg)?0:1;
3932
3933 if(msg->first_line.type == SIP_REQUEST) {
3934 if(nosdp==0) {
3935 switch (method) {
3936 case METHOD_ACK:
3937 case METHOD_PRACK:
3938 op = OP_ANSWER;
3939 break;
3940 case METHOD_INVITE:
3941 if(route_type==FAILURE_ROUTE)
3942 return rtpengine_delete(msg, flags, NULL, NULL, spvar);
3943 /* fall through */
3944 case METHOD_UPDATE:
3945 op = OP_OFFER;
3946 break;
3947 default:
3948 return -1;
3949 }
3950 return rtpengine_offer_answer(msg, flags, NULL, spvar, bpvar, body, op);
3951 } else if (method==METHOD_INVITE) {
3952 msg->msg_flags |= FL_BODY_NO_SDP;
3953 }
3954 } else if(msg->first_line.type == SIP_REPLY) {
3955 if(msg->first_line.u.reply.statuscode>=300)
3956 return rtpengine_delete(msg, flags, NULL, NULL, spvar);
3957 if(nosdp==0) {
3958 if(method==METHOD_UPDATE)

Callers 1

rtpengine_manage_fFunction · 0.85

Calls 4

rtpengine_deleteFunction · 0.85
has_body_partFunction · 0.85
parse_sdpFunction · 0.85
rtpengine_offer_answerFunction · 0.85

Tested by

no test coverage detected