diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 2cd99685562f74b33a50e4a4417abb17d04c10a4..7f22806ad394863e8323a462769c2597979e56b6 100755 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -923,7 +923,7 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *m fprintf(p, "Subject: New message %d in mailbox %s\n", msgnum + 1, mailbox); else fprintf(p, "Subject: [PBX]: New message %d in mailbox %s\n", msgnum + 1, mailbox); - fprintf(p, "Message-ID: <Asterisk-%d-%s-%d@%s>\n", msgnum, mailbox, getpid(), host); + fprintf(p, "Message-ID: <Asterisk-%d-%d-%s-%d@%s>\n", msgnum, (unsigned int)rand(), mailbox, getpid(), host); fprintf(p, "MIME-Version: 1.0\n"); if (attach_user_voicemail) { /* Something unique. */ diff --git a/channels/chan_zap.c b/channels/chan_zap.c index d5d17f40063758bd244f51d02c87ccc1c1100303..4cdc98b2cc78786da396f37cce51f244f86ddced 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -4972,6 +4972,35 @@ static void *ss_thread(void *data) case SIG_FXSLS: case SIG_FXSGS: case SIG_FXSKS: + if (p->pri) { + /* This is a GR-303 trunk actually. Wait for the first ring... */ + struct ast_frame *f; + int res; + time_t start; + + time(&start); + ast_setstate(chan, AST_STATE_RING); + while(time(NULL) < start + 3) { + res = ast_waitfor(chan, 1000); + if (res) { + f = ast_read(chan); + if (!f) { + ast_log(LOG_WARNING, "Whoa, hangup while waiting for first ring!\n"); + ast_hangup(chan); + return NULL; + } else if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_RING)) { + res = 1; + } else + res = 0; + ast_frfree(f); + if (res) { + ast_log(LOG_DEBUG, "Got ring!\n"); + res = 0; + break; + } + } + } + } if (p->use_callerid) { cs = callerid_new(); if (cs) {