1 #include "tls_test_frame.h"
2 
3 /* Get offset of the shared buffer. */
tls_test_instance_get_shared_buffer_offset(TLS_TEST_INSTANCE * instance_ptr,UINT * offset)4 INT tls_test_instance_get_shared_buffer_offset( TLS_TEST_INSTANCE* instance_ptr, UINT* offset)
5 {
6     /* Validate pointers. */
7     return_value_if_fail( NULL != instance_ptr, TLS_TEST_INVALID_POINTER);
8     return_value_if_fail( NULL != offset, TLS_TEST_INVALID_POINTER);
9 
10     /* Return shared buffer offset. */
11     *offset = instance_ptr -> tls_test_shared_buffer_offset;
12     return TLS_TEST_SUCCESS;
13 }
14 
15 /* Set offset of the shared buffer preparing for appending data. */
tls_test_instance_set_shared_buffer_offset(TLS_TEST_INSTANCE * instance_ptr,UINT offset)16 INT tls_test_instance_set_shared_buffer_offset( TLS_TEST_INSTANCE* instance_ptr, UINT offset)
17 {
18     /* Validate pointers. */
19     return_value_if_fail( NULL != instance_ptr, TLS_TEST_INVALID_POINTER);
20 
21     /* Avoid offset exceeding shared_buffer_size. */
22     return_value_if_fail( offset <= instance_ptr -> tls_test_shared_buffer_size, TLS_TEST_ILLEGAL_SHARED_BUFFER_ACCESS);
23 
24     /* Set shared buffer offset. */
25     instance_ptr -> tls_test_shared_buffer_offset = offset;
26     return TLS_TEST_SUCCESS;
27 }
28 
29 /* Append data to the shared buffer after offset. */
tls_test_instance_append_data_to_shared_buffer(TLS_TEST_INSTANCE * instance_ptr,VOID * data,UINT * length)30 INT tls_test_instance_append_data_to_shared_buffer( TLS_TEST_INSTANCE* instance_ptr, VOID* data, UINT* length)
31 {
32     /* Validate pointers. */
33     return_value_if_fail( NULL != instance_ptr, TLS_TEST_INVALID_POINTER);
34     return_value_if_fail( NULL != instance_ptr -> tls_test_shared_buffer, TLS_TEST_INVALID_POINTER);
35     return_value_if_fail( NULL != data, TLS_TEST_INVALID_POINTER);
36     return_value_if_fail( NULL != length, TLS_TEST_INVALID_POINTER);
37 
38     INT status;
39     UINT shared_buffer_offset;
40     status = tls_test_instance_get_shared_buffer_offset( instance_ptr, &shared_buffer_offset);
41     return_value_if_fail( TLS_TEST_SUCCESS == status, status);
42 
43     /* Write data as long as possible. */
44     if ( shared_buffer_offset + *length > instance_ptr -> tls_test_shared_buffer_size)
45     {
46 
47         /* Return actual copy size. */
48         *length = instance_ptr -> tls_test_shared_buffer_size - shared_buffer_offset;
49 
50         /* Set return code. */
51         status = TLS_TEST_ILLEGAL_SHARED_BUFFER_ACCESS;
52     }
53     else
54     {
55 
56         /* Set return code. */
57         status = TLS_TEST_SUCCESS;
58     }
59 
60     /* Append all data. */
61     memcpy( (CHAR*)instance_ptr -> tls_test_shared_buffer + shared_buffer_offset, data, *length);
62 
63     /* Update shared buffer offset. */
64     tls_test_instance_set_shared_buffer_offset( instance_ptr, shared_buffer_offset + *length);
65 
66     return status;
67 }
68 
69 /* Get shared buffer. */
tls_test_instance_get_shared_buffer(TLS_TEST_INSTANCE * instance_ptr,VOID ** shared_buffer_ptr)70 INT tls_test_instance_get_shared_buffer( TLS_TEST_INSTANCE* instance_ptr, VOID** shared_buffer_ptr)
71 {
72 
73     /* Validate pointers. */
74     return_value_if_fail( NULL != instance_ptr, TLS_TEST_INVALID_POINTER);
75 
76     /* Return shared buffer. */
77     *shared_buffer_ptr = instance_ptr -> tls_test_shared_buffer;
78     return_value_if_fail( NULL != *shared_buffer_ptr, TLS_TEST_ILLEGAL_SHARED_BUFFER_ACCESS);
79     return TLS_TEST_SUCCESS;
80 }
81