summaryrefslogtreecommitdiff
path: root/test/regression/interoperability_test/test_frame/tls_test_instance_shared_buffer_manipulate.c
blob: 36ef72ae006ed546f987eacfd15f78636d97dacf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/***************************************************************************/
/* Copyright (c) 2024 Microsoft Corporation                                */
/* Copyright (c) 2026 Eclipse ThreadX contributors                         */
/*                                                                         */
/* This program and the accompanying materials are made available under    */
/* the terms of the MIT License which is available at                      */
/* https://opensource.org/licenses/MIT.                                    */
/*                                                                         */
/* SPDX-License-Identifier: MIT                                            */
/***************************************************************************/

#include "tls_test_frame.h"

/* Get offset of the shared buffer. */
INT tls_test_instance_get_shared_buffer_offset( TLS_TEST_INSTANCE* instance_ptr, UINT* offset)
{
    /* Validate pointers. */
    return_value_if_fail( NULL != instance_ptr, TLS_TEST_INVALID_POINTER);
    return_value_if_fail( NULL != offset, TLS_TEST_INVALID_POINTER);

    /* Return shared buffer offset. */
    *offset = instance_ptr -> tls_test_shared_buffer_offset;
    return TLS_TEST_SUCCESS;
}

/* Set offset of the shared buffer preparing for appending data. */
INT tls_test_instance_set_shared_buffer_offset( TLS_TEST_INSTANCE* instance_ptr, UINT offset)
{
    /* Validate pointers. */
    return_value_if_fail( NULL != instance_ptr, TLS_TEST_INVALID_POINTER);

    /* Avoid offset exceeding shared_buffer_size. */
    return_value_if_fail( offset <= instance_ptr -> tls_test_shared_buffer_size, TLS_TEST_ILLEGAL_SHARED_BUFFER_ACCESS);

    /* Set shared buffer offset. */
    instance_ptr -> tls_test_shared_buffer_offset = offset;
    return TLS_TEST_SUCCESS;
}

/* Append data to the shared buffer after offset. */
INT tls_test_instance_append_data_to_shared_buffer( TLS_TEST_INSTANCE* instance_ptr, VOID* data, UINT* length)
{
    /* Validate pointers. */
    return_value_if_fail( NULL != instance_ptr, TLS_TEST_INVALID_POINTER);
    return_value_if_fail( NULL != instance_ptr -> tls_test_shared_buffer, TLS_TEST_INVALID_POINTER);
    return_value_if_fail( NULL != data, TLS_TEST_INVALID_POINTER);
    return_value_if_fail( NULL != length, TLS_TEST_INVALID_POINTER);

    INT status;
    UINT shared_buffer_offset;
    status = tls_test_instance_get_shared_buffer_offset( instance_ptr, &shared_buffer_offset);
    return_value_if_fail( TLS_TEST_SUCCESS == status, status);

    /* Write data as long as possible. */
    if ( shared_buffer_offset + *length > instance_ptr -> tls_test_shared_buffer_size)
    {

        /* Return actual copy size. */
        *length = instance_ptr -> tls_test_shared_buffer_size - shared_buffer_offset;

        /* Set return code. */
        status = TLS_TEST_ILLEGAL_SHARED_BUFFER_ACCESS;
    }
    else
    {

        /* Set return code. */
        status = TLS_TEST_SUCCESS;
    }

    /* Append all data. */
    memcpy( (CHAR*)instance_ptr -> tls_test_shared_buffer + shared_buffer_offset, data, *length);

    /* Update shared buffer offset. */
    tls_test_instance_set_shared_buffer_offset( instance_ptr, shared_buffer_offset + *length);

    return status;
}

/* Get shared buffer. */
INT tls_test_instance_get_shared_buffer( TLS_TEST_INSTANCE* instance_ptr, VOID** shared_buffer_ptr)
{

    /* Validate pointers. */
    return_value_if_fail( NULL != instance_ptr, TLS_TEST_INVALID_POINTER);

    /* Return shared buffer. */
    *shared_buffer_ptr = instance_ptr -> tls_test_shared_buffer;
    return_value_if_fail( NULL != *shared_buffer_ptr, TLS_TEST_ILLEGAL_SHARED_BUFFER_ACCESS);
    return TLS_TEST_SUCCESS;
}