Skip to content

Commit 244582a

Browse files
authored
Merge pull request #95 from rdkcentral/develop
rebase
2 parents d72ed29 + 49a4256 commit 244582a

13 files changed

Lines changed: 355 additions & 159 deletions

CHANGELOG.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,42 @@ All notable changes to this project will be documented in this file. Dates are d
44

55
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
66

7+
#### [1.1.5](https://github.com/rdkcentral/rfc/compare/1.1.4...1.1.5)
8+
9+
- RDKB-61478: Integrate CertSelector API into RFCMGR [`#92`](https://github.com/rdkcentral/rfc/pull/92)
10+
- RDKB-61478: Integrate CertSelector API into RFCMGR [`#82`](https://github.com/rdkcentral/rfc/pull/82)
11+
- Merge tag '1.1.4' into develop [`b396068`](https://github.com/rdkcentral/rfc/commit/b39606848abe2e990fee81f1f091cdb7bd380db4)
12+
13+
#### [1.1.4](https://github.com/rdkcentral/rfc/compare/1.1.3...1.1.4)
14+
15+
> 4 September 2025
16+
17+
- RDKB-61478: Integrate CertSelector API into RFCMGR [`#88`](https://github.com/rdkcentral/rfc/pull/88)
18+
- RDKB-61478: Use nvram for debug.ini configuration [`#86`](https://github.com/rdkcentral/rfc/pull/86)
19+
- RDKB-61267: RFC reboot is not configured [`#85`](https://github.com/rdkcentral/rfc/pull/85)
20+
- RDKB-61479: Successive RFC fetches are returning 200 response instead of 304 [`#84`](https://github.com/rdkcentral/rfc/pull/84)
21+
- RDKB-61481 : CPE is contacting xconf twice during each RFC fetch [`#81`](https://github.com/rdkcentral/rfc/pull/81)
22+
- RDKB-60919: Port Optimized RFCMGR source code to RDKB [`#80`](https://github.com/rdkcentral/rfc/pull/80)
23+
- RDKB-61345: [AUTO-SKY][Sprint]Unable to override the RFC url for EU , Device send RFC request to comcast URL [`#77`](https://github.com/rdkcentral/rfc/pull/77)
24+
- RDKB-61266 : AccountID is set to unknown after RFC fetch [`#75`](https://github.com/rdkcentral/rfc/pull/75)
25+
- RDKB-61267: RFC reboot is not configured [`#74`](https://github.com/rdkcentral/rfc/pull/74)
26+
- RDKB-61266 : AccountID is set to unknown after RFC fetch [`#70`](https://github.com/rdkcentral/rfc/pull/70)
27+
- RDKB-60919: Port Optimized RFCMGR source code to RDKB [`#65`](https://github.com/rdkcentral/rfc/pull/65)
28+
- Update xconf_handler.cpp [`1871fd2`](https://github.com/rdkcentral/rfc/commit/1871fd2d6cdc0d7a6ea3d105caddbcce388bea03)
29+
- 1.1.4 release changelog updates [`b653372`](https://github.com/rdkcentral/rfc/commit/b6533724dfa1a5baa0b321a458d7061130f49c7e)
30+
- Update mtlsUtils.h [`7df92f3`](https://github.com/rdkcentral/rfc/commit/7df92f3845169a61e6c2f14a22e6c70462a41e9e)
31+
732
#### [1.1.3](https://github.com/rdkcentral/rfc/compare/1.1.2...1.1.3)
833

34+
> 20 August 2025
35+
936
- RDK-57302 : Add support for URL Encoding [`#66`](https://github.com/rdkcentral/rfc/pull/66)
1037
- RDKB-60919: Port Optimized RFCMGR source code to RDKB [`#64`](https://github.com/rdkcentral/rfc/pull/64)
1138
- RDKB-60919: Port Optimized RFCMGR source code to RDKB [`#62`](https://github.com/rdkcentral/rfc/pull/62)
1239
- RDK-57736 [ RFC ] : Increase L1 Test Coverage For RFC above 80% [`#45`](https://github.com/rdkcentral/rfc/pull/45)
1340
- RDKB-60919: Review and cleanup RFC scripts [`13a9c0d`](https://github.com/rdkcentral/rfc/commit/13a9c0d7e4030501e64d2f8d6c8347e1dac6b3aa)
1441
- Update rfc_xconf_handler.cpp [`43c3ccb`](https://github.com/rdkcentral/rfc/commit/43c3ccb8b058838bded67663de543d8c71191023)
15-
- Update rfc_xconf_handler.cpp [`d6ca6b3`](https://github.com/rdkcentral/rfc/commit/d6ca6b328bb3aa38defa5db26dec0c07343bc634)
42+
- 1.1.3 release changelog updates [`f25872e`](https://github.com/rdkcentral/rfc/commit/f25872e12d26126aba9b2061e9ebaf5da8565299)
1643

1744
#### [1.1.2](https://github.com/rdkcentral/rfc/compare/1.1.1...1.1.2)
1845

configure.ac

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ AC_PROG_CXX
3333
AC_PROG_CC
3434

3535
GTEST_ENABLE_FLAG = ""
36+
IS_LIBRDKCERTSEL_ENABLED=""
37+
IS_LIBRDKCONFIG_ENABLED=""
3638

3739
AC_ARG_ENABLE([gtestapp],
3840
AS_HELP_STRING([--enable-gtestapp],[enable Gtest support (default is no)]),
@@ -72,6 +74,34 @@ AC_ARG_ENABLE([rfctool],
7274
[echo "rfctool app is disabled"])
7375
AM_CONDITIONAL([ENABLE_RFCTOOL_APP], [test x$ENABLE_RFCTOOL_APP = xtrue])
7476

77+
AC_ARG_ENABLE([rdkcertselector],
78+
AS_HELP_STRING([--enable-rdkcertselector],[enables rdkcertselector replacement (default is no)]),
79+
[
80+
case "${enableval}" in
81+
yes) IS_LIBRDKCERTSEL_ENABLED=true
82+
LIBRDKCERTSEL_FLAG=" -DLIBRDKCERTSELECTOR ";;
83+
no) IS_LIBRDKCERTSEL_ENABLED=false ;;
84+
*) AC_MSG_ERROR([bad value ${enableval} for --enable-rdkcertselector]) ;;
85+
esac
86+
],
87+
[echo "rdkcertselector is disabled"])
88+
AM_CONDITIONAL([IS_LIBRDKCERTSEL_ENABLED], [test x$IS_LIBRDKCERTSEL_ENABLED = xtrue])
89+
AC_SUBST(LIBRDKCERTSEL_FLAG)
90+
91+
AC_ARG_ENABLE([mountutils],
92+
AS_HELP_STRING([--enable-mountutils],[enables mountutils replacement (default is no)]),
93+
[
94+
case "${enableval}" in
95+
yes) IS_LIBRDKCONFIG_ENABLED=true
96+
LIBRDKCONFIG_FLAG=" -DLIBRDKCONFIG_BUILD ";;
97+
no) IS_LIBRDKCONFIG_ENABLED=false ;;
98+
*) AC_MSG_ERROR([bad value ${enableval} for --enable-mountutils]) ;;
99+
esac
100+
],
101+
[echo "mountutils is disabled"])
102+
AM_CONDITIONAL([IS_LIBRDKCONFIG_ENABLED], [test x$IS_LIBRDKCONFIG_ENABLED = xtrue])
103+
AC_SUBST(LIBRDKCONFIG_FLAG)
104+
75105
AC_ARG_ENABLE([tr181set],
76106
AS_HELP_STRING([--enable-tr181set],[enable tr181 client app (default is no)]),
77107
[

rfcMgr/Makefile.am

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,19 @@ if ENABLE_RDKB
3434
rfcMgr_CPPFLAGS += $(RDKB_FLAG) $(rbus_CFLAGS)
3535
AM_LDFLAGS += -lrbus
3636
endif
37+
38+
if IS_LIBRDKCERTSEL_ENABLED
39+
rfcMgr_CPPFLAGS += $(LIBRDKCERTSEL_FLAG)
40+
rfcMgr_CFLAGS = $(LIBRDKCERTSEL_FLAG)
41+
if IS_LIBRDKCONFIG_ENABLED
42+
rfcMgr_CPPFLAGS += $(LIBRDKCONFIG_FLAG)
43+
AM_LDFLAGS += -lRdkCertSelector -L$(PKG_CONFIG_SYSROOT_DIR)/usr/lib -L$(PKG_CONFIG_SYSROOT_DIR)/usr/lib64 -lrdkconfig
44+
else
45+
AM_LDFLAGS += -lRdkCertSelector
46+
endif
47+
else
48+
if IS_LIBRDKCONFIG_ENABLED
49+
rfcMgr_CPPFLAGS += $(LIBRDKCONFIG_FLAG)
50+
AM_LDFLAGS += -L$(PKG_CONFIG_SYSROOT_DIR)/usr/lib -L$(PKG_CONFIG_SYSROOT_DIR)/usr/lib64 -lrdkconfig
51+
endif
52+
endif

rfcMgr/mtlsUtils.cpp

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020

2121
#include "mtlsUtils.h"
2222
#include "rfc_common.h"
23+
#ifdef LIBRDKCONFIG_BUILD
24+
#include "rdkconfig.h"
25+
#endif
2326

2427
#ifdef __cplusplus
2528
extern "C" {
@@ -54,26 +57,49 @@ int isInStateRed(void) {
5457
}
5558
ret = filePresentCheck(STATEREDFLAG);
5659
if(ret == RDK_API_SUCCESS) {
57-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "isInStateRed(): Yes Flag prsent:%s. Device is in statered\n", STATEREDFLAG);
60+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "isInStateRed(): Yes Flag prsent:%s. Device is in statered\n", STATEREDFLAG);
5861
stateRed = 1;
5962
} else {
60-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "isInStateRed(): No Flag Not prsent:%s. Device is not in statered\n", STATEREDFLAG);
63+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "isInStateRed(): No Flag Not prsent:%s. Device is not in statered\n", STATEREDFLAG);
6164
}
6265
return stateRed;
6366
}
6467

65-
/* Description: Placeholder functions for implementing MTLS certs retrieval logic from compile time overrides
68+
#ifdef LIBRDKCERTSELECTOR
69+
/* Description: Use for get all mtls related certificate and key.
70+
* @param sec: This is a pointer hold the certificate, key and type of certificate.
71+
* @return : MTLS_CERT_FETCH_SUCCESS on success, MTLS_CERT_FETCH_FAILURE on mtls cert failure , STATE_RED_CERT_FETCH_FAILURE on state red cert failure
72+
* */
73+
MtlsAuthStatus getMtlscert(MtlsAuth_t *sec, rdkcertselector_h* pthisCertSel) {
74+
/*
75+
strncpy(sec->cert_name, STATE_RED_CERT, sizeof(sec->cert_name) - 1);
76+
sec->cert_name[sizeof(sec->cert_name) - 1] = '\0';
77+
strncpy(sec->cert_type, "P12", sizeof(sec->cert_type) - 1);
78+
sec->cert_type[sizeof(sec->cert_type) - 1] = '\0';
79+
strncpy(sec->key_pas, mtlsbuff, sizeof(sec->key_pas) - 1);
80+
sec->key_pas[sizeof(sec->key_pas) - 1] = '\0';
81+
* */
82+
return MTLS_CERT_FETCH_SUCCESS;
83+
}
84+
#else
85+
/* Description: Use for get all mtls related certificate and key.
6686
* @param sec: This is a pointer hold the certificate, key and type of certificate.
6787
* @return : int Success 1 and failure -1
6888
* */
69-
int getMtlscert(MtlsAuth_t *sec)
70-
{
71-
if (NULL == sec) {
72-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR,"getMtlscert(): the sec buffer is empty or null.");
73-
return MTLS_FAILURE;
74-
}
89+
int getMtlscert(MtlsAuth_t *sec) {
90+
/*
91+
strncpy(sec->cert_name, STATE_RED_CERT, sizeof(sec->cert_name) - 1);
92+
sec->cert_name[sizeof(sec->cert_name) - 1] = '\0';
93+
strncpy(sec->cert_type, "P12", sizeof(sec->cert_type) - 1);
94+
sec->cert_type[sizeof(sec->cert_type) - 1] = '\0';
95+
strncpy(sec->key_pas, mtlsbuff, sizeof(sec->key_pas) - 1);
96+
sec->key_pas[sizeof(sec->key_pas) - 1] = '\0';
97+
*/
98+
/* TODO: RDKE-419: temporary change until RDKE-419 gets proper solution. */
7599
return MTLS_FAILURE;
76100
}
101+
#endif
102+
77103
#ifdef __cplusplus
78104
}
79105
#endif

rfcMgr/mtlsUtils.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,25 @@ extern "C" {
3232
#include <system_utils.h>
3333
#include <urlHelper.h>
3434

35+
#ifdef LIBRDKCERTSELECTOR
36+
#include "rdkcertselector.h"
3537

38+
// Below macro is invoked if the getMtlscert API fails to retrieve all MTLS certificates.
39+
#define CURL_MTLS_LOCAL_CERTPROBLEM 58
40+
41+
typedef enum {
42+
STATE_RED_CERT_FETCH_FAILURE = -2, // Indicates failure in state red recovery
43+
MTLS_CERT_FETCH_FAILURE = -1, // Indicates general MTLS failure
44+
MTLS_CERT_FETCH_SUCCESS = 0 // Indicates success
45+
} MtlsAuthStatus;
46+
47+
MtlsAuthStatus getMtlscert(MtlsAuth_t *sec, rdkcertselector_h* pthisCertSel);
48+
#else
3649
#define MTLS_SUCCESS 1
3750
#define MTLS_FAILURE -1
51+
int getMtlscert(MtlsAuth_t *sec);
52+
#endif
53+
3854
#define CERT_DYNAMIC "/opt/certs/devicecert_1.pk12"
3955
#define CERT_STATIC "/etc/ssl/certs/staticXpkiCrt.pk12"
4056

@@ -56,11 +72,12 @@ extern "C" {
5672
int isStateRedSupported(void);
5773
int isInStateRed(void);
5874
#endif
59-
int getMtlscert(MtlsAuth_t *sec);
75+
6076
#if defined(RDKB_SUPPORT)
6177
std::string getErouterMac();
6278
std::string geteCMMac();
6379
#endif
80+
6481
#ifdef __cplusplus
6582
}
6683
#endif

rfcMgr/rfc_common.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,23 +70,23 @@ void waitForRfcCompletion()
7070
int retry = 1;
7171

7272
while (loop) {
73-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] Waiting rfc_blob_processing \n", __FUNCTION__,__LINE__);
73+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] Waiting rfc_blob_processing \n", __FUNCTION__,__LINE__);
7474
std::string rfcStatus = getSyseventValue("rfc_blob_processing");
7575

7676
if (rfcStatus == "Completed") {
77-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] Webconfig rfc processing completed, breaking the loop \n", __FUNCTION__,__LINE__);
77+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] Webconfig rfc processing completed, breaking the loop \n", __FUNCTION__,__LINE__);
7878
break;
7979
} else if (retry > 6) {
80-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] webconfig rfc processing not completed after 10 min , breaking the loop \n", __FUNCTION__,__LINE__);
80+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] webconfig rfc processing not completed after 10 min , breaking the loop \n", __FUNCTION__,__LINE__);
8181
break;
8282
} else {
83-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] Webconfig rfc processing not completed.. Retry: %s \n", __FUNCTION__, __LINE__, std::to_string(retry).c_str());
83+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] Webconfig rfc processing not completed.. Retry: %s \n", __FUNCTION__, __LINE__, std::to_string(retry).c_str());
8484
retry++;
8585
sleep(100);
8686
}
8787
}
8888
} else {
89-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] rfc-agent process not running or rfc_blob_processing is empty. Not waiting rfc_blob_processing \n", __FUNCTION__,__LINE__);
89+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] rfc-agent process not running or rfc_blob_processing is empty. Not waiting rfc_blob_processing \n", __FUNCTION__,__LINE__);
9090
}
9191
}
9292

@@ -102,7 +102,7 @@ int read_RFCProperty(const char* type, const char* key, char *out_value, int dat
102102

103103
if(key == nullptr || out_value == nullptr || datasize == 0)
104104
{
105-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] read_RFCProperty() one or more input values are invalid\n", __FUNCTION__, __LINE__);
105+
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] Received one or more input values are invalid\n", __FUNCTION__, __LINE__);
106106
return ret;
107107
}
108108

@@ -114,7 +114,7 @@ int read_RFCProperty(const char* type, const char* key, char *out_value, int dat
114114
const char* paramName = key;
115115
(void)type;
116116

117-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] Looking up parameter: %s\n", __FUNCTION__, __LINE__, paramName);
117+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] Looking up parameter: %s\n", __FUNCTION__, __LINE__, paramName);
118118

119119
rc = rbus_open(&handle, "RFC_Manager");
120120
if (rc != RBUS_ERROR_SUCCESS) {
@@ -140,7 +140,7 @@ int read_RFCProperty(const char* type, const char* key, char *out_value, int dat
140140
out_value[copyLen] = '\0';
141141
}
142142

143-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] read_RFCProperty() param=%s, value=%s\n", __FUNCTION__, __LINE__, paramName, out_value);
143+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] RFC param=%s, value=%s\n", __FUNCTION__, __LINE__, paramName, out_value);
144144
ret = READ_RFC_SUCCESS;
145145
} else {
146146
RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "[%s][%d] Null string value for param=%s\n", __FUNCTION__, __LINE__, paramName);
@@ -150,13 +150,13 @@ int read_RFCProperty(const char* type, const char* key, char *out_value, int dat
150150
bool boolValue = rbusValue_GetBoolean(value);
151151
snprintf(out_value, datasize, "%s", boolValue ? "true" : "false");
152152

153-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] read_RFCProperty() param=%s, value=%s (boolean)\n", __FUNCTION__, __LINE__, paramName, out_value);
153+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] RFC param=%s, value=%s (boolean)\n", __FUNCTION__, __LINE__, paramName, out_value);
154154
ret = READ_RFC_SUCCESS;
155155
} else if (rbusValue_GetType(value) == RBUS_INT32) {
156156
int32_t intValue = rbusValue_GetInt32(value);
157157
snprintf(out_value, datasize, "%d", intValue);
158158

159-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] read_RFCProperty() param=%s, value=%s (int)\n", __FUNCTION__, __LINE__, paramName, out_value);
159+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] RFC param=%s, value=%s (int)\n", __FUNCTION__, __LINE__, paramName, out_value);
160160
ret = READ_RFC_SUCCESS;
161161
} else {
162162
RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "[%s][%d] Unsupported value type for param=%s\n", __FUNCTION__, __LINE__, paramName);
@@ -188,12 +188,12 @@ int read_RFCProperty(const char* type, const char* key, char *out_value, int dat
188188
{
189189
snprintf(out_value, datasize, "%s", param.value);
190190
}
191-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] read_RFCProperty() name=%s,type=%d,value=%s,status=%d\n", __FUNCTION__, __LINE__, param.name, param.type, param.value, status);
191+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] RFC name=%s,type=%d,value=%s,status=%d\n", __FUNCTION__, __LINE__, param.name, param.type, param.value, status);
192192
ret = READ_RFC_SUCCESS;
193193
}
194194
else
195195
{
196-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] error:read_RFCProperty(): status= %d\n", __FUNCTION__, __LINE__, status);
196+
RDK_LOG(RDK_LOG_ERROR, LOG_RFCMGR, "[%s][%d] RFC Read status= %d\n", __FUNCTION__, __LINE__, status);
197197
*out_value = 0;
198198
}
199199
#endif

