Added detailed parsing error messages
This commit is contained in:
parent
013da483f8
commit
56ed8a0839
@ -271,6 +271,8 @@ mbus_frame_type(mbus_frame *frame)
|
|||||||
int
|
int
|
||||||
mbus_frame_verify(mbus_frame *frame)
|
mbus_frame_verify(mbus_frame *frame)
|
||||||
{
|
{
|
||||||
|
u_char checksum;
|
||||||
|
|
||||||
if (frame)
|
if (frame)
|
||||||
{
|
{
|
||||||
switch (frame->type)
|
switch (frame->type)
|
||||||
@ -280,31 +282,67 @@ mbus_frame_verify(mbus_frame *frame)
|
|||||||
|
|
||||||
case MBUS_FRAME_TYPE_SHORT:
|
case MBUS_FRAME_TYPE_SHORT:
|
||||||
if(frame->start1 != MBUS_FRAME_SHORT_START)
|
if(frame->start1 != MBUS_FRAME_SHORT_START)
|
||||||
|
{
|
||||||
|
snprintf(error_str, sizeof(error_str), "No frame start");
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MBUS_FRAME_TYPE_CONTROL:
|
case MBUS_FRAME_TYPE_CONTROL:
|
||||||
case MBUS_FRAME_TYPE_LONG:
|
case MBUS_FRAME_TYPE_LONG:
|
||||||
if(frame->start1 != MBUS_FRAME_CONTROL_START ||
|
if(frame->start1 != MBUS_FRAME_CONTROL_START ||
|
||||||
frame->start2 != MBUS_FRAME_CONTROL_START ||
|
frame->start2 != MBUS_FRAME_CONTROL_START)
|
||||||
frame->length1 != frame->length2 ||
|
{
|
||||||
frame->length1 != calc_length(frame))
|
snprintf(error_str, sizeof(error_str), "No frame start");
|
||||||
return -1;
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame->length1 != frame->length2)
|
||||||
|
{
|
||||||
|
snprintf(error_str, sizeof(error_str), "Frame length 1 != 2");
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame->length1 != calc_length(frame))
|
||||||
|
{
|
||||||
|
snprintf(error_str, sizeof(error_str), "Frame length 1 != calc length");
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
snprintf(error_str, sizeof(error_str), "Unknown frame type 0x%.2x", frame->type);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(frame->stop != MBUS_FRAME_STOP ||
|
if(frame->stop != MBUS_FRAME_STOP)
|
||||||
frame->checksum != calc_checksum(frame))
|
{
|
||||||
return -1;
|
snprintf(error_str, sizeof(error_str), "No frame stop");
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
checksum = calc_checksum(frame);
|
||||||
|
|
||||||
|
if(frame->checksum != checksum)
|
||||||
|
{
|
||||||
|
snprintf(error_str, sizeof(error_str), "Invalid checksum (0x%.2x != 0x%.2x)", frame->checksum, checksum);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
snprintf(error_str, sizeof(error_str), "Got null pointer to frame.");
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2036,6 +2074,8 @@ mbus_parse(mbus_frame *frame, u_char *data, size_t data_size)
|
|||||||
|
|
||||||
if (data_size != MBUS_FRAME_BASE_SIZE_SHORT)
|
if (data_size != MBUS_FRAME_BASE_SIZE_SHORT)
|
||||||
{
|
{
|
||||||
|
snprintf(error_str, sizeof(error_str), "Too much data in frame.");
|
||||||
|
|
||||||
// too much data... ?
|
// too much data... ?
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
@ -2074,6 +2114,8 @@ mbus_parse(mbus_frame *frame, u_char *data, size_t data_size)
|
|||||||
|
|
||||||
if (frame->length1 != frame->length2)
|
if (frame->length1 != frame->length2)
|
||||||
{
|
{
|
||||||
|
snprintf(error_str, sizeof(error_str), "Invalid M-Bus frame length.");
|
||||||
|
|
||||||
// not a valid M-bus frame
|
// not a valid M-bus frame
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
@ -2120,12 +2162,16 @@ mbus_parse(mbus_frame *frame, u_char *data, size_t data_size)
|
|||||||
// successfully parsed data
|
// successfully parsed data
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
|
snprintf(error_str, sizeof(error_str), "Invalid M-Bus frame start.");
|
||||||
|
|
||||||
// not a valid M-Bus frame header (start byte)
|
// not a valid M-Bus frame header (start byte)
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
snprintf(error_str, sizeof(error_str), "Got null pointer to frame, data or zero data_size.");
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user