- MMS client: changed signature of MmsConnection_FileReadHandler

pull/179/head
Michael Zillgith 7 years ago
parent 8ffbd9f265
commit 0cddcb7d12

@ -1937,7 +1937,7 @@ mmsConnectionFileCloseHandler (uint32_t invokeId, void* parameter, MmsError mmsE
} }
static void static void
mmsConnectionFileReadHandler (uint32_t invokeId, void* parameter, MmsError mmsError, uint8_t* buffer, uint32_t byteReceived, mmsConnectionFileReadHandler (uint32_t invokeId, void* parameter, MmsError mmsError, int32_t frsmId, uint8_t* buffer, uint32_t byteReceived,
bool moreFollows) bool moreFollows)
{ {
IedConnection self = (IedConnection) parameter; IedConnection self = (IedConnection) parameter;
@ -1954,7 +1954,7 @@ mmsConnectionFileReadHandler (uint32_t invokeId, void* parameter, MmsError mmsEr
handler(call->specificParameter2.getFileInfo.originalInvokeId, call->callbackParameter, err, invokeId, NULL, 0, false); handler(call->specificParameter2.getFileInfo.originalInvokeId, call->callbackParameter, err, invokeId, NULL, 0, false);
/* close file */ /* close file */
MmsConnection_fileCloseAsync(self->connection, &mmsError, call->specificParameter2.getFileInfo.frsmId, mmsConnectionFileCloseHandler, self); MmsConnection_fileCloseAsync(self->connection, &mmsError, frsmId, mmsConnectionFileCloseHandler, self);
if (mmsError != MMS_ERROR_NONE) if (mmsError != MMS_ERROR_NONE)
iedConnection_releaseOutstandingCall(self, call); iedConnection_releaseOutstandingCall(self, call);
@ -1964,7 +1964,7 @@ mmsConnectionFileReadHandler (uint32_t invokeId, void* parameter, MmsError mmsEr
if ((moreFollows == false) || (cont == false)) { if ((moreFollows == false) || (cont == false)) {
/* close file */ /* close file */
MmsConnection_fileCloseAsync(self->connection, &mmsError, call->specificParameter2.getFileInfo.frsmId, mmsConnectionFileCloseHandler, self); MmsConnection_fileCloseAsync(self->connection, &mmsError, frsmId, mmsConnectionFileCloseHandler, self);
if (mmsError != MMS_ERROR_NONE) if (mmsError != MMS_ERROR_NONE)
iedConnection_releaseOutstandingCall(self, call); iedConnection_releaseOutstandingCall(self, call);
@ -1972,7 +1972,7 @@ mmsConnectionFileReadHandler (uint32_t invokeId, void* parameter, MmsError mmsEr
else { else {
/* send next read request */ /* send next read request */
call->invokeId = MmsConnection_fileReadAsync(self->connection, &mmsError, call->specificParameter2.getFileInfo.frsmId, call->invokeId = MmsConnection_fileReadAsync(self->connection, &mmsError, frsmId,
mmsConnectionFileReadHandler, self); mmsConnectionFileReadHandler, self);
if (mmsError != MMS_ERROR_NONE) { if (mmsError != MMS_ERROR_NONE) {
@ -1981,7 +1981,7 @@ mmsConnectionFileReadHandler (uint32_t invokeId, void* parameter, MmsError mmsEr
handler(invokeId, call->callbackParameter, err, invokeId, NULL, 0, false); handler(invokeId, call->callbackParameter, err, invokeId, NULL, 0, false);
/* close file */ /* close file */
MmsConnection_fileCloseAsync(self->connection, &mmsError, call->specificParameter2.getFileInfo.frsmId, mmsConnectionFileCloseHandler, self); MmsConnection_fileCloseAsync(self->connection, &mmsError, frsmId, mmsConnectionFileCloseHandler, self);
if (mmsError != MMS_ERROR_NONE) { if (mmsError != MMS_ERROR_NONE) {
iedConnection_releaseOutstandingCall(self, call); iedConnection_releaseOutstandingCall(self, call);
@ -2019,8 +2019,6 @@ mmsConnectionFileOpenHandler (uint32_t invokeId, void* parameter, MmsError mmsEr
iedConnection_releaseOutstandingCall(self, call); iedConnection_releaseOutstandingCall(self, call);
} }
else { else {
call->specificParameter2.getFileInfo.frsmId = frsmId;
call->specificParameter2.getFileInfo.originalInvokeId = invokeId; call->specificParameter2.getFileInfo.originalInvokeId = invokeId;
call->invokeId = MmsConnection_fileReadAsync(self->connection, &mmsError, frsmId, mmsConnectionFileReadHandler, self); call->invokeId = MmsConnection_fileReadAsync(self->connection, &mmsError, frsmId, mmsConnectionFileReadHandler, self);

@ -42,7 +42,6 @@ struct sIedConnectionOutstandingCall {
union { union {
void* pointer; void* pointer;
struct { struct {
int32_t frsmId;
uint32_t originalInvokeId; uint32_t originalInvokeId;
} getFileInfo; } getFileInfo;
struct { struct {

@ -1074,8 +1074,21 @@ typedef void
typedef void typedef void
(*MmsFileReadHandler) (void* parameter, int32_t frsmId, uint8_t* buffer, uint32_t bytesReceived); (*MmsFileReadHandler) (void* parameter, int32_t frsmId, uint8_t* buffer, uint32_t bytesReceived);
/**
* \brief Callback handler for the file read service
*
* Will be called for every received part of the file and when there is an error during reading the file.
*
* \param invokeId invokeID of the response
* \param parameter user provided context parameter
* \param mmsError error code
* \param frsmId ID of the file
* \param buffer buffer where the received bytes are stored
* \param bytesReceived number of bytes received with this response
* \param moreFollows more messages with parts of the file are following
*/
typedef void typedef void
(*MmsConnection_FileReadHandler) (uint32_t invokeId, void* parameter, MmsError mmsError, uint8_t* buffer, uint32_t byteReceived, (*MmsConnection_FileReadHandler) (uint32_t invokeId, void* parameter, MmsError mmsError, int32_t frsmId, uint8_t* buffer, uint32_t byteReceived,
bool moreFollows); bool moreFollows);

@ -894,18 +894,18 @@ handleAsyncResponse(MmsConnection self, ByteBuffer* response, uint32_t bufPos, M
MmsConnection_FileReadHandler handler = MmsConnection_FileReadHandler handler =
(MmsConnection_FileReadHandler) outstandingCall->userCallback; (MmsConnection_FileReadHandler) outstandingCall->userCallback;
int32_t frsmId = outstandingCall->internalParameter.i32;
if (err != MMS_ERROR_NONE) { if (err != MMS_ERROR_NONE) {
handler(outstandingCall->invokeId, outstandingCall->userParameter, err, NULL, 0, false); handler(outstandingCall->invokeId, outstandingCall->userParameter, err, frsmId, NULL, 0, false);
} }
else { else {
bool moreFollows; bool moreFollows;
int32_t frsmId = outstandingCall->internalParameter.i32;
if (mmsMsg_parseFileReadResponse(ByteBuffer_getBuffer(response), bufPos, ByteBuffer_getSize(response), outstandingCall->invokeId, frsmId, &moreFollows, if (mmsMsg_parseFileReadResponse(ByteBuffer_getBuffer(response), bufPos, ByteBuffer_getSize(response), outstandingCall->invokeId, frsmId, &moreFollows,
handler, outstandingCall->userParameter) == false) handler, outstandingCall->userParameter) == false)
{ {
handler(outstandingCall->invokeId, outstandingCall->userParameter, MMS_ERROR_PARSING_RESPONSE, NULL, 0, false); handler(outstandingCall->invokeId, outstandingCall->userParameter, MMS_ERROR_PARSING_RESPONSE, frsmId, NULL, 0, false);
} }
} }
} }
@ -3671,14 +3671,13 @@ struct fileReadParameters
{ {
Semaphore waitForResponse; Semaphore waitForResponse;
MmsError err; MmsError err;
int32_t frsmId;
MmsFileReadHandler handler; MmsFileReadHandler handler;
void* handlerParameter; void* handlerParameter;
bool moreFollows; bool moreFollows;
}; };
static void static void
fileReadHandler(uint32_t invokeId, void* parameter, MmsError mmsError, uint8_t* buffer, uint32_t byteReceived, fileReadHandler(uint32_t invokeId, void* parameter, MmsError mmsError, int frsmId, uint8_t* buffer, uint32_t byteReceived,
bool moreFollows) bool moreFollows)
{ {
struct fileReadParameters* parameters = (struct fileReadParameters*) parameter; struct fileReadParameters* parameters = (struct fileReadParameters*) parameter;
@ -3686,7 +3685,7 @@ fileReadHandler(uint32_t invokeId, void* parameter, MmsError mmsError, uint8_t*
parameters->err = mmsError; parameters->err = mmsError;
if (mmsError == MMS_ERROR_NONE) if (mmsError == MMS_ERROR_NONE)
parameters->handler(parameters->handlerParameter, parameters->frsmId, buffer, byteReceived); parameters->handler(parameters->handlerParameter, frsmId, buffer, byteReceived);
parameters->moreFollows = moreFollows; parameters->moreFollows = moreFollows;
@ -3706,7 +3705,6 @@ MmsConnection_fileRead(MmsConnection self, MmsError* mmsError, int32_t frsmId, M
parameter.waitForResponse = Semaphore_create(1); parameter.waitForResponse = Semaphore_create(1);
parameter.err = MMS_ERROR_NONE; parameter.err = MMS_ERROR_NONE;
parameter.frsmId = frsmId;
parameter.handler = handler; parameter.handler = handler;
parameter.handlerParameter = handlerParameter; parameter.handlerParameter = handlerParameter;
parameter.moreFollows = false; parameter.moreFollows = false;

@ -755,7 +755,7 @@ mmsMsg_parseFileReadResponse(uint8_t* buffer, int bufPos, int maxBufPos, uint32_
} }
} }
handler(invokeId, handlerParameter, frsmId, data, dataLen, *moreFollows); handler(invokeId, handlerParameter, MMS_ERROR_NONE, frsmId, data, dataLen, *moreFollows);
return true; return true;
} }

@ -453,14 +453,20 @@ getUploadTaskByInvokeId(MmsServer mmsServer, uint32_t invokeId)
} }
static void static void
mmsFileReadHandler(uint32_t invokeId, void* parameter, MmsError mmsError, uint8_t* buffer, uint32_t bytesReceived, bool moreFollows) mmsFileReadHandler(uint32_t invokeId, void* parameter, MmsError mmsError, int32_t frsmId, uint8_t* buffer, uint32_t bytesReceived, bool moreFollows)
{ {
MmsObtainFileTask task = (MmsObtainFileTask) parameter; MmsObtainFileTask task = (MmsObtainFileTask) parameter;
if (DEBUG_MMS_SERVER) if (mmsError == MMS_ERROR_NONE) {
printf("MMS_SERVER: file %i received %i bytes\n", task->frmsId, bytesReceived); if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: file %i received %i bytes\n", task->frmsId, bytesReceived);
FileSystem_writeFile(task->fileHandle, buffer, bytesReceived); FileSystem_writeFile(task->fileHandle, buffer, bytesReceived);
}
else {
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: problem reading file %i (error code: %i)\n", task->frmsId, mmsError);
}
} }
static void static void

Loading…
Cancel
Save