Added alerting and proceeding to the goto rule.
[lcr.git] / chan_lcr.c
index cfd3c61..c1d3745 100644 (file)
@@ -121,6 +121,12 @@ it is called from ast_channel process which has already locked ast_channel.
 
 #include <semaphore.h>
 
+#define HAVE_ATTRIBUTE_always_inline 1
+#define HAVE_ARPA_INET_H 1
+#define HAVE_TIMERSUB 1
+
+#include <asterisk/compiler.h>
+#include <asterisk/buildopts.h>
 #include <asterisk/module.h>
 #include <asterisk/channel.h>
 #include <asterisk/config.h>
@@ -543,17 +549,15 @@ static void send_setup_to_lcr(struct chan_call *call)
        }
        switch(ast->cid.cid_pres & AST_PRES_RESTRICTION)
        {
-               case AST_PRES_ALLOWED:
-               newparam.setup.callerinfo.present = INFO_PRESENT_ALLOWED;
-               break;
                case AST_PRES_RESTRICTED:
                newparam.setup.callerinfo.present = INFO_PRESENT_RESTRICTED;
                break;
                case AST_PRES_UNAVAILABLE:
                newparam.setup.callerinfo.present = INFO_PRESENT_NOTAVAIL;
                break;
+               case AST_PRES_ALLOWED:
                default:
-               newparam.setup.callerinfo.present = INFO_PRESENT_NULL;
+               newparam.setup.callerinfo.present = INFO_PRESENT_ALLOWED;
        }
        switch(ast->cid.cid_ton)
        {
@@ -703,6 +707,12 @@ static void lcr_start_pbx(struct chan_call *call, struct ast_channel *ast, int c
                return;
        }
 
+       if (!*ast->exten) {
+               /* if can match */
+               CDEBUG(call, ast, "There is no 's' extension (and we tried to match it implicitly). Extensions may match, if more digits are dialed.\n");
+               return;
+       }
+
        /* if not match */
        cause = 1;
        release:
@@ -1495,6 +1505,7 @@ static int queue_send(void)
                                        case 'R':
                                                CDEBUG(call, ast, "Sending queued RINGING to Asterisk.\n");
                                                ast_queue_control(ast, AST_CONTROL_RINGING);
+                                               ast_setstate(ast, AST_STATE_RINGING);
                                                break;
                                        case 'A':
                                                CDEBUG(call, ast, "Sending queued ANSWER to Asterisk.\n");
@@ -1984,7 +1995,7 @@ static int lcr_write(struct ast_channel *ast, struct ast_frame *f)
                return -1;
        }
        if (call->bchannel && f->samples)
-               bchannel_transmit(call->bchannel, f->data, f->samples);
+               bchannel_transmit(call->bchannel, (unsigned char *)f->data, f->samples);
        ast_mutex_unlock(&chan_lock);
        return 0;
 }
@@ -2024,7 +2035,7 @@ static struct ast_frame *lcr_read(struct ast_channel *ast)
        call->read_fr.datalen = len;
        call->read_fr.samples = len;
        call->read_fr.delivery = ast_tv(0,0);
-       call->read_fr.data = call->read_buff;
+       (unsigned char *)call->read_fr.data = call->read_buff;
        ast_mutex_unlock(&chan_lock);
 
        return &call->read_fr;
@@ -2125,7 +2136,7 @@ static int lcr_indicate(struct ast_channel *ast, int cond, const void *data, siz
                        ast_moh_stop(ast);
                        call->on_hold = 0;
                        break;
-#if ASTERISK_VERSION_NUM >= 10600
+#ifdef AST_CONTROL_SRCUPDATE
                case AST_CONTROL_SRCUPDATE:
                        CDEBUG(call, ast, "Received AST_CONTROL_SRCUPDATE from Asterisk.\n");
                         break;
@@ -2351,20 +2362,21 @@ enum ast_bridge_result lcr_bridge(struct ast_channel *ast1,
 }
 static struct ast_channel_tech lcr_tech = {
        .type="LCR",
-       .description="Channel driver for connecting to Linux-Call-Router",
-       .requester=lcr_request,
-       .send_digit_begin=lcr_digit_begin,
-       .send_digit_end=lcr_digit_end,
-       .call=lcr_call,
-       .bridge=lcr_bridge, 
-       .hangup=lcr_hangup,
-       .answer=lcr_answer,
-       .read=lcr_read,
-       .write=lcr_write,
-       .indicate=lcr_indicate,
-       .fixup=lcr_fixup,
-       .send_text=lcr_send_text,
-       .properties=0
+       .description = "Channel driver for connecting to Linux-Call-Router",
+       .capabilities = AST_FORMAT_ALAW,
+       .requester = lcr_request,
+       .send_digit_begin = lcr_digit_begin,
+       .send_digit_end = lcr_digit_end,
+       .call = lcr_call,
+       .bridge = lcr_bridge, 
+       .hangup = lcr_hangup,
+       .answer = lcr_answer,
+       .read = lcr_read,
+       .write = lcr_write,
+       .indicate = lcr_indicate,
+       .fixup = lcr_fixup,
+       .send_text = lcr_send_text,
+       .properties = 0
 };