- implemented setFile service

- prepared for release 1.0.0
pull/6/head
Michael Zillgith 9 years ago
parent 940bcee6fc
commit 46575aeb68

@ -10,9 +10,9 @@ endif()
project(libiec61850)
ENABLE_TESTING()
set(LIB_VERSION_MAJOR "0")
set(LIB_VERSION_MINOR "9")
set(LIB_VERSION_PATCH "3")
set(LIB_VERSION_MAJOR "1")
set(LIB_VERSION_MINOR "0")
set(LIB_VERSION_PATCH "0")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/third_party/cmake/modules/")

@ -159,7 +159,7 @@
/* overwrite default results for MMS identify service */
//#define CONFIG_DEFAULT_MMS_VENDOR_NAME "libiec61850.com"
//#define CONFIG_DEFAULT_MMS_MODEL_NAME "LIBIEC61850"
//#define CONFIG_DEFAULT_MMS_REVISION "0.9.3"
//#define CONFIG_DEFAULT_MMS_REVISION "1.0.0"
/* MMS virtual file store base path - where MMS file services are looking for files */
#define CONFIG_VIRTUAL_FILESTORE_BASEPATH "./vmd-filestore/"

@ -15,7 +15,7 @@
#include "platform_endian.h"
#define LIBIEC61850_VERSION "0.9.3"
#define LIBIEC61850_VERSION "1.0.0"
#ifndef CONFIG_DEFAULT_MMS_VENDOR_NAME
#define CONFIG_DEFAULT_MMS_VENDOR_NAME "libiec61850.com"

@ -18,7 +18,7 @@ DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "libIEC61850"
PROJECT_NUMBER = 0.9.3
PROJECT_NUMBER = 1.0.0
PROJECT_BRIEF = "Open-source IEC 61850 MMS/GOOSE/SV server and client library"

