From: Super User Date: Tue, 29 Apr 2008 09:02:02 +0000 (+0200) Subject: work X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=commitdiff_plain;h=81c485c126c08982e0d9120d5198c5515a0779d6 work modified: chan_lcr.c --- diff --git a/chan_lcr.c b/chan_lcr.c index 0a38304..2cf2ae6 100644 --- a/chan_lcr.c +++ b/chan_lcr.c @@ -85,6 +85,41 @@ debug of call handling denke an alle info-elements in jeder message (from asterisk & from lcr) ausloesen beim socket-verlust +bei "ast_channel_alloc" kannste die Callerid und den type usw. setzten. +da kannste auch die calledPartyNum setzen. Um asterisk ein Setup zu schicken rufst du einfach "ast_pbx_start( channel ) " auf. Die ganzen queue baren indications und Controls findest du in "include/asterisk/frame.h" + +Also zusammenfassend: + +Messages die zum Asterisk gehen: + +SETUP - > ast_pbx_start(ast) + CONNECT -> ast_queue_control(ast, + AST_CONTROL_ANSWER); +PROCEEDING -> ast_queue_control(ast, + AST_CONTROL_PROCEEDING); +ALERTING -> ast_queue_control(ast, + AST_CONTROL_RINGING); +DISCONNECT -> ast_queue_hangup(ast); + +Messages die vom Asterisk kommen: + +lcr_request -> NEWREF +lcr_call -> SETUP +lcr_answer -> CONNECT +lcr_hangup -> RELEASE_(complete) + lcr_indicate(AST_CONTROL_RINGING) -> ALERTING + lcr_indicate(AST_CONTROL_PROCEEDING) -> PROCEEDING + lcr_indicate(AST_CONTROL_PROGRESS) -> PROGRESS + lcr_indicate(AST_CONTROL_BUSY) -> DISCONNECT ( cause=17 ) + + + + + + + + + #include #include #include @@ -1209,12 +1244,15 @@ int load_module(void) if (!bchannel_initialize()) { ast_log(LOG_ERROR, "Unable to open mISDN device\n"); + close_socket(lcr_sock); return -1; } mISDN_created = 1; if (ast_channel_register(&lcr_tech)) { ast_log(LOG_ERROR, "Unable to register channel class\n"); + bchannel_deinitialize(); + close_socket(lcr_sock); return -1; } @@ -1256,6 +1294,9 @@ int load_module(void) if ((pthread_create(&chan_tid, NULL, chan_thread, arg)<0)) { failed to create thread + bchannel_deinitialize(); + close_socket(lcr_sock); + ast_channel_unregister(&lcr_tech); return -1; } return 0;