diff --git a/config.c b/config.c index bb30082..87a8c59 100755 --- a/config.c +++ b/config.c @@ -356,6 +356,13 @@ int get_global_config(struct config *conf) return CWMP_GEN_ERR; } + if ((error = uci_get_value(UCI_ACS_GETRPC, &value)) == CWMP_OK) { + conf->acs_getrpc = uci_str_to_bool(value); + FREE(value); + } else { + return error; + } + if ((error = uci_get_value(UCI_ACS_USERID_PATH, &value)) == CWMP_OK) { if (value != NULL) { FREE(conf->acs_userid); diff --git a/event.c b/event.c index 0ac44ff..52e53a5 100644 --- a/event.c +++ b/event.c @@ -329,7 +329,7 @@ int cwmp_root_cause_get_rpc_method(struct cwmp *cwmp) } cwmp_save_event_container(event_container); session = list_entry(cwmp->head_event_container, struct session, head_event_container); - if (cwmp_add_session_rpc_acs(session, RPC_ACS_GET_RPC_METHODS) == NULL) { + if (cwmp->conf.acs_getrpc && cwmp_add_session_rpc_acs(session, RPC_ACS_GET_RPC_METHODS) == NULL) { pthread_mutex_unlock(&(cwmp->mutex_session_queue)); return CWMP_MEM_ERR; } diff --git a/inc/common.h b/inc/common.h index 503d8ca..8c8c666 100644 --- a/inc/common.h +++ b/inc/common.h @@ -104,6 +104,7 @@ typedef struct config { bool insecure_enable; bool ipv6_enable; bool heart_beat_enable; + bool acs_getrpc; int retry_min_wait_interval; int retry_interval_multiplier; bool lw_notification_enable; diff --git a/inc/cwmp_uci.h b/inc/cwmp_uci.h index 39d1b63..9eb9e98 100644 --- a/inc/cwmp_uci.h +++ b/inc/cwmp_uci.h @@ -27,6 +27,7 @@ #define UCI_ACS_COMPRESSION "cwmp.acs.compression" #define UCI_ACS_RETRY_MIN_WAIT_INTERVAL "cwmp.acs.retry_min_wait_interval" #define UCI_ACS_RETRY_INTERVAL_MULTIPLIER "cwmp.acs.retry_interval_multiplier" +#define UCI_ACS_GETRPC "cwmp.acs.get_rpc_methods" #define UCI_CPE_USERID_PATH "cwmp.cpe.userid" #define UCI_CPE_PASSWD_PATH "cwmp.cpe.passwd" #define UCI_CPE_CWMP_ENABLE "cwmp.cpe.enable" diff --git a/session.c b/session.c index 6725a42..a321bff 100644 --- a/session.c +++ b/session.c @@ -112,11 +112,14 @@ struct session *cwmp_add_queue_session(struct cwmp *cwmp) /* * Set Required methods as initial value of */ - rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_GET_RPC_METHODS); - if (rpc_acs == NULL) { - FREE(session); - return NULL; + if (cwmp->conf.acs_getrpc) { + rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_GET_RPC_METHODS); + if (rpc_acs == NULL) { + FREE(session); + return NULL; + } } + rpc_acs = cwmp_add_session_rpc_acs_head(session, RPC_ACS_INFORM); if (rpc_acs == NULL) { FREE(session); @@ -176,7 +179,7 @@ int cwmp_move_session_to_session_queue(struct cwmp *cwmp, struct session *sessio if (session->head_rpc_acs.next != &(session->head_rpc_acs)) { rpc_acs = list_entry(session->head_rpc_acs.next, struct rpc, list); if (rpc_acs->type != RPC_ACS_INFORM) { - if (cwmp_add_session_rpc_acs_head(session, RPC_ACS_GET_RPC_METHODS) == NULL) { + if (cwmp->conf.acs_getrpc && cwmp_add_session_rpc_acs_head(session, RPC_ACS_GET_RPC_METHODS) == NULL) { pthread_mutex_unlock(&(cwmp->mutex_session_queue)); return CWMP_MEM_ERR; } @@ -186,7 +189,7 @@ int cwmp_move_session_to_session_queue(struct cwmp *cwmp, struct session *sessio } } } else { - if (cwmp_add_session_rpc_acs_head(session, RPC_ACS_GET_RPC_METHODS) == NULL) { + if (cwmp->conf.acs_getrpc && cwmp_add_session_rpc_acs_head(session, RPC_ACS_GET_RPC_METHODS) == NULL) { pthread_mutex_unlock(&(cwmp->mutex_session_queue)); return CWMP_MEM_ERR; } diff --git a/ubus_utils.c b/ubus_utils.c index 47c67e5..e5a5acc 100644 --- a/ubus_utils.c +++ b/ubus_utils.c @@ -280,7 +280,7 @@ static void icwmp_inform_get_rpc_method(struct ubus_context *ctx, struct ubus_re cwmp_save_event_container(event_container); session = list_entry(cwmp_main.head_event_container, struct session, head_event_container); - if (cwmp_add_session_rpc_acs(session, RPC_ACS_GET_RPC_METHODS) == NULL) { + if (cwmp_main.conf.acs_getrpc && cwmp_add_session_rpc_acs(session, RPC_ACS_GET_RPC_METHODS) == NULL) { pthread_mutex_unlock(&(cwmp_main.mutex_session_queue)); return; }