@ -84,6 +84,12 @@ iedConnection_mapMmsErrorToIedError(MmsError mmsError)
case MMS_ERROR_FILE_FILE_NON_EXISTENT:
return IED_ERROR_OBJECT_DOES_NOT_EXIST;
case MMS_ERROR_FILE_DUPLICATE_FILENAME:
return IED_ERROR_OBJECT_EXISTS;
case MMS_ERROR_FILE_FILE_ACCESS_DENIED:
return IED_ERROR_ACCESS_DENIED;
case MMS_ERROR_CONNECTION_REJECTED:
return IED_ERROR_CONNECTION_REJECTED;
@ -1172,6 +1178,24 @@ IedConnection_getFile(IedConnection self, IedClientError* error, const char* fil
return clientFileReadHandler.byteReceived;
}
void
IedConnection_setFile(IedConnection self, IedClientError* error, const char* sourceFilename, const char* destinationFilename)
{
#if (MMS_OBTAIN_FILE_SERVICE == 1)
*error = IED_ERROR_OK;
MmsError mmsError;
MmsConnection_obtainFile(self->connection, &mmsError, sourceFilename, destinationFilename);
if (mmsError != MMS_ERROR_NONE) {
*error = iedConnection_mapMmsErrorToIedError(mmsError);
}
#else
*error = IED_ERROR_SERVICE_NOT_IMPLEMENTED;
#endif /* (MMS_OBTAIN_FILE_SERVICE == 1) */
}
void
IedConnection_deleteFile(IedConnection self, IedClientError* error, const char* fileName)
{

@ -156,7 +156,10 @@ typedef enum {
/** The object is invalidated (returned by server) */
IED_ERROR_OBJECT_INVALIDATED = 33,
/* unknown error */
/** Service not implemented */
IED_ERROR_SERVICE_NOT_IMPLEMENTED = 98,
/** unknown error */
IED_ERROR_UNKNOWN = 99
} IedClientError;
@ -1886,6 +1889,20 @@ uint32_t
IedConnection_getFile(IedConnection self, IedClientError* error, const char* fileName, IedClientGetFileHandler handler,
void* handlerParameter);
/**
* \brief Implementation of the SetFile ACSI service
*
* Upload a file to the server. The file has to be available in the local VMD filestore.
*
* \param self the connection object
* \param error the error code if an error occurs
* \param sourceFilename the filename of the local (client side) file
* \param destinationFilename the filename of the remote (service side) file
*/
void
IedConnection_setFile(IedConnection self, IedClientError* error, const char* sourceFilename, const char* destinationFilename);
/**
* \brief Implementation of the DeleteFile ACSI service
*

@ -294,12 +294,11 @@ mmsClient_handleFileReadRequest(
ByteBuffer* response);
void
mmsClient_handleFileReadRequest(
MmsConnection connection,
uint8_t* buffer, int bufPos, int maxBufPos,
uint32_t invokeId,
ByteBuffer* response);
mmsClient_handleFileCloseRequest(
MmsConnection connection,
uint8_t* buffer, int bufPos, int maxBufPos,
uint32_t invokeId,
ByteBuffer* response);
#endif /* MMS_MSG_INTERNAL_H_ */

@ -60,6 +60,10 @@ mmsMsg_createFileReadResponse(int maxPduSize, uint32_t invokeId, ByteBuffer* res
void
mmsMsg_createFileCloseResponse(uint32_t invokeId, ByteBuffer* response);
void
mmsMsg_createFileOpenResponse(uint32_t invokeId, ByteBuffer* response, char* fullPath, MmsFileReadStateMachine* frsm);
#endif /* (MMS_FILE_SERVICE == 1) */
typedef struct sMmsServiceError
@ -68,6 +72,13 @@ typedef struct sMmsServiceError
int errorCode;
} MmsServiceError;
void /* Confirmed service error (ServiceError) */
mmsMsg_createServiceErrorPdu(uint32_t invokeId, ByteBuffer* response, MmsError errorType);
void
mmsMsg_createMmsRejectPdu(uint32_t* invokeId, int reason, ByteBuffer* response);
int
mmsMsg_parseConfirmedErrorPDU(uint8_t* buffer, int bufPos, int maxBufPos, uint32_t* invokeId, MmsServiceError* serviceError);

@ -184,6 +184,9 @@ struct sMmsServerConnection {
#if (MMS_OBTAIN_FILE_SERVICE == 1)
MmsObtainFileTask
MmsServer_getObtainFileTask(MmsServer self);
void
mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task);
#endif
ByteBuffer*
@ -222,7 +225,7 @@ MmsPdu_t*
mmsServer_createConfirmedResponse(uint32_t invokeId);
void
mmsServer_createServiceErrorPdu(uint32_t invokeId, ByteBuffer* response, MmsError errorType);
mmsMsg_createServiceErrorPdu(uint32_t invokeId, ByteBuffer* response, MmsError errorType);
void
mmsServer_createServiceErrorPduWithServiceSpecificInfo(uint32_t invokeId, ByteBuffer* response,
@ -363,7 +366,7 @@ mmsServer_createMmsWriteResponse(MmsServerConnection connection,
int invokeId, ByteBuffer* response, int numberOfItems, MmsDataAccessError* accessResults);
void
mmsServer_writeMmsRejectPdu(uint32_t* invokeId, int reason, ByteBuffer* response);
mmsMsg_createMmsRejectPdu(uint32_t* invokeId, int reason, ByteBuffer* response);
MmsError
mmsServer_callVariableListChangedHandler(bool create, MmsVariableListType listType, MmsDomain* domain,

@ -450,9 +450,33 @@ convertServiceErrorToMmsError(MmsServiceError serviceError)
case 11: /* class: file */
switch (serviceError.errorCode) {
case 1:
mmsError = MMS_ERROR_FILE_FILENAME_AMBIGUOUS;
break;
case 2:
mmsError = MMS_ERROR_FILE_FILE_BUSY;
break;
case 3:
mmsError = MMS_ERROR_FILE_FILENAME_SYNTAX_ERROR;
break;
case 4:
mmsError = MMS_ERROR_FILE_CONTENT_TYPE_INVALID;
break;
case 5:
mmsError = MMS_ERROR_FILE_POSITION_INVALID;
break;
case 6:
mmsError = MMS_ERROR_FILE_FILE_ACCESS_DENIED;
break;
case 7:
mmsError = MMS_ERROR_FILE_FILE_NON_EXISTENT;
break;
case 8:
mmsError = MMS_ERROR_FILE_DUPLICATE_FILENAME;
break;
case 9:
mmsError = MMS_ERROR_FILE_INSUFFICIENT_SPACE_IN_FILESTORE;
break;
default:
mmsError = MMS_ERROR_FILE_OTHER;
break;
@ -739,7 +763,6 @@ mmsIsoCallback(IsoIndication indication, void* parameter, ByteBuffer* payload)
if (DEBUG_MMS_CLIENT)
printf("MMS_CLIENT: received confirmed request PDU (size=%i)\n", payload->size);
// TODO handle confirmed request PDU only when obtainFile service is enabled
// TODO extract function
int bufPos = 1;
@ -750,20 +773,19 @@ mmsIsoCallback(IsoIndication indication, void* parameter, ByteBuffer* payload)
while (bufPos < payload->size) {
uint8_t tag = buf[bufPos++];
uint8_t nestedTag = buf[bufPos++];
bool extendedTag = false;
if ((tag & 0x1f) == 0x1f) {
if ((nestedTag & 0x1f) == 0x1f) {
extendedTag = true;
tag = buf[bufPos++];
nestedTag = buf[bufPos++];
}
bufPos = BerDecoder_decodeLength(buf, &length, bufPos, payload->size);
if (extendedTag) {
switch(tag) {
switch(nestedTag) {
#if (MMS_FILE_SERVICE == 1)
case 0x48: /* file-open-request */
@ -823,7 +845,7 @@ mmsIsoCallback(IsoIndication indication, void* parameter, ByteBuffer* payload)
}
}
else {
switch(tag) {
switch(nestedTag) {
case 0x02: /* invoke Id */
invokeId = BerDecoder_decodeUint32(buf, length, bufPos);
if (DEBUG_MMS_CLIENT)
@ -2089,7 +2111,7 @@ MmsConnection_obtainFile(MmsConnection self, MmsError* mmsError, const char* sou
mmsClient_createObtainFileRequest(invokeId, payload, sourceFile, destinationFile);
ByteBuffer* responseMessage = sendRequestAndWaitForResponse(self, invokeId, payload);
sendRequestAndWaitForResponse(self, invokeId, payload);
if (self->lastResponseError != MMS_ERROR_NONE)
*mmsError = self->lastResponseError;

@ -107,19 +107,19 @@ parseFileName(char* filename, uint8_t* buffer, int* bufPos, int maxBufPos , uint
int length;
if (tag != 0x19) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return false;
}
*bufPos = BerDecoder_decodeLength(buffer, &length, *bufPos, maxBufPos);
if (*bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return false;
}
if (length > 255) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return false;
}
@ -182,14 +182,14 @@ mmsClient_handleFileOpenRequest(
frsm->readPosition = filePosition;
frsm->frsmId = getNextFrsmId(connection);
mmsServer_createFileOpenResponse(invokeId, response, filename, frsm);
mmsMsg_createFileOpenResponse(invokeId, response, filename, frsm);
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_OTHER);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_OTHER);
}
else
goto exit_invalid_parameter;
@ -197,11 +197,11 @@ mmsClient_handleFileOpenRequest(
return;
exit_invalid_parameter:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
exit_reject_invalid_pdu:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
}
@ -222,7 +222,7 @@ mmsClient_handleFileReadRequest(
if (frsm != NULL)
mmsMsg_createFileReadResponse(connection->parameters.maxPduSize, invokeId, response, frsm);
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_OTHER);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_OTHER);
}
void

@ -46,6 +46,8 @@
#define MMS_SERVICE_DEFINE_NAMED_TYPE 0x02
#define MMS_SERVICE_GET_NAMED_TYPE_ATTRIBUTES 0x01
#define MMS_SERVICE_OBTAIN_FILE 0x02
#define MMS_SERVICE_READ_JOURNAL 0x40
#define MMS_SERVICE_FILE_OPEN 0x80
@ -84,7 +86,11 @@ static uint8_t servicesSupported[] =
0x00,
0x00,
0x00,
0x00,
0x00
#if (MMS_OBTAIN_FILE_SERVICE == 1)
| MMS_SERVICE_OBTAIN_FILE
#endif
,
0x00,
0x00,
0x00

@ -23,6 +23,7 @@
#include "libiec61850_platform_includes.h"
#include "mms_server_internal.h"
#include "mms_client_internal.h"
#if (MMS_FILE_SERVICE == 1)
@ -179,7 +180,7 @@ deleteFile(char* fileName) {
}
void
mmsServer_createFileOpenResponse(uint32_t invokeId, ByteBuffer* response, char* fullPath, MmsFileReadStateMachine* frsm)
mmsMsg_createFileOpenResponse(uint32_t invokeId, ByteBuffer* response, char* fullPath, MmsFileReadStateMachine* frsm)
{
uint64_t msTime;
@ -225,19 +226,19 @@ parseFileName(char* filename, uint8_t* buffer, int* bufPos, int maxBufPos , uint
int length;
if (tag != 0x19) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return false;
}
*bufPos = BerDecoder_decodeLength(buffer, &length, *bufPos, maxBufPos);
if (*bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return false;
}
if (length > 255) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return false;
}
@ -274,7 +275,7 @@ mmsServer_handleFileDeleteRequest(
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: mms_file_service.c: File (%s) not found\n", filename);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
return;
}
@ -282,7 +283,7 @@ mmsServer_handleFileDeleteRequest(
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: mms_file_service.c: Delete file (%s) failed\n", filename);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_ACCESS_DENIED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_ACCESS_DENIED);
return;
}
@ -290,7 +291,7 @@ mmsServer_handleFileDeleteRequest(
return;
exit_reject_invalid_pdu:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
}
void
@ -345,15 +346,15 @@ mmsServer_handleFileOpenRequest(
frsm->readPosition = filePosition;
frsm->frsmId = getNextFrsmId(connection);
mmsServer_createFileOpenResponse(invokeId, response, filename, frsm);
mmsMsg_createFileOpenResponse(invokeId, response, filename, frsm);
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_OTHER);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_OTHER);
}
else
goto exit_invalid_parameter;
@ -361,15 +362,29 @@ mmsServer_handleFileOpenRequest(
return;
exit_invalid_parameter:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
exit_reject_invalid_pdu:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
}
#if (MMS_OBTAIN_FILE_SERVICE == 1)
static void /* Confirmed service error (ServiceError) */
createServiceErrorObtainFileError(uint32_t invokeId, ByteBuffer* response,
MmsError errorType, uint32_t value)
{
uint8_t buffer[8];
int size = BerEncoder_encodeUInt32WithTL(0x80, value, buffer, 0);
mmsServer_createServiceErrorPduWithServiceSpecificInfo(invokeId, response, errorType,
buffer, size);
}
static void
createObtainFileResponse(uint32_t invokeId, ByteBuffer* response)
{
@ -379,6 +394,9 @@ createObtainFileResponse(uint32_t invokeId, ByteBuffer* response)
void
mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
{
//printf("mmsServer_fileUploadTask: state: %i\n", task->state);
switch (task->state) {
case MMS_FILE_UPLOAD_STATE_NOT_USED:
@ -468,21 +486,41 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
case MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE:
// TODO send ObtainFileError
{
/* send ObtainFileError */
printf("MMS_SERVER: ObtainFile service: failed to open file from client\n");
ByteBuffer* response = MmsServer_reserveTransmitBuffer(self);
task->state = MMS_FILE_UPLOAD_STATE_NOT_USED;
createServiceErrorObtainFileError(task->obtainFileRequestInvokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT, 0);
IsoConnection_sendMessage(task->connection->isoConnection, response, false);
MmsServer_releaseTransmitBuffer(self);
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: ObtainFile service: failed to open file from client\n");
task->state = MMS_FILE_UPLOAD_STATE_NOT_USED;
}
break;
case MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_DESTINATION:
{
/* send ObtainFileError */
//TODO send ObtainFileError
printf("MMS_SERVER: ObtainFile service: failed to create local file\n");
ByteBuffer* response = MmsServer_reserveTransmitBuffer(self);
createServiceErrorObtainFileError(task->obtainFileRequestInvokeId, response, MMS_ERROR_FILE_OTHER, 1);
task->state = MMS_FILE_UPLOAD_STATE_NOT_USED;
IsoConnection_sendMessage(task->connection->isoConnection, response, false);
MmsServer_releaseTransmitBuffer(self);
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: ObtainFile service: failed to create local file\n");
task->state = MMS_FILE_UPLOAD_STATE_NOT_USED;
}
break;
@ -559,7 +597,15 @@ mmsServer_handleObtainFileRequest(
if (connection->server->obtainFileHandler(connection->server->obtainFileHandlerParameter, connection, sourceFilename, destinationFilename) == false)
goto exit_access_denied;
//TODO check if destination file already exists. If exists return error message
/* check if destination file already exists. If exists return error message */
char extendedFileName[sizeof(CONFIG_VIRTUAL_FILESTORE_BASEPATH) + 256];
createExtendedFilename(extendedFileName, destinationFilename);
if (FileSystem_getFileInfo(extendedFileName, NULL, NULL)) {
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: obtainFile - file already exists on server\n");
goto exit_file_already_exists;
}
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: Start download file %s from client to local file %s...\n", sourceFilename, destinationFilename);
@ -604,19 +650,23 @@ mmsServer_handleObtainFileRequest(
return;
exit_invalid_parameter:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
exit_access_denied:
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_DENIED);
createServiceErrorObtainFileError(invokeId, response, MMS_ERROR_FILE_FILE_ACCESS_DENIED, 1);
return;
exit_file_already_exists:
createServiceErrorObtainFileError(invokeId, response, MMS_ERROR_FILE_DUPLICATE_FILENAME, 1);
return;
exit_unavailable:
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_TEMPORARILY_UNAVAILABLE);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_TEMPORARILY_UNAVAILABLE);
return;
exit_reject_invalid_pdu:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
}
#endif /* (MMS_OBTAIN_FILE_SERVICE == 1) */
@ -694,7 +744,7 @@ mmsServer_handleFileReadRequest(
if (frsm != NULL)
mmsMsg_createFileReadResponse(connection->maxPduSize, invokeId, response, frsm);
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_OTHER);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_OTHER);
}
void
@ -846,7 +896,7 @@ createFileDirectoryResponse(uint32_t invokeId, ByteBuffer* response, int maxPduS
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: Error opening directory!\n");
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
return;
}
@ -909,7 +959,7 @@ mmsServer_handleFileRenameRequest(
bufPos = BerDecoder_decodeLength(buffer, &length, bufPos, maxBufPos);
if (bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}
@ -950,11 +1000,11 @@ mmsServer_handleFileRenameRequest(
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: rename file failed!\n");
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_OTHER);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_OTHER);
}
}
else
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
}
@ -981,7 +1031,7 @@ mmsServer_handleFileDirectoryRequest(
bufPos = BerDecoder_decodeLength(buffer, &length, bufPos, maxBufPos);
if (bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}
@ -1007,7 +1057,7 @@ mmsServer_handleFileDirectoryRequest(
default: /* unrecognized parameter */
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: handleFileDirectoryRequest: unrecognized parameter\n");
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}

@ -348,7 +348,7 @@ createNameListResponse(
}
if (startElement == NULL) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
return;
}
}
@ -455,7 +455,7 @@ mmsServer_handleGetNameListRequest(
bufPos = BerDecoder_decodeLength(buffer, &length, bufPos, maxBufPos);
if (bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}
@ -485,7 +485,7 @@ mmsServer_handleGetNameListRequest(
objectScope = OBJECT_SCOPE_ASSOCIATION;
break;
default:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
return;
}
}
@ -529,7 +529,7 @@ mmsServer_handleGetNameListRequest(
LinkedList nameList = getNameListDomainSpecific(connection, domainSpecificName);
if (nameList == NULL)
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
else {
createNameListResponse(connection, invokeId, nameList, response, continueAfterId);
LinkedList_destroy(nameList);
@ -539,7 +539,7 @@ mmsServer_handleGetNameListRequest(
LinkedList nameList = getJournalListDomainSpecific(connection, domainSpecificName);
if (nameList == NULL)
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
else {
#if (CONFIG_MMS_SORT_NAME_LIST == 1)
StringUtils_sortList(nameList);
@ -554,7 +554,7 @@ mmsServer_handleGetNameListRequest(
LinkedList nameList = getNamedVariableListsDomainSpecific(connection, domainSpecificName);
if (nameList == NULL)
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
else {
#if (CONFIG_MMS_SORT_NAME_LIST == 1)
@ -570,7 +570,7 @@ mmsServer_handleGetNameListRequest(
else {
if (DEBUG_MMS_SERVER) printf("MMS_SERVER: getNameList domain specific objectClass %i not supported!\n", objectClass);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
}
}
@ -628,7 +628,7 @@ mmsServer_handleGetNameListRequest(
else {
if (DEBUG_MMS_SERVER) printf("MMS_SERVER: getNameList VMD specific objectClass %i not supported!\n", objectClass);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
}
}
@ -648,14 +648,14 @@ mmsServer_handleGetNameListRequest(
LinkedList_destroy(nameList);
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
}
#endif /* (MMS_DYNAMIC_DATA_SETS == 1) */
#endif /* (MMS_DATA_SET_SERVICE == 1) */
else {
if (DEBUG_MMS_SERVER) printf("MMS_SERVER: getNameList(%i) not supported!\n", objectScope);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
}
}

@ -221,7 +221,7 @@ createVariableAccessAttributesResponse(
if (domain == NULL) {
if (DEBUG_MMS_SERVER) printf("MMS_SERVER: domain %s not known\n", domainId);
mmsServer_createServiceErrorPdu(invokeId, response,
mmsMsg_createServiceErrorPdu(invokeId, response,
MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
goto exit_function;
}
@ -237,7 +237,7 @@ createVariableAccessAttributesResponse(
if (namedVariable == NULL) {
if (DEBUG_MMS_SERVER) printf("MMS_SERVER: named variable %s not known\n", nameId);
mmsServer_createServiceErrorPdu(invokeId, response,
mmsMsg_createServiceErrorPdu(invokeId, response,
MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
goto exit_function;
@ -266,7 +266,7 @@ createVariableAccessAttributesResponse(
if (DEBUG_MMS_SERVER)
printf("MMS getVariableAccessAttributes: message to large! send error PDU!\n");
mmsServer_createServiceErrorPdu(invokeId, response,
mmsMsg_createServiceErrorPdu(invokeId, response,
MMS_ERROR_SERVICE_OTHER);
goto exit_function;

@ -202,19 +202,19 @@ parseStringWithMaxLength(char* filename, int maxLength, uint8_t* buffer, int* bu
int length;
if (tag != 0x1a) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return false;
}
*bufPos = BerDecoder_decodeLength(buffer, &length, *bufPos, maxBufPos);
if (*bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return false;
}
if (length > maxLength) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return false;
}
@ -260,7 +260,7 @@ mmsServer_handleReadJournalRequest(
bufPos = BerDecoder_decodeLength(requestBuffer, &length, bufPos, maxBufPos);
if (bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}
@ -287,7 +287,7 @@ mmsServer_handleReadJournalRequest(
break;
default:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
return;
}
@ -301,7 +301,7 @@ mmsServer_handleReadJournalRequest(
bufPos = BerDecoder_decodeLength(requestBuffer, &length, bufPos, maxBufPos);
if (subTag != 0x80) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
return;
}
@ -316,7 +316,7 @@ mmsServer_handleReadJournalRequest(
hasRangeStartSpec = true;
}
else {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return; // forward request to implementation class
}
@ -331,7 +331,7 @@ mmsServer_handleReadJournalRequest(
bufPos = BerDecoder_decodeLength(requestBuffer, &length, bufPos, maxBufPos);
if (subTag != 0x80) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
return;
}
@ -344,7 +344,7 @@ mmsServer_handleReadJournalRequest(
hasRangeStopSpec = true;
}
else {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return; // forward request to implementation class
}
@ -373,7 +373,7 @@ mmsServer_handleReadJournalRequest(
hasTimeSpec = true;
}
else {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
}
@ -388,14 +388,14 @@ mmsServer_handleReadJournalRequest(
hasEntrySpec = true;
}
else {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
}
break;
default:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER, response);
return;
}
@ -406,7 +406,7 @@ mmsServer_handleReadJournalRequest(
break;
default:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}
}
@ -416,7 +416,7 @@ mmsServer_handleReadJournalRequest(
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: readJournal missing journal name\n");
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
}
@ -431,7 +431,7 @@ mmsServer_handleReadJournalRequest(
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: readJournal domain %s not found\n", domainId);
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
}
@ -441,7 +441,7 @@ mmsServer_handleReadJournalRequest(
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: readJournal journal %s not found\n", logName);
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
}
@ -471,7 +471,7 @@ mmsServer_handleReadJournalRequest(
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: readJournal missing valid argument combination\n");
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
}

@ -124,7 +124,7 @@ mmsServer_handleDeleteNamedVariableListRequest(MmsServerConnection connection,
asn_dec_rval_t rval = ber_decode(NULL, &asn_DEF_MmsPdu, (void**) &mmsPdu, buffer, maxBufPos);
if (rval.code != RC_OK) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
goto exit_function;
}
@ -230,7 +230,7 @@ mmsServer_handleDeleteNamedVariableListRequest(MmsServerConnection connection,
createServiceErrorDeleteVariableLists(invokeId, response, serviceError, numberDeleted);
}
else {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
}
asn_DEF_MmsPdu.free_struct(&asn_DEF_MmsPdu, mmsPdu, 0);
@ -419,7 +419,7 @@ mmsServer_handleDefineNamedVariableListRequest(
asn_dec_rval_t rval = ber_decode(NULL, &asn_DEF_MmsPdu, (void**) &mmsPdu, buffer, maxBufPos);
if (rval.code != RC_OK) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
goto exit_function;
}
@ -432,7 +432,7 @@ mmsServer_handleDefineNamedVariableListRequest(
char domainName[65];
if (request->variableListName.choice.domainspecific.domainId.size > 64) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
goto exit_free_struct;
}
@ -443,7 +443,7 @@ mmsServer_handleDefineNamedVariableListRequest(
MmsDomain* domain = MmsDevice_getDomain(device, domainName);
if (domain == NULL) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
goto exit_free_struct;
}
@ -451,7 +451,7 @@ mmsServer_handleDefineNamedVariableListRequest(
char variableListName[65];
if (request->variableListName.choice.domainspecific.itemId.size > 64) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
goto exit_free_struct;
}
@ -460,7 +460,7 @@ mmsServer_handleDefineNamedVariableListRequest(
request->variableListName.choice.domainspecific.itemId.size);
if (MmsDomain_getNamedVariableList(domain, variableListName) != NULL) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_OBJECT_EXISTS);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_OBJECT_EXISTS);
}
else {
MmsError mmsError;
@ -478,15 +478,15 @@ mmsServer_handleDefineNamedVariableListRequest(
}
else {
MmsNamedVariableList_destroy(namedVariableList);
mmsServer_createServiceErrorPdu(invokeId, response, mmsError);
mmsMsg_createServiceErrorPdu(invokeId, response, mmsError);
}
}
else
mmsServer_createServiceErrorPdu(invokeId, response, mmsError);
mmsMsg_createServiceErrorPdu(invokeId, response, mmsError);
}
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_CAPABILITY_UNAVAILABLE);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_CAPABILITY_UNAVAILABLE);
}
@ -498,7 +498,7 @@ mmsServer_handleDefineNamedVariableListRequest(
if (request->variableListName.choice.aaspecific.size > 64) {
//TODO send reject PDU instead?
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
goto exit_free_struct;
}
@ -507,7 +507,7 @@ mmsServer_handleDefineNamedVariableListRequest(
request->variableListName.choice.aaspecific.size);
if (MmsServerConnection_getNamedVariableList(connection, variableListName) != NULL) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_OBJECT_EXISTS);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_OBJECT_EXISTS);
}
else {
MmsError mmsError;
@ -523,16 +523,16 @@ mmsServer_handleDefineNamedVariableListRequest(
}
else {
MmsNamedVariableList_destroy(namedVariableList);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_DENIED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_DENIED);
}
}
else
mmsServer_createServiceErrorPdu(invokeId, response, mmsError);
mmsMsg_createServiceErrorPdu(invokeId, response, mmsError);
}
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_CAPABILITY_UNAVAILABLE);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_RESOURCE_CAPABILITY_UNAVAILABLE);
}
else if (request->variableListName.present == ObjectName_PR_vmdspecific) {
LinkedList vmdScopeNVLs = MmsDevice_getNamedVariableLists(connection->server->device);
@ -543,7 +543,7 @@ mmsServer_handleDefineNamedVariableListRequest(
if (request->variableListName.choice.vmdspecific.size > 64) {
//TODO send reject PDU instead?
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
goto exit_free_struct;
}
@ -552,7 +552,7 @@ mmsServer_handleDefineNamedVariableListRequest(
request->variableListName.choice.vmdspecific.size);
if (mmsServer_getNamedVariableListWithName(MmsDevice_getNamedVariableLists(connection->server->device), variableListName) != NULL) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_OBJECT_EXISTS);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_OBJECT_EXISTS);
}
else {
MmsError mmsError;
@ -569,7 +569,7 @@ mmsServer_handleDefineNamedVariableListRequest(
}
else {
MmsNamedVariableList_destroy(namedVariableList);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_DENIED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_DENIED);
}
}
@ -577,7 +577,7 @@ mmsServer_handleDefineNamedVariableListRequest(
}
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_TYPE_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_DEFINITION_TYPE_UNSUPPORTED);
exit_free_struct:
asn_DEF_MmsPdu.free_struct(&asn_DEF_MmsPdu, mmsPdu, 0);
@ -665,7 +665,7 @@ mmsServer_handleGetNamedVariableListAttributesRequest(
(void**) &request, buffer + bufPos, maxBufPos - bufPos);
if (rval.code != RC_OK) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}
@ -676,7 +676,7 @@ mmsServer_handleGetNamedVariableListAttributesRequest(
if ((request->choice.domainspecific.domainId.size > 64) ||
(request->choice.domainspecific.itemId.size > 64)) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OTHER);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OTHER);
goto exit_function;
}
@ -697,10 +697,10 @@ mmsServer_handleGetNamedVariableListAttributesRequest(
if (variableList != NULL)
createGetNamedVariableListAttributesResponse(invokeId, response, variableList);
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
}
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
}
#if (MMS_DYNAMIC_DATA_SETS == 1)
@ -709,7 +709,7 @@ mmsServer_handleGetNamedVariableListAttributesRequest(
char listName[65];
if (request->choice.aaspecific.size > 64) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OTHER);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OTHER);
goto exit_function;
}
@ -721,14 +721,14 @@ mmsServer_handleGetNamedVariableListAttributesRequest(
if (varList != NULL)
createGetNamedVariableListAttributesResponse(invokeId, response, varList);
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
}
#endif /* (MMS_DYNAMIC_DATA_SETS == 1) */
else if (request->present == ObjectName_PR_vmdspecific) {
char listName[65];
if (request->choice.vmdspecific.size > 64) {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OTHER);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OTHER);
goto exit_function;
}
@ -742,10 +742,10 @@ mmsServer_handleGetNamedVariableListAttributesRequest(
if (varList != NULL)
createGetNamedVariableListAttributesResponse(invokeId, response, varList);
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
}
else {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
}
exit_function:

