mod_netconf,test_client: Added support for configuring supported capabilities.
diff --git a/src/mod_netconf.c b/src/mod_netconf.c
index c9cfecd..1df0a1e 100644
--- a/src/mod_netconf.c
+++ b/src/mod_netconf.c
@@ -227,21 +227,16 @@
 	if (sid) json_object_object_add(err_reply, "session-id", json_object_new_string(sid));
 }
 
-static char* netconf_connect(server_rec* server, apr_pool_t* pool, apr_hash_t* conns, const char* host, const char* port, const char* user, const char* pass)
+static char* netconf_connect(server_rec* server, apr_pool_t* pool, apr_hash_t* conns, const char* host, const char* port, const char* user, const char* pass, struct nc_cpblts * cpblts)
 {
 	struct nc_session* session;
 	struct session_with_mutex * locked_session;
 	char *session_key;
-	struct nc_cpblts * cpblts = nc_session_get_cpblts_default ();
-
-	nc_cpblts_add(cpblts, "urn:cesnet:tmc:netopeer:1.0");
 
 	/* connect to the requested NETCONF server */
 	password = (char*)pass;
 	session = nc_session_connect(host, (unsigned short) atoi (port), user, cpblts);
 
-	nc_cpblts_free (cpblts);
-
 	/* if connected successful, add session to the list */
 	if (session != NULL) {
 		/* generate hash for the session */
@@ -708,15 +703,15 @@
 	ssize_t buffer_len;
 	struct pollfd fds;
 	int status, buffer_size, ret;
-	json_object *request, *reply, *json_obj;
+	json_object *request, *reply, *json_obj, *capabilities;
 	int operation;
-	int i, chunk_len;
+	int i, chunk_len, len = 0;
 	char* session_key, *data;
 	const char *host, *port, *user, *pass;
 	const char *msgtext, *cpbltstr;
 	const char *target, *source, *filter, *config, *defop, *erropt, *sid;
 	struct nc_session *session = NULL;
-	struct nc_cpblts* cpblts;
+	struct nc_cpblts* cpblts = NULL;
 	NC_DATASTORE ds_type_s, ds_type_t;
 	NC_EDIT_DEFOP_TYPE defop_type = 0;
 	NC_EDIT_ERROPT_TYPE erropt_type = 0;
@@ -868,12 +863,21 @@
 				port = json_object_get_string(json_object_object_get(request, "port"));
 				user = json_object_get_string(json_object_object_get(request, "user"));
 				pass = json_object_get_string(json_object_object_get(request, "pass"));
+            if ((capabilities = json_object_object_get(request, "capabilities")) != NULL || (len = json_object_array_length(capabilities)) != 0) {
+                  cpblts = nc_cpblts_new (NULL);
+                  for (i=0; i<len; i++) {
+                     nc_cpblts_add (cpblts, json_object_get_string(json_object_array_get_idx(capabilities, i)));
+                  }
+            } else {
+               ap_log_error (APLOG_MARK, APLOG_ERR, 0, server, "no capabilities specified");
+            }
 				ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "host: %s, port: %s, user: %s", host, port, user);
 				if ((host == NULL) || (user == NULL)) {
 					ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "Cannot connect - insufficient input.");
 					session_key = NULL;
 				} else {
-					session_key = netconf_connect(server, pool, netconf_sessions_list, host, port, user, pass);
+					session_key = netconf_connect(server, pool, netconf_sessions_list, host, port, user, pass, cpblts);
+               nc_cpblts_free (cpblts);
 					ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server, "hash: %s", session_key);
 				}