Пример #1
0
int proto_expectation_add(struct proto_expectation *e, struct conntrack_session *session, unsigned int expiry, ptime now) {

    if (!e || !e->tail || !e->tail->proto) {
        pomlog(POMLOG_ERR "Cannot add expectation as it's incomplete");
        return POM_ERR;
    }

    e->expiry = timer_alloc(e, proto_expectation_expiry);
    if (!e->expiry)
        return POM_ERR;

    if (timer_queue_now(e->expiry, expiry, now) != POM_OK)
        return POM_ERR;

    conntrack_session_refcount_inc(session);
    e->session = session;

    struct proto *proto = e->tail->proto;
    pom_rwlock_wlock(&proto->expectation_lock);

    e->next = proto->expectations;
    if (e->next)
        e->next->prev = e;

    proto->expectations = e;

    pom_rwlock_unlock(&proto->expectation_lock);

    registry_perf_inc(e->proto->perf_expt_pending, 1);

    return POM_OK;
}
Пример #2
0
int conntrack_session_bind(struct conntrack_entry *ce, struct conntrack_session *session) {

	if (ce->session) {
		pomlog(POMLOG_WARN "Warning, session already exists when trying to bind another session. TODO: implement merging");
		conntrack_session_refcount_dec(ce->session);
	}

	conntrack_session_refcount_inc(session);
	ce->session = session;

	return POM_OK;
}
Пример #3
0
void proto_expectation_set_session(struct proto_expectation *e, struct conntrack_session *session) {

	conntrack_session_refcount_inc(session);
	e->session = session;
}