diff --git a/hal/ethernet/linux/ethernet_linux.c b/hal/ethernet/linux/ethernet_linux.c index bb989600..81c4aac0 100644 --- a/hal/ethernet/linux/ethernet_linux.c +++ b/hal/ethernet/linux/ethernet_linux.c @@ -174,7 +174,7 @@ Ethernet_createSocket(const char* interfaceId, uint8_t* destAddress) if (self) { - self->rawSocket = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); + self->rawSocket = socket(AF_PACKET, SOCK_RAW, 0); if (self->rawSocket == -1) { diff --git a/src/mms/iso_mms/server/mms_file_service.c b/src/mms/iso_mms/server/mms_file_service.c index ca5d80f7..1f65fc17 100644 --- a/src/mms/iso_mms/server/mms_file_service.c +++ b/src/mms/iso_mms/server/mms_file_service.c @@ -826,22 +826,14 @@ void mmsMsg_createFileReadResponse(int maxPduSize, uint32_t invokeId, ByteBuffer* response, MmsFileReadStateMachine* frsm) { - /* determine remaining bytes in file */ - uint32_t bytesLeft = frsm->fileSize - frsm->readPosition; - - uint32_t fileChunkSize = 0; - uint32_t maxFileChunkSize = maxPduSize - 20; uint32_t fileReadResponseSize = 1; /* for tag */ bool moreFollows = true; - if (bytesLeft > maxFileChunkSize) { - fileChunkSize = maxFileChunkSize; - } - else { - fileChunkSize = bytesLeft; + uint32_t fileChunkSize = FileSystem_readFile(frsm->fileHandle, response->buffer + 20, maxFileChunkSize); + if (fileChunkSize != maxFileChunkSize) { moreFollows = false; fileReadResponseSize += 3; /* for moreFollows */ } @@ -869,7 +861,7 @@ mmsMsg_createFileReadResponse(int maxPduSize, uint32_t invokeId, bufPos = BerEncoder_encodeTL(0x49, fileReadResponseSize, buffer, bufPos); bufPos = BerEncoder_encodeTL(0x80, fileChunkSize, buffer, bufPos); - FileSystem_readFile(frsm->fileHandle, buffer + bufPos, fileChunkSize); + memmove(buffer + bufPos, buffer + 20, fileChunkSize); bufPos += fileChunkSize; if (!moreFollows)