示例#1
0
// 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;
}
示例#2
0
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;
}
示例#3
0
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);

}
示例#4
0
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);
}
示例#5
0
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);
}
示例#6
0
/**
* \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);
}
示例#7
0
文件: oiuc.c 项目: buidanhquy/oiuc
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);
}
示例#8
0
文件: ics.c 项目: mocidis/ics
/**
 * \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);
}
示例#9
0
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;
}
示例#10
0
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);

}
示例#11
0
	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);

}

/**