Revision | Comments |
---|---|
1.1 | Author(s): Francis L'Écuyer (francisl@zks.net);
Initial draft. |
Please refer to the ZK Command Server Configuration page for a complete description of all Command Server options.
The prototype and binding function are:
typedef int (*ZkCmdSrvInitProcess) (ZK_OUT ZkError err,Similarly, a callback function can be provided to the server so that when a process terminates, the user can clean up properly. The prototype and binding function are:
ZK_IN void* applData,
ZK_OUT void** processData);
extern int zkCmdSrv_SetInitProcess(ZK_OUT ZkError err,
ZK_IN ZkCmdSrv cmdsrv,
ZK_IN ZkCmdSrvInitProcess function);
typedef int (*ZkCmdSrvTermProcess) (ZK_OUT ZkError err,
ZK_IN void* applData,
ZK_IN void** processData);
extern int zkCmdSrv_SetTermProcess(ZK_OUT ZkError err,
ZK_IN ZkCmdSrv cmdsrv,
ZK_IN ZkCmdSrvTermProcess function);
The prototype and binding function are:
typedef int (*ZkCmdSrvInitSession) (ZK_OUT ZkError err,Similarly, a callback function can be provided to the server so that when a session terminates, the user can clean up properly. The prototype and binding function are:
ZK_IN void* applData,
ZK_IN void* processData,
ZK_OUT void** sessionData);
extern int zkCmdSrv_SetInitSession(ZK_OUT ZkError err,
ZK_IN ZkCmdSrv cmdsrv,
ZK_IN ZkCmdSrvInitSession function);
typedef int (*ZkCmdSrvTermSession) (ZK_OUT ZkError err,
ZK_IN void* applData,
ZK_IN void* processData,
ZK_IN void** sessionData);
extern int zkCmdSrv_SetTermSession(ZK_OUT ZkError err,
ZK_IN ZkCmdSrv cmdsrv,
ZK_IN ZkCmdSrvTermSession function);
typedef int (*ZkCmdSrvCallback) (ZK_OUT ZkError err,Callback functions are bound in the server with the following function:
ZK_IN void* applData,
ZK_IN void* processData,
ZK_IN void* applData,
ZK_IN ZkcpCommand comm
ZK_OUT ZkcpCommand* response,
ZK_OUT uint16_t* closeConn);
extern int zkCmdSrv_AddCommand(ZK_OUT ZkError err,
ZK_IN ZkCmdSrv cmdsrv,
ZK_IN uint16_t commId,
ZK_IN ZkCmdSrvCallback function);
typedef int (*ZkCmdSrvSignal) (ZK_OUT ZkError err,Note that the callback is not called directly from the signal handler but later when the Command Server goes back to it's main loop.
ZK_IN void* applData);
extern int zkCmdSrv_SetSignal(ZK_OUT ZkError err,
ZK_IN ZkCmdSrv cmdsrv,
ZK_IN ZkCmdSrvSignal function);
kill -HUP -51036
void main(int argc, const char **argv)
{
ZkCmdSrv cmdsrv = NULL;
ZkCmdSrvConfig srvConfig;
ZkConfig config;
ZkcpContext zkcpCtx;
struct applDataStruct data;
int pid;/* Create and load config file and set command line arguments */
zkConfigNew(err, &config));
zkConfigSetCmdParms(err, config, argc, argv);
zkConfigLoad(err, config, "zkcs.conf));'/* Create a Command Protocol context. Also define some zkcp types */
zkcpContext_Create(err, &zkcpCtx);/* Server configuration */
srvConfig.progName = argv[0];
srvConfig.logFile = "zkcs.log";
srvConfig.pidFile = "zkcs.pid";
srvConfig.accessFile = "zkcs.access";
srvConfig.addressPath = ":51250";
srvConfig.maxCommands = 4;
srvConfig.applData = &data;
srvConfig.zkcpCtx = zkcpCtx;/* Create a zkCP context */
zkcpContext_Create(err, &srvConfig.zkcpCtx);/* Create a Command Server object using the server config structure */
zkCmdSrv_Create(err, &srvConfig, &cmdsrv);/* Load up command line and config file options */
zkCmdSrv_LoadConfig(err, config, cmdsrv);/* Set the process callback functions */
zkCmdSrv_SetInitProcess(err, cmdsrv, ProcessInitCallbackFunc);
zkCmdSrv_SetTermProcess(err, cmdsrv, ProcessTermCallbackFunc);/* Set the session callback functions */
zkCmdSrv_SetInitSession(err, cmdsrv, SessionInitCallbackFunc);
zkCmdSrv_SetTermSession(err, cmdsrv, SessionTermCallbackFunc);/* Set the command callback functions */
zkCmdSrv_AddCommand(err, cmdsrv, 0, CommandCallbackFunc0);
zkCmdSrv_AddCommand(err, cmdsrv, 1, CommandCallbackFunc1);
zkCmdSrv_AddCommand(err, cmdsrv, 2, CommandCallbackFunc2);
zkCmdSrv_AddCommand(err, cmdsrv, 3, CommandCallbackFunc3);/* Let's start the server */
zkCmdSrv_Start(err, cmdsrv, &pid);if (pid) {
/* Parent process */
else {
/* Child process is done. Let's clean up the data. */
zkCmdSrv_Destroy(err, cmdsrv);
}
}
Copyright © 2000 Zero-Knowledge Systems Inc.
All rights reserved.