fr_dlist_t entry; //!< Used to track the trunk request in the conn->sent
///< or trunk->backlog request.
- fr_trunk_request_state_t state; //!< Which list the request is now located in.
-
fr_trunk_cancel_reason_t cancel_reason; //!< Why this request was cancelled.
fr_time_t last_freed; //!< Last time this request was freed.
do { \
DEBUG4("Trunk request %" PRIu64 " changed state %s -> %s", \
treq->id, \
- fr_table_str_by_value(fr_trunk_request_states, treq->state, "<INVALID>"), \
+ fr_table_str_by_value(fr_trunk_request_states, treq->pub.state, "<INVALID>"), \
fr_table_str_by_value(fr_trunk_request_states, _new, "<INVALID>")); \
- treq->state = _new; \
+ treq->pub.state = _new; \
} while (0)
#define REQUEST_BAD_STATE_TRANSITION(_new) \
do { \
if (!fr_cond_assert_msg(0, "Trunk request %" PRIu64 " invalid transition %s -> %s", \
treq->id, \
- fr_table_str_by_value(fr_trunk_request_states, treq->state, "<INVALID>"), \
+ fr_table_str_by_value(fr_trunk_request_states, treq->pub.state, "<INVALID>"), \
fr_table_str_by_value(fr_trunk_request_states, _new, "<INVALID>"))) return; \
} while (0)
if (!fr_cond_assert(!tconn || (tconn->pub.trunk == trunk))) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_UNASSIGNED:
return; /* Not associated with connection */
{
fr_trunk_t *trunk = treq->pub.trunk;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_UNASSIGNED:
return;
fr_trunk_connection_t *tconn = treq->pub.tconn;
fr_trunk_t *trunk = treq->pub.trunk;;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_UNASSIGNED:
break;
rad_assert(tconn->pub.trunk == trunk);
rad_assert(IS_SERVICEABLE(tconn));
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_UNASSIGNED:
break;
if (!fr_cond_assert(!tconn || (tconn->pub.trunk == trunk))) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_UNASSIGNED:
break;
if (!fr_cond_assert(!tconn || (tconn->pub.trunk == trunk))) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_PENDING:
REQUEST_EXTRACT_PENDING(treq);
break;
if (!fr_cond_assert(!tconn || (tconn->pub.trunk == trunk))) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_PARTIAL:
REQUEST_EXTRACT_PARTIAL(treq);
break;
rad_assert(trunk->funcs.request_cancel_mux);
rad_assert(treq->cancel_reason == FR_TRUNK_CANCEL_REASON_SIGNAL);
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_CANCEL: /* The only valid state cancel_sent can be reached from */
REQUEST_EXTRACT_CANCEL(treq);
break;
rad_assert(trunk->funcs.request_cancel_mux);
rad_assert(treq->cancel_reason == FR_TRUNK_CANCEL_REASON_SIGNAL);
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_CANCEL_PARTIAL:
REQUEST_EXTRACT_CANCEL_PARTIAL(treq);
break;
if (!fr_cond_assert(!tconn || (tconn->pub.trunk == trunk))) return;
if (!fr_cond_assert(!treq->pub.request)) return; /* Only a valid state for REQUEST * which have been cancelled */
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_CANCEL_SENT:
REQUEST_EXTRACT_CANCEL_SENT(treq);
break;
if (!fr_cond_assert(!tconn || (tconn->pub.trunk == trunk))) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_SENT:
case FR_TRUNK_REQUEST_STATE_PENDING:
trunk_request_remove_from_conn(treq);
if (!fr_cond_assert(!tconn || (tconn->pub.trunk == trunk))) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_BACKLOG:
REQUEST_EXTRACT_BACKLOG(treq);
break;
* Signal our caller it should stop
* trying to drain the backlog.
*/
- if (treq->state == FR_TRUNK_REQUEST_STATE_BACKLOG) return FR_TRUNK_ENQUEUE_NO_CAPACITY;
+ if (treq->pub.state == FR_TRUNK_REQUEST_STATE_BACKLOG) return FR_TRUNK_ENQUEUE_NO_CAPACITY;
trunk_request_enter_backlog(treq);
break;
if (!fr_cond_assert_msg(IN_REQUEST_MUX(treq->pub.trunk),
"%s can only be called from within request_mux handler", __FUNCTION__)) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_PENDING:
trunk_request_enter_partial(treq);
break;
if (!fr_cond_assert_msg(IN_REQUEST_MUX(treq->pub.trunk),
"%s can only be called from within request_mux handler", __FUNCTION__)) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_PENDING:
case FR_TRUNK_REQUEST_STATE_PARTIAL:
trunk_request_enter_sent(treq);
*/
if (IN_REQUEST_DEMUX(trunk)) trunk->pub.last_read_success = fr_time();
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_SENT:
case FR_TRUNK_REQUEST_STATE_PENDING: /* Got immediate response, i.e. cached */
trunk_request_enter_complete(treq);
trunk = treq->pub.trunk;
- switch (treq->state) {
+ switch (treq->pub.state) {
/*
* We don't call the complete or failed callbacks
* as the request and rctx are no longer viable.
case FR_TRUNK_REQUEST_STATE_SENT:
trunk_request_enter_cancel(treq, FR_TRUNK_CANCEL_REASON_SIGNAL);
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_CANCEL:
/*
* No cancel muxer. We're done.
if (!fr_cond_assert_msg(IN_REQUEST_CANCEL_MUX(treq->pub.trunk),
"%s can only be called from within request_cancel_mux handler", __FUNCTION__)) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_CANCEL:
trunk_request_enter_cancel_partial(treq);
break;
if (!fr_cond_assert_msg(IN_REQUEST_CANCEL_MUX(treq->pub.trunk),
"%s can only be called from within request_cancel_mux handler", __FUNCTION__)) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_CANCEL:
case FR_TRUNK_REQUEST_STATE_CANCEL_PARTIAL:
trunk_request_enter_cancel_sent(treq);
"%s can only be called from within request_demux or request_cancel_mux handlers",
__FUNCTION__)) return;
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_CANCEL_SENT:
trunk_request_enter_cancel_complete(treq);
break;
* The only valid states a trunk request can be
* freed from.
*/
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_UNASSIGNED:
case FR_TRUNK_REQUEST_STATE_COMPLETE:
case FR_TRUNK_REQUEST_STATE_FAILED:
* No cleanup delay, means cleanup immediately
*/
if (trunk->conf.req_cleanup_delay == 0) {
- treq->state = FR_TRUNK_REQUEST_STATE_UNASSIGNED;
+ treq->pub.state = FR_TRUNK_REQUEST_STATE_UNASSIGNED;
talloc_free(treq);
return;
}
* Otherwise return the trunk request back
* to the unassigned list.
*/
- treq->state = FR_TRUNK_REQUEST_STATE_UNASSIGNED;
+ treq->pub.state = FR_TRUNK_REQUEST_STATE_UNASSIGNED;
treq->pub.preq = NULL;
treq->pub.rctx = NULL;
treq->cancel_reason = FR_TRUNK_CANCEL_REASON_NONE;
{
fr_trunk_t *trunk = treq->pub.trunk;
- rad_assert(treq->state == FR_TRUNK_REQUEST_STATE_UNASSIGNED);
+ rad_assert(treq->pub.state == FR_TRUNK_REQUEST_STATE_UNASSIGNED);
fr_dlist_remove(&trunk->unassigned, treq);
treq = fr_dlist_head(&trunk->unassigned);
if (treq) {
fr_dlist_remove(&trunk->unassigned, treq);
- rad_assert(treq->state == FR_TRUNK_REQUEST_STATE_UNASSIGNED);
+ rad_assert(treq->pub.state == FR_TRUNK_REQUEST_STATE_UNASSIGNED);
rad_assert(treq->pub.trunk == trunk);
rad_assert(treq->pub.tconn == NULL);
rad_assert(treq->cancel_reason == FR_TRUNK_CANCEL_REASON_NONE);
MEM(treq = talloc_pooled_object(trunk, fr_trunk_request_t,
trunk->conf.req_pool_headers, trunk->conf.req_pool_size));
talloc_set_destructor(treq, _trunk_request_free);
- treq->state = FR_TRUNK_REQUEST_STATE_UNASSIGNED;
+ treq->pub.state = FR_TRUNK_REQUEST_STATE_UNASSIGNED;
treq->pub.trunk = trunk;
treq->pub.tconn = NULL;
treq->cancel_reason = FR_TRUNK_CANCEL_REASON_NONE;
if (!fr_cond_assert_msg(!IN_HANDLER(trunk),
"%s cannot be called within a handler", __FUNCTION__)) return FR_TRUNK_ENQUEUE_FAIL;
- if (!fr_cond_assert_msg(!*treq_out || ((*treq_out)->state == FR_TRUNK_REQUEST_STATE_UNASSIGNED),
+ if (!fr_cond_assert_msg(!*treq_out || ((*treq_out)->pub.state == FR_TRUNK_REQUEST_STATE_UNASSIGNED),
"%s requests must be in \"unassigned\" state", __FUNCTION__)) return FR_TRUNK_ENQUEUE_FAIL;
/*
return FR_TRUNK_ENQUEUE_DST_UNAVAILABLE;
}
- switch (treq->state) {
+ switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_PARTIAL:
case FR_TRUNK_REQUEST_STATE_SENT:
trunk_request_enter_cancel(treq, FR_TRUNK_CANCEL_REASON_REQUEUE);
fr_trunk_request_t *treq;
fr_trunk_t *trunk = tconn->pub.trunk;
- if (!fr_cond_assert_msg(!*treq_out || ((*treq_out)->state == FR_TRUNK_REQUEST_STATE_UNASSIGNED),
+ if (!fr_cond_assert_msg(!*treq_out || ((*treq_out)->pub.state == FR_TRUNK_REQUEST_STATE_UNASSIGNED),
"%s requests must be in \"unassigned\" state", __FUNCTION__)) return FR_TRUNK_ENQUEUE_FAIL;
if (!IS_SERVICEABLE(tconn)) return FR_TRUNK_ENQUEUE_DST_UNAVAILABLE;