@ -431,7 +431,7 @@ encodeReadResponse(MmsServerConnection connection,
if (DEBUG_MMS_SERVER)
printf("MMS read: message to large! send error PDU!\n");
mmsServer_createServiceErrorPdu(invokeId, response,
mmsMsg_createServiceErrorPdu(invokeId, response,
MMS_ERROR_SERVICE_OTHER);
goto exit_function;
@ -565,7 +565,7 @@ handleReadListOfVariablesRequest(
}
else {
if (DEBUG_MMS_SERVER) printf("MMS_SERVER: READ varspec type not supported!\n");
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
goto exit;
}
}
@ -647,7 +647,7 @@ handleReadNamedVariableListRequest(
if (domain == NULL) {
if (DEBUG_MMS_SERVER) printf("MMS read: domain %s not found!\n", domainIdStr);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
}
else {
MmsNamedVariableList namedList = MmsDomain_getNamedVariableList(domain, nameIdStr);
@ -658,7 +658,7 @@ handleReadNamedVariableListRequest(
}
else {
if (DEBUG_MMS_SERVER) printf("MMS read: named variable list %s not found!\n", nameIdStr);
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
}
}
}
@ -672,7 +672,7 @@ handleReadNamedVariableListRequest(
MmsNamedVariableList namedList = mmsServer_getNamedVariableListWithName(connection->server->device->namedVariableLists, listName);
if (namedList == NULL)
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
else {
VarAccessSpec accessSpec;
@ -697,7 +697,7 @@ handleReadNamedVariableListRequest(
MmsNamedVariableList namedList = MmsServerConnection_getNamedVariableList(connection, listName);
if (namedList == NULL)
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
else {
VarAccessSpec accessSpec;
@ -711,7 +711,7 @@ handleReadNamedVariableListRequest(
}
#endif /* (MMS_DYNAMIC_DATA_SETS == 1) */
else
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
}
#endif /* MMS_DATA_SET_SERVICE == 1 */
@ -730,7 +730,7 @@ mmsServer_handleReadRequest(
asn_dec_rval_t rval = ber_decode(NULL, &asn_DEF_MmsPdu, (void**) &mmsPdu, buffer, CONFIG_MMS_MAXIMUM_PDU_SIZE);
if (rval.code != RC_OK) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}
@ -745,7 +745,7 @@ mmsServer_handleReadRequest(
}
#endif
else {
mmsServer_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED);
}
asn_DEF_MmsPdu.free_struct(&asn_DEF_MmsPdu, mmsPdu, 0);

@ -104,6 +104,7 @@ MmsServer_releaseTransmitBuffer(MmsServer self)
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_post(self->transmitBufferMutex);
#endif
self->transmitBuffer->size = 0;
}
#if (MMS_OBTAIN_FILE_SERVICE == 1)
@ -168,6 +169,21 @@ MmsServer_setClientAuthenticator(MmsServer self, AcseAuthenticator authenticator
IsoServer_setAuthenticator(self->isoServer, authenticator, authenticatorParameter);
}
#if (MMS_OBTAIN_FILE_SERVICE == 1)
void
MmsServer_installObtainFileHandler(MmsServer self, MmsObtainFileHandler handler, void* parameter)
{
self->obtainFileHandler = handler;
self->obtainFileHandlerParameter = parameter;
}
void
MmsServer_installGetFileCompleteHandler(MmsServer self, MmsGetFileCompleteHandler handler, void* parameter)
{
self->getFileCompleteHandler = handler;
self->getFileCompleteHandlerParameter = parameter;
}
#endif /* (MMS_OBTAIN_FILE_SERVICE == 1) */
static void
closeConnection(void* con)

@ -100,11 +100,36 @@ mapErrorTypeToErrorClass(MmsError errorType, uint8_t* tag, uint8_t* value)
*value = 0;
break;
case MMS_ERROR_FILE_FILENAME_AMBIGUOUS:
*tag = 0x8b; /* file */
*value = 1;
break;
case MMS_ERROR_FILE_POSITION_INVALID:
*tag = 0x8b; /* file */
*value = 5;
break;
case MMS_ERROR_FILE_FILE_ACCESS_DENIED:
*tag = 0x8b; /* file */
*value = 6;
break;
case MMS_ERROR_FILE_FILE_NON_EXISTENT:
*tag = 0x8b; /* file */
*value = 7;
break;
case MMS_ERROR_FILE_DUPLICATE_FILENAME:
*tag = 0x8b; /* file */
*value = 8;
break;
case MMS_ERROR_FILE_INSUFFICIENT_SPACE_IN_FILESTORE:
*tag = 0x8b; /* file */
*value = 9;
break;
case MMS_ERROR_RESOURCE_OTHER:
*tag = 0x83; /* resource */
*value = 0;
@ -178,7 +203,7 @@ mmsServer_createServiceErrorPduWithServiceSpecificInfo(uint32_t invokeId, ByteBu
}
void /* Confirmed service error (ServiceError) */
mmsServer_createServiceErrorPdu(uint32_t invokeId, ByteBuffer* response, MmsError errorType)
mmsMsg_createServiceErrorPdu(uint32_t invokeId, ByteBuffer* response, MmsError errorType)
{
mmsServer_createServiceErrorPduWithServiceSpecificInfo(invokeId, response, errorType, NULL, 0);
}

@ -37,7 +37,8 @@
*********************************************************************************************/
void
mmsServer_writeMmsRejectPdu(uint32_t* invokeId, int reason, ByteBuffer* response) {
mmsMsg_createMmsRejectPdu(uint32_t* invokeId, int reason, ByteBuffer* response)
{
MmsPdu_t* mmsPdu = (MmsPdu_t*) GLOBAL_CALLOC(1, sizeof(MmsPdu_t));
mmsPdu->present = MmsPdu_PR_rejectPDU;
@ -104,7 +105,7 @@ handleConfirmedRequestPdu(
bufPos = BerDecoder_decodeLength(buffer, &length, bufPos, maxBufPos);
if (bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
return;
}
@ -150,7 +151,7 @@ handleConfirmedRequestPdu(
#endif /* MMS_FILE_SERVICE == 1 */
default:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
return;
break;
}
@ -230,7 +231,7 @@ handleConfirmedRequestPdu(
#endif /* (MMS_DYNAMIC_DATA_SETS == 1) */
default:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
return;
break;
}
@ -255,21 +256,27 @@ handleConfirmedErrorPdu(
if (mmsMsg_parseConfirmedErrorPDU(buffer, bufPos, maxBufPos, &invokeId, &serviceError)) {
printf("MMS_SERVER: Handle confirmed error PDU: invokeID: %i\n", invokeId);
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: Handle confirmed error PDU: invokeID: %i\n", invokeId);
/* check if message is related to an existing file upload task */
int i;
for (i = 0; i < CONFIG_MMS_SERVER_MAX_GET_FILE_TASKS; i++) {
if (self->server->fileUploadTasks[i].lastRequestInvokeId == invokeId) {
if (self->server->fileUploadTasks[i].state != MMS_FILE_UPLOAD_STATE_NOT_USED) {
if (self->server->fileUploadTasks[i].lastRequestInvokeId == invokeId) {
self->server->fileUploadTasks[i].state = MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE;
return;
}
self->server->fileUploadTasks[i].state = MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE;
return;
}
}
}
else {
printf("MMS_SERVER: error parsing confirmed error PDU\n");
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: error parsing confirmed error PDU\n");
}
}
@ -321,7 +328,7 @@ handleConfirmedResponsePdu(
bufPos = BerDecoder_decodeLength(buffer, &length, bufPos, maxBufPos);
if (bufPos < 0) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
return;
}
@ -420,7 +427,7 @@ handleConfirmedResponsePdu(
#endif /* MMS_FILE_SERVICE == 1 */
default:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
return;
break;
}
@ -435,7 +442,7 @@ handleConfirmedResponsePdu(
break;
default:
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
return;
break;
}
@ -499,7 +506,7 @@ MmsServerConnection_parseMessage(MmsServerConnection self, ByteBuffer* message,
retVal = MMS_OK;
break;
default:
mmsServer_writeMmsRejectPdu(NULL, MMS_ERROR_REJECT_UNKNOWN_PDU_TYPE, response);
mmsMsg_createMmsRejectPdu(NULL, MMS_ERROR_REJECT_UNKNOWN_PDU_TYPE, response);
retVal = MMS_ERROR;
break;
}

@ -103,7 +103,7 @@ mmsServer_handleWriteRequest(
rval = ber_decode(NULL, &asn_DEF_MmsPdu, (void**) &mmsPdu, buffer, CONFIG_MMS_MAXIMUM_PDU_SIZE);
if (rval.code != RC_OK) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_INVALID_PDU, response);
return;
}
@ -112,17 +112,17 @@ mmsServer_handleWriteRequest(
int numberOfWriteItems = writeRequest->variableAccessSpecification.choice.listOfVariable.list.count;
if (numberOfWriteItems < 1) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
}
if (numberOfWriteItems > CONFIG_MMS_WRITE_SERVICE_MAX_NUMBER_OF_WRITE_ITEMS) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_OTHER, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_OTHER, response);
return;
}
if (writeRequest->listOfData.list.count != numberOfWriteItems) {
mmsServer_writeMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT, response);
return;
}

@ -555,3 +555,5 @@ EXPORTS
MmsServer_installGetFileCompleteHandler
MmsServer_handleBackgroundTasks
FileSystem_writeFile
MmsConnection_obtainFile
IedConnection_setFile

@ -633,3 +633,5 @@ EXPORTS
MmsServer_installGetFileCompleteHandler
MmsServer_handleBackgroundTasks
FileSystem_writeFile
MmsConnection_obtainFile
IedConnection_setFile

Loading…
Cancel
Save