int session_send_flow()

in src/session.c [1265:1324]


int session_send_flow(LINK_ENDPOINT_HANDLE link_endpoint, FLOW_HANDLE flow)
{
    int result;

    if ((link_endpoint == NULL) ||
        (flow == NULL))
    {
        result = MU_FAILURE;
    }
    else
    {
        LINK_ENDPOINT_INSTANCE* link_endpoint_instance = (LINK_ENDPOINT_INSTANCE*)link_endpoint;
        SESSION_INSTANCE* session_instance = (SESSION_INSTANCE*)link_endpoint_instance->session;

        result = 0;

        if (session_instance->session_state == SESSION_STATE_BEGIN_RCVD)
        {
            if (flow_set_next_incoming_id(flow, session_instance->next_incoming_id) != 0)
            {
                result = MU_FAILURE;
            }
        }

        if (result == 0)
        {
            if ((flow_set_next_incoming_id(flow, session_instance->next_incoming_id) != 0) ||
                (flow_set_incoming_window(flow, session_instance->incoming_window) != 0) ||
                (flow_set_next_outgoing_id(flow, session_instance->next_outgoing_id) != 0) ||
                (flow_set_outgoing_window(flow, session_instance->outgoing_window) != 0) ||
                (flow_set_handle(flow, link_endpoint_instance->output_handle) != 0))
            {
                result = MU_FAILURE;
            }
            else
            {
                AMQP_VALUE flow_performative_value = amqpvalue_create_flow(flow);
                if (flow_performative_value == NULL)
                {
                    result = MU_FAILURE;
                }
                else
                {
                    if (encode_frame(link_endpoint, flow_performative_value, NULL, 0) != 0)
                    {
                        result = MU_FAILURE;
                    }
                    else
                    {
                        result = 0;
                    }

                    amqpvalue_destroy(flow_performative_value);
                }
            }
        }
    }

    return result;
}