Exemple #1
0
LWMsgStatus
lwmsg_assoc_acquire_call(
    LWMsgAssoc* assoc,
    LWMsgCall** call
    )
{
    LWMsgStatus status = LWMSG_STATUS_SUCCESS;
    LWMsgSession* session = NULL;

    if (assoc->call.in_use)
    {
        BAIL_ON_ERROR(status = LWMSG_STATUS_BUSY);
    }
    else
    {
        switch (lwmsg_assoc_get_state(assoc))
        {
        case LWMSG_ASSOC_STATE_IDLE:
            break;
        case LWMSG_ASSOC_STATE_NOT_ESTABLISHED:
            BAIL_ON_ERROR(status = assoc->aclass->get_session(assoc, &session));
            BAIL_ON_ERROR(status = lwmsg_assoc_connect(assoc, session));
            break;
        default:
            BAIL_ON_ERROR(status = LWMSG_STATUS_INVALID_STATE);
        }

        assoc->call.in_use = LWMSG_TRUE;
        *call = LWMSG_CALL(&assoc->call);
    }

error:

    return status;
}
Exemple #2
0
static LWMsgStatus
lwmsg_connection_set_nonblock(
    LWMsgAssoc* assoc,
    LWMsgBool nonblock
    )
{
    LWMsgStatus status = LWMSG_STATUS_SUCCESS;
    ConnectionPrivate* priv = CONNECTION_PRIVATE(assoc);

    switch (lwmsg_assoc_get_state(assoc))
    {
    case LWMSG_ASSOC_STATE_NOT_ESTABLISHED:
    case LWMSG_ASSOC_STATE_IDLE:
    case LWMSG_ASSOC_STATE_CLOSED:
        priv->is_nonblock = nonblock;
        break;
    default:
        ASSOC_RAISE_ERROR(assoc, status = LWMSG_STATUS_INVALID_STATE,
                          "Cannot set blocking while connection is busy");
    }

error:

    return status;
}
Exemple #3
0
static
void
lwmsg_peer_task_update_blocked(
    PeerAssocTask* task
    )
{
    switch (lwmsg_assoc_get_state(task->assoc))
    {
    case LWMSG_ASSOC_STATE_BLOCKED_SEND:
        task->send_blocked = LWMSG_TRUE;
        task->recv_blocked = LWMSG_FALSE;
        break;
    case LWMSG_ASSOC_STATE_BLOCKED_RECV:
        task->recv_blocked = LWMSG_TRUE;
        task->send_blocked = LWMSG_FALSE;
        break;
    case LWMSG_ASSOC_STATE_BLOCKED_SEND_RECV:
        task->send_blocked = task->recv_blocked = LWMSG_TRUE;
        break;
    default:
        task->send_blocked = task->recv_blocked = LWMSG_FALSE;
        break;
    }
}