mod_netconf: MAINTENANCE: separate common code as function
Some of code was used repeatedly, so it was separated into the function
which are called.
diff --git a/src/mod_netconf.c b/src/mod_netconf.c
index 3da13d1..7b27b54 100644
--- a/src/mod_netconf.c
+++ b/src/mod_netconf.c
@@ -274,143 +274,24 @@
}
}
-static char* netconf_getconfig(server_rec* server, apr_hash_t* conns, char* session_key, NC_DATASTORE source, const char* filter)
+static int netconf_op(server_rec* server, apr_hash_t* conns, char* session_key, nc_rpc* rpc)
{
struct nc_session *session = NULL;
- nc_rpc* rpc;
- nc_reply* reply;
- char* data;
- struct nc_filter *f = NULL;
-
- session = (struct nc_session *)apr_hash_get(conns, session_key, APR_HASH_KEY_STRING);
- if (session != NULL) {
- /* create filter if set */
- if (filter != NULL) {
- f = nc_filter_new(NC_FILTER_SUBTREE, filter);
- }
-
- /* create requests */
- rpc = nc_rpc_getconfig (source, f);
- nc_filter_free(f);
- if (rpc == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: creating rpc request failed");
- return (NULL);
- }
-
- /* send the request and get the reply */
- nc_session_send_rpc (session, rpc);
- if (nc_session_recv_reply (session, &reply) == 0) {
- nc_rpc_free (rpc);
- if (nc_session_get_status(session) != NC_SESSION_STATUS_WORKING) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: receiving rpc-reply failed");
- netconf_close(server, conns, session_key);
- return (NULL);
- }
-
- /* there is error handled by callback */
- return (NULL);
- }
- nc_rpc_free (rpc);
-
- switch (nc_reply_get_type (reply)) {
- case NC_REPLY_DATA:
- if ((data = nc_reply_get_data (reply)) == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: no data from reply");
- return (NULL);
- }
- break;
- default:
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: unexpected rpc-reply");
- return (NULL);
- }
- nc_reply_free(reply);
-
- return (data);
- } else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "Unknown session to process.");
- return (NULL);
- }
-}
-
-static char* netconf_get(server_rec* server, apr_hash_t* conns, char* session_key, const char* filter)
-{
- struct nc_session *session = NULL;
- nc_rpc* rpc;
- nc_reply* reply;
- char* data = NULL;
- struct nc_filter *f = NULL;
-
- session = (struct nc_session *)apr_hash_get(conns, session_key, APR_HASH_KEY_STRING);
- if (session != NULL) {
- /* create filter if set */
- if (filter != NULL) {
- f = nc_filter_new(NC_FILTER_SUBTREE, filter);
- }
-
- /* create requests */
- rpc = nc_rpc_get (f);
- nc_filter_free(f);
- if (rpc == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: creating rpc request failed");
- return (NULL);
- }
-
- /* send the request and get the reply */
- nc_session_send_rpc (session, rpc);
- if (nc_session_recv_reply (session, &reply) == 0) {
- nc_rpc_free (rpc);
- if (nc_session_get_status(session) != NC_SESSION_STATUS_WORKING) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: receiving rpc-reply failed");
- netconf_close(server, conns, session_key);
- return (NULL);
- }
-
- /* there is error handled by callback */
- return (NULL);
- }
- nc_rpc_free (rpc);
-
- switch (nc_reply_get_type (reply)) {
- case NC_REPLY_DATA:
- if ((data = nc_reply_get_data (reply)) == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: no data from reply");
- return (NULL);
- }
- break;
- default:
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: unexpected rpc-reply");
- data = NULL; /* error return code */
- break;
- }
- nc_reply_free(reply);
-
- return (data);
- } else {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "Unknown session to process.");
- return (NULL);
- }
-}
-
-static int netconf_copyconfig(server_rec* server, apr_hash_t* conns, char* session_key, NC_DATASTORE source, NC_DATASTORE target, const char* config)
-{
- struct nc_session *session = NULL;
- nc_rpc* rpc;
nc_reply* reply;
int retval = EXIT_SUCCESS;
+ /* check requests */
+ if (rpc == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: rpc is not created");
+ return (EXIT_FAILURE);
+ }
+
+ /* get session where send the RPC */
session = (struct nc_session *)apr_hash_get(conns, session_key, APR_HASH_KEY_STRING);
if (session != NULL) {
- /* create requests */
- rpc = nc_rpc_copyconfig(source, target, config);
- if (rpc == NULL) {
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: creating rpc request failed");
- return (EXIT_FAILURE);
- }
-
/* send the request and get the reply */
nc_session_send_rpc (session, rpc);
if (nc_session_recv_reply (session, &reply) == 0) {
- nc_rpc_free (rpc);
if (nc_session_get_status(session) != NC_SESSION_STATUS_WORKING) {
ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: receiving rpc-reply failed");
netconf_close(server, conns, session_key);
@@ -420,7 +301,6 @@
/* there is error handled by callback */
return (EXIT_FAILURE);
}
- nc_rpc_free (rpc);
switch (nc_reply_get_type (reply)) {
case NC_REPLY_OK:
@@ -438,6 +318,120 @@
return (EXIT_FAILURE);
}
}
+static char* netconf_opdata(server_rec* server, apr_hash_t* conns, char* session_key, nc_rpc* rpc)
+{
+ struct nc_session *session = NULL;
+ nc_reply* reply;
+ char* data;
+
+ /* check requests */
+ if (rpc == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: rpc is not created");
+ return (NULL);
+ }
+
+ /* get session where send the RPC */
+ session = (struct nc_session *)apr_hash_get(conns, session_key, APR_HASH_KEY_STRING);
+ if (session != NULL) {
+ /* send the request and get the reply */
+ nc_session_send_rpc (session, rpc);
+ if (nc_session_recv_reply (session, &reply) == 0) {
+ nc_rpc_free (rpc);
+ if (nc_session_get_status(session) != NC_SESSION_STATUS_WORKING) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: receiving rpc-reply failed");
+ netconf_close(server, conns, session_key);
+ return (NULL);
+ }
+
+ /* there is error handled by callback */
+ return (NULL);
+ }
+ nc_rpc_free (rpc);
+
+ switch (nc_reply_get_type (reply)) {
+ case NC_REPLY_DATA:
+ if ((data = nc_reply_get_data (reply)) == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: no data from reply");
+ return (NULL);
+ }
+ break;
+ default:
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: unexpected rpc-reply");
+ return (NULL);
+ }
+ nc_reply_free(reply);
+
+ return (data);
+ } else {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "Unknown session to process.");
+ return (NULL);
+ }
+}
+
+static char* netconf_getconfig(server_rec* server, apr_hash_t* conns, char* session_key, NC_DATASTORE source, const char* filter)
+{
+ nc_rpc* rpc;
+ struct nc_filter *f = NULL;
+ char* data = NULL;
+
+ /* create filter if set */
+ if (filter != NULL) {
+ f = nc_filter_new(NC_FILTER_SUBTREE, filter);
+ }
+
+ /* create requests */
+ rpc = nc_rpc_getconfig (source, f);
+ nc_filter_free(f);
+ if (rpc == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: creating rpc request failed");
+ return (NULL);
+ }
+
+ data = netconf_opdata(server, conns, session_key, rpc);
+ nc_rpc_free (rpc);
+ return (data);
+}
+
+static char* netconf_get(server_rec* server, apr_hash_t* conns, char* session_key, const char* filter)
+{
+ nc_rpc* rpc;
+ struct nc_filter *f = NULL;
+ char* data = NULL;
+
+ /* create filter if set */
+ if (filter != NULL) {
+ f = nc_filter_new(NC_FILTER_SUBTREE, filter);
+ }
+
+ /* create requests */
+ rpc = nc_rpc_get (f);
+ nc_filter_free(f);
+ if (rpc == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: creating rpc request failed");
+ return (NULL);
+ }
+
+ data = netconf_opdata(server, conns, session_key, rpc);
+ nc_rpc_free (rpc);
+ return (data);
+}
+
+static int netconf_copyconfig(server_rec* server, apr_hash_t* conns, char* session_key, NC_DATASTORE source, NC_DATASTORE target, const char* config)
+{
+ nc_rpc* rpc;
+ int retval = EXIT_SUCCESS;
+
+ /* create requests */
+ rpc = nc_rpc_copyconfig(source, target, config);
+ if (rpc == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, server, "mod_netconf: creating rpc request failed");
+ return (EXIT_FAILURE);
+ }
+
+ retval = netconf_op(server, conns, session_key, rpc);
+ nc_rpc_free (rpc);
+ return (retval);
+}
server_rec* clb_print_server;
int clb_print(const char* msg)