示例#1
0
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;
}
示例#2
0
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;
}