diff --git a/src/mms/iso_mms/server/mms_file_service.c b/src/mms/iso_mms/server/mms_file_service.c index 41d7e307..742242ce 100644 --- a/src/mms/iso_mms/server/mms_file_service.c +++ b/src/mms/iso_mms/server/mms_file_service.c @@ -464,53 +464,58 @@ addFileEntriesToResponse(uint8_t* buffer, int bufPos, int maxBufSize, char* dire break; } else { - if (*continueAfterFileName != NULL) { - if (strcmp(*continueAfterFileName, directoryName) == 0) { - *continueAfterFileName = NULL; - } - } - else { - uint64_t msTime; + bufPos = addFileEntriesToResponse(buffer, bufPos, maxBufSize, directoryName, continueAfterFileName, moreFollows); - uint32_t fileSize; + } - FileSystem_getFileInfo(directoryName, &fileSize, &msTime); + fileName = FileSystem_readDirectory(directory, &isDirectory); + } - char gtString[30]; + FileSystem_closeDirectory(directory); + } + else { - Conversions_msTimeToGeneralizedTime(msTime, (uint8_t*) gtString); + if (*continueAfterFileName != NULL) { + if (strcmp(*continueAfterFileName, directoryName) == 0) { + *continueAfterFileName = NULL; + } + } + else { + uint64_t msTime; - int fileAttributesSize = encodeFileAttributes(0xa1, fileSize, gtString, NULL, 0); + uint32_t fileSize; - int filenameSize = encodeFileSpecification(0xa0, directoryName, NULL, 0); + if (FileSystem_getFileInfo(directoryName, &fileSize, &msTime) == NULL) + bufPos = -1; + else { - int dirEntrySize = 2 + fileAttributesSize + filenameSize; + char gtString[30]; - int overallEntrySize = 1 + BerEncoder_determineLengthSize(dirEntrySize) + dirEntrySize; + Conversions_msTimeToGeneralizedTime(msTime, (uint8_t*) gtString); - int bufferSpaceLeft = maxBufSize - bufPos; + int fileAttributesSize = encodeFileAttributes(0xa1, fileSize, gtString, NULL, 0); - if (overallEntrySize > bufferSpaceLeft) { - *moreFollows = true; - break; - } + int filenameSize = encodeFileSpecification(0xa0, directoryName, NULL, 0); - bufPos = BerEncoder_encodeTL(0x30, dirEntrySize, buffer, bufPos); /* SEQUENCE (DirectoryEntry) */ - bufPos = encodeFileSpecification(0xa0, directoryName, buffer, bufPos); /* fileName */ - bufPos = encodeFileAttributes(0xa1, fileSize, gtString, buffer, bufPos); /* file attributes */ + int dirEntrySize = 2 + fileAttributesSize + filenameSize; - } + int overallEntrySize = 1 + BerEncoder_determineLengthSize(dirEntrySize) + dirEntrySize; - } + int bufferSpaceLeft = maxBufSize - bufPos; + if (overallEntrySize > bufferSpaceLeft) { + *moreFollows = true; + //break; + } + + bufPos = BerEncoder_encodeTL(0x30, dirEntrySize, buffer, bufPos); /* SEQUENCE (DirectoryEntry) */ + bufPos = encodeFileSpecification(0xa0, directoryName, buffer, bufPos); /* fileName */ + bufPos = encodeFileAttributes(0xa1, fileSize, gtString, buffer, bufPos); /* file attributes */ + } - fileName = FileSystem_readDirectory(directory, &isDirectory); } - FileSystem_closeDirectory(directory); } - else - bufPos = -1; directoryName[directoryNameLength] = 0;