- extended file service and mms_utility

This commit is contained in:
Michael Zillgith 2016-02-24 11:39:53 +01:00
parent ecf64277a8
commit 374bfa03d4
4 changed files with 66 additions and 3 deletions

View file

@ -19,6 +19,7 @@ print_help()
printf("-r <variable_name> read domain variable\n"); printf("-r <variable_name> read domain variable\n");
printf("-a <domain_name> specify domain for read or write command\n"); printf("-a <domain_name> specify domain for read or write command\n");
printf("-f show file list\n"); printf("-f show file list\n");
printf("-g <filename> get file attributes\n");
} }
static void static void
@ -31,6 +32,18 @@ mmsFileDirectoryHandler (void* parameter, char* filename, uint32_t size, uint64_
printf("%s\n", filename); printf("%s\n", filename);
} }
static void
mmsGetFileAttributeHandler (void* parameter, char* filename, uint32_t size, uint64_t lastModified)
{
char gtString[30];
Conversions_msTimeToGeneralizedTime(lastModified, (uint8_t*) gtString);
printf("FILENAME: %s\n", filename);
printf("SIZE: %u\n", size);
printf("DATE: %s\n", gtString);
}
int main(int argc, char** argv) { int main(int argc, char** argv) {
char* hostname = copyString("localhost"); char* hostname = copyString("localhost");
@ -39,6 +52,7 @@ int main(int argc, char** argv) {
char* domainName = NULL; char* domainName = NULL;
char* variableName = NULL; char* variableName = NULL;
char* filename = NULL;
int readDeviceList = 0; int readDeviceList = 0;
int getDeviceDirectory = 0; int getDeviceDirectory = 0;
@ -46,11 +60,12 @@ int main(int argc, char** argv) {
int readWriteHasDomain = 0; int readWriteHasDomain = 0;
int readVariable = 0; int readVariable = 0;
int showFileList = 0; int showFileList = 0;
int getFileAttributes = 0;
int c; int c;
while ((c = getopt(argc, argv, "ifdh:p:l:t:a:r:")) != -1) while ((c = getopt(argc, argv, "ifdh:p:l:t:a:r:g:")) != -1)
switch (c) { switch (c) {
case 'h': case 'h':
hostname = copyString(optarg); hostname = copyString(optarg);
@ -82,6 +97,10 @@ int main(int argc, char** argv) {
case 'f': case 'f':
showFileList = 1; showFileList = 1;
break; break;
case 'g':
getFileAttributes = 1;
filename = copyString(optarg);
break;
default: default:
print_help(); print_help();
@ -177,6 +196,10 @@ int main(int argc, char** argv) {
} }
} }
if (getFileAttributes) {
MmsConnection_getFileDirectory(con, &error, filename, NULL, mmsGetFileAttributeHandler, NULL);
}
exit: exit:
MmsConnection_destroy(con); MmsConnection_destroy(con);
} }

View file

@ -509,6 +509,39 @@ addFileEntriesToResponse(uint8_t* buffer, int bufPos, int maxBufSize, char* dire
FileSystem_closeDirectory(directory); FileSystem_closeDirectory(directory);
} }
else if (directoryName != NULL) {
uint64_t msTime;
uint32_t fileSize;
if (FileSystem_getFileInfo(directoryName, &fileSize, &msTime)) {
char gtString[30];
Conversions_msTimeToGeneralizedTime(msTime, (uint8_t*) gtString);
int fileAttributesSize = encodeFileAttributes(0xa1, fileSize, gtString, NULL, 0);
int filenameSize = encodeFileSpecification(0xa0, directoryName, NULL, 0);
int dirEntrySize = 2 + fileAttributesSize + filenameSize;
int overallEntrySize = 1 + BerEncoder_determineLengthSize(dirEntrySize) + dirEntrySize;
int bufferSpaceLeft = maxBufSize - bufPos;
if (overallEntrySize <= bufferSpaceLeft) {
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 */
}
else
bufPos = -1;
}
else
bufPos = -1;
}
else else
bufPos = -1; bufPos = -1;

View file

@ -513,4 +513,8 @@ EXPORTS
ClientSVControlBlock_getDstAddress ClientSVControlBlock_getDstAddress
ClientSVControlBlock_getOptFlds ClientSVControlBlock_getOptFlds
ClientSVControlBlock_getSmpMod ClientSVControlBlock_getSmpMod
ClientSVControlBlock_getNoASDU ClientSVControlBlock_getNoASDU
CDC_CTE_create
CDC_SPV_create
CDC_TMS_create

View file

@ -563,4 +563,7 @@ EXPORTS
ClientSVControlBlock_getDstAddress ClientSVControlBlock_getDstAddress
ClientSVControlBlock_getOptFlds ClientSVControlBlock_getOptFlds
ClientSVControlBlock_getSmpMod ClientSVControlBlock_getSmpMod
ClientSVControlBlock_getNoASDU ClientSVControlBlock_getNoASDU
CDC_CTE_create
CDC_SPV_create
CDC_TMS_create