Exemplo n.º 1
0
static TfwConnection *
tfw_sched_http_sched_grp(TfwMsg *msg)
{
	TfwSrvGroup *sg;
	TfwConnection *conn;
	TfwSchedHttpRule *rule;

	if(!tfw_sched_http_rules || list_empty(&tfw_sched_http_rules->list))
		return NULL;

	rule = tfw_http_match_req_entry((TfwHttpReq *)msg, tfw_sched_http_rules,
					TfwSchedHttpRule, rule);
	if (unlikely(!rule)) {
		DBG("No matching rule found.\n");
		return NULL;
	}

	sg = rule->main_sg;
	BUG_ON(!sg);
	DBG("use server group: '%s'\n", sg->name);

	conn = sg->sched->sched_srv(msg, sg);

	if (unlikely(!conn && rule->backup_sg)) {
		sg = rule->backup_sg;
		DBG("the main group is offline, use backup: '%s'\n", sg->name);
		conn = sg->sched->sched_srv(msg, sg);
	}

	if (unlikely(!conn))
		ERR("Unable to select server from group '%s'\n", sg->name);

	return conn;
}
Exemplo n.º 2
0
int
test_mlst_match(void)
{
	MatchEntry *e;

	e = tfw_http_match_req_entry(test_req, test_mlst, MatchEntry, rule);
	if (e)
		return e->test_id;

	return -1;
}