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