aqhome: discard data on bad messages, make socket non-blocking.

still doesn't seem to recover from bad messages.
This commit is contained in:
Martin Preuss
2024-09-20 01:28:54 +02:00
parent caa7138738
commit 4548b3c225

View File

@@ -149,8 +149,16 @@ int AQH_TtyEndpoint_Connect(GWEN_MSG_ENDPOINT *ep)
}
else {
GWEN_SOCKET *sk;
int rv;
sk=GWEN_Socket_fromFile(fd);
rv=GWEN_Socket_SetBlocking(sk, 0);
if (rv<0) {
DBG_INFO(AQH_LOGDOMAIN, "Error setting socket nonblocking: %d", rv);
GWEN_Socket_free(sk);
return GWEN_ERROR_IO;
}
GWEN_MsgEndpoint_SetSocket(ep, sk);
GWEN_MsgEndpoint_SetState(ep, GWEN_MSG_ENDPOINT_STATE_CONNECTED);
GWEN_MsgEndpoint_DiscardInput(ep);
@@ -301,8 +309,9 @@ int _getBytesNeededForMessage(GWEN_UNUSED GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg)
ptr=GWEN_Msg_GetConstBuffer(msg);
msgSize=ptr[AQH_MSG_OFFS_ALL_PAYLOAD_LEN]+AQH_MSG_OFFS_ALL_PAYLOAD_BEGIN+1;
if (msgSize>GWEN_Msg_GetMaxSize(msg)) {
DBG_INFO(AQH_LOGDOMAIN, "Message too long for msg (%d > %d)", msgSize, GWEN_Msg_GetMaxSize(msg));
return GWEN_ERROR_GENERIC;
DBG_ERROR(AQH_LOGDOMAIN, "Message too long for msg (%d > %d)", msgSize, GWEN_Msg_GetMaxSize(msg));
GWEN_MsgEndpoint_DiscardInput(ep);
return GWEN_ERROR_BAD_DATA;
}
bytesNeeded=(int) (msgSize-bytesInMsg);
@@ -312,8 +321,7 @@ int _getBytesNeededForMessage(GWEN_UNUSED GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg)
return GWEN_ERROR_BAD_DATA;
}
return (int) (msgSize-bytesInMsg);
return bytesNeeded;
}
}