|
5 | 5 | #include "log.hpp" |
6 | 6 | #include "tools.hpp" |
7 | 7 | #include "v2g_ctx.hpp" |
| 8 | +#include <algorithm> |
8 | 9 | #include <string.h> |
9 | 10 | #include <string_view> |
10 | 11 |
|
@@ -181,34 +182,34 @@ void ISO15118_chargerImpl::handle_set_charging_parameters(types::iso15118::Setup |
181 | 182 | void ISO15118_chargerImpl::handle_session_setup(std::vector<types::iso15118::PaymentOption>& payment_options, |
182 | 183 | bool& supported_certificate_service, |
183 | 184 | bool& central_contract_validation_allowed) { |
184 | | - if (v2g_ctx->hlc_pause_active != true) { |
185 | | - v2g_ctx->evse_v2g_data.payment_option_list_len = 0; |
186 | | - |
187 | | - for (auto option : payment_options) { |
188 | | - |
189 | | - if (option == types::iso15118::PaymentOption::Contract) { |
190 | | - v2g_ctx->evse_v2g_data.payment_option_list[v2g_ctx->evse_v2g_data.payment_option_list_len] = |
191 | | - iso2_paymentOptionType_Contract; |
192 | | - v2g_ctx->evse_v2g_data.payment_option_list_len++; |
193 | | - } else if (option == types::iso15118::PaymentOption::ExternalPayment) { |
194 | | - v2g_ctx->evse_v2g_data.payment_option_list[v2g_ctx->evse_v2g_data.payment_option_list_len] = |
195 | | - iso2_paymentOptionType_ExternalPayment; |
196 | | - v2g_ctx->evse_v2g_data.payment_option_list_len++; |
197 | | - } else { |
198 | | - dlog(DLOG_LEVEL_WARNING, "Unable to configure PaymentOption %s", |
199 | | - types::iso15118::payment_option_to_string(option).c_str()); |
| 185 | + if (not v2g_ctx->hlc_pause_active) { |
| 186 | + v2g_ctx->evse_v2g_data.payment_option_list.clear(); |
| 187 | + if (not payment_options.empty()) { |
| 188 | + const auto max_payment_options = |
| 189 | + std::min(static_cast<size_t>(iso2_paymentOptionType_2_ARRAY_SIZE), payment_options.size()); |
| 190 | + for (size_t i = 0; i < max_payment_options; i++) { |
| 191 | + const auto& payment_option = payment_options.at(i); |
| 192 | + if (payment_option == types::iso15118::PaymentOption::ExternalPayment) { |
| 193 | + v2g_ctx->evse_v2g_data.payment_option_list.push_back(iso2_paymentOptionType_ExternalPayment); |
| 194 | + } else if (payment_option == types::iso15118::PaymentOption::Contract) { |
| 195 | + v2g_ctx->evse_v2g_data.payment_option_list.push_back(iso2_paymentOptionType_Contract); |
| 196 | + } else { |
| 197 | + dlog(DLOG_LEVEL_WARNING, "Unable to configure PaymentOption %s", |
| 198 | + types::iso15118::payment_option_to_string(payment_option).c_str()); |
| 199 | + } |
200 | 200 | } |
201 | 201 | } |
202 | 202 |
|
203 | | - if (v2g_ctx->evse_v2g_data.payment_option_list_len == 0) { |
| 203 | + if (payment_options.empty() or v2g_ctx->evse_v2g_data.payment_option_list.empty()) { |
204 | 204 | dlog(DLOG_LEVEL_ERROR, "No valid PaymentOptions configured, falling back to ExternalPayment"); |
205 | | - v2g_ctx->evse_v2g_data.payment_option_list[0] = iso2_paymentOptionType_ExternalPayment; |
206 | | - v2g_ctx->evse_v2g_data.payment_option_list_len = 1; |
| 205 | + v2g_ctx->evse_v2g_data.payment_option_list.clear(); |
| 206 | + v2g_ctx->evse_v2g_data.payment_option_list.push_back(iso2_paymentOptionType_ExternalPayment); |
207 | 207 | } |
208 | 208 | } |
209 | 209 |
|
210 | | - const auto pnc_enabled = ((v2g_ctx->evse_v2g_data.payment_option_list[0] == iso2_paymentOptionType_Contract) or |
211 | | - (v2g_ctx->evse_v2g_data.payment_option_list[1] == iso2_paymentOptionType_Contract)); |
| 210 | + const auto pnc_enabled = |
| 211 | + std::find(v2g_ctx->evse_v2g_data.payment_option_list.begin(), v2g_ctx->evse_v2g_data.payment_option_list.end(), |
| 212 | + iso2_paymentOptionType_Contract) != v2g_ctx->evse_v2g_data.payment_option_list.end(); |
212 | 213 |
|
213 | 214 | using state_t = tls::Server::state_t; |
214 | 215 | const auto tls_server_state = v2g_ctx->tls_server->state(); |
|
0 commit comments