Merge branch 'fix-#242'

pull/3/head
Christian Beier 6 years ago
commit 162d716b4c
No known key found for this signature in database
GPG Key ID: 421BB3B45C6067F8

@ -672,7 +672,7 @@ ChkFileUploadWriteErr(rfbClientPtr cl, rfbTightClientPtr rtcp, char* pBuf)
char reason[] = "Error writing file data"; char reason[] = "Error writing file data";
int reasonLen = strlen(reason); int reasonLen = strlen(reason);
ftm = CreateFileUploadErrMsg(reason, reasonLen); ftm = CreateFileUploadErrMsg(reason, reasonLen);
CloseUndoneFileTransfer(cl, rtcp); CloseUndoneFileUpload(cl, rtcp);
} }
return ftm; return ftm;
} }
@ -735,7 +735,7 @@ CreateFileUploadErrMsg(char* reason, unsigned int reasonLen)
******************************************************************************/ ******************************************************************************/
void void
CloseUndoneFileTransfer(rfbClientPtr cl, rfbTightClientPtr rtcp) CloseUndoneFileUpload(rfbClientPtr cl, rfbTightClientPtr rtcp)
{ {
/* TODO :: File Upload case is not handled currently */ /* TODO :: File Upload case is not handled currently */
/* TODO :: In case of concurrency we need to use Critical Section */ /* TODO :: In case of concurrency we need to use Critical Section */
@ -759,9 +759,19 @@ CloseUndoneFileTransfer(rfbClientPtr cl, rfbTightClientPtr rtcp)
memset(rtcp->rcft.rcfu.fName, 0 , PATH_MAX); memset(rtcp->rcft.rcfu.fName, 0 , PATH_MAX);
} }
}
void
CloseUndoneFileDownload(rfbClientPtr cl, rfbTightClientPtr rtcp)
{
if(cl == NULL)
return;
if(rtcp->rcft.rcfd.downloadInProgress == TRUE) { if(rtcp->rcft.rcfd.downloadInProgress == TRUE) {
rtcp->rcft.rcfd.downloadInProgress = FALSE; rtcp->rcft.rcfd.downloadInProgress = FALSE;
/* the thread will return if downloadInProgress is FALSE */
pthread_join(rtcp->rcft.rcfd.downloadThread, NULL);
if(rtcp->rcft.rcfd.downloadFD != -1) { if(rtcp->rcft.rcfd.downloadFD != -1) {
close(rtcp->rcft.rcfd.downloadFD); close(rtcp->rcft.rcfd.downloadFD);

@ -51,7 +51,8 @@ FileTransferMsg ChkFileUploadWriteErr(rfbClientPtr cl, rfbTightClientPtr data, c
void CreateDirectory(char* dirName); void CreateDirectory(char* dirName);
void FileUpdateComplete(rfbClientPtr cl, rfbTightClientPtr data); void FileUpdateComplete(rfbClientPtr cl, rfbTightClientPtr data);
void CloseUndoneFileTransfer(rfbClientPtr cl, rfbTightClientPtr data); void CloseUndoneFileUpload(rfbClientPtr cl, rfbTightClientPtr data);
void CloseUndoneFileDownload(rfbClientPtr cl, rfbTightClientPtr data);
void FreeFileTransferMsg(FileTransferMsg ftm); void FreeFileTransferMsg(FileTransferMsg ftm);

@ -489,12 +489,6 @@ RunFileDownloadThread(void* client)
if(rfbWriteExact(cl, fileDownloadMsg.data, fileDownloadMsg.length) < 0) { if(rfbWriteExact(cl, fileDownloadMsg.data, fileDownloadMsg.length) < 0) {
rfbLog("File [%s]: Method [%s]: Error while writing to socket \n" rfbLog("File [%s]: Method [%s]: Error while writing to socket \n"
, __FILE__, __FUNCTION__); , __FILE__, __FUNCTION__);
if(cl != NULL) {
rfbCloseClient(cl);
CloseUndoneFileTransfer(cl, rtcp);
}
FreeFileTransferMsg(fileDownloadMsg); FreeFileTransferMsg(fileDownloadMsg);
return NULL; return NULL;
} }
@ -508,7 +502,6 @@ RunFileDownloadThread(void* client)
void void
HandleFileDownload(rfbClientPtr cl, rfbTightClientPtr rtcp) HandleFileDownload(rfbClientPtr cl, rfbTightClientPtr rtcp)
{ {
pthread_t fileDownloadThread;
FileTransferMsg fileDownloadMsg; FileTransferMsg fileDownloadMsg;
memset(&fileDownloadMsg, 0, sizeof(FileTransferMsg)); memset(&fileDownloadMsg, 0, sizeof(FileTransferMsg));
@ -518,10 +511,9 @@ HandleFileDownload(rfbClientPtr cl, rfbTightClientPtr rtcp)
FreeFileTransferMsg(fileDownloadMsg); FreeFileTransferMsg(fileDownloadMsg);
return; return;
} }
rtcp->rcft.rcfd.downloadInProgress = FALSE; CloseUndoneFileDownload(cl, rtcp);
rtcp->rcft.rcfd.downloadFD = -1;
if(pthread_create(&fileDownloadThread, NULL, RunFileDownloadThread, (void*) if(pthread_create(&rtcp->rcft.rcfd.downloadThread, NULL, RunFileDownloadThread, (void*)
cl) != 0) { cl) != 0) {
FileTransferMsg ftm = GetFileDownLoadErrMsg(); FileTransferMsg ftm = GetFileDownLoadErrMsg();
@ -593,7 +585,7 @@ HandleFileDownloadCancelRequest(rfbClientPtr cl, rfbTightClientPtr rtcp)
" reason <%s>\n", __FILE__, __FUNCTION__, reason); " reason <%s>\n", __FILE__, __FUNCTION__, reason);
pthread_mutex_lock(&fileDownloadMutex); pthread_mutex_lock(&fileDownloadMutex);
CloseUndoneFileTransfer(cl, rtcp); CloseUndoneFileDownload(cl, rtcp);
pthread_mutex_unlock(&fileDownloadMutex); pthread_mutex_unlock(&fileDownloadMutex);
if(reason != NULL) { if(reason != NULL) {
@ -836,7 +828,7 @@ HandleFileUploadDataRequest(rfbClientPtr cl, rfbTightClientPtr rtcp)
FreeFileTransferMsg(ftm); FreeFileTransferMsg(ftm);
} }
CloseUndoneFileTransfer(cl, rtcp); CloseUndoneFileUpload(cl, rtcp);
if(pBuf != NULL) { if(pBuf != NULL) {
free(pBuf); free(pBuf);
@ -936,7 +928,7 @@ HandleFileUploadFailedRequest(rfbClientPtr cl, rfbTightClientPtr rtcp)
rfbLog("File [%s]: Method [%s]: File Upload Failed Request received:" rfbLog("File [%s]: Method [%s]: File Upload Failed Request received:"
" reason <%s>\n", __FILE__, __FUNCTION__, reason); " reason <%s>\n", __FILE__, __FUNCTION__, reason);
CloseUndoneFileTransfer(cl, rtcp); CloseUndoneFileUpload(cl, rtcp);
if(reason != NULL) { if(reason != NULL) {
free(reason); free(reason);

@ -148,6 +148,7 @@ typedef struct _rfbClientFileDownload {
int downloadInProgress; int downloadInProgress;
unsigned long mTime; unsigned long mTime;
int downloadFD; int downloadFD;
pthread_t downloadThread;
} rfbClientFileDownload ; } rfbClientFileDownload ;
typedef struct _rfbClientFileUpload { typedef struct _rfbClientFileUpload {

@ -26,6 +26,7 @@
#include <rfb/rfb.h> #include <rfb/rfb.h>
#include "rfbtightproto.h" #include "rfbtightproto.h"
#include "handlefiletransferrequest.h" #include "handlefiletransferrequest.h"
#include "filetransfermsg.h"
/* /*
* Get my data! * Get my data!
@ -448,9 +449,11 @@ rfbTightExtensionMsgHandler(struct _rfbClientRec* cl, void* data,
void void
rfbTightExtensionClientClose(rfbClientPtr cl, void* data) { rfbTightExtensionClientClose(rfbClientPtr cl, void* data) {
if(data != NULL) if(data != NULL) {
CloseUndoneFileUpload(cl, data);
CloseUndoneFileDownload(cl, data);
free(data); free(data);
}
} }
void void

Loading…
Cancel
Save