Line data Source code
1 : /**
2 : * Copyright Notice:
3 : * Copyright 2024-2025 DMTF. All rights reserved.
4 : * License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
5 : **/
6 :
7 : #include <stdarg.h>
8 : #include <stddef.h>
9 : #include <setjmp.h>
10 : #include <stdint.h>
11 : #include <stdlib.h>
12 : #include <stdio.h>
13 : #include <assert.h>
14 : #include <string.h>
15 :
16 : #include <base.h>
17 : #include "library/memlib.h"
18 : #include "spdm_device_secret_lib_internal.h"
19 : #include "internal/libspdm_common_lib.h"
20 :
21 : uint32_t g_supported_event_groups_list_len = 8;
22 : uint8_t g_event_group_count = 1;
23 : bool g_event_all_subscribe = false;
24 : bool g_event_all_unsubscribe = false;
25 : uint32_t g_event_count = 1;
26 : bool g_generate_event_list_error = false;
27 : bool g_event_get_types_error = false;
28 : bool g_event_subscribe_error = false;
29 :
30 : #if LIBSPDM_ENABLE_CAPABILITY_EVENT_CAP
31 4 : bool libspdm_event_get_types(
32 : void *spdm_context,
33 : spdm_version_number_t spdm_version,
34 : uint32_t session_id,
35 : void *supported_event_groups_list,
36 : uint32_t *supported_event_groups_list_len,
37 : uint8_t *event_group_count)
38 : {
39 4 : if (g_event_get_types_error) {
40 2 : return false;
41 : }
42 :
43 2 : *supported_event_groups_list_len = g_supported_event_groups_list_len;
44 :
45 18 : for (uint32_t index = 0; index < *supported_event_groups_list_len; index++)
46 : {
47 16 : ((char *)supported_event_groups_list)[index] = (char)index;
48 : }
49 :
50 2 : *event_group_count = g_event_group_count;
51 :
52 2 : return true;
53 : }
54 :
55 7 : bool libspdm_event_subscribe(
56 : void *spdm_context,
57 : spdm_version_number_t spdm_version,
58 : uint32_t session_id,
59 : uint8_t subscribe_type,
60 : uint8_t subscribe_event_group_count,
61 : uint32_t subscribe_list_len,
62 : const void *subscribe_list)
63 : {
64 7 : if (g_event_subscribe_error) {
65 2 : return false;
66 : }
67 :
68 5 : switch (subscribe_type) {
69 1 : case LIBSPDM_EVENT_SUBSCRIBE_ALL:
70 1 : if ((subscribe_list_len != 0) || (subscribe_list != NULL)) {
71 0 : return false;
72 : }
73 1 : LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
74 : "Subscribing to all events for session ID 0x%x.\n", session_id));
75 1 : g_event_all_subscribe = true;
76 1 : g_event_all_unsubscribe = false;
77 1 : return true;
78 2 : case LIBSPDM_EVENT_SUBSCRIBE_NONE:
79 2 : if ((subscribe_list_len != 0) || (subscribe_list != NULL)) {
80 0 : return false;
81 : }
82 2 : LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
83 : "Unsubscribing from all events for session ID 0x%x.\n", session_id));
84 2 : g_event_all_subscribe = false;
85 2 : g_event_all_unsubscribe = true;
86 2 : return true;
87 2 : case LIBSPDM_EVENT_SUBSCRIBE_LIST:
88 2 : if ((subscribe_list_len == 0) || (subscribe_list == NULL)) {
89 0 : return false;
90 : }
91 2 : break;
92 0 : default:
93 0 : return false;
94 : }
95 :
96 2 : g_event_all_subscribe = false;
97 2 : g_event_all_unsubscribe = false;
98 :
99 2 : LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
100 : "subscribe_event_group_count == %d, subscribe_list_len = %d\n",
101 : subscribe_event_group_count, subscribe_list_len));
102 :
103 38 : for (uint32_t index = 0; index < subscribe_list_len; index++) {
104 36 : printf("%02x ", ((const char *)subscribe_list)[index]);
105 : }
106 2 : printf("\n");
107 :
108 2 : return true;
109 : }
110 :
111 2 : bool libspdm_generate_event_list(
112 : void *spdm_context,
113 : spdm_version_number_t spdm_version,
114 : uint32_t session_id,
115 : uint32_t *event_count,
116 : size_t *events_list_size,
117 : void *events_list)
118 : {
119 2 : if (g_generate_event_list_error) {
120 1 : return false;
121 : }
122 :
123 1 : *event_count = g_event_count;
124 :
125 4601 : for (uint32_t index = 0; index < *events_list_size; index++)
126 : {
127 4600 : ((char *)events_list)[index] = (char)index;
128 : }
129 :
130 1 : return true;
131 : }
132 : #endif /* LIBSPDM_ENABLE_CAPABILITY_EVENT_CAP */
|