Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv9074/channels

Modified Files:
        chan_skinny.c 
Log Message:
fix segfault when no CLID number is present (bug #4566)
clean up CLID/CNAM display generation code
suppress compiler warnings for unused items


Index: chan_skinny.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_skinny.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -d -r1.81 -r1.82
--- chan_skinny.c       7 Jun 2005 17:06:33 -0000       1.81
+++ chan_skinny.c       21 Jun 2005 23:06:44 -0000      1.82
@@ -774,8 +774,10 @@
 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 @@
        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_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 @@
        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);

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to