int sccp_line_hasmessages(sccp_line_t * l) { int newmsgs, oldmsgs; int totalmsgs = 0; char tmp[AST_MAX_EXTENSION] = "", * mb, * cur; strncpy(tmp, l->mailbox, sizeof(tmp)); mb = tmp; while((cur = strsep(&mb, ","))) { if (strlen(cur)) { if (sccp_debug > 2) ast_verbose(VERBOSE_PREFIX_3 "Checking mailbox: %s\n", cur); ast_app_messagecount(cur, &newmsgs, &oldmsgs); totalmsgs += newmsgs; } } return totalmsgs; }
int ast_app_messagecount(const char *mailbox, int *newmsgs, int *oldmsgs) { DIR *dir; struct dirent *de; char fn[256]; char tmp[256]=""; char *mb, *cur; char *context; int ret; if (newmsgs) *newmsgs = 0; if (oldmsgs) *oldmsgs = 0; /* If no mailbox, return immediately */ if (ast_strlen_zero(mailbox)) return 0; if (strchr(mailbox, ',')) { int tmpnew, tmpold; strncpy(tmp, mailbox, sizeof(tmp) - 1); mb = tmp; ret = 0; while((cur = strsep(&mb, ", "))) { if (!ast_strlen_zero(cur)) { if (ast_app_messagecount(cur, newmsgs ? &tmpnew : NULL, oldmsgs ? &tmpold : NULL)) return -1; else { if (newmsgs) *newmsgs += tmpnew; if (oldmsgs) *oldmsgs += tmpold; } } } return 0; } strncpy(tmp, mailbox, sizeof(tmp) - 1); context = strchr(tmp, '@'); if (context) { *context = '\0'; context++; } else context = "default"; if (newmsgs) { snprintf(fn, sizeof(fn), "%s/voicemail/%s/%s/INBOX", (char *)ast_config_AST_SPOOL_DIR, context, tmp); dir = opendir(fn); if (dir) { while ((de = readdir(dir))) { if ((strlen(de->d_name) > 3) && !strncasecmp(de->d_name, "msg", 3) && !strcasecmp(de->d_name + strlen(de->d_name) - 3, "txt")) (*newmsgs)++; } closedir(dir); } } if (oldmsgs) { snprintf(fn, sizeof(fn), "%s/voicemail/%s/%s/Old", (char *)ast_config_AST_SPOOL_DIR, context, tmp); dir = opendir(fn); if (dir) { while ((de = readdir(dir))) { if ((strlen(de->d_name) > 3) && !strncasecmp(de->d_name, "msg", 3) && !strcasecmp(de->d_name + strlen(de->d_name) - 3, "txt")) (*oldmsgs)++; } closedir(dir); } } return 0; }