|
|
@ -411,8 +411,29 @@ createObtainFileResponse(uint32_t invokeId, ByteBuffer* response)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
|
|
|
|
mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task, int taskState)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
/* call locks in certain order (lock IsoConnection -> reserverTransmitBuffer, task->taskLock) to prevent potential deadlock */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByteBuffer* message = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (taskState == MMS_FILE_UPLOAD_STATE_SEND_FILE_READ ||
|
|
|
|
|
|
|
|
taskState == MMS_FILE_UPLOAD_STATE_SEND_FILE_CLOSE ||
|
|
|
|
|
|
|
|
taskState == MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE ||
|
|
|
|
|
|
|
|
taskState == MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_DESTINATION ||
|
|
|
|
|
|
|
|
taskState == MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_RESPONSE)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
IsoConnection_lock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
message = MmsServer_reserveTransmitBuffer(self);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
|
|
|
|
Semaphore_wait(task->taskLock);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (task->state == taskState) {
|
|
|
|
|
|
|
|
|
|
|
|
switch (task->state) {
|
|
|
|
switch (task->state) {
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_FILE_UPLOAD_STATE_NOT_USED:
|
|
|
|
case MMS_FILE_UPLOAD_STATE_NOT_USED:
|
|
|
@ -438,20 +459,12 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_FILE_UPLOAD_STATE_SEND_FILE_READ:
|
|
|
|
case MMS_FILE_UPLOAD_STATE_SEND_FILE_READ:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
IsoConnection_lock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByteBuffer* request = MmsServer_reserveTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
task->lastRequestInvokeId = MmsServerConnection_getNextRequestInvokeId(task->connection);
|
|
|
|
task->lastRequestInvokeId = MmsServerConnection_getNextRequestInvokeId(task->connection);
|
|
|
|
|
|
|
|
|
|
|
|
mmsClient_createFileReadRequest(task->lastRequestInvokeId, request, task->frmsId);
|
|
|
|
mmsClient_createFileReadRequest(task->lastRequestInvokeId, message, task->frmsId);
|
|
|
|
|
|
|
|
|
|
|
|
task->state = MMS_FILE_UPLOAD_STATE_FILE_READ_SENT;
|
|
|
|
task->state = MMS_FILE_UPLOAD_STATE_FILE_READ_SENT;
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, request);
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, message);
|
|
|
|
|
|
|
|
|
|
|
|
MmsServer_releaseTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_unlock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
task->nextTimeout = Hal_getTimeInMs() + 2000; /* timeout 2000 ms */
|
|
|
|
task->nextTimeout = Hal_getTimeInMs() + 2000; /* timeout 2000 ms */
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -478,21 +491,13 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_FILE_UPLOAD_STATE_SEND_FILE_CLOSE:
|
|
|
|
case MMS_FILE_UPLOAD_STATE_SEND_FILE_CLOSE:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
IsoConnection_lock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ByteBuffer* request = MmsServer_reserveTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
task->lastRequestInvokeId = MmsServerConnection_getNextRequestInvokeId(task->connection);
|
|
|
|
task->lastRequestInvokeId = MmsServerConnection_getNextRequestInvokeId(task->connection);
|
|
|
|
|
|
|
|
|
|
|
|
mmsClient_createFileCloseRequest(task->lastRequestInvokeId, request, task->frmsId);
|
|
|
|
mmsClient_createFileCloseRequest(task->lastRequestInvokeId, message, task->frmsId);
|
|
|
|
|
|
|
|
|
|
|
|
task->state = MMS_FILE_UPLOAD_STATE_FILE_CLOSE_SENT;
|
|
|
|
task->state = MMS_FILE_UPLOAD_STATE_FILE_CLOSE_SENT;
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, request);
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, message);
|
|
|
|
|
|
|
|
|
|
|
|
MmsServer_releaseTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_unlock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
task->nextTimeout = Hal_getTimeInMs() + 2000; /* timeout 2000 ms */
|
|
|
|
task->nextTimeout = Hal_getTimeInMs() + 2000; /* timeout 2000 ms */
|
|
|
|
|
|
|
|
|
|
|
@ -519,17 +524,9 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
/* send ObtainFileError */
|
|
|
|
/* send ObtainFileError */
|
|
|
|
IsoConnection_lock(task->connection->isoConnection);
|
|
|
|
createServiceErrorObtainFileError(task->obtainFileRequestInvokeId, message, MMS_ERROR_FILE_FILE_NON_EXISTENT, 0);
|
|
|
|
|
|
|
|
|
|
|
|
ByteBuffer* response = MmsServer_reserveTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
createServiceErrorObtainFileError(task->obtainFileRequestInvokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT, 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, response);
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, message);
|
|
|
|
|
|
|
|
|
|
|
|
MmsServer_releaseTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_unlock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(task->fileHandle){
|
|
|
|
if(task->fileHandle){
|
|
|
|
FileSystem_closeFile(task->fileHandle);
|
|
|
|
FileSystem_closeFile(task->fileHandle);
|
|
|
@ -548,17 +545,9 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
|
|
|
|
case MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_DESTINATION:
|
|
|
|
case MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_DESTINATION:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
/* send ObtainFileError */
|
|
|
|
/* send ObtainFileError */
|
|
|
|
IsoConnection_lock(task->connection->isoConnection);
|
|
|
|
createServiceErrorObtainFileError(task->obtainFileRequestInvokeId, message, MMS_ERROR_FILE_OTHER, 1);
|
|
|
|
|
|
|
|
|
|
|
|
ByteBuffer* response = MmsServer_reserveTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
createServiceErrorObtainFileError(task->obtainFileRequestInvokeId, response, MMS_ERROR_FILE_OTHER, 1);
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, message);
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, response);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MmsServer_releaseTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_unlock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (task->fileHandle) {
|
|
|
|
if (task->fileHandle) {
|
|
|
|
FileSystem_closeFile(task->fileHandle);
|
|
|
|
FileSystem_closeFile(task->fileHandle);
|
|
|
@ -578,24 +567,17 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_RESPONSE:
|
|
|
|
case MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_RESPONSE:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
IsoConnection_lock(task->connection->isoConnection);
|
|
|
|
createObtainFileResponse(task->obtainFileRequestInvokeId, message);
|
|
|
|
|
|
|
|
|
|
|
|
ByteBuffer* response = MmsServer_reserveTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
createObtainFileResponse(task->obtainFileRequestInvokeId, response);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
task->state = MMS_FILE_UPLOAD_STATE_NOT_USED;
|
|
|
|
task->state = MMS_FILE_UPLOAD_STATE_NOT_USED;
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, response);
|
|
|
|
IsoConnection_sendMessage(task->connection->isoConnection, message);
|
|
|
|
|
|
|
|
|
|
|
|
MmsServer_releaseTransmitBuffer(self);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IsoConnection_unlock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (self->getFileCompleteHandler)
|
|
|
|
if (self->getFileCompleteHandler)
|
|
|
|
self->getFileCompleteHandler(self->getFileCompleteHandlerParameter, task->connection, task->destinationFilename);
|
|
|
|
self->getFileCompleteHandler(self->getFileCompleteHandlerParameter, task->connection, task->destinationFilename);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_FILE_UPLOAD_STATE_INTERRUPTED:
|
|
|
|
case MMS_FILE_UPLOAD_STATE_INTERRUPTED:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (DEBUG_MMS_SERVER)
|
|
|
|
if (DEBUG_MMS_SERVER)
|
|
|
@ -614,6 +596,16 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
|
|
|
|
Semaphore_post(task->taskLock);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (message) {
|
|
|
|
|
|
|
|
MmsServer_releaseTransmitBuffer(self);
|
|
|
|
|
|
|
|
IsoConnection_unlock(task->connection->isoConnection);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if (MMS_OBTAIN_FILE_SERVICE == 1)
|
|
|
|
#if (MMS_OBTAIN_FILE_SERVICE == 1)
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
@ -770,6 +762,10 @@ mmsServer_handleObtainFileRequest(
|
|
|
|
|
|
|
|
|
|
|
|
task->state = MMS_FILE_UPLOAD_STATE_FILE_OPEN_SENT;
|
|
|
|
task->state = MMS_FILE_UPLOAD_STATE_FILE_OPEN_SENT;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if (CONFIG_MMS_THREADLESS_STACK != 1)
|
|
|
|
|
|
|
|
Semaphore_post(task->taskLock);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
goto exit_unavailable;
|
|
|
|
goto exit_unavailable;
|
|
|
|