- MMS client: file services -fixed encoding problem with long file names
This commit is contained in:
parent
d8f964ac7c
commit
e26ac787d7
3 changed files with 16 additions and 18 deletions
|
@ -47,8 +47,6 @@ static void printAppTitle(ItuObjectIdentifier* oid)
|
||||||
if (i != (oid->arcCount - 1))
|
if (i != (oid->arcCount - 1))
|
||||||
printf(".");
|
printf(".");
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -202,13 +202,13 @@ mmsClient_createFileOpenRequest(uint32_t invokeId, ByteBuffer* request, const ch
|
||||||
uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId);
|
uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId);
|
||||||
|
|
||||||
uint32_t fileNameStringSize = strlen(fileName);
|
uint32_t fileNameStringSize = strlen(fileName);
|
||||||
uint32_t fileNameSize = 1+ BerEncoder_determineLengthSize(fileNameStringSize) + fileNameStringSize;
|
uint32_t fileNameSize = 1 + BerEncoder_determineLengthSize(fileNameStringSize) + fileNameStringSize;
|
||||||
|
|
||||||
uint32_t fileNameSeqSize = fileNameSize;
|
uint32_t fileNameSeqSize = fileNameSize;
|
||||||
|
|
||||||
uint32_t fileOpenRequestSize = fileNameSeqSize + 2 + BerEncoder_UInt32determineEncodedSize(initialPosition) + 2;
|
uint32_t fileOpenRequestSize = 1 + BerEncoder_determineLengthSize(fileNameSeqSize) + fileNameSeqSize + 2 + BerEncoder_UInt32determineEncodedSize(initialPosition);
|
||||||
|
|
||||||
uint32_t confirmedRequestPduSize = 1 + 2 + 2 + invokeIdSize + fileOpenRequestSize;
|
uint32_t confirmedRequestPduSize = 2 + invokeIdSize + 2 + BerEncoder_determineLengthSize(fileOpenRequestSize) + fileOpenRequestSize;
|
||||||
|
|
||||||
int bufPos = 0;
|
int bufPos = 0;
|
||||||
uint8_t* buffer = request->buffer;
|
uint8_t* buffer = request->buffer;
|
||||||
|
@ -221,9 +221,10 @@ mmsClient_createFileOpenRequest(uint32_t invokeId, ByteBuffer* request, const ch
|
||||||
buffer[bufPos++] = 0xbf;
|
buffer[bufPos++] = 0xbf;
|
||||||
buffer[bufPos++] = 0x48;
|
buffer[bufPos++] = 0x48;
|
||||||
bufPos = BerEncoder_encodeLength(fileOpenRequestSize, buffer, bufPos);
|
bufPos = BerEncoder_encodeLength(fileOpenRequestSize, buffer, bufPos);
|
||||||
bufPos = BerEncoder_encodeTL(0xa0, fileNameSeqSize, buffer, bufPos);
|
|
||||||
|
|
||||||
|
bufPos = BerEncoder_encodeTL(0xa0, fileNameSeqSize, buffer, bufPos);
|
||||||
bufPos = BerEncoder_encodeOctetString(0x19, (uint8_t*) fileName, fileNameStringSize, buffer, bufPos);
|
bufPos = BerEncoder_encodeOctetString(0x19, (uint8_t*) fileName, fileNameStringSize, buffer, bufPos);
|
||||||
|
|
||||||
bufPos = BerEncoder_encodeUInt32WithTL(0x81, initialPosition, buffer, bufPos);
|
bufPos = BerEncoder_encodeUInt32WithTL(0x81, initialPosition, buffer, bufPos);
|
||||||
|
|
||||||
request->size = bufPos;
|
request->size = bufPos;
|
||||||
|
@ -237,11 +238,9 @@ mmsClient_createFileDeleteRequest(uint32_t invokeId, ByteBuffer* request, const
|
||||||
uint32_t fileNameStringSize = strlen(fileName);
|
uint32_t fileNameStringSize = strlen(fileName);
|
||||||
uint32_t fileNameSize = 1 + BerEncoder_determineLengthSize(fileNameStringSize) + fileNameStringSize;
|
uint32_t fileNameSize = 1 + BerEncoder_determineLengthSize(fileNameStringSize) + fileNameStringSize;
|
||||||
|
|
||||||
uint32_t fileNameSeqSize = fileNameSize;
|
uint32_t fileDeleteRequestSize = fileNameSize;
|
||||||
|
|
||||||
uint32_t fileDeleteRequestSize = fileNameSeqSize; // + 2;
|
uint32_t confirmedRequestPduSize = 1 + 2 + invokeIdSize + 1 + BerEncoder_determineLengthSize(fileDeleteRequestSize) + fileDeleteRequestSize;
|
||||||
|
|
||||||
uint32_t confirmedRequestPduSize = 1 + 2 + 2 + invokeIdSize + fileDeleteRequestSize;
|
|
||||||
|
|
||||||
int bufPos = 0;
|
int bufPos = 0;
|
||||||
uint8_t* buffer = request->buffer;
|
uint8_t* buffer = request->buffer;
|
||||||
|
@ -314,7 +313,7 @@ mmsClient_createFileDirectoryRequest(uint32_t invokeId, ByteBuffer* request, con
|
||||||
{
|
{
|
||||||
uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId);
|
uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId);
|
||||||
|
|
||||||
uint32_t confirmedRequestPduSize = 1 + 2 + 2 + invokeIdSize + 0;
|
uint32_t confirmedRequestPduSize = 1 + 2 + 1 + invokeIdSize;
|
||||||
|
|
||||||
uint32_t parameterSize = 0;
|
uint32_t parameterSize = 0;
|
||||||
|
|
||||||
|
@ -324,7 +323,7 @@ mmsClient_createFileDirectoryRequest(uint32_t invokeId, ByteBuffer* request, con
|
||||||
if (continueAfter)
|
if (continueAfter)
|
||||||
parameterSize += encodeFileSpecification(0xa1, continueAfter, NULL, 0);
|
parameterSize += encodeFileSpecification(0xa1, continueAfter, NULL, 0);
|
||||||
|
|
||||||
confirmedRequestPduSize += parameterSize;
|
confirmedRequestPduSize += BerEncoder_determineLengthSize(parameterSize) + parameterSize;
|
||||||
|
|
||||||
int bufPos = 0;
|
int bufPos = 0;
|
||||||
uint8_t* buffer = request->buffer;
|
uint8_t* buffer = request->buffer;
|
||||||
|
@ -353,15 +352,13 @@ mmsClient_createFileRenameRequest(uint32_t invokeId, ByteBuffer* request, const
|
||||||
{
|
{
|
||||||
uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId);
|
uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId);
|
||||||
|
|
||||||
uint32_t confirmedRequestPduSize = 1 + 2 + 2 + invokeIdSize;
|
|
||||||
|
|
||||||
uint32_t parameterSize = 0;
|
uint32_t parameterSize = 0;
|
||||||
|
|
||||||
parameterSize += encodeFileSpecification(0xa0, currentFileName, NULL, 0);
|
parameterSize += encodeFileSpecification(0xa0, currentFileName, NULL, 0);
|
||||||
|
|
||||||
parameterSize += encodeFileSpecification(0xa1, newFileName, NULL, 0);
|
parameterSize += encodeFileSpecification(0xa1, newFileName, NULL, 0);
|
||||||
|
|
||||||
confirmedRequestPduSize += parameterSize;
|
uint32_t confirmedRequestPduSize = 2 + invokeIdSize + 2 + BerEncoder_determineLengthSize(parameterSize) + parameterSize;
|
||||||
|
|
||||||
int bufPos = 0;
|
int bufPos = 0;
|
||||||
uint8_t* buffer = request->buffer;
|
uint8_t* buffer = request->buffer;
|
||||||
|
@ -387,15 +384,13 @@ mmsClient_createObtainFileRequest(uint32_t invokeId, ByteBuffer* request, const
|
||||||
{
|
{
|
||||||
uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId);
|
uint32_t invokeIdSize = BerEncoder_UInt32determineEncodedSize(invokeId);
|
||||||
|
|
||||||
uint32_t confirmedRequestPduSize = 1 + 2 + 2 + invokeIdSize;
|
|
||||||
|
|
||||||
uint32_t parameterSize = 0;
|
uint32_t parameterSize = 0;
|
||||||
|
|
||||||
parameterSize += encodeFileSpecification(0xa0, sourceFile, NULL, 0);
|
parameterSize += encodeFileSpecification(0xa0, sourceFile, NULL, 0);
|
||||||
|
|
||||||
parameterSize += encodeFileSpecification(0xa1, destinationFile, NULL, 0);
|
parameterSize += encodeFileSpecification(0xa1, destinationFile, NULL, 0);
|
||||||
|
|
||||||
confirmedRequestPduSize += parameterSize;
|
uint32_t confirmedRequestPduSize = 2 + invokeIdSize + 2 + BerEncoder_determineLengthSize(parameterSize) + parameterSize;
|
||||||
|
|
||||||
int bufPos = 0;
|
int bufPos = 0;
|
||||||
uint8_t* buffer = request->buffer;
|
uint8_t* buffer = request->buffer;
|
||||||
|
|
|
@ -251,6 +251,11 @@ mmsServer_handleFileDeleteRequest(
|
||||||
|
|
||||||
bufPos = BerDecoder_decodeLength(buffer, &length, bufPos, maxBufPos);
|
bufPos = BerDecoder_decodeLength(buffer, &length, bufPos, maxBufPos);
|
||||||
|
|
||||||
|
if (length > 255) {
|
||||||
|
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
char filename[256];
|
char filename[256];
|
||||||
|
|
||||||
memcpy(filename, buffer + bufPos, length);
|
memcpy(filename, buffer + bufPos, length);
|
||||||
|
|
Loading…
Add table
Reference in a new issue