aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_skinny.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-06-21 23:06:44 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-06-21 23:06:44 +0000
commit472d3245ec09d521e8187a9a6b07c14483ad3220 (patch)
treee492c683cf494f8453ba4796de302e62272d4334 /channels/chan_skinny.c
parent579e989494e8cb0cd519e6861135c63665a32b17 (diff)
fix segfault when no CLID number is present (bug #4566)
clean up CLID/CNAM display generation code suppress compiler warnings for unused items git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5962 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_skinny.c')
-rwxr-xr-xchannels/chan_skinny.c61
1 files changed, 27 insertions, 34 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index d5c2f939e..5d8cb63c9 100755
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -774,8 +774,10 @@ AST_MUTEX_DEFINE_STATIC(netlock);
AST_MUTEX_DEFINE_STATIC(sessionlock);
/* Protect the device list */
AST_MUTEX_DEFINE_STATIC(devicelock);
+#if 0
/* Protect the paging device list */
AST_MUTEX_DEFINE_STATIC(pagingdevicelock);
+#endif
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */
@@ -1070,10 +1072,14 @@ static void transmit_callinfo(struct skinnysession *s, char *fromname, char *fro
req->len = htolel(sizeof(struct call_info_message));
req->e = htolel(CALL_INFO_MESSAGE);
- strncpy(req->data.callinfo.callingPartyName, fromname, 39);
- strncpy(req->data.callinfo.callingParty, fromnum, 23);
- strncpy(req->data.callinfo.calledPartyName, toname, 39);
- strncpy(req->data.callinfo.calledParty, tonum, 23);
+ if (fromname)
+ ast_copy_string(req->data.callinfo.callingPartyName, fromname, sizeof(req->data.callinfo.callingPartyName));
+ if (fromnum)
+ ast_copy_string(req->data.callinfo.callingParty, fromnum, sizeof(req->data.callinfo.callingParty));
+ if (toname)
+ ast_copy_string(req->data.callinfo.calledPartyName, toname, sizeof(req->data.callinfo.calledPartyName));
+ if (tonum)
+ ast_copy_string(req->data.callinfo.calledParty, tonum, sizeof(req->data.callinfo.calledParty));
req->data.callinfo.instance = htolel(instance);
req->data.callinfo.reference = htolel(callid);
@@ -1452,10 +1458,12 @@ static struct ast_cli_entry cli_debug =
static struct ast_cli_entry cli_no_debug =
{ { "skinny", "no", "debug", NULL }, skinny_no_debug, "Disable Skinny debugging", no_debug_usage };
+#if 0
static struct skinny_paging_device *build_paging_device(char *cat, struct ast_variable *v)
{
return NULL;
}
+#endif
static struct skinny_device *build_device(char *cat, struct ast_variable *v)
{
@@ -1933,49 +1941,34 @@ static int skinny_call(struct ast_channel *ast, char *dest, int timeout)
transmit_lamp_indication(session, STIMULUS_LINE, l->instance, SKINNY_LAMP_BLINK);
transmit_ringer_mode(session, SKINNY_RING_INSIDE);
- if (ast->cid.cid_num){
-
- char ciddisplay[41] = "";
+ if (ast->cid.cid_num) {
+ char ciddisplay[41];
+ char *work;
+ int size = sizeof(ciddisplay);
/* We'll assume that if it is 10 numbers, it is a standard NANPA number
Why? Because I am bloody American, and I'm bigoted that way. */
if (strlen(ast->cid.cid_num) == 10) {
-
- strcat (ciddisplay, "(");
- strncat (ciddisplay, ast->cid.cid_num,3);
- strcat (ciddisplay, ") ");
-
- strncat (ciddisplay, &ast->cid.cid_num[3],3);
- strcat (ciddisplay,"-");
- strncat (ciddisplay, &ast->cid.cid_num[6],4);
-
- strncat (ciddisplay, " ", 6);
-
- strncat (ciddisplay, ast->cid.cid_name,17);
+ ast_build_string(&work, &size, "(xxx)xxx-xxxx %s",
+ ast->cid.cid_name ? ast->cid.cid_name : "");
+ memcpy(&ciddisplay[1], ast->cid.cid_num, 3);
+ memcpy(&ciddisplay[5], &ast->cid.cid_num[3], 3);
+ memcpy(&ciddisplay[9], &ast->cid.cid_num[6], 4);
} else {
- if (strlen(ast->cid.cid_num) < 40) {
- strncpy(ciddisplay,ast->cid.cid_num,strlen(ast->cid.cid_num));
- strcat (ciddisplay," -- ");
-
- if (sizeof(ast->cid.cid_name) > (40 - (strlen(ast->cid.cid_num) + 4))) {
- strncat (ciddisplay, ast->cid.cid_name, (40 - (strlen(ast->cid.cid_num) + 4)));
- } else {
- strncat (ciddisplay, ast->cid.cid_name, strlen(ast->cid.cid_name));
- }
- } else {
+ if (strlen(ast->cid.cid_num) < 41)
+ ast_build_string(&work, &size, "%s -- %s", ast->cid.cid_num,
+ ast->cid.cid_name ? ast->cid.cid_name : "");
+ else
strncpy(ciddisplay, "Number too long!", 15);
- }
}
- if (skinnydebug) {
+ if (skinnydebug)
ast_verbose("Trying to send: '%s'\n",ciddisplay);
- }
transmit_displaymessage(session, ciddisplay);
- }else{
+ } else
transmit_displaymessage(session, "Unknown Name");
- }
transmit_tone(session, tone);
transmit_callstate(session, l->instance, SKINNY_RINGIN, sub->callid);