// ZRTP and other media dispatcher pjmedia_transport* on_transport_created_wrapper(pjsua_call_id call_id, unsigned media_idx, pjmedia_transport *base_tp, unsigned flags) { pj_status_t status = PJ_SUCCESS; pjsua_call_info call_info; void* acc_user_data; int acc_use_zrtp = -1; // By default, use default global def pj_bool_t use_zrtp = css_var.default_use_zrtp; status = pjsua_call_get_info(call_id, &call_info); if(status == PJ_SUCCESS && pjsua_acc_is_valid (call_info.acc_id)){ acc_user_data = pjsua_acc_get_user_data(call_info.acc_id); if(acc_user_data != NULL){ acc_use_zrtp = ((csipsimple_acc_config *) acc_user_data)->use_zrtp; if(acc_use_zrtp >= 0){ use_zrtp = (acc_use_zrtp == 1) ? PJ_TRUE : PJ_FALSE; } } } #if defined(PJMEDIA_HAS_ZRTP) && PJMEDIA_HAS_ZRTP!=0 if(use_zrtp){ PJ_LOG(4, (THIS_FILE, "Dispatch transport creation on ZRTP one")); return on_zrtp_transport_created(call_id, media_idx, base_tp, flags); } #endif return base_tp; }
PJ_DECL(pj_status_t) csipsimple_init_acc_msg_data(pj_pool_t* pool, pjsua_acc_id acc_id, pjsua_msg_data* msg_data){ csipsimple_acc_config *additional_acc_cfg = NULL; // P-Asserted-Identity header pj_str_t hp_preferred_identity_name = { "P-Preferred-Identity", 20 }; // Sanity check PJ_ASSERT_RETURN(msg_data != NULL, PJ_EINVAL); // Get acc infos if(pjsua_acc_is_valid(acc_id)){ additional_acc_cfg = (csipsimple_acc_config *) pjsua_acc_get_user_data(acc_id); } // Process additionnal config for this account if(additional_acc_cfg != NULL){ if(additional_acc_cfg->p_preferred_identity.slen > 0){ // Create new P-Asserted-Identity hdr if necessary pjsip_generic_string_hdr* hdr = pjsip_generic_string_hdr_create(pool, &hp_preferred_identity_name, &additional_acc_cfg->p_preferred_identity); // Push it to msg data pj_list_push_back(&msg_data->hdr_list, hdr); } } return PJ_SUCCESS; }
static void on_call_state (pjsua_call_id call_id, pjsip_event *e) { ics_t *data; pjsua_call_info ci; PJ_UNUSED_ARG(e); pjsua_call_get_info(call_id, &ci); //Handle hold call problem #if 0 if ( (strcmp(ci.state_text.ptr,"CALLING") == 0) && (current_call != PJSUA_INVALID_ID) ) _ics_core_hold_call(data); #endif current_call = call_id; if (strcmp(ci.state_text.ptr,"DISCONNCTD") == 0){ find_call(); } data = (ics_t *)pjsua_acc_get_user_data(ci.acc_id); opool_item_t *p_item = opool_get(&data->opool); build_call_state_event((ics_event_t *)p_item->data, call_id, ci.state_text.ptr); ics_event_t *event = (ics_event_t *)p_item->data; process_event(event); }
void SipAccount::onIncomingCallCB(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata) { SipAccount* p = (SipAccount*)pjsua_acc_get_user_data(acc_id); if (p == NULL) { Logger::warn("onIncomingCallCB(acc_id=%d, call_id=%d) failed", acc_id, call_id); return; } p->onIncomingCall(call_id, rdata); }
void on_reg_state(pjsua_acc_id acc_id, pjsua_reg_info *info) { ics_data_t *data; data = (ics_data_t *)pjsua_acc_get_user_data(acc_id); opool_item_t *p_item = opool_get(&data->opool); ics_event_t *event = (ics_event_t *)p_item->data; build_reg_state_event((ics_event_t *)p_item->data, acc_id,info->cbparam->expiration, info->cbparam->code, info->cbparam->reason.ptr, info->cbparam->reason.slen); process_event(event); }
/** * \fn on_reg_started(), on_reg_state(), on_incoming_call(), on_call_state(), on_call_transfer_status(), on_call_media_state() * \brief cac ham callback */ void on_reg_started(pjsua_acc_id acc_id, pj_bool_t renew) { ics_data_t *data; data = (ics_data_t *)pjsua_acc_get_user_data(acc_id); opool_item_t *p_item = opool_get(&data->opool); ics_event_t *event = (ics_event_t *)p_item->data; build_reg_start_event((ics_event_t *)p_item->data, acc_id); process_event(event); }
static void on_reg_state_impl(int account_id, char* is_registration, int code, char *reason){ ics_t *data; data = (ics_t *)pjsua_acc_get_user_data(account_id); printf("Acc id: %d\n", account_id); printf("Registed: %s \n", is_registration); printf("Status: %d(%s)\n", code, reason); if( strcmp(is_registration, "No") == 0 ) arbiter_send(&data->uclient, 0, data->acfg.cred_info[0].username.ptr); else arbiter_send(&data->uclient, 1, data->acfg.cred_info[0].username.ptr); }
/** * \fn on_reg_started(), on_reg_state(), on_incoming_call(), on_call_state(), on_call_transfer_status(), on_call_media_state() * \brief cac ham callback */ static void on_reg_started(pjsua_acc_id acc_id, pj_bool_t renew) { ics_t *data; PJ_UNUSED_ARG(renew); data = (ics_t *)pjsua_acc_get_user_data(acc_id); opool_item_t *p_item = opool_get(&data->opool); ics_event_t *event = (ics_event_t *)p_item->data; build_reg_start_event((ics_event_t *)p_item->data, acc_id); process_event(event); opool_free(&data->opool, p_item); }
static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata) { ics_t *data; pjsua_call_info ci; pjsua_call_get_info(call_id, &ci); data = (ics_t *)pjsua_acc_get_user_data(acc_id); //_ics_core_hold_call(data); opool_item_t *p_item = opool_get(&data->opool); build_incoming_call_event((ics_event_t *)p_item->data, acc_id,call_id, ci.remote_info.ptr, ci.local_info.ptr); ics_event_t *event = (ics_event_t *)p_item->data; //queue_enqueue(&data->queue, (void *)p_item); process_event(event); current_call = call_id; }
static void on_call_media_state(pjsua_call_id call_id) { ics_t *data; pjsua_call_info ci; pjsua_call_get_info(call_id, &ci); //! Khoi tao mot connect media flow tu app nay sang app khac if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) { pjsua_conf_connect(ci.conf_slot, 0); // ntt1->quy pjsua_conf_connect(0, ci.conf_slot); // quy->ntt1 } pjsua_call_get_info(call_id, &ci); data = (ics_t *)pjsua_acc_get_user_data(ci.acc_id); opool_item_t *p_item = opool_get(&data->opool); build_call_media_state_event((ics_event_t *)p_item->data, call_id, ci.media_status); ics_event_t *event = (ics_event_t *)p_item->data; // queue_enqueue(&data->queue, (void *)p_item); process_event(event); }
build_call_media_state_event((ics_event_t *)p_item->data, call_id, ci.media_status); ics_event_t *event = (ics_event_t *)p_item->data; // queue_enqueue(&data->queue, (void *)p_item); process_event(event); } static void on_call_transfer_status (pjsua_call_id call_id, int st_code, const pj_str_t *st_text, pj_bool_t final, pj_bool_t *p_cont) { ics_t *data; pjsua_call_info ci; current_call = call_id; int len; pjsua_call_get_info(call_id, &ci); data = (ics_t *)pjsua_acc_get_user_data(ci.acc_id); len = (int)st_text->slen; if (st_text->ptr[len] == '\n' || st_text->ptr[len] == '\r') st_text->ptr[len] = '\0'; opool_item_t *p_item = opool_get(&data->opool); build_transfer_event((ics_event_t *)p_item->data,call_id, st_code, st_text->ptr); ics_event_t *event = (ics_event_t *)p_item->data; // queue_enqueue(&data->queue, (void *)p_item); process_event(event); } /**