From 6c431378fce50224d8cbf370db7eebddcecd5102 Mon Sep 17 00:00:00 2001 From: MelwareDE Date: Fri, 16 Dec 2005 11:21:57 +0000 Subject: [PATCH] - fix missing CONF messages when no interface is found --- chan_capi.c | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/chan_capi.c b/chan_capi.c index a08cba9..41c87ac 100644 --- a/chan_capi.c +++ b/chan_capi.c @@ -2661,15 +2661,17 @@ static void capi_handle_data_b3_indication(_cmsg *CMSG, unsigned int PLCI, unsig { _cmsg CMSG2; struct ast_frame fr; - unsigned char *b3buf; + unsigned char *b3buf = NULL; int b3len = 0; int j; int rxavg = 0; int txavg = 0; - b3len = DATA_B3_IND_DATALENGTH(CMSG); - b3buf = &(i->rec_buffer[AST_FRIENDLY_OFFSET]); - memcpy(b3buf, (char *)DATA_B3_IND_DATA(CMSG), b3len); + if (i != NULL) { + b3len = DATA_B3_IND_DATALENGTH(CMSG); + b3buf = &(i->rec_buffer[AST_FRIENDLY_OFFSET]); + memcpy(b3buf, (char *)DATA_B3_IND_DATA(CMSG), b3len); + } /* send a DATA_B3_RESP very quickly to free the buffer in capi */ DATA_B3_RESP_HEADER(&CMSG2, capi_ApplID, HEADER_MSGNUM(CMSG), 0); @@ -2771,10 +2773,7 @@ static void capi_handle_connect_active_indication(_cmsg *CMSG, unsigned int PLCI CONNECT_ACTIVE_RESP_HEADER(&CMSG2, capi_ApplID, HEADER_MSGNUM(CMSG), 0); CONNECT_ACTIVE_RESP_PLCI(&CMSG2) = PLCI; - - if (_capi_put_cmsg(&CMSG2) != 0) { - return; - } + _capi_put_cmsg(&CMSG2); return_on_no_interface("CONNECT_ACTIVE_IND"); @@ -2823,11 +2822,8 @@ static void capi_handle_connect_b3_active_indication(_cmsg *CMSG, unsigned int P /* then send a CONNECT_B3_ACTIVE_RESP */ CONNECT_B3_ACTIVE_RESP_HEADER(&CMSG2, capi_ApplID, HEADER_MSGNUM(CMSG), 0); CONNECT_B3_ACTIVE_RESP_NCCI(&CMSG2) = NCCI; + _capi_put_cmsg(&CMSG2); - if (_capi_put_cmsg(&CMSG2) != 0) { - return; - } - return_on_no_interface("CONNECT_ACTIVE_B3_IND"); cc_mutex_lock(&contrlock); @@ -2875,7 +2871,6 @@ static void capi_handle_disconnect_b3_indication(_cmsg *CMSG, unsigned int PLCI, DISCONNECT_B3_RESP_HEADER(&CMSG2, capi_ApplID, HEADER_MSGNUM(CMSG), 0); DISCONNECT_B3_RESP_NCCI(&CMSG2) = NCCI; - _capi_put_cmsg(&CMSG2); return_on_no_interface("DISCONNECT_B3_IND"); @@ -2912,10 +2907,12 @@ static void capi_handle_connect_b3_indication(_cmsg *CMSG, unsigned int PLCI, un CONNECT_B3_RESP_HEADER(&CMSG2, capi_ApplID, HEADER_MSGNUM(CMSG), 0); CONNECT_B3_RESP_NCCI(&CMSG2) = NCCI; CONNECT_B3_RESP_REJECT(&CMSG2) = 0; + _capi_put_cmsg(&CMSG2); + + return_on_no_interface("CONNECT_B3_IND"); i->NCCI = NCCI; - _capi_put_cmsg(&CMSG2); return; } @@ -3389,35 +3386,27 @@ static void capi_handle_msg(_cmsg *CMSG) capi_handle_connect_indication(CMSG, PLCI, NCCI, &i); break; case CAPI_P_IND(DATA_B3): - if(i == NULL) break; capi_handle_data_b3_indication(CMSG, PLCI, NCCI, i); break; case CAPI_P_IND(CONNECT_B3): - if(i == NULL) break; capi_handle_connect_b3_indication(CMSG, PLCI, NCCI, i); break; case CAPI_P_IND(CONNECT_B3_ACTIVE): - if(i == NULL) break; capi_handle_connect_b3_active_indication(CMSG, PLCI, NCCI, i); break; case CAPI_P_IND(DISCONNECT_B3): - if(i == NULL) break; capi_handle_disconnect_b3_indication(CMSG, PLCI, NCCI, i); break; case CAPI_P_IND(DISCONNECT): - if(i == NULL) break; capi_handle_disconnect_indication(CMSG, PLCI, NCCI, i); break; case CAPI_P_IND(FACILITY): - if(i == NULL) break; capi_handle_facility_indication(CMSG, PLCI, NCCI, i); break; case CAPI_P_IND(INFO): - if(i == NULL) break; capi_handle_info_indication(CMSG, PLCI, NCCI, i); break; case CAPI_P_IND(CONNECT_ACTIVE): - if(i == NULL) break; capi_handle_connect_active_indication(CMSG, PLCI, NCCI, i); break;