- added SCPf function (general SCPrintf)

- removed sendingConnection stuff (no longer used)
- removed COMLOG Signal handling (no longer used)
This commit is contained in:
2017-06-14 14:00:21 +02:00
parent 1ad96e2c47
commit 00a446a756
2 changed files with 35 additions and 31 deletions

View File

@ -85,6 +85,8 @@
extern struct json_object *mkJSON_Object(SConnection * pCon, char *pBuffer,
int iOut);
/* from loglisten.c */
void LogListenRegister(SConnection * pCon);
/*
#define UUDEB 1
@ -117,9 +119,6 @@ typedef struct {
/*------------- a number for generating automatic names --------------------*/
static int iName = 0;
static long lastIdent = 0;
/*------------- sending connection (prevent double write when listening) ----*/
static SConnection *sendingConnection = NULL;
static int sendingSockHandle = 0;
/*
* This will return the value of a SICS int variable called "sicsdebug"
@ -165,24 +164,7 @@ static void FreeConnection(SConnection * pCon)
free(pCon);
}
/*---------------------------------------------------------------------------*/
SConnection *GetSendingConnection(void)
{
return sendingConnection;
}
/*---------------------------------------------------------------------------*/
static void SetSendingConnection(SConnection *pCon)
{
sendingConnection = pCon;
if (pCon) {
sendingSockHandle = pCon->sockHandle;
} else {
sendingSockHandle = 0;
}
}
/*-------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
static SConnection *SCMakeConnection()
{
SConnection *pRes = NULL;
@ -656,6 +638,35 @@ int SCPrintf(SConnection * self, int iOut, char *fmt, ...)
return SCWrite(self, buf, iOut);
}
/*-------------------------------------------------------------------------*/
int SCPf(writeFunc func, SConnection * self, int iOut, char *fmt, ...)
{
va_list ap;
char buf[256];
char *dyn;
unsigned int l;
int res;
va_start(ap, fmt);
l = vsnprintf(buf, sizeof buf, fmt, ap);
va_end(ap);
if (l >= sizeof buf) {
/* we have probably a C99 conforming snprintf and
need a larger buffer
*/
dyn = malloc(l + 1);
if (dyn != NULL) {
va_start(ap, fmt);
vsnprintf(dyn, l + 1, fmt, ap);
va_end(ap);
res = func(self, dyn, iOut);
free(dyn);
return res;
}
}
return func(self, buf, iOut);
}
/*-------------------------------------------------------------------------*/
writeFunc SCGetWriteFunc(SConnection * self)
{
@ -1072,9 +1083,7 @@ int SCLogWrite(SConnection * self, char *buffer, int iOut)
if (!VerifyConnection(self)) {
return 0;
}
SetSendingConnection(self);
Log(INFO,"com","sock%03.3d%s", self->sockHandle, buffer);
SetSendingConnection(NULL);
Log(INFO,"com","sock%03.3d:%s", self->sockHandle, buffer);
if(self->iProtocolID == PROTACT) { /* act */
if (strlen(buffer) + 30 > 1024) {
@ -1627,7 +1636,6 @@ int SCInvoke(SConnection * self, SicsInterp * pInter, char *pCommand)
* case
*/
if (SCGetWriteFunc(self) != SCNotWrite) {
SetSendingConnection(self);
if (self->sockHandle >= 0) {
if(strstr(pCommand,"Poch") == NULL){
Log(INFO,"com","sock%03.3d:",self->sockHandle, pCommand);
@ -1635,7 +1643,6 @@ int SCInvoke(SConnection * self, SicsInterp * pInter, char *pCommand)
} else {
Log(INFO,"sys","CRON:%s", pCommand);
}
SetSendingConnection(NULL);
}
}
@ -1738,6 +1745,7 @@ int ConfigCon(SConnection * pCon, SicsInterp * pSics, void *pData,
return 0;
}
pMaster->listening = pCon->listening;
LogListenRegister(pMaster);
SCSendOK(pCon);
return 1;
}
@ -2251,11 +2259,6 @@ void SCSignalFunction(void *pData, int iSignal, void *pSigData)
if (pPtr != NULL) {
SCPureSockWrite(self, pPtr, eWarning);
}
} else if (iSignal == COMLOG && self->listening == 1) {
pPtr = (char *) pSigData;
if (pPtr != NULL && self->sockHandle != sendingSockHandle) {
doSockWrite(self, pPtr);
}
} else if (iSignal == TOKENRELEASE) {
self->iGrab = 0;
} else if (iSignal == TOKENGRAB) {

View File

@ -100,6 +100,7 @@ int SCWrite(SConnection * self, char *pBuffer, int iOut);
#define G_GNUC_PRINTF( format_idx, arg_idx )
#endif
int SCPrintf(SConnection * self, int iOut, char *fmt, ...) G_GNUC_PRINTF (3, 4);
int SCPf(writeFunc func, SConnection * self, int iOut, char *fmt, ...) G_GNUC_PRINTF (4, 5);
#undef G_GNUC_PRINTF
int SCRead(SConnection * self, char *pBuffer, int iBufLen);
int SCPrompt(SConnection * pCon, char *pPrompt, char *pResult, int iLen);