summaryrefslogtreecommitdiff
path: root/channels/misdn
diff options
context:
space:
mode:
authorChristian Richter <christian.richter@beronet.com>2006-05-24 23:21:03 +0000
committerChristian Richter <christian.richter@beronet.com>2006-05-24 23:21:03 +0000
commiteefc9193e7cc5edd5ce2155b7a4d7dd6f744a7c6 (patch)
tree08a637ca7fb3e9596c0e7e74427ffd74765c3e61 /channels/misdn
parentf35e669a98d4058f928c97ffe4e9729cc0224f06 (diff)
added EVENT_NEW_CHANNEL. We change the channel name now when we got the real channel, also changed name generation to new stringfield api
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@30132 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/misdn')
-rw-r--r--channels/misdn/isdn_lib.c16
-rw-r--r--channels/misdn/isdn_lib.h1
-rw-r--r--channels/misdn/isdn_msg_parser.c7
3 files changed, 16 insertions, 8 deletions
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c
index 9cb689ce0..a969d11d9 100644
--- a/channels/misdn/isdn_lib.c
+++ b/channels/misdn/isdn_lib.c
@@ -370,7 +370,7 @@ void dump_chan_list(struct misdn_stack *stack)
-static int find_free_chan_in_stack(struct misdn_stack *stack, int channel)
+static int find_free_chan_in_stack(struct misdn_stack *stack, struct misdn_bchannel *bc, int channel)
{
int i;
@@ -386,6 +386,8 @@ static int find_free_chan_in_stack(struct misdn_stack *stack, int channel)
if (!stack->channels[i]) {
cb_log (4, stack->port, " --> found chan%s: %d\n", channel>=0?" (preselected)":"", i+1);
stack->channels[i] = 1;
+ bc->channel=i+1;
+ cb_event(EVENT_NEW_CHANNEL, bc, NULL);
return i+1;
}
}
@@ -772,9 +774,9 @@ static int create_process (int midev, struct misdn_bchannel *bc) {
int free_chan;
if (stack->nt) {
- free_chan = find_free_chan_in_stack(stack, bc->channel_preselected?bc->channel:0);
+ free_chan = find_free_chan_in_stack(stack, bc, bc->channel_preselected?bc->channel:0);
if (!free_chan) return -1;
- bc->channel=free_chan;
+ /*bc->channel=free_chan;*/
cb_log(4,stack->port, " --> found channel: %d\n",free_chan);
@@ -805,9 +807,9 @@ static int create_process (int midev, struct misdn_bchannel *bc) {
} else {
if (stack->ptp || bc->te_choose_channel) {
/* we know exactly which channels are in use */
- free_chan = find_free_chan_in_stack(stack, bc->channel_preselected?bc->channel:0);
+ free_chan = find_free_chan_in_stack(stack, bc, bc->channel_preselected?bc->channel:0);
if (!free_chan) return -1;
- bc->channel=free_chan;
+ /*bc->channel=free_chan;*/
cb_log(0,stack->port, " --> found channel: %d\n",free_chan);
} else {
/* other phones could have made a call also on this port (ptmp) */
@@ -1397,7 +1399,7 @@ int handle_event ( struct misdn_bchannel *bc, enum event_e event, iframe_t *frm)
{
if (bc->channel == 0xff) {
- bc->channel=find_free_chan_in_stack(stack, 0);
+ bc->channel=find_free_chan_in_stack(stack, bc, 0);
if (!bc->channel) {
cb_log(-1, stack->port, "Any Channel Requested, but we have no more!!\n");
break;
@@ -2877,7 +2879,7 @@ int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event )
case EVENT_RETRIEVE_ACKNOWLEDGE:
if (stack->nt) {
if (bc->channel <=0 ) { /* else we have the channel already */
- bc->channel = find_free_chan_in_stack(stack, 0);
+ bc->channel = find_free_chan_in_stack(stack, bc, 0);
if (!bc->channel) {
cb_log(-1, stack->port, " No free channel at the moment\n");
diff --git a/channels/misdn/isdn_lib.h b/channels/misdn/isdn_lib.h
index 26e618771..98c40b03a 100644
--- a/channels/misdn/isdn_lib.h
+++ b/channels/misdn/isdn_lib.h
@@ -100,6 +100,7 @@ enum event_e {
EVENT_DTMF_TONE,
EVENT_NEW_L3ID,
EVENT_NEW_BC,
+ EVENT_NEW_CHANNEL,
EVENT_UNKNOWN
};
diff --git a/channels/misdn/isdn_msg_parser.c b/channels/misdn/isdn_msg_parser.c
index 2fb43eb86..0d5fb9f72 100644
--- a/channels/misdn/isdn_msg_parser.c
+++ b/channels/misdn/isdn_msg_parser.c
@@ -39,11 +39,14 @@ void set_channel(struct misdn_bchannel *bc, int channel) {
cb_log(0,bc->port,"We already have a channel (%d)\n", bc->channel);
} else {
bc->channel = channel;
+ cb_event(EVENT_NEW_CHANNEL,bc,NULL);
}
}
- if (channel > 0 && !bc->nt )
+ if (channel > 0 && !bc->nt ) {
bc->channel = channel;
+ cb_event(EVENT_NEW_CHANNEL,bc,NULL);
+ }
}
void parse_proceeding (struct isdn_msg msgs[], msg_t *msg, struct misdn_bchannel *bc, int nt)
@@ -1206,6 +1209,7 @@ char EVENT_CLEAN_INFO[] = "CLEAN_UP";
char EVENT_DTMF_TONE_INFO[] = "DTMF_TONE";
char EVENT_NEW_L3ID_INFO[] = "NEW_L3ID";
char EVENT_NEW_BC_INFO[] = "NEW_BC";
+char EVENT_NEW_CHANNEL_INFO[] = "NEW_CHANNEL";
char EVENT_BCHAN_DATA_INFO[] = "BCHAN_DATA";
char EVENT_BCHAN_ACTIVATED_INFO[] = "BCHAN_ACTIVATED";
char EVENT_TONE_GENERATE_INFO[] = "TONE_GENERATE";
@@ -1220,6 +1224,7 @@ char * isdn_get_info(struct isdn_msg msgs[], enum event_e event, int nt)
if (event == EVENT_DTMF_TONE) return EVENT_DTMF_TONE_INFO;
if (event == EVENT_NEW_L3ID) return EVENT_NEW_L3ID_INFO;
if (event == EVENT_NEW_BC) return EVENT_NEW_BC_INFO;
+ if (event == EVENT_NEW_CHANNEL) return EVENT_NEW_CHANNEL_INFO;
if (event == EVENT_BCHAN_DATA) return EVENT_BCHAN_DATA_INFO;
if (event == EVENT_BCHAN_ACTIVATED) return EVENT_BCHAN_ACTIVATED_INFO;
if (event == EVENT_TONE_GENERATE) return EVENT_TONE_GENERATE_INFO;