rfcMgr/rfc_main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ int main()
111111
delete rfcMgr;
112112
return 1;
113113
}
114-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] Waiting for IP Acquistion\n", __FUNCTION__, __LINE__);
114+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] Waiting for IP Acquistion\n", __FUNCTION__, __LINE__);
115115
rfc::DeviceStatus isDeviceOnline = rfcMgr->CheckDeviceIsOnline();
116-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d] Starting execution of RFCManager\n", __FUNCTION__, __LINE__);
116+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] Starting execution of RFCManager\n", __FUNCTION__, __LINE__);
117117
if (isDeviceOnline == rfc::RFCMGR_DEVICE_ONLINE)
118118
{
119119
int status = FAILURE;
@@ -124,7 +124,7 @@ int main()
124124
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d] RFC:Xconf Request Processed successfully\n", __FUNCTION__, __LINE__);
125125
}
126126
#if defined(RDKB_SUPPORT)
127-
RDK_LOG(RDK_LOG_DEBUG, LOG_RFCMGR, "[%s][%d]START CONFIGURING RFC CRON \n", __FUNCTION__, __LINE__);
127+
RDK_LOG(RDK_LOG_INFO, LOG_RFCMGR, "[%s][%d]START CONFIGURING RFC CRON \n", __FUNCTION__, __LINE__);
128128

129129
std::string cronConfig = getCronFromDCMSettings();
130130

0 commit comments

Comments
 (0)