diff options
author | Richard Mudgett <rmudgett@digium.com> | 2008-08-18 21:07:28 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2008-08-18 21:07:28 +0000 |
commit | 1678a005b6c7096f51b141d3a4d7171114241ffe (patch) | |
tree | 9cd136bcc60610684c8166188185dbfc066871d9 /channels/misdn/isdn_lib.c | |
parent | 612f8c85b42f44063617f3de3176ec02817f768a (diff) |
channels/chan_misdn.c
* Made bearer2str() use allowed_bearers_array[]
* Made use the causes.h defines instead of hardcoded numbers.
* Made use Asterisk presentation indicator values if either of the
mISDN presentation or screen options are negative.
* Updated the misdn_set_opt application option descriptions.
* Renamed the awkward Caller ID presentation misdn_set_opt
application option value not_screened to restricted.
Deprecated the not_screened option value.
channels/misdn/isdn_lib.c
* Made use the causes.h defines instead of hardcoded numbers.
* Fixed some spelling errors and typos.
* Added all defined facility code strings to fac2str().
channels/misdn/isdn_lib.h
* Added doxygen comments to struct misdn_bchannel.
channels/misdn/isdn_lib_intern.h
* Added doxygen comments to struct misdn_stack.
channels/misdn_config.c
configs/misdn.conf.sample
* Updated the mISDN presentation and screen parameter descriptions.
doc/tex/misdn.tex
* Updated the misdn_set_opt application option descriptions.
* Fixed some spelling errors and typos.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@138738 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/misdn/isdn_lib.c')
-rw-r--r-- | channels/misdn/isdn_lib.c | 200 |
1 files changed, 118 insertions, 82 deletions
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c index 54d90ea18..eddde67e4 100644 --- a/channels/misdn/isdn_lib.c +++ b/channels/misdn/isdn_lib.c @@ -25,6 +25,14 @@ #include "isdn_lib_intern.h" #include "isdn_lib.h" +/* + * Define ARRAY_LEN() because I cannot + * #include "asterisk/utils.h" + */ +#define ARRAY_LEN(a) (sizeof(a) / sizeof(a[0])) + +#include "asterisk/causes.h" + void misdn_join_conf(struct misdn_bchannel *bc, int conf_id); void misdn_split_conf(struct misdn_bchannel *bc, int conf_id); @@ -137,17 +145,16 @@ int misdn_lib_get_maxchans(int port) } -struct misdn_stack* get_stack_by_bc(struct misdn_bchannel *bc) +struct misdn_stack *get_stack_by_bc(struct misdn_bchannel *bc) { - struct misdn_stack *stack=get_misdn_stack(); + struct misdn_stack *stack = get_misdn_stack(); - if (!bc) return NULL; + if (!bc) + return NULL; - for ( ; stack; stack=stack->next) { - int i; - for (i=0; i <=stack->b_num; i++) { - if ( bc->port == stack->port) return stack; - } + for ( ; stack; stack = stack->next) { + if (bc->port == stack->port) + return stack; } return NULL; @@ -163,12 +170,13 @@ void get_show_stack_details(int port, char *buf) } if (stack) { - sprintf(buf, "* Port %d Type %s Prot. %s L2Link %s L1Link:%s Blocked:%d", stack->port, stack->nt?"NT":"TE", stack->ptp?"PTP":"PMP", stack->l2link?"UP":"DOWN", stack->l1link?"UP":"DOWN",stack->blocked); - + sprintf(buf, "* Port %d Type %s Prot. %s L2Link %s L1Link:%s Blocked:%d", + stack->port, stack->nt ? "NT" : "TE", stack->ptp ? "PTP" : "PMP", + stack->l2link ? "UP" : "DOWN", stack->l1link ? "UP" : "DOWN", + stack->blocked); } else { buf[0]=0; } - } @@ -193,8 +201,9 @@ static enum global_states global_state=MISDN_INITIALIZING; struct misdn_lib { + /*! \brief mISDN device handle returned by mISDN_open() */ int midev; - int midev_nt; + int midev_nt; /* Not used */ pthread_t event_thread; pthread_t event_handler_thread; @@ -262,9 +271,6 @@ void stack_holder_remove(struct misdn_stack *stack, struct misdn_bchannel *holde struct misdn_bchannel *stack_holder_find(struct misdn_stack *stack, unsigned long l3id); /* from isdn_lib.h */ -int init_bc(struct misdn_stack * stack, struct misdn_bchannel *bc, int midev, int port, int bidx, char *msn, int firsttime); -struct misdn_stack* stack_init(int midev, int port, int ptp); -void stack_destroy(struct misdn_stack* stack); /* user iface */ int te_lib_init( void ) ; /* returns midev */ void te_lib_destroy(int midev) ; @@ -439,8 +445,10 @@ int misdn_cap_is_speech(int cap) int misdn_inband_avail(struct misdn_bchannel *bc) { - /*if ! early_bconnect we have never inband available*/ - if ( ! bc->early_bconnect ) return 0; + if (!bc->early_bconnect) { + /* We have opted to never receive any available inband recorded messages */ + return 0; + } switch (bc->progress_indicator) { case INFO_PI_INBAND_AVAILABLE: @@ -517,7 +525,7 @@ static int find_free_chan_in_stack(struct misdn_stack *stack, struct misdn_bchan if (dec) { for (i = bnums; i >=0; i--) { - if (i != 15 && (channel < 0 || i == channel)) { /* skip E1 Dchannel ;) and work with chan preselection */ + if (i != 15 && (channel < 0 || i == channel)) { /* skip E1 D channel ;) and work with chan preselection */ if (!stack->channels[i]) { cb_log (3, stack->port, " --> found chan%s: %d\n", channel>=0?" (preselected)":"", i+1); chan=i+1; @@ -527,7 +535,7 @@ static int find_free_chan_in_stack(struct misdn_stack *stack, struct misdn_bchan } } else { for (i = 0; i <= bnums; i++) { - if (i != 15 && (channel < 0 || i == channel)) { /* skip E1 Dchannel ;) and work with chan preselection */ + if (i != 15 && (channel < 0 || i == channel)) { /* skip E1 D channel ;) and work with chan preselection */ if (!stack->channels[i]) { cb_log (3, stack->port, " --> found chan%s: %d\n", channel>=0?" (preselected)":"", i+1); chan=i+1; @@ -540,13 +548,13 @@ static int find_free_chan_in_stack(struct misdn_stack *stack, struct misdn_bchan if (!chan) { cb_log (1, stack->port, " !! NO FREE CHAN IN STACK\n"); dump_chan_list(stack); - bc->out_cause=34; + bc->out_cause = AST_CAUSE_NORMAL_CIRCUIT_CONGESTION; return -1; } if (set_chan_in_stack(stack, chan)<0) { cb_log (0, stack->port, "Channel Already in use:%d\n", chan); - bc->out_cause=44; + bc->out_cause = AST_CAUSE_REQUESTED_CHAN_UNAVAIL; return -1; } @@ -683,9 +691,9 @@ static void empty_bc(struct misdn_bchannel *bc) bc->orig=0; - bc->cause=16; - bc->out_cause=16; - bc->pres=0 ; /* screened */ + bc->cause = AST_CAUSE_NORMAL_CLEARING; + bc->out_cause = AST_CAUSE_NORMAL_CLEARING; + bc->pres = 0; /* allowed */ bc->evq=EVENT_NOTHING; @@ -909,7 +917,7 @@ static int create_process (int midev, struct misdn_bchannel *bc) { if (stack->procids[i]==0) break; if (i== MAXPROCS) { - cb_log(0, stack->port, "Couldnt Create New ProcId.\n"); + cb_log(0, stack->port, "Couldn't Create New ProcId.\n"); return -1; } stack->procids[i]=1; @@ -990,13 +998,13 @@ int setup_bc(struct misdn_bchannel *bc) case BCHAN_CLEANED: break; default: - cb_log(4, stack->port, "$$$ bc already upsetted stid :%x (state:%s)\n", b_stid, bc_state2str(bc->bc_state) ); + cb_log(4, stack->port, "$$$ bc already setup stid :%x (state:%s)\n", b_stid, bc_state2str(bc->bc_state) ); return -1; } cb_log(5, stack->port, "$$$ Setting up bc with stid :%x\n", b_stid); - /*check if the b_stid is alread initialized*/ + /*check if the b_stid is already initialized*/ for (i=0; i <= stack->b_num; i++) { if (stack->bc[i].b_stid == b_stid) { cb_log(0, bc->port, "setup_bc: b_stid:%x already in use !!!\n", b_stid); @@ -1046,10 +1054,9 @@ int setup_bc(struct misdn_bchannel *bc) li.name[l-1] = 0; } li.pid.layermask = ISDN_LAYER((4)); - li.pid.protocol[4] = ISDN_PID_L4_B_USER -; + li.pid.protocol[4] = ISDN_PID_L4_B_USER; + bc->layer=4; - } ret = mISDN_new_layer(midev, &li); @@ -1138,7 +1145,7 @@ int setup_bc(struct misdn_bchannel *bc) /** IFACE **/ -int init_bc(struct misdn_stack *stack, struct misdn_bchannel *bc, int midev, int port, int bidx, char *msn, int firsttime) +static int init_bc(struct misdn_stack *stack, struct misdn_bchannel *bc, int midev, int port, int bidx, char *msn, int firsttime) { unsigned char buff[1025] = ""; iframe_t *frm = (iframe_t *)buff; @@ -1151,7 +1158,9 @@ int init_bc(struct misdn_stack *stack, struct misdn_bchannel *bc, int midev, in memset(bc, 0,sizeof(struct misdn_bchannel)); bc->send_lock=malloc(sizeof(struct send_lock)); - + if (!bc->send_lock) { + return -1; + } pthread_mutex_init(&bc->send_lock->lock, NULL); if (msn) { @@ -1176,6 +1185,9 @@ int init_bc(struct misdn_stack *stack, struct misdn_bchannel *bc, int midev, in clear_ibuffer( ibuf); ibuf->rsem=malloc(sizeof(sem_t)); + if (!ibuf->rsem) { + return -1; + } bc->astbuf=ibuf; @@ -1202,7 +1214,7 @@ int init_bc(struct misdn_stack *stack, struct misdn_bchannel *bc, int midev, in -struct misdn_stack* stack_init( int midev, int port, int ptp ) +static struct misdn_stack *stack_init(int midev, int port, int ptp) { int ret; unsigned char buff[1025]; @@ -1387,7 +1399,7 @@ struct misdn_stack* stack_init( int midev, int port, int ptp ) } -void stack_destroy(struct misdn_stack* stack) +static void stack_destroy(struct misdn_stack *stack) { char buf[1024]; if (!stack) return; @@ -1646,7 +1658,7 @@ static int handle_cr ( struct misdn_stack *stack, iframe_t *frm) struct misdn_bchannel dummybc; if (!bc) { - cb_log(4, stack->port, " --> Didn't found BC so temporarly creating dummy BC (l3id:%x) on this port.\n", frm->dinfo); + cb_log(4, stack->port, " --> Didn't find BC so temporarily creating dummy BC (l3id:%x) on this port.\n", frm->dinfo); misdn_make_dummy(&dummybc, stack->port, frm->dinfo, stack->nt, 0); bc=&dummybc; @@ -1673,7 +1685,7 @@ static int handle_cr ( struct misdn_stack *stack, iframe_t *frm) dump_chan_list(stack); if (bc->stack_holder) { - cb_log(4,stack->port, "REMOVEING Holder\n"); + cb_log(4,stack->port, "REMOVING Holder\n"); stack_holder_remove( stack, bc); free(bc); } @@ -1692,7 +1704,7 @@ static int handle_cr ( struct misdn_stack *stack, iframe_t *frm) } -/*Emptys bc if it's reserved (no SETUP out yet)*/ +/* Empties bc if it's reserved (no SETUP out yet) */ void misdn_lib_release(struct misdn_bchannel *bc) { struct misdn_stack *stack=get_stack_by_bc(bc); @@ -1801,10 +1813,10 @@ int release_cr(struct misdn_stack *stack, mISDNuser_head_t *hh) frm.addr=stack->upper_id | FLG_MSG_DOWN; frm.prim = CC_RELEASE_CR|INDICATION; - cb_log(4, stack->port, " --> CC_RELEASE_CR: Faking Realease_cr for %x l3id:%x\n",frm.addr, frm.dinfo); + cb_log(4, stack->port, " --> CC_RELEASE_CR: Faking Release_cr for %x l3id:%x\n",frm.addr, frm.dinfo); /** removing procid **/ if (!bc) { - cb_log(4, stack->port, " --> Didn't found BC so temporarly creating dummy BC (l3id:%x) on this port.\n", hh->dinfo); + cb_log(4, stack->port, " --> Didn't find BC so temporarily creating dummy BC (l3id:%x) on this port.\n", hh->dinfo); misdn_make_dummy(&dummybc, stack->port, hh->dinfo, stack->nt, 0); bc=&dummybc; } @@ -1815,7 +1827,7 @@ int release_cr(struct misdn_stack *stack, mISDNuser_head_t *hh) stack->procids[bc->l3_id&0xff] = 0 ; } } - else cb_log(0, stack->port, "Couldnt find BC so I couldnt remove the Process!!!! this is a bad port.\n"); + else cb_log(0, stack->port, "Couldn't find BC so I couldn't remove the Process!!!! this is a bad port.\n"); if (handle_cr(stack, &frm)<0) { } @@ -1868,7 +1880,7 @@ handle_event_nt(void *dat, void *arg) cb_log(4, stack->port, "bc_l3id:%x holded_bc_l3id:%x\n",bc->l3_id, hold_bc->l3_id); if (hold_bc) { - cb_log(4, stack->port, "REMOVEING Holder\n"); + cb_log(4, stack->port, "REMOVING Holder\n"); /*swap the backup to our new channel back*/ stack_holder_remove(stack, hold_bc); @@ -2045,7 +2057,7 @@ handle_event_nt(void *dat, void *arg) cb_log(3 , stack->port, "%% GOT L2 DeActivate Info.\n"); if (stack->l2upcnt>3) { - cb_log(0 , stack->port, "!!! Could not Get the L2 up after 3 Attemps!!!\n"); + cb_log(0 , stack->port, "!!! Could not Get the L2 up after 3 Attempts!!!\n"); } else { #if 0 if (stack->nt) misdn_lib_reinit_nt_stack(stack->port); @@ -2077,7 +2089,7 @@ handle_event_nt(void *dat, void *arg) bc=find_bc_by_l3id(stack, hh->dinfo); if (!bc) { - cb_log(4, stack->port, " --> Didn't found BC so temporarly creating dummy BC (l3id:%x).\n", hh->dinfo); + cb_log(4, stack->port, " --> Didn't find BC so temporarily creating dummy BC (l3id:%x).\n", hh->dinfo); misdn_make_dummy(&dummybc, stack->port, hh->dinfo, stack->nt, 0); bc=&dummybc; } @@ -2116,7 +2128,7 @@ handle_event_nt(void *dat, void *arg) } else { if (reject) { switch(bc->cause){ - case 17: + case AST_CAUSE_USER_BUSY: cb_log(1, stack->port, "Siemens Busy reject..\n"); break; @@ -2678,12 +2690,12 @@ handle_frm_bc: switch (response) { case RESPONSE_IGNORE_SETUP_WITHOUT_CLOSE: - cb_log(0, stack->port, "TOTALY IGNORING SETUP \n"); + cb_log(0, stack->port, "TOTALLY IGNORING SETUP\n"); break; case RESPONSE_IGNORE_SETUP: /* I think we should send CC_RELEASE_CR, but am not sure*/ - bc->out_cause=16; + bc->out_cause = AST_CAUSE_NORMAL_CLEARING; case RESPONSE_RELEASE_SETUP: misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE); @@ -2706,7 +2718,7 @@ handle_frm_bc: } if (event == EVENT_RELEASE_COMPLETE) { - /* release bchannel only after we've anounced the RELEASE_COMPLETE */ + /* release bchannel only after we've announced the RELEASE_COMPLETE */ int channel=bc->channel; int tmpcause=bc->cause; int tmp_out_cause=bc->out_cause; @@ -2715,8 +2727,8 @@ handle_frm_bc: bc->out_cause=tmp_out_cause; clean_up_bc(bc); - if (tmpcause == 44) { - cb_log(0,stack->port,"**** Received CAUSE:44, so not cleaning up channel %d\n", channel); + if (tmpcause == AST_CAUSE_REQUESTED_CHAN_UNAVAIL) { + cb_log(0,stack->port,"**** Received CAUSE:%d, so not cleaning up channel %d\n", AST_CAUSE_REQUESTED_CHAN_UNAVAIL, channel); cb_log(0,stack->port,"**** This channel is now no longer available,\nplease try to restart it with 'misdn send restart <port> <channel>'\n"); set_chan_in_stack(stack, channel); bc->channel=channel; @@ -2743,9 +2755,9 @@ handle_frm_bc: } else { struct misdn_bchannel dummybc; if (frm->prim!=(CC_FACILITY|INDICATION)) - cb_log(0, stack->port, " --> Didn't find BC so temporarly creating dummy BC (l3id:%x) on this port.\n", frm->dinfo); + cb_log(0, stack->port, " --> Didn't find BC so temporarily creating dummy BC (l3id:%x) on this port.\n", frm->dinfo); else - cb_log(5, stack->port, " --> Using Dummy BC for FACILITy\n"); + cb_log(5, stack->port, " --> Using Dummy BC for FACILITY\n"); memset (&dummybc,0,sizeof(dummybc)); dummybc.port=stack->port; @@ -2787,7 +2799,7 @@ static int handle_l1(msg_t *msg) for (i=0;i<=stack->b_num; i++) { if (stack->bc[i].evq != EVENT_NOTHING) { - cb_log(4, stack->port, "Fireing Queued Event %s because L1 got up\n", isdn_get_info(msgs_g, stack->bc[i].evq, 0)); + cb_log(4, stack->port, "Firing Queued Event %s because L1 got up\n", isdn_get_info(msgs_g, stack->bc[i].evq, 0)); misdn_lib_send_event(&stack->bc[i],stack->bc[i].evq); stack->bc[i].evq=EVENT_NOTHING; } @@ -2973,7 +2985,7 @@ static msg_t *fetch_msg(int midev) msg->len=r; if (r==0) { - free_msg(msg); /* danger, cauz usualy freeing in main_loop */ + free_msg(msg); /* danger, cause usually freeing in main_loop */ cb_log(6,0,"Got empty Msg..\n"); return NULL; } @@ -3014,6 +3026,7 @@ void misdn_lib_isdn_l1watcher(int port) } } +/* This is a thread */ static void misdn_lib_isdn_event_catcher(void *arg) { struct misdn_lib *mgr = arg; @@ -3030,7 +3043,7 @@ static void misdn_lib_isdn_event_catcher(void *arg) frm = (iframe_t*) msg->data; - /** When we make a call from NT2Ast we get this frames **/ + /** When we make a call from NT2Ast we get these frames **/ if (frm->len == 0 && frm->addr == 0 && frm->dinfo == 0 && frm->prim == 0 ) { zero_frm++; free_msg(msg); @@ -3094,7 +3107,7 @@ void te_lib_destroy(int midev) char buf[1024]; mISDN_write_frame(midev, buf, 0, MGR_DELENTITY | REQUEST, entity, 0, NULL, TIMEOUT_1SEC); - cb_log(4, 0, "Entetity deleted\n"); + cb_log(4, 0, "Entity deleted\n"); mISDN_close(midev); cb_log(4, 0, "midev closed\n"); } @@ -3157,7 +3170,7 @@ static void prepare_bc(struct misdn_bchannel*bc, int channel) bc->need_disconnect=1; bc->need_release=1; bc->need_release_complete=1; - bc->cause=16; + bc->cause = AST_CAUSE_NORMAL_CLEARING; if (++mypid>5000) mypid=1; bc->pid=mypid; @@ -3248,23 +3261,47 @@ struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel, int inout, i } -static char *fac2str (enum FacFunction func) + + +/* ******************************************************************* */ +/*! + * \internal + * \brief Convert the facility function enum value into a string. + * + * \return String version of the enum value + */ +static const char *fac2str(enum FacFunction facility) { - struct arr_el { - enum FacFunction p; - char *s ; + static const struct { + enum FacFunction facility; + char *name; } arr[] = { +/* *INDENT-OFF* */ { Fac_None, "Fac_None" }, - { Fac_CD, "Fac_CD"}, + { Fac_GetSupportedServices, "Fac_GetSupportedServices" }, + { Fac_Listen, "Fac_Listen" }, + { Fac_Suspend, "Fac_Suspend" }, + { Fac_Resume, "Fac_Resume" }, + { Fac_CFActivate, "Fac_CFActivate" }, + { Fac_CFDeactivate, "Fac_CFDeactivate" }, + { Fac_CFInterrogateParameters, "Fac_CFInterrogateParameters" }, + { Fac_CFInterrogateNumbers, "Fac_CFInterrogateNumbers" }, + { Fac_CD, "Fac_CD" }, + { Fac_AOCDCurrency, "Fac_AOCDCurrency" }, + { Fac_AOCDChargingUnit, "Fac_AOCDChargingUnit" }, +/* *INDENT-ON* */ }; - int i; - - for (i=0; i < sizeof(arr)/sizeof( struct arr_el) ; i ++) - if ( arr[i].p==func) return arr[i].s; + unsigned index; + for (index = 0; index < ARRAY_LEN(arr); ++index) { + if (arr[index].facility == facility) { + return arr[index].name; + } + } /* end for */ + return "unknown"; -} +} /* end fac2str() */ void misdn_lib_log_ies(struct misdn_bchannel *bc) { @@ -3300,19 +3337,17 @@ void misdn_lib_log_ies(struct misdn_bchannel *bc) cb_log(5, stack->port, " --> bc:%p h:%d sh:%d\n", bc, bc->holded, bc->stack_holder); } -void misdn_send_lock(struct misdn_bchannel *bc); -void misdn_send_unlock(struct misdn_bchannel *bc); #define RETURN(a,b) {retval=a; goto b;} -void misdn_send_lock(struct misdn_bchannel *bc) +static void misdn_send_lock(struct misdn_bchannel *bc) { //cb_log(0,bc->port,"Locking bc->pid:%d\n", bc->pid); if (bc->send_lock) pthread_mutex_lock(&bc->send_lock->lock); } -void misdn_send_unlock(struct misdn_bchannel *bc) +static void misdn_send_unlock(struct misdn_bchannel *bc) { //cb_log(0,bc->port,"UnLocking bc->pid:%d\n", bc->pid); if (bc->send_lock) @@ -3337,7 +3372,7 @@ int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event ) misdn_send_lock(bc); - cb_log(6,stack->port,"SENDEVENT: stack->nt:%d stack->uperid:%x\n",stack->nt, stack->upper_id); + cb_log(6,stack->port,"SENDEVENT: stack->nt:%d stack->upperid:%x\n",stack->nt, stack->upper_id); if ( stack->nt && !stack->l1link) { /** Queue Event **/ @@ -3480,7 +3515,7 @@ int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event ) bc->need_release_complete=0; if (!stack->nt) { - /*create clenaup in TE*/ + /*create cleanup in TE*/ int channel=bc->channel; int tmpcause=bc->cause; @@ -3710,7 +3745,7 @@ int misdn_lib_get_port_info(int port) iframe_t *frm; struct misdn_stack *stack=find_stack_by_port(port); if (!msg) { - cb_log(0, port, "misgn_lib_get_port: alloc_msg failed!\n"); + cb_log(0, port, "misdn_lib_get_port_info: alloc_msg failed!\n"); return -1; } frm=(iframe_t*)msg->data; @@ -3739,7 +3774,7 @@ int queue_cleanup_bc(struct misdn_bchannel *bc) msg_t *msg=alloc_msg(MAX_MSG_SIZE); iframe_t *frm; if (!msg) { - cb_log(0, bc->port, "misgn_lib_get_port: alloc_msg failed!\n"); + cb_log(0, bc->port, "queue_cleanup_bc: alloc_msg failed!\n"); return -1; } frm=(iframe_t*)msg->data; @@ -3769,7 +3804,7 @@ int misdn_lib_pid_restart(int pid) return 0; } -/*Sends Restart message for every bchnanel*/ +/*Sends Restart message for every bchannel*/ int misdn_lib_send_restart(int port, int channel) { struct misdn_stack *stack=find_stack_by_port(port); @@ -3851,6 +3886,7 @@ int misdn_lib_port_restart(int port) sem_t handler_started; +/* This is a thread */ static void manager_event_handler(void *arg) { sem_post(&handler_started); @@ -3893,6 +3929,7 @@ static void manager_event_handler(void *arg) free_msg(msg); break; case MGR_SETSTACK | REQUEST : + /* Warning: memory leak here if we get this message */ break; default: mISDN_write(glob_mgr->midev, frm, mISDN_HEADER_LEN+frm->len, TIMEOUT_1SEC); @@ -3947,8 +3984,10 @@ static void manager_event_handler(void *arg) } -int misdn_lib_maxports_get() { /** BE AWARE WE HAVE NO CB_LOG HERE! **/ - +int misdn_lib_maxports_get(void) +{ + /* BE AWARE WE HAVE NO cb_log() HERE! */ + int i = mISDN_open(); int max=0; @@ -4056,7 +4095,7 @@ int misdn_lib_init(char *portlist, struct misdn_lib_iface *iface, void *user_dat stack=stack_init(midev, port, ptp); if (!stack) { - perror("init_stack"); + perror("stack_init"); exit(1); } @@ -4103,7 +4142,7 @@ int misdn_lib_init(char *portlist, struct misdn_lib_iface *iface, void *user_dat return (mgr == NULL); } -void misdn_lib_destroy() +void misdn_lib_destroy(void) { struct misdn_stack *help; int i; @@ -4327,9 +4366,6 @@ void stack_holder_add(struct misdn_stack *stack, struct misdn_bchannel *holder) cb_log(4,stack->port, "*HOLDER: add %x\n",holder->l3_id); holder->stack_holder=1; - - if (!stack ) return ; - holder->next=NULL; if (!stack->holding) { |