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

Function b2bl_bridge_msg

modules/b2b_logic/bridging.c:2196–2451  ·  view source on GitHub ↗

Bridge an initial Invite with an existing dialog */ key and entity_no identity the existing call and the which entity from the call * to bridge (0 or 1) */

Source from the content-addressed store, hash-verified

2194/* key and entity_no identity the existing call and the which entity from the call
2195 * to bridge (0 or 1) */
2196int b2bl_bridge_msg(struct sip_msg* msg, str* key, int entity_no,
2197 unsigned int flags, str *adv_ct)
2198{
2199 b2bl_tuple_t* tuple;
2200 struct b2b_context *ctx;
2201 struct b2b_ctx_val *v, *v_old;
2202 unsigned int hash_index, local_index;
2203 b2bl_entity_id_t *bridging_entity= NULL;
2204 b2bl_entity_id_t *old_entity;
2205 b2bl_entity_id_t *entity;
2206 str* server_id;
2207 str body = {0, 0}, new_body = {0, 0};
2208 str to_uri={NULL,0}, from_uri, from_dname;
2209 b2b_req_data_t req_data;
2210 int ret;
2211 str local_contact, *ct_hdrs;
2212 int maxfwd;
2213
2214 if(!msg || !key)
2215 {
2216 LM_ERR("Wrong arguments [%p] [%p]\n", msg, key);
2217 return -1;
2218 }
2219
2220 ret = b2bl_get_tuple_key(key, &hash_index, &local_index, NULL);
2221 if(ret < 0)
2222 {
2223 if (ret == -1)
2224 LM_ERR("Failed to parse key or find an entity [%.*s]\n",
2225 key->len, key->s);
2226 else
2227 LM_ERR("Could not find entity [%.*s]\n",
2228 key->len, key->s);
2229 return -1;
2230 }
2231
2232 /* extract the entity and delete the tuple */
2233 B2BL_LOCK_GET(hash_index);
2234
2235 tuple = b2bl_search_tuple_safe(hash_index, local_index);
2236 if(tuple == NULL)
2237 {
2238 LM_ERR("No entity found\n");
2239 goto error;
2240 }
2241
2242 /* save tuple in global variable for accesss from local routes */
2243 local_ctx_tuple = tuple;
2244
2245 /* update tuple context values with the new ones set in request route */
2246 for (v = local_ctx_vals; v; v = v->next) {
2247 for (v_old = tuple->vals; v_old; v_old = v_old->next)
2248 if (!str_strcmp(&v->name, &v_old->name)) {
2249 if (store_ctx_value(&tuple->vals, &v->name, &v->val) < 0)
2250 LM_ERR("Failed to store context value [%.*s]\n",
2251 v->name.len, v->name.s);
2252
2253 break;

Callers 2

b2bl_script_bridge_msgFunction · 0.85
b2bl_api_bridge_msgFunction · 0.85

Calls 15

b2bl_get_tuple_keyFunction · 0.85
b2bl_search_tuple_safeFunction · 0.85
store_ctx_valueFunction · 0.85
b2b_get_msg_contact_hdrsFunction · 0.85
b2bl_print_tupleFunction · 0.85
b2bl_drop_entityFunction · 0.85
bridge_msg_term_entityFunction · 0.85
b2b_msg_get_fromFunction · 0.85
b2b_msg_get_toFunction · 0.85
b2b_get_local_contactFunction · 0.85
b2bl_create_new_entityFunction · 0.85
b2bl_add_serverFunction · 0.85

Tested by

no test coverage detected