Files
sicspsi/dumprot.c
2012-06-19 07:19:03 +00:00

63 lines
1.7 KiB
C

#include "ascon.h"
#include "ascon.i"
/*
* this is a scriptcontext driver connecting to its own sics server.
* after a send command the configured polling script is called repeatedly
* with the sent command as argument until it returns something else than 0
*
* Markus Zolliker Aug 2011
*/
/*----------------------------------------------------------------------------*/
int DumProtHandler(Ascon *a)
{
Tcl_Interp *pTcl;
int ret;
char *result = NULL;
int iRet = 1;
switch (a->state) {
case AsconConnectStart:
case AsconConnecting:
a->state = AsconConnectDone;
break;
case AsconWriteStart:
DynStringInsert(a->wrBuffer, " ", 0);
DynStringInsert(a->wrBuffer, a->hostport, 0);
case AsconWriting:
a->state = AsconWriteDone;
break;
case AsconReadStart:
case AsconReading:
pTcl = InterpGetTcl(pServ->pSics);
ret = Tcl_EvalEx(pTcl, GetCharArray(a->wrBuffer), GetDynStringLength(a->wrBuffer), 0);
result = (char *) Tcl_GetStringResult(pTcl);
DynStringCopy(a->rdBuffer, result);
if (ret != TCL_OK || strcmp(result, "0") != 0) {
a->state = AsconReadDone;
}
break;
}
return 0;
}
/*----------------------------------------------------------------------------*/
static int DumProtInit(Ascon * a, SConnection * con, int argc, char *argv[])
{
/* argv[1] is the polling script. stored in hostport */
a->hostport = strdup(argv[1]);
return 1;
}
/*----------------------------------------------------------------------------*/
void AddDumProtocol()
{
static AsconProtocol dumprot;
dumprot.name = "dumprot";
dumprot.handler = DumProtHandler;
dumprot.init = DumProtInit;
AsconInsertProtocol(&dumprot);
}