예제 #1
0
void SipAccount::onCallMediaStateCB(pjsua_call_id call_id) {
  SipAccount* p = (SipAccount*)pjsua_call_get_user_data(call_id);
  if (p == NULL) {
    Logger::warn("onCallMediaStateCB(%d) failed", call_id);
    return;
  }
  p->onCallMediaState(call_id);
}
예제 #2
0
BOOL call_play_digit(pjsua_call_id call_id, const char *digits)
{
	pjmedia_tone_digit d[16];
	unsigned i, count = strlen(digits);
	struct my_call_data *cd;

	if (call_id !=-1 ) {
		cd = (struct my_call_data*) pjsua_call_get_user_data(call_id);
	} else {
		cd = tone_gen;
	}
	if (!cd)
		cd = call_init_tonegen(call_id);
	if (!cd) 
		return FALSE;
	if (call_id == -1 ) {
		tone_gen = cd;
	}

	if (count > PJ_ARRAY_SIZE(d))
		count = PJ_ARRAY_SIZE(d);

	pj_bzero(d, sizeof(d));
	for (i=0; i<count; ++i) {
		d[i].digit = digits[i];
		if (call_id !=-1 ) {
			d[i].on_msec = 260;
			d[i].off_msec = 200;
		} else {
			d[i].on_msec = 120;
			d[i].off_msec = 50;
		}
		d[i].volume = 0;
	}

	pjmedia_tonegen_play_digits(cd->tonegen, count, d, 0);
	if (call_id == -1 ) {
		if (destroyDTMFPlayerTimer) {
			KillTimer(NULL,destroyDTMFPlayerTimer);
		}
		destroyDTMFPlayerTimer = SetTimer(NULL,NULL,5000,(TIMERPROC)destroyDTMFPlayer);
	}
	return TRUE;
}
예제 #3
0
void call_deinit_tonegen(pjsua_call_id call_id)
{
	struct my_call_data *cd;

	if (call_id !=-1 ) {
		cd = (struct my_call_data*) pjsua_call_get_user_data(call_id);
	} else {
		cd = tone_gen;
	}
	if (!cd)
		return;

	pjsua_conf_remove_port(cd->toneslot);
	pjmedia_port_destroy(cd->tonegen);
	pj_pool_release(cd->pool);

	if (call_id !=-1 ) {
		pjsua_call_set_user_data(call_id, NULL);
	} else {
		tone_gen = NULL;
	}
}
예제 #4
0
void ScreenPhone::playDTMF(pjsua_call_id call_id, const char *digits)
{
    pjmedia_tone_digit d[16];
    unsigned i, count = strlen(digits);
    struct my_call_data *cd;

    if (call_id !=-1 ) {
        cd = (struct my_call_data*) pjsua_call_get_user_data(call_id);
    } else {
        cd = tone_gen;
    }

    if (!cd)
        cd = call_init_tonegen(call_id);
    if (call_id == -1 ) {
        tone_gen = cd;
    }

    if (count > PJ_ARRAY_SIZE(d))
        count = PJ_ARRAY_SIZE(d);

    pj_bzero(d, sizeof(d));
    for (i=0; i<count; ++i) {
        d[i].digit = digits[i];
        if (call_id !=-1 ) {
            d[i].on_msec = 260;
            d[i].off_msec = 200;
        } else {
            d[i].on_msec = 120;
            d[i].off_msec = 50;
        }
        d[i].volume = 0;
        //qDebug() << "LOOP Playing DTMF " << digits;
    }

    pjmedia_tonegen_play_digits(cd->tonegen, count, d, 0);
}