| 5054 | } |
| 5055 | |
| 5056 | static int rtpengine_api_offer(struct rtp_relay_session *sess, |
| 5057 | struct rtp_relay_server *server, str *body, |
| 5058 | str *ip, str *type, str *in_iface, str *out_iface, |
| 5059 | str *global_flags, str *flags, str *extra_flags) |
| 5060 | { |
| 5061 | struct rtpe_set* rset; |
| 5062 | str *newflags, *node; |
| 5063 | pv_value_t val; |
| 5064 | int ret; |
| 5065 | |
| 5066 | RTPE_START_READ(); |
| 5067 | if (!server->node.s) { |
| 5068 | node = NULL; |
| 5069 | rset = rtpengine_get_set(server->set); |
| 5070 | if (!rset) { |
| 5071 | LM_ERR("no rtpengine set availble!\n"); |
| 5072 | RTPE_STOP_READ(); |
| 5073 | return -1; |
| 5074 | } |
| 5075 | server->set = rset->id_set; |
| 5076 | } else { |
| 5077 | rset = select_rtpe_set(server->set); |
| 5078 | node = &server->node; |
| 5079 | } |
| 5080 | RTPE_STOP_READ(); |
| 5081 | |
| 5082 | newflags = rtpengine_get_call_flags(sess, type, in_iface, out_iface, |
| 5083 | global_flags, flags, extra_flags); |
| 5084 | if (!newflags) |
| 5085 | return -1; |
| 5086 | ret = rtpengine_offer_answer_body(sess->msg, newflags, node, |
| 5087 | &media_pvar, sess->body, body, rset, OP_OFFER); |
| 5088 | pkg_free(newflags->s); |
| 5089 | if (ret >= 0) { |
| 5090 | if (pv_get_spec_value(sess->msg, &media_pvar, &val) >= 0) |
| 5091 | fill_rtpengine_node(server, &val.rs); |
| 5092 | else |
| 5093 | LM_ERR("could not retrieve the value of the used rtpengine!\n"); |
| 5094 | pv_set_value(sess->msg, &media_pvar, EQ_T, NULL); |
| 5095 | } |
| 5096 | return ret; |
| 5097 | } |
| 5098 | |
| 5099 | static int rtpengine_api_answer(struct rtp_relay_session *sess, |
| 5100 | struct rtp_relay_server *server, str *body, |
nothing calls this directly
no test coverage detected