* Session-id CLI functionality delayed: "lazy evaluation"
* From a cli perspective this is a revert to 4.1 behaviour, where the cli does not immediately exit on start if the backend is not running, but with the new session-id function
This commit is contained in:
parent
39e7f387f8
commit
c7d6f69a85
7 changed files with 128 additions and 53 deletions
|
|
@ -21,6 +21,8 @@
|
||||||
|
|
||||||
### Minor changes
|
### Minor changes
|
||||||
|
|
||||||
|
* Session-id CLI functionality delayed: "lazy evaluation"
|
||||||
|
* From a cli perspective this is a revert to 4.1 behaviour, where the cli does not immediately exit on start if the backend is not running, but with the new session-id function
|
||||||
* Obsoleted and removed XMLDB format "tree". This function did not work. Only xml and json allowed.
|
* Obsoleted and removed XMLDB format "tree". This function did not work. Only xml and json allowed.
|
||||||
* Test framework
|
* Test framework
|
||||||
* Added `-- -S <file>` command-line to main example to be able to return any state to main example.
|
* Added `-- -S <file>` command-line to main example to be able to return any state to main example.
|
||||||
|
|
|
||||||
|
|
@ -1427,11 +1427,15 @@ from_client_hello(clicon_handle h,
|
||||||
int retval = -1;
|
int retval = -1;
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
|
|
||||||
id = clicon_session_id_get(h);
|
if (clicon_session_id_get(h, &id) < 0){
|
||||||
|
clicon_err(OE_NETCONF, ENOENT, "session_id not set");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
id++;
|
id++;
|
||||||
clicon_session_id_set(h, id);
|
clicon_session_id_set(h, id);
|
||||||
cprintf(cbret, "<hello><session-id>%u</session-id></hello>", id);
|
cprintf(cbret, "<hello><session-id>%u</session-id></hello>", id);
|
||||||
retval = 0;
|
retval = 0;
|
||||||
|
done:
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -288,7 +288,6 @@ main(int argc, char **argv)
|
||||||
char *str;
|
char *str;
|
||||||
int tabmode;
|
int tabmode;
|
||||||
char *dir;
|
char *dir;
|
||||||
uint32_t id = 0;
|
|
||||||
cvec *nsctx_global = NULL; /* Global namespace context */
|
cvec *nsctx_global = NULL; /* Global namespace context */
|
||||||
|
|
||||||
/* Defaults */
|
/* Defaults */
|
||||||
|
|
@ -607,17 +606,8 @@ main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Go into event-loop unless -1 command-line */
|
/* Go into event-loop unless -1 command-line */
|
||||||
if (!once){
|
if (!once)
|
||||||
/* Send hello request to backend to get session-id back
|
|
||||||
* This is done once at the beginning of the session and then this is
|
|
||||||
* used by the client, even though new TCP sessions are created for
|
|
||||||
* each message sent to the backend.
|
|
||||||
*/
|
|
||||||
if (clicon_hello_req(h, &id) < 0)
|
|
||||||
goto done;
|
|
||||||
clicon_session_id_set(h, id);
|
|
||||||
retval = cli_interactive(h);
|
retval = cli_interactive(h);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
retval = 0;
|
retval = 0;
|
||||||
done:
|
done:
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,8 @@ int clicon_xml_changelog_set(clicon_handle h, cxobj *xchlog);
|
||||||
int clicon_argv_get(clicon_handle h, int *argc, char ***argv);
|
int clicon_argv_get(clicon_handle h, int *argc, char ***argv);
|
||||||
int clicon_argv_set(clicon_handle h, char *argv0, int argc, char **argv);
|
int clicon_argv_set(clicon_handle h, char *argv0, int argc, char **argv);
|
||||||
|
|
||||||
|
/*! Set and get (client/backend) session id */
|
||||||
int clicon_session_id_set(clicon_handle h, uint32_t id);
|
int clicon_session_id_set(clicon_handle h, uint32_t id);
|
||||||
uint32_t clicon_session_id_get(clicon_handle h);
|
int clicon_session_id_get(clicon_handle h, uint32_t *id);
|
||||||
|
|
||||||
#endif /* _CLIXON_DATA_H_ */
|
#endif /* _CLIXON_DATA_H_ */
|
||||||
|
|
|
||||||
|
|
@ -579,19 +579,24 @@ clicon_db_elmnt_set(clicon_handle h,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Get session id
|
/*! Get session id
|
||||||
* @param[in] h Clicon handle
|
* @param[in] h Clicon handle
|
||||||
* @retval id Session identifier
|
* @param[out] sid Session identifier
|
||||||
* Two uses: the backend assigns session-id for clients.
|
* @retval 0 OK
|
||||||
|
* @retval -1 Session id not set
|
||||||
|
* Session-ids survive TCP sessions that are created for each message sent to the backend.
|
||||||
|
* The backend assigns session-id for clients: backend assigns, clients get it from backend.
|
||||||
*/
|
*/
|
||||||
uint32_t
|
int
|
||||||
clicon_session_id_get(clicon_handle h)
|
clicon_session_id_get(clicon_handle h,
|
||||||
|
uint32_t *id)
|
||||||
{
|
{
|
||||||
clicon_hash_t *cdat = clicon_data(h);
|
clicon_hash_t *cdat = clicon_data(h);
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
if ((p = clicon_hash_value(cdat, "session-id", NULL)) == NULL)
|
if ((p = clicon_hash_value(cdat, "session-id", NULL)) == NULL)
|
||||||
return 0;
|
return -1;
|
||||||
return *(uint32_t*)p;
|
*id = *(uint32_t*)p;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Set session id
|
/*! Set session id
|
||||||
|
|
@ -599,6 +604,7 @@ clicon_session_id_get(clicon_handle h)
|
||||||
* @param[in] id Session id
|
* @param[in] id Session id
|
||||||
* @retval 0 OK
|
* @retval 0 OK
|
||||||
* @retval -1 Error
|
* @retval -1 Error
|
||||||
|
* Session-ids survive TCP sessions that are created for each message sent to the backend.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
clicon_session_id_set(clicon_handle h,
|
clicon_session_id_set(clicon_handle h,
|
||||||
|
|
@ -609,3 +615,4 @@ clicon_session_id_set(clicon_handle h,
|
||||||
clicon_hash_add(cdat, "session-id", &id, sizeof(uint32_t));
|
clicon_hash_add(cdat, "session-id", &id, sizeof(uint32_t));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,34 @@ clicon_rpc_msg(clicon_handle h,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*! Check if there is a valid (cached) session-id. If not, send a hello request to backend
|
||||||
|
* Session-ids survive TCP sessions that are created for each message sent to the backend.
|
||||||
|
* Clients use two approaches, either:
|
||||||
|
* (1) Once at the beginning of the session. Netconf and restconf does this
|
||||||
|
* (2) First usage, ie "lazy" evaluation when first needed
|
||||||
|
* @param[in] h clicon handle
|
||||||
|
* @param[out] session_id Session id
|
||||||
|
* @retval 0 OK and session_id set
|
||||||
|
* @retval -1 Error
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
session_id_check(clicon_handle h,
|
||||||
|
uint32_t *session_id)
|
||||||
|
{
|
||||||
|
int retval = -1;
|
||||||
|
uint32_t id;
|
||||||
|
|
||||||
|
if (clicon_session_id_get(h, &id) < 0){ /* Not set yet */
|
||||||
|
if (clicon_hello_req(h, &id) < 0)
|
||||||
|
goto done;
|
||||||
|
clicon_session_id_set(h, id);
|
||||||
|
}
|
||||||
|
retval = 0;
|
||||||
|
*session_id = id;
|
||||||
|
done:
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
/*! Generic xml netconf clicon rpc
|
/*! Generic xml netconf clicon rpc
|
||||||
* Want to go over to use netconf directly between client and server,...
|
* Want to go over to use netconf directly between client and server,...
|
||||||
* @param[in] h clicon handle
|
* @param[in] h clicon handle
|
||||||
|
|
@ -173,9 +201,12 @@ clicon_rpc_netconf(clicon_handle h,
|
||||||
int *sp)
|
int *sp)
|
||||||
{
|
{
|
||||||
int retval = -1;
|
int retval = -1;
|
||||||
|
uint32_t session_id;
|
||||||
struct clicon_msg *msg = NULL;
|
struct clicon_msg *msg = NULL;
|
||||||
|
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h), "%s", xmlstr)) < 0)
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
|
if ((msg = clicon_msg_encode(session_id, "%s", xmlstr)) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, xret, sp) < 0)
|
if (clicon_rpc_msg(h, msg, xret, sp) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -304,7 +335,10 @@ clicon_rpc_get_config(clicon_handle h,
|
||||||
cxobj *xd;
|
cxobj *xd;
|
||||||
cg_var *cv = NULL;
|
cg_var *cv = NULL;
|
||||||
char *prefix;
|
char *prefix;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
if ((cb = cbuf_new()) == NULL)
|
if ((cb = cbuf_new()) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
cprintf(cb, "<rpc");
|
cprintf(cb, "<rpc");
|
||||||
|
|
@ -328,8 +362,7 @@ clicon_rpc_get_config(clicon_handle h,
|
||||||
cprintf(cb, "/>");
|
cprintf(cb, "/>");
|
||||||
}
|
}
|
||||||
cprintf(cb, "</get-config></rpc>");
|
cprintf(cb, "</get-config></rpc>");
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id, "%s", cbuf_get(cb))) == NULL)
|
||||||
"%s", cbuf_get(cb))) == NULL)
|
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -382,7 +415,10 @@ clicon_rpc_edit_config(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
if ((cb = cbuf_new()) == NULL)
|
if ((cb = cbuf_new()) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
cprintf(cb, "<rpc xmlns=\"%s\"", NETCONF_BASE_NAMESPACE);
|
cprintf(cb, "<rpc xmlns=\"%s\"", NETCONF_BASE_NAMESPACE);
|
||||||
|
|
@ -395,8 +431,7 @@ clicon_rpc_edit_config(clicon_handle h,
|
||||||
if (xmlstr)
|
if (xmlstr)
|
||||||
cprintf(cb, "%s", xmlstr);
|
cprintf(cb, "%s", xmlstr);
|
||||||
cprintf(cb, "</edit-config></rpc>");
|
cprintf(cb, "</edit-config></rpc>");
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id, "%s", cbuf_get(cb))) == NULL)
|
||||||
"%s", cbuf_get(cb))) == NULL)
|
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -438,10 +473,13 @@ clicon_rpc_copy_config(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><copy-config><source><%s/></source><target><%s/></target></copy-config></rpc>",
|
"<rpc username=\"%s\"><copy-config><source><%s/></source><target><%s/></target></copy-config></rpc>",
|
||||||
username?username:"",
|
username?username:"",
|
||||||
db1, db2)) == NULL)
|
db1, db2)) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -479,9 +517,12 @@ clicon_rpc_delete_config(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><edit-config><target><%s/></target><default-operation>none</default-operation><config operation=\"delete\"/></edit-config></rpc>",
|
"<rpc username=\"%s\"><edit-config><target><%s/></target><default-operation>none</default-operation><config operation=\"delete\"/></edit-config></rpc>",
|
||||||
username?username:"", db)) == NULL)
|
username?username:"", db)) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -515,9 +556,12 @@ clicon_rpc_lock(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><lock><target><%s/></target></lock></rpc>",
|
"<rpc username=\"%s\"><lock><target><%s/></target></lock></rpc>",
|
||||||
username?username:"", db)) == NULL)
|
username?username:"", db)) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -551,9 +595,12 @@ clicon_rpc_unlock(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><unlock><target><%s/></target></unlock></rpc>", username?username:"", db)) == NULL)
|
"<rpc username=\"%s\"><unlock><target><%s/></target></unlock></rpc>", username?username:"", db)) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
||||||
|
|
@ -620,7 +667,10 @@ clicon_rpc_get(clicon_handle h,
|
||||||
char *username;
|
char *username;
|
||||||
cg_var *cv = NULL;
|
cg_var *cv = NULL;
|
||||||
char *prefix;
|
char *prefix;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
if ((cb = cbuf_new()) == NULL)
|
if ((cb = cbuf_new()) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
cprintf(cb, "<rpc");
|
cprintf(cb, "<rpc");
|
||||||
|
|
@ -650,7 +700,7 @@ clicon_rpc_get(clicon_handle h,
|
||||||
cprintf(cb, "/>");
|
cprintf(cb, "/>");
|
||||||
}
|
}
|
||||||
cprintf(cb, "</get></rpc>");
|
cprintf(cb, "</get></rpc>");
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"%s", cbuf_get(cb))) == NULL)
|
"%s", cbuf_get(cb))) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
||||||
|
|
@ -691,9 +741,12 @@ clicon_rpc_close_session(clicon_handle h)
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><close-session/></rpc>",
|
"<rpc username=\"%s\"><close-session/></rpc>",
|
||||||
username?username:"")) == NULL)
|
username?username:"")) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -727,9 +780,12 @@ clicon_rpc_kill_session(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t my_session_id; /* Not the one to kill */
|
||||||
|
|
||||||
|
if (session_id_check(h, &my_session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(my_session_id,
|
||||||
"<rpc username=\"%s\"><kill-session><session-id>%u</session-id></kill-session></rpc>",
|
"<rpc username=\"%s\"><kill-session><session-id>%u</session-id></kill-session></rpc>",
|
||||||
username?username:"", session_id)) == NULL)
|
username?username:"", session_id)) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
@ -763,9 +819,12 @@ clicon_rpc_validate(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><validate><source><%s/></source></validate></rpc>", username?username:"", db)) == NULL)
|
"<rpc username=\"%s\"><validate><source><%s/></source></validate></rpc>", username?username:"", db)) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
||||||
|
|
@ -796,9 +855,12 @@ clicon_rpc_commit(clicon_handle h)
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><commit/></rpc>", username?username:"")) == NULL)
|
"<rpc username=\"%s\"><commit/></rpc>", username?username:"")) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
||||||
|
|
@ -829,9 +891,12 @@ clicon_rpc_discard_changes(clicon_handle h)
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><discard-changes/></rpc>", username?username:"")) == NULL)
|
"<rpc username=\"%s\"><discard-changes/></rpc>", username?username:"")) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
||||||
|
|
@ -870,9 +935,12 @@ clicon_rpc_create_subscription(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><create-subscription xmlns=\"urn:ietf:params:xml:ns:netmod:notification\">"
|
"<rpc username=\"%s\"><create-subscription xmlns=\"urn:ietf:params:xml:ns:netmod:notification\">"
|
||||||
"<stream>%s</stream>"
|
"<stream>%s</stream>"
|
||||||
"<filter type=\"xpath\" select=\"%s\" />"
|
"<filter type=\"xpath\" select=\"%s\" />"
|
||||||
|
|
@ -910,9 +978,12 @@ clicon_rpc_debug(clicon_handle h,
|
||||||
cxobj *xret = NULL;
|
cxobj *xret = NULL;
|
||||||
cxobj *xerr;
|
cxobj *xerr;
|
||||||
char *username;
|
char *username;
|
||||||
|
uint32_t session_id;
|
||||||
|
|
||||||
|
if (session_id_check(h, &session_id) < 0)
|
||||||
|
goto done;
|
||||||
username = clicon_username_get(h);
|
username = clicon_username_get(h);
|
||||||
if ((msg = clicon_msg_encode(clicon_session_id_get(h),
|
if ((msg = clicon_msg_encode(session_id,
|
||||||
"<rpc username=\"%s\"><debug xmlns=\"http://clicon.org/lib\"><level>%d</level></debug></rpc>", username?username:"", level)) == NULL)
|
"<rpc username=\"%s\"><debug xmlns=\"http://clicon.org/lib\"><level>%d</level></debug></rpc>", username?username:"", level)) == NULL)
|
||||||
goto done;
|
goto done;
|
||||||
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
if (clicon_rpc_msg(h, msg, &xret, NULL) < 0)
|
||||||
|
|
|
||||||
|
|
@ -64,10 +64,10 @@ EOF
|
||||||
expectfn "$clixon_cli -1f $cfg show version" 0 "$version."
|
expectfn "$clixon_cli -1f $cfg show version" 0 "$version."
|
||||||
|
|
||||||
new "hello session-id 2"
|
new "hello session-id 2"
|
||||||
expecteof "$clixon_util_socket -a $family -s $sock -D $DBG" 0 "<hello/>" "<hello><session-id>2</session-id></hello>"
|
expecteof "$clixon_util_socket -a $family -s $sock -D $DBG" 0 "<hello/>" "<hello><session-id>3</session-id></hello>"
|
||||||
|
|
||||||
new "hello session-id 2"
|
new "hello session-id 2"
|
||||||
expecteof "$clixon_util_socket -a $family -s $sock -D $DBG" 0 "<hello/>" "<hello><session-id>3</session-id></hello>"
|
expecteof "$clixon_util_socket -a $family -s $sock -D $DBG" 0 "<hello/>" "<hello><session-id>4</session-id></hello>"
|
||||||
|
|
||||||
if [ $BE -ne 0 ]; then
|
if [ $BE -ne 0 ]; then
|
||||||
new "Kill backend"
|
new "Kill backend"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue