Ejemplo n.º 1
0
static int loopback_matchmore(struct cw_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data)
{
	LOOPBACK_COMMON;

	res = cw_matchmore_extension(chan, newcontext, newexten, newpriority, callerid);
	if (newpattern)
    {
        switch (cw_extension_pattern_match(exten, newpattern))
        {
        case EXTENSION_MATCH_EXACT:
        case EXTENSION_MATCH_STRETCHABLE:
        case EXTENSION_MATCH_POSSIBLE:
            break;
        default:
            res = 0;
            break;
        }
	}
	return res;
}
Ejemplo n.º 2
0
int misdn_cfg_is_msn_valid (int port, char* msn)
{
	int re = 0;
	struct msn_list *iter;

	if (!misdn_cfg_is_port_valid(port))
    {
		cw_log(LOG_WARNING, "Invalid call to misdn_cfg_is_msn_valid! Port number %d is not valid.\n", port);
		return 0;
	}

	misdn_cfg_lock();
	if (port_cfg[port][map[MISDN_CFG_MSNS]].ml)
		iter = port_cfg[port][map[MISDN_CFG_MSNS]].ml;
	else
		iter = port_cfg[0][map[MISDN_CFG_MSNS]].ml;
	for (  ;  iter;  iter = iter->next)
    {
		if (*(iter->msn) == '*')
        {
			re = 1;
		}
        else
        {
            switch (cw_extension_pattern_match(msn, iter->msn))
            {
            case EXTENSION_MATCH_EXACT:
            case EXTENSION_MATCH_STRETCHABLE:
            case EXTENSION_MATCH_POSSIBLE:
    			re = 1;
    			break;
            }
        }
        if (re)
            break;
	}
    misdn_cfg_unlock();

	return re;
}
Ejemplo n.º 3
0
static struct cw_exten *find_matching_priority(struct cw_context *c, const char *exten, int priority, const char *callerid)
{
	struct cw_exten *e;
	struct cw_include *i;
	struct cw_context *c2;
	struct cw_exten *p;
    int hit;

	for (e = cw_walk_context_extensions(c, NULL);  e;  e = cw_walk_context_extensions(c, e))
    {
        switch (cw_extension_pattern_match(exten, cw_get_extension_name(e)))
        {
        case EXTENSION_MATCH_EXACT:
        case EXTENSION_MATCH_STRETCHABLE:
        case EXTENSION_MATCH_POSSIBLE:
			if (cw_get_extension_matchcid(e))
            {
                switch (cw_extension_pattern_match(callerid, cw_get_extension_cidmatch(e)))
                {
                case EXTENSION_MATCH_EXACT:
                case EXTENSION_MATCH_STRETCHABLE:
                case EXTENSION_MATCH_POSSIBLE:
                    hit = 1;
                    break;
                default:
                    hit = 0;
                    break;
                }
            }
            else
            {
                hit = 1;
            }
			if (hit)
            {
				/* This is the matching extension we want */
				for (p = cw_walk_extension_priorities(e, NULL);  p;  p = cw_walk_extension_priorities(e, p))
                {
					if (priority != cw_get_extension_priority(p))
						continue;
					return p;
				}
			}
            break;
		}
	}

	/* No match; run through includes */
	for (i = cw_walk_context_includes(c, NULL);  i;  i = cw_walk_context_includes(c, i))
    {
		for (c2 = cw_walk_contexts(NULL);  c2;  c2 = cw_walk_contexts(c2))
        {
			if (!strcmp(cw_get_context_name(c2), cw_get_include_name(i)))
            {
				if ((e = find_matching_priority(c2, exten, priority, callerid)))
					return e;
			}
		}
	}
	return NULL;
}