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 { else {
GWEN_SOCKET *sk; GWEN_SOCKET *sk;
int rv;
sk=GWEN_Socket_fromFile(fd); 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_SetSocket(ep, sk);
GWEN_MsgEndpoint_SetState(ep, GWEN_MSG_ENDPOINT_STATE_CONNECTED); GWEN_MsgEndpoint_SetState(ep, GWEN_MSG_ENDPOINT_STATE_CONNECTED);
GWEN_MsgEndpoint_DiscardInput(ep); GWEN_MsgEndpoint_DiscardInput(ep);
@@ -301,8 +309,9 @@ int _getBytesNeededForMessage(GWEN_UNUSED GWEN_MSG_ENDPOINT *ep, GWEN_MSG *msg)
ptr=GWEN_Msg_GetConstBuffer(msg); ptr=GWEN_Msg_GetConstBuffer(msg);
msgSize=ptr[AQH_MSG_OFFS_ALL_PAYLOAD_LEN]+AQH_MSG_OFFS_ALL_PAYLOAD_BEGIN+1; msgSize=ptr[AQH_MSG_OFFS_ALL_PAYLOAD_LEN]+AQH_MSG_OFFS_ALL_PAYLOAD_BEGIN+1;
if (msgSize>GWEN_Msg_GetMaxSize(msg)) { if (msgSize>GWEN_Msg_GetMaxSize(msg)) {
DBG_INFO(AQH_LOGDOMAIN, "Message too long for msg (%d > %d)", msgSize, GWEN_Msg_GetMaxSize(msg)); DBG_ERROR(AQH_LOGDOMAIN, "Message too long for msg (%d > %d)", msgSize, GWEN_Msg_GetMaxSize(msg));
return GWEN_ERROR_GENERIC; GWEN_MsgEndpoint_DiscardInput(ep);
return GWEN_ERROR_BAD_DATA;
} }
bytesNeeded=(int) (msgSize-bytesInMsg); 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 GWEN_ERROR_BAD_DATA;
} }
return bytesNeeded;
return (int) (msgSize-bytesInMsg);
} }
} }