static int s_secure_tunneling_send_data()

in source/secure_tunneling.c [578:607]


static int s_secure_tunneling_send_data(struct aws_secure_tunnel *secure_tunnel, const struct aws_byte_cursor *data) {
    if (secure_tunnel->stream_id == INVALID_STREAM_ID) {
        AWS_LOGF_ERROR(AWS_LS_IOTDEVICE_SECURE_TUNNELING, "Invalid Stream Id");
        return AWS_ERROR_IOTDEVICE_SECUTRE_TUNNELING_INVALID_STREAM;
    }
    struct aws_byte_cursor new_data = *data;
    while (new_data.len) {
        aws_mutex_lock(&secure_tunnel->send_data_mutex);
        aws_condition_variable_wait_pred(
            &secure_tunnel->send_data_condition_variable,
            &secure_tunnel->send_data_mutex,
            s_can_send_data_status,
            secure_tunnel);
        secure_tunnel->can_send_data = false;
        aws_mutex_unlock(&secure_tunnel->send_data_mutex);

        size_t bytes_max = new_data.len;
        size_t amount_to_send = bytes_max < AWS_IOT_ST_SPLIT_MESSAGE_SIZE ? bytes_max : AWS_IOT_ST_SPLIT_MESSAGE_SIZE;

        struct aws_byte_cursor send_cursor = aws_byte_cursor_advance(&new_data, amount_to_send);
        AWS_FATAL_ASSERT(send_cursor.len > 0);
        if (send_cursor.len) {
            if (s_secure_tunneling_send(secure_tunnel, &send_cursor, DATA) != AWS_OP_SUCCESS) {
                AWS_LOGF_ERROR(AWS_LS_IOTDEVICE_SECURE_TUNNELING, "Failure writing data to out_buf");
                return AWS_OP_ERR;
            }
        }
    }
    return AWS_OP_SUCCESS;
}