va_end(args);
if (call)
- sprintf(call_text, "%ld", call->ref);
+ sprintf(call_text, "%d", call->ref);
if (ast)
strncpy(ast_text, ast->name, sizeof(ast_text)-1);
ast_text[sizeof(ast_text)-1] = '\0';
*/
struct chan_call *call_first;
-struct chan_call *find_call_ref(unsigned long ref)
+struct chan_call *find_call_ref(unsigned int ref)
{
struct chan_call *call = call_first;
return(call);
}
-struct chan_call *find_call_handle(unsigned long handle)
+struct chan_call *find_call_handle(unsigned int handle)
{
struct chan_call *call = call_first;
/*
* enque message to LCR
*/
-int send_message(int message_type, unsigned long ref, union parameter *param)
+int send_message(int message_type, unsigned int ref, union parameter *param)
{
struct admin_list *admin, **adminp;
char string[1024], *p = string, *opt, *key;
int gain, i, newmode = 0;
+ if (!data[0])
+ return; // no opts
+
strncpy(string, data, sizeof(string)-1);
string[sizeof(string)-1] = '\0';
if (!call->ast || !call->ref)
return;
- CDEBUG(call, call->ast, "Sending setup to LCR. (interface=%s dialstring=%s)\n", call->interface, call->dialstring);
+ CDEBUG(call, call->ast, "Sending setup to LCR. (interface=%s dialstring=%s, cid=%s)\n", call->interface, call->dialstring, call->cid_num);
/* send setup message to LCR */
memset(&newparam, 0, sizeof(union parameter));
newparam.setup.callerinfo.ntype = INFO_NTYPE_UNKNOWN;
strncpy(newparam.setup.callerinfo.display, call->display, sizeof(newparam.setup.callerinfo.display)-1);
call->display[0] = '\0';
- if (ast->cid.cid_num) if (ast->cid.cid_num[0])
- strncpy(newparam.setup.callerinfo.id, ast->cid.cid_num, sizeof(newparam.setup.callerinfo.id)-1);
- if (ast->cid.cid_name) if (ast->cid.cid_name[0])
- strncpy(newparam.setup.callerinfo.name, ast->cid.cid_name, sizeof(newparam.setup.callerinfo.name)-1);
- if (ast->cid.cid_rdnis) if (ast->cid.cid_rdnis[0])
+ if (call->cid_num[0])
+ strncpy(newparam.setup.callerinfo.id, call->cid_num, sizeof(newparam.setup.callerinfo.id)-1);
+ if (call->cid_name[0])
+ strncpy(newparam.setup.callerinfo.name, call->cid_name, sizeof(newparam.setup.callerinfo.name)-1);
+ if (call->cid_rdnis[0])
{
- strncpy(newparam.setup.redirinfo.id, ast->cid.cid_rdnis, sizeof(newparam.setup.redirinfo.id)-1);
+ strncpy(newparam.setup.redirinfo.id, call->cid_rdnis, sizeof(newparam.setup.redirinfo.id)-1);
newparam.setup.redirinfo.itype = INFO_ITYPE_CHAN;
newparam.setup.redirinfo.ntype = INFO_NTYPE_UNKNOWN;
}
/*
* message received from LCR
*/
-int receive_message(int message_type, unsigned long ref, union parameter *param)
+int receive_message(int message_type, unsigned int ref, union parameter *param)
{
struct bchannel *bchannel;
struct chan_call *call;
CDEBUG(call, call->ast, "Join bchannel, because call is already bridged.\n");
bchannel_join(bchannel, call->bridge_id);
}
+ /* create only, if call exists, othewhise it bchannel is freed below... */
+ if (bchannel_create(bchannel, ((call->transparent)?1:0) + ((call->hdlc)?2:0)))
+ bchannel_activate(bchannel, 1);
}
- if (bchannel_create(bchannel, ((call->transparent)?1:0) + ((call->hdlc)?2:0)))
- bchannel_activate(bchannel, 1);
/* acknowledge */
newparam.bchannel.type = BCHANNEL_ASSIGN_ACK;
newparam.bchannel.handle = param->bchannel.handle;
char *socket_name = SOCKET_NAME;
int conn;
struct sockaddr_un sock_address;
- unsigned long on = 1;
+ unsigned int on = 1;
union parameter param;
/* open socket */
&& ast->transfercapability != INFO_BC_VIDEO)
ast->transfercapability = INFO_BC_DATAUNRESTRICTED;
+ call->cid_num[0] = 0;
+ call->cid_name[0] = 0;
+ call->cid_rdnis[0] = 0;
+
+ if (ast->cid.cid_num) if (ast->cid.cid_num[0])
+ strncpy(call->cid_num, ast->cid.cid_num,
+ sizeof(call->cid_num)-1);
+
+ if (ast->cid.cid_name) if (ast->cid.cid_name[0])
+ strncpy(call->cid_name, ast->cid.cid_name,
+ sizeof(call->cid_name)-1);
+ if (ast->cid.cid_rdnis) if (ast->cid.cid_rdnis[0])
+ strncpy(call->cid_rdnis, ast->cid.cid_rdnis,
+ sizeof(call->cid_rdnis)-1);
+
ast_mutex_unlock(&chan_lock);
return 0;
}
-static int lcr_digit(struct ast_channel *ast, char digit)
+static int lcr_digit_begin(struct ast_channel *ast, char digit)
+{
+ printf("DIGT BEGIN %c\n", digit);
+ return (0);
+}
+
+static int lcr_digit_end(struct ast_channel *ast, char digit, unsigned int duration)
{
struct chan_call *call;
union parameter newparam;
.type="LCR",
.description="Channel driver for connecting to Linux-Call-Router",
.requester=lcr_request,
- .send_digit_begin=lcr_digit,
+ .send_digit_begin=lcr_digit_begin,
+ .send_digit_end=lcr_digit_end,
.call=lcr_call,
.bridge=lcr_bridge,
.hangup=lcr_hangup,