* Corrected client session handling to make internal IPC socket persistent

* Applies to cli/netconf/restconf/client-api code
  * Previous behaviour:
    * Close socket after each rpc, but now keeps the socket open until the client terminates
    * Kept locks over socket life-cycle, but according to RFC 6241 7.5 a lock should be relaeased when session ends
This commit is contained in:
Olof hagsand 2021-01-27 15:07:27 +01:00
parent b41f68b677
commit f5f013c739
18 changed files with 371 additions and 145 deletions

View file

@ -520,7 +520,7 @@ clicon_startup_status_set(clicon_handle h,
return 0;
}
/*! Get socket fd (ie backend server socket / restconf fcgx socket)
/*! Get server socket fd (ie backend server socket / restconf fcgi socket)
* @param[in] h Clicon handle
* @retval -1 No open socket
* @retval s Socket
@ -536,7 +536,7 @@ clicon_socket_get(clicon_handle h)
return *(int*)p;
}
/*! Set socket fd (ie backend server socket / restconf fcgx socket)
/*! Set server socket fd (ie backend server socket / restconf fcgi socket)
* @param[in] h Clicon handle
* @param[in] s Open socket (or -1 to close)
* @retval 0 OK
@ -553,6 +553,39 @@ clicon_socket_set(clicon_handle h,
return clicon_hash_add(cdat, "socket", &s, sizeof(int))==NULL?-1:0;
}
/*! Get client socket fd (ie client cli / netconf / restconf / client-api socket
* @param[in] h Clicon handle
* @retval -1 No open socket
* @retval s Socket
*/
int
clicon_client_socket_get(clicon_handle h)
{
clicon_hash_t *cdat = clicon_data(h);
void *p;
if ((p = clicon_hash_value(cdat, "client-socket", NULL)) == NULL)
return -1;
return *(int*)p;
}
/*! Set client socket fd (ie client cli / netconf / restconf / client-api socket
* @param[in] h Clicon handle
* @param[in] s Open socket (or -1 to close)
* @retval 0 OK
* @retval -1 Error
*/
int
clicon_client_socket_set(clicon_handle h,
int s)
{
clicon_hash_t *cdat = clicon_data(h);
if (s == -1)
return clicon_hash_del(cdat, "client-socket");
return clicon_hash_add(cdat, "client-socket", &s, sizeof(int))==NULL?-1:0;
}
/*! Get module state cache
* @param[in] h Clicon handle
* @param[in] brief 0: Full module state tree, 1: Brief tree (datastore)