Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 126847) +++ channels/chan_sip.c (working copy) @@ -3457,6 +3457,7 @@ case AST_CAUSE_NO_USER_RESPONSE: /* 18 */ return "408 Request Timeout"; case AST_CAUSE_NO_ANSWER: /* 19 */ + case AST_CAUSE_UNREGISTERED: /* 20 */ return "480 Temporarily unavailable"; case AST_CAUSE_CALL_REJECTED: /* 21 */ return "403 Forbidden"; Index: channels/chan_iax2.c =================================================================== --- channels/chan_iax2.c (revision 126847) +++ channels/chan_iax2.c (working copy) @@ -1556,6 +1556,15 @@ } } + /* This will occur on the first response to a message that we initiated, + * such as a PING. */ + if (callno && dcallno && iaxs[dcallno] && !iaxs[dcallno]->peercallno) { + iaxs[dcallno]->peercallno = callno; + res = dcallno; + store_by_peercallno(iaxs[dcallno]); + return res; + } + /* If we get here, we SHOULD NOT find a call structure for this callno; if we do, it means that there is a call structure that has a peer callno but did NOT get entered into the hash table, Index: apps/app_voicemail.c =================================================================== --- apps/app_voicemail.c (revision 126847) +++ apps/app_voicemail.c (working copy) @@ -1808,7 +1808,7 @@ char fname[256]; char dur[256]; char tmpcmd[256]; - char enc_cidnum[256], enc_cidname[256]; + char enc_cidnum[256] = "", enc_cidname[256] = ""; struct tm tm; char *passdata2; size_t len_passdata; @@ -1818,8 +1818,12 @@ #define ENDL "\n" #endif - strip_control(cidnum, enc_cidnum, sizeof(enc_cidnum)); - strip_control(cidname, enc_cidname, sizeof(enc_cidname)); + if (cidnum) { + strip_control(cidnum, enc_cidnum, sizeof(enc_cidnum)); + } + if (cidname) { + strip_control(cidname, enc_cidname, sizeof(enc_cidname)); + } gethostname(host, sizeof(host) - 1); if (strchr(srcemail, '@')) ast_copy_string(who, srcemail, sizeof(who)); Index: apps/app_dial.c =================================================================== --- apps/app_dial.c (revision 126847) +++ apps/app_dial.c (working copy) @@ -341,6 +341,7 @@ ast_cdr_failed(chan->cdr); \ numcongestion++; \ break; \ + case AST_CAUSE_NO_ROUTE_DESTINATION: \ case AST_CAUSE_UNREGISTERED: \ if (chan->cdr) \ ast_cdr_failed(chan->cdr); \ Index: include/asterisk/causes.h =================================================================== --- include/asterisk/causes.h (revision 126847) +++ include/asterisk/causes.h (working copy) @@ -33,6 +33,7 @@ #define AST_CAUSE_USER_BUSY 17 #define AST_CAUSE_NO_USER_RESPONSE 18 #define AST_CAUSE_NO_ANSWER 19 +#define AST_CAUSE_SUBSCRIBER_ABSENT 20 #define AST_CAUSE_CALL_REJECTED 21 #define AST_CAUSE_NUMBER_CHANGED 22 #define AST_CAUSE_DESTINATION_OUT_OF_ORDER 27 @@ -75,7 +76,7 @@ #define AST_CAUSE_NORMAL AST_CAUSE_NORMAL_CLEARING #define AST_CAUSE_NOANSWER AST_CAUSE_NO_ANSWER #define AST_CAUSE_CONGESTION AST_CAUSE_NORMAL_CIRCUIT_CONGESTION -#define AST_CAUSE_UNREGISTERED AST_CAUSE_NO_ROUTE_DESTINATION +#define AST_CAUSE_UNREGISTERED AST_CAUSE_SUBSCRIBER_ABSENT #define AST_CAUSE_NOTDEFINED 0 #define AST_CAUSE_NOSUCHDRIVER AST_CAUSE_CHAN_NOT_IMPLEMENTED