ThingWorx C SDK
twFileManager.h
Go to the documentation of this file.
1 /*************************************
2  * Copyright 2017, PTC, Inc.
3  *************************************/
4 
14 #ifndef FILEMANAGER_H /* Prevent multiple inclusions. */
15 #define FILEMANAGER_H
16 
17 /* #defines for the fake thingnames and tid's used for file transfer idle timeout checks */
18 #define TW_FAKE_TID "XXXXXX"
19 #define TW_FAKE_TID_LEN 6
20 #define TW_FAKE_THINGNAME "XXXXX"
21 #define TW_FAKE_THINGNAME_LEN 5
22 
23 #include "twOSPort.h"
24 #include "twDefinitions.h"
25 #include "twDefaultSettings.h"
26 #include "twList.h"
27 #include "twInfoTable.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
36 typedef struct twFileManager {
37  TW_MUTEX mtx;
38  twList * virtualDirs;
39  twList * openFiles;
40  twList * callbacks;
41  TW_MUTEX fileTransferMtx;
43 
44 
48 typedef struct twFileTransferInfo {
50  char * sourcePath;
51  char * sourceFile;
52  char * sourceChecksum;
54  char * targetPath;
55  char * targetFile;
56  char * targetChecksum;
57  DATETIME startTime;
58  DATETIME endTime;
59  int32_t duration;
60  char * state;
61  char isComplete;
62  double size;
63  char * transferId;
64  char * user;
65  char * message;
67 
82 
92 void twFileTransferInfo_Delete(void * transferInfo);
93 
107 typedef void (*file_cb) (char fileRcvd, twFileTransferInfo * info, void * userdata);
108 
109 
110 /********************************/
111 /* twFile Functions */
112 /********************************/
113 
117 typedef struct twFile {
118  char * name;
119  char * realPath;
120  char * virtualPath;
121  char * repository;
122  DATETIME lastModified;
123  char readOnly;
124  uint64_t size;
125  TW_FILE_HANDLE handle;
126  char isDir;
128  char * tid;
129  char openForRead;
130  char isInUse;
132 } twFile;
133 
144 
153 
160 
177 int twFileManager_AddVirtualDir(const char * thingName, char * dirName, char * path);
178 
190 int twFileManager_RemoveVirtualDir(const char * thingName, char * dirName);
191 
206 twList * twFileManager_ListVirtualDirs(const char * entityName);
207 
229 twFile * twFileManager_OpenFile(const char * thingName, const char * path, const char * filename, char * mode);
230 
239 void twFileManager_CloseFile(void * file);
240 
241 
253 enum msgCodeEnum twFileManager_GetFileChecksum(const char * entityName, twInfoTable ** content, const char * realPath, const char * adjustedPath);
254 
272 twFile * twFileManager_GetOpenFile(const char * thingName, const char * path, const char * filename, const char * tid, char * isTimedOut);
273 
288 char * twFileManager_GetRealPath(const char * thingName, const char * path, const char * filename);
289 
301 
317 int twFileManager_RegisterFileCallback(file_cb cb, char * filter, char onceOnly, void * userdata);
318 
332 int twFileManager_UnregisterFileCallback(file_cb cb, char * filter, void * userdata);
333 
334 
367 int twFileManager_SendFile(const char * sourceRepo, const char * sourcePath, const char * sourceFile,
368  const char * targetRepo, const char * targetPath, const char * targetFile,
369  uint32_t timeout, char asynch, char ** tid);
370 
401 int twFileManager_GetFile(const char * sourceRepo, const char * sourcePath, const char * sourceFile,
402  const char * targetRepo, const char * targetPath, const char * targetFile,
403  uint32_t timeout, char asynch, char ** tid);
404 
411 
431 twList * twFileManager_ListEntities(const char * entityName, const char * path, const char * namemask, char returnType);
432 
433 
449  const char * entityName,
450  twFileTransferInfo * ft,
451  const char * path,
452  const char * adjustedPath
453 );
454 
455 
456 /******************************************************************************/
457 /* Private methods which should only be called by Thingworx functions */
458 /******************************************************************************/
468 void twFile_SetIsInUse(twFile * file, const char isInUse);
469 
476 
482 void twFile_Delete(void * f);
483 
484 /* creating a function in order to support stubbing of fopen macro*/
485 TW_FILE_HANDLE twFile_FOpen(const char * name, const char * mode);
486 
487 #ifdef __cplusplus
488 }
489 #endif
490 
491 #endif
char * user
Definition: twFileManager.h:64
twList * twFileManager_ListEntities(const char *entityName, const char *path, const char *namemask, char returnType)
Lists the files or subdirectories in a directory path.
Definition: twFileManager.c:1141
char * transferId
Definition: twFileManager.h:63
TW_MUTEX inUseMutex
Definition: twFileManager.h:131
char * targetRepository
Definition: twFileManager.h:53
char * targetPath
Definition: twFileManager.h:54
char isComplete
Definition: twFileManager.h:61
int32_t duration
Definition: twFileManager.h:59
ThingWorx twInfoTable and twDataShape definitions and functions.
void(* file_cb)(char fileRcvd, twFileTransferInfo *info, void *userdata)
Signature of a callback function that is registered to be called when a file transfer completes or fa...
Definition: twFileManager.h:107
char openForRead
Definition: twFileManager.h:129
char * twFileManager_GetRealPath(const char *thingName, const char *path, const char *filename)
Gets the native file system path for a file.
Definition: twFileManager.c:347
twList * twFileManager_ListVirtualDirs(const char *entityName)
Returns a list of all virtual directories from the twFileManager singleton.
Definition: twFileManager.c:477
char isInUse
Definition: twFileManager.h:130
DATETIME lastModified
Definition: twFileManager.h:122
int twFileManager_UnregisterFileCallback(file_cb cb, char *filter, void *userdata)
Unregisters a file callback function registered via twFileManager_RegisterFileCallback().
Definition: twFileManager.c:977
int twFileManager_Create()
Creates the twFileManager singleton.
Definition: twFileManager.c:283
char * sourcePath
Definition: twFileManager.h:50
#define TW_MUTEX
For Linux builds a TW_MUTEX is a pthread_mutex_t.
Definition: twLinux-openssl.h:81
File Transfer Information structure definition.
Definition: twFileManager.h:48
enum msgCodeEnum twFileManager_GetFileChecksum(const char *entityName, twInfoTable **content, const char *realPath, const char *adjustedPath)
Get the MD5 checksum of a file.
Definition: twFileManager.c:602
char * sourceChecksum
Definition: twFileManager.h:52
void twFile_Delete(void *f)
Deletes mutex's, file handles, and Free's memory realted to the twFile struct.
Definition: twFileManager.c:79
void twFileManager_CheckStalledTransfers()
Checks for any stalled file transfers and deletes them.
Definition: twFileManager.c:814
struct twFileManager twFileManager
File Manager singleton structure definition.
int twFileManager_SendFile(const char *sourceRepo, const char *sourcePath, const char *sourceFile, const char *targetRepo, const char *targetPath, const char *targetFile, uint32_t timeout, char asynch, char **tid)
Definition: twFileManager.c:1111
char * sourceFile
Definition: twFileManager.h:51
Wrappers for OS-specific functionality.
Linked list structure definition.
Definition: twList.h:59
char * tid
Definition: twFileManager.h:128
uint64_t size
Definition: twFileManager.h:124
char isDir
Definition: twFileManager.h:126
struct twFileTransferInfo twFileTransferInfo
File Transfer Information structure definition.
void twFile_SetIsInUse(twFile *file, const char isInUse)
uses the file->inUseMutex to safely set file->isInUse to the value of the isInUse parameter ...
Definition: twFileManager.c:127
char * targetFile
Definition: twFileManager.h:55
twFile * twFileManager_GetOpenFile(const char *thingName, const char *path, const char *filename, const char *tid, char *isTimedOut)
Checks to see if the specified file is already open.
Definition: twFileManager.c:517
twFileTransferInfo * twFileTransferInfo_Create(twInfoTable *it)
Creates a new twFileTransferInfo structure.
Definition: twFileManager.c:26
char * realPath
Definition: twFileManager.h:119
DATETIME startTime
Definition: twFileManager.h:57
double size
Definition: twFileManager.h:62
msgCodeEnum
Enumeration of HTTP message codes.
Definition: twDefinitions.h:74
char readOnly
Definition: twFileManager.h:123
TW_FILE_HANDLE handle
Definition: twFileManager.h:125
char * virtualPath
Definition: twFileManager.h:120
twFile * twFileManager_OpenFile(const char *thingName, const char *path, const char *filename, char *mode)
Creates a new twFile structure and populates it with information obtained from a file/directory.
Definition: twFileManager.c:724
Default settings for ThingWorx C SDK.
DATETIME endTime
Definition: twFileManager.h:58
int twFileManager_GetFile(const char *sourceRepo, const char *sourcePath, const char *sourceFile, const char *targetRepo, const char *targetPath, const char *targetFile, uint32_t timeout, char asynch, char **tid)
Gets a file from the server.
Definition: twFileManager.c:1133
Common definitions for C SDK.
enum msgCodeEnum twFileManager_FinishFileTransfer(const char *entityName, twFileTransferInfo *ft, const char *path, const char *adjustedPath)
Completes the specified file transfer based on the content of job, invoking any file callbacks and cl...
Definition: twFileManager.c:1231
int twFileManager_AddVirtualDir(const char *thingName, char *dirName, char *path)
Adds a virtual directory to the twFileManager singleton.
Definition: twFileManager.c:434
char * repository
Definition: twFileManager.h:121
twFile * twFile_Create()
allocates memory for the twFile and initializes the twFile->inUseMutex
Definition: twFileManager.c:115
int twFileManager_Delete()
Deletes the twFileManager singleton and all its owned substructures.
Definition: twFileManager.c:327
void twFileManager_MakeFileCallback(char rcvd, twFileTransferInfo *fti)
Forces the file to complete a callback.
Definition: twFileManager.c:881
void twFileTransferInfo_Delete(void *transferInfo)
Frees all memory associated with a twFileTransferInfo structure and all its owned substructures...
Definition: twFileManager.c:57
File Manager singleton structure definition.
Definition: twFileManager.h:36
Info table base structure.
Definition: twInfoTable.h:418
char * targetChecksum
Definition: twFileManager.h:56
File/directory data structure.
Definition: twFileManager.h:117
char twFileManager_IsEnabled()
returns whether the twFileManager singleton is enabled based off of its pointer value ...
Definition: twFileManager.c:343
void twFileManager_CloseFile(void *file)
Closes a file and frees all memory associated with the twFile structure.
Definition: twFileManager.c:784
int twFileManager_RemoveVirtualDir(const char *thingName, char *dirName)
Removes a virtual directory from the twFileManager singleton.
Definition: twFileManager.c:455
char * state
Definition: twFileManager.h:60
char * name
Definition: twFileManager.h:118
char * sourceRepository
Definition: twFileManager.h:49
uint64_t lastFileXferActivity
Definition: twFileManager.h:127
int twFileManager_RegisterFileCallback(file_cb cb, char *filter, char onceOnly, void *userdata)
Registers a function to be called when a file transfer completes.
Definition: twFileManager.c:936
struct twFile twFile
File/directory data structure.
char * message
Definition: twFileManager.h:65
Definition: gzappend.c:170