Skip to content

Commit

Permalink
Fix offline path defaults and recursive directory creation.
Browse files Browse the repository at this point in the history
  • Loading branch information
mmichalek committed Dec 10, 2015
1 parent b7bcfbb commit 3777a8e
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 10 deletions.
Expand Up @@ -33,6 +33,7 @@
#include "common/Log.h"
#include "util/StringUtils.h"
#include "util/StringArray.h"
#include "util/FileUtils.h"

typedef struct SymFileIncomingTransport {
SymIncomingTransport super;
Expand Down
Expand Up @@ -21,6 +21,9 @@
#include "transport/file/FileIncomingTransport.h"

char* SymFileIncomingTransport_getIncomingFile(SymFileIncomingTransport *this, char *extension) {

SymFileUtils_mkdir(this->offlineIncomingDir);

DIR *dir;
struct dirent *dirEntries;
dir = opendir(this->offlineIncomingDir);
Expand Down
13 changes: 6 additions & 7 deletions symmetric-client-clib/src/transport/file/FileTransportManager.c
Expand Up @@ -24,23 +24,22 @@ int SymFileTransportManager_sendAcknowledgement(SymFileTransportManager *this, S
return SYM_TRANSPORT_OK;
}

char * SymFileTransportManager_getDirName(SymFileTransportManager *this, char *paramName, SymNode *localNode) {
// TODO replace nodeGroupId and nodeId variables.
char * SymFileTransportManager_getDirName(SymFileTransportManager *this, char *paramName, SymNode *localNode, char *defaultDirName) {
SymTransportManager *super = &this->super;
char *dirName = super->parameterService->getString(super->parameterService, paramName, ".");
char *dirName = super->parameterService->getString(super->parameterService, paramName, defaultDirName);
return dirName;
}

SymFileIncomingTransport * SymFileTransportManager_getPullTransport(SymFileTransportManager *this, SymNode *remote, SymNode *local, char *securityToken, SymProperties *requestProperties, char *registrationUrl) {
return SymFileIncomingTransport_new(NULL, remote, local,
SymFileTransportManager_getDirName(this, SYM_PARAMETER_NODE_OFFLINE_INCOMING_DIR, local),
SymFileTransportManager_getDirName(this, SYM_PARAMETER_NODE_OFFLINE_ARCHIVE_DIR, local),
SymFileTransportManager_getDirName(this, SYM_PARAMETER_NODE_OFFLINE_ERROR_DIR, local));
SymFileTransportManager_getDirName(this, SYM_PARAMETER_NODE_OFFLINE_INCOMING_DIR, local, "./tmp/offline/incoming"),
SymFileTransportManager_getDirName(this, SYM_PARAMETER_NODE_OFFLINE_ARCHIVE_DIR, local, ""),
SymFileTransportManager_getDirName(this, SYM_PARAMETER_NODE_OFFLINE_ERROR_DIR, local, ""));
}

SymFileOutgoingTransport * SymFileTransportManager_getPushTransport(SymFileTransportManager *this, SymNode *remote, SymNode *local, char *securityToken, char *registrationUrl) {
return SymFileOutgoingTransport_new(NULL, remote, local,
SymFileTransportManager_getDirName(this, SYM_PARAMETER_NODE_OFFLINE_OUTGOING_DIR, local));
SymFileTransportManager_getDirName(this, SYM_PARAMETER_NODE_OFFLINE_OUTGOING_DIR, local, "./tmp/offline/outgoing"));
}

SymList * SymFileTransportManager_readAcknowledgement(SymFileTransportManager *this, char *parameterString1, char *parameterString2) {
Expand Down
28 changes: 25 additions & 3 deletions symmetric-client-clib/src/util/FileUtils.c
Expand Up @@ -22,13 +22,35 @@

int SymFileUtils_mkdir(char* dirName) {

struct stat st = {0};
int result = 0;
struct stat st = {0};

if (stat(dirName, &st) == -1) {
result = mkdir(dirName, 0777);
char tmp[256];
char *p = NULL;
size_t len;
char SEPERATOR = '/';

snprintf(tmp, sizeof(tmp),"%s", dirName);
len = strlen(tmp);
if (tmp[len - 1] == SEPERATOR) {
tmp[len - 1] = 0;
}

for (p = tmp + 1; *p; p++) {
if(*p == '/') {
*p = 0;
result = mkdir(tmp, S_IRWXU);
if (result != 0) {
SymLog_warn("Failed to create dir '%s' %s", tmp, strerror(errno));
}
*p = '/';
}
}

result = mkdir(tmp, S_IRWXU);
if (result != 0) {
SymLog_warn("Failed to create dir '%s' %s", dirName, strerror(errno));
SymLog_warn("Failed to create dir '%s' %s", tmp, strerror(errno));
}
}

Expand Down

0 comments on commit 3777a8e

Please sign in to comment.