work
authorSuper User <root@isdn.jolly.ten>
Tue, 29 Apr 2008 09:02:02 +0000 (11:02 +0200)
committerSuper User <root@isdn.jolly.ten>
Tue, 29 Apr 2008 09:02:02 +0000 (11:02 +0200)
modified:   chan_lcr.c

chan_lcr.c

index 0a38304..2cf2ae6 100644 (file)
@@ -85,6 +85,41 @@ debug of call handling
 denke an alle info-elements in jeder message (from asterisk & from lcr)
 ausloesen beim socket-verlust
 
 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 <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -1209,12 +1244,15 @@ int load_module(void)
 
        if (!bchannel_initialize()) {
                ast_log(LOG_ERROR, "Unable to open mISDN device\n");
 
        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");
                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;
        }
  
                return -1;
        }
  
@@ -1256,6 +1294,9 @@ int load_module(void)
        if ((pthread_create(&chan_tid, NULL, chan_thread, arg)<0))
        {
                failed to create thread
        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;
                return -1;
        }
        return 0;