2012-11-30 3 views
3

나는 C의 사용자 인증, 라우팅 및 청구를 MySQL을 사용하여 수행하는 구식 별표 (Asterisk) 응용 프로그램을 가지고 있습니다. 나는 별표 1.4.21로 그것을 지켰다. 왜냐하면 아무런 CDR 데이터도 새로운 버전의 Asterisk에서 반환되지 않았기 때문이다.chan-> cdr 별표 1.4.21에서 업그레이드 한 후 데이터가 없음

분명히 CDR-s 처리 방식이 완전히 변경된 1.4.22 https://issues.asterisk.org/jira/browse/ASTERISK-13064의 일부 변경 사항이있었습니다. 아쉽게도 기존 코드를 올바르게 마이그레이션하는 방법에 대한 유용한 정보는 제공되지 않았습니다.

실행 순서가 변경되었으므로 'h'확장자가 호출되고 CDR 데이터가 재설정됩니다.

내 코드 :

 

ast_log(LOG_NOTICE,"Dialing string: '%s'\n", dialstr); 

app = pbx_findapp("Dial"); 
if (app) 
     res = pbx_exec(chan, app, dialstr); 

ast_log(LOG_NOTICE,"Return from pbx_exec '%i', Disposition: '%s'\n", res, ast_cdr_disp2str(chan->cdr->disposition)); 

다른 찬 -> CDR-> billsec 등 코드 핸들의 일부지만, 항상 0 값을 제공합니다. 난 항상 CLI에서이 로그 얻을 호출이 성공한 후

: 동일한 코드가 내가 들어 1.4.21

하나 개의 솔루션에서 잘 작동하는 동안

Return from pbx_exec '-1', Disposition: 'NO ANSWER'
는 전화하기 전에 ast_reset()를 사용하는 것입니다하지만 난 방법을 잘 모르겠습니다 그것을 구현합니다. 이 응용 프로그램을 적용하는 방법에 대한 도움이 필요하십니까?

답변

2

그냥 DIALSTATUS 변수를 얻을 수 있습니다.이 변수는 응용 프로그램에 충분하며 향후 릴리스에서 지원됩니다.

pbx_builtin_getvar_helper(chan, "DIALSTATUS"); 
+0

감사합니다. 나는 이것에 희망을 잃어 가고 있었다! DIALSTATUS는 실제로 전화 처분을받는 일을하지만 Dial()에서 돌아온 후에 CDR을 얻는 데 관심이 있습니다. 그게 C의 3000 줄이 처리하는 내용입니다 ... 이 문제에 대한 아이디어가 있습니까? 별표가 'h'확장자를 부르기 전에 '다이얼'과 'g'옵션으로 통화 흐름을 변경하고 코드로 돌아가 CDR 세부 정보 (billsec가 가장 중요합니다.)를 알 수 있습니다. 하지만 그걸 믿을 수 있니? 이 작업을 수행 할 수있는 더 깨끗한 방법이 있습니까? –

+0

"기존"방식을 사용하는 것이 좋습니다. 변수 CDR (billsec) 또는 응답 시간 (ANSWEREDTIME)을 항상 물어볼 수 있습니다. 나는 당신이 변수를 사용할 수있는 무언가를 위해 저수준 마법을 사용한다고 생각하지 않는다. – arheops

관련 문제