示例#1
0
int allow_address(sip_msg_t *_msg, int addr_group, str *ips, int port)
{
	struct ip_addr *ipa;

	ipa=strtoipX(ips);

	if ( ipa ) {
		if (addr_hash_table
				&& match_addr_hash_table(*addr_hash_table, addr_group,
					ipa, (unsigned int)port) == 1) {
			return 1;
		} else {
			if(subnet_table) {
				return match_subnet_table(*subnet_table, addr_group, ipa,
						(unsigned int)port);
			}
		}
	} else {
		if(domain_list_table) {
			return match_domain_name_table(*domain_list_table, addr_group, ips,
					(unsigned int)port);
		}
	}
	return -1;
}
示例#2
0
/*
 * Checks if an entry exists in cached address table that belongs to a
 * given address group and has given ip address and port.  Port value
 * 0 in cached address table matches any port.
 */
int allow_address(struct sip_msg* _msg, char* _addr_group, char* _addr_sp,
		char* _port_sp)
{
	unsigned int port;
	int addr_group;
	str ips;
	struct ip_addr *ipa;

	if(fixup_get_ivalue(_msg, (gparam_p)_addr_group, &addr_group) !=0 ) {
		LM_ERR("cannot get group value\n");
		return -1;
	}

	if (_addr_sp==NULL
			|| (fixup_get_svalue(_msg, (gparam_p)_addr_sp, &ips) < 0)) {
		LM_ERR("cannot get value of address pvar\n");
		return -1;
	}

	ipa=strtoipX(&ips);

	if (_port_sp==NULL
			|| (fixup_get_ivalue(_msg, (gparam_p)_port_sp, (int*)&port) < 0)) {
		LM_ERR("cannot get value of port pvar\n");
		return -1;
	}

	if ( ipa ) {
		if (match_addr_hash_table(*addr_hash_table, addr_group, ipa, port) == 1)
			return 1;
		else
			return match_subnet_table(*subnet_table, addr_group, ipa, port);
	} else {
		return match_domain_name_table(*domain_list_table, addr_group, &ips, port);
	}
}