aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_iax2.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-06-26 20:55:35 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-06-26 20:55:35 +0000
commit4d61d13f042d9852d58219898e40f2728720fe3e (patch)
treea03eeefec20b136486061e8396f85116ba5a9fa5 /channels/chan_iax2.c
parentad1f98ef62d7eedec0d9ef2049264f7bdb5c3188 (diff)
Add ability to send detailed mailbox info (bug #1690)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3323 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_iax2.c')
-rwxr-xr-xchannels/chan_iax2.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 5e282a06e..48a995a84 100755
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -178,6 +178,7 @@ static char accountcode[20];
static int amaflags = 0;
static int globalnotransfer = 0;
static int delayreject = 0;
+static int globalmessagedetail = 0;
static pthread_t netthreadid = AST_PTHREADT_NULL;
@@ -239,6 +240,7 @@ struct iax2_peer {
int delme; /* I need to be deleted */
int temponly; /* I'm only a temp */
int trunk; /* Treat as an IAX trunking */
+ int messagedetail; /* Show exact numbers? */
/* Qualification */
int callno; /* Call number of POKE request */
@@ -4175,9 +4177,19 @@ static int update_registry(char *name, struct sockaddr_in *sin, int callno, char
iax_ie_append_short(&ied, IAX_IE_REFRESH, p->expirey);
iax_ie_append_addr(&ied, IAX_IE_APPARENT_ADDR, &p->addr);
if (!ast_strlen_zero(p->mailbox)) {
- msgcount = ast_app_has_voicemail(p->mailbox);
- if (msgcount)
- msgcount = 65535;
+ if (p->messagedetail) {
+ int new, old;
+ ast_app_messagecount(p->mailbox, &new, &old);
+ if (new > 255)
+ new = 255;
+ if (old > 255)
+ old = 255;
+ msgcount = (old << 8) | new;
+ } else {
+ msgcount = ast_app_has_voicemail(p->mailbox);
+ if (msgcount)
+ msgcount = 65535;
+ }
iax_ie_append_short(&ied, IAX_IE_MSGCOUNT, msgcount);
}
if (p->hascallerid)
@@ -5955,6 +5967,7 @@ static struct iax2_peer *build_peer(char *name, struct ast_variable *v)
peer->expire = -1;
peer->pokeexpire = -1;
}
+ peer->messagedetail = globalmessagedetail;
if (peer) {
if (!found) {
strncpy(peer->name, name, sizeof(peer->name)-1);
@@ -5967,6 +5980,8 @@ static struct iax2_peer *build_peer(char *name, struct ast_variable *v)
strncpy(peer->secret, v->value, sizeof(peer->secret)-1);
else if (!strcasecmp(v->name, "mailbox"))
strncpy(peer->mailbox, v->value, sizeof(peer->mailbox) - 1);
+ else if (!strcasecmp(v->name, "mailboxdetail"))
+ peer->messagedetail = ast_true(v->value);
else if (!strcasecmp(v->name, "trunk")) {
peer->trunk = ast_true(v->value);
if (peer->trunk && (timingfd < 0)) {
@@ -6362,6 +6377,8 @@ static int set_config(char *config_file, struct sockaddr_in* sin){
globalnotransfer = ast_true(v->value);
else if (!strcasecmp(v->name, "delayreject"))
delayreject = ast_true(v->value);
+ else if (!strcasecmp(v->name, "mailboxdetail"))
+ globalmessagedetail = ast_true(v->value);
else if (!strcasecmp(v->name, "trunkfreq")) {
trunkfreq = atoi(v->value);
if (trunkfreq < 10)