Experimental changes to mnet

This commit is contained in:
Andrew Pamment
2018-05-23 21:53:24 +10:00
parent b6f328ffa3
commit baa755a1cc
3 changed files with 138 additions and 53 deletions

View File

@@ -14,6 +14,7 @@ int imhub = 0;
struct msgarea_t {
int id;
int hub;
char *basedir;
int *links;
int link_count;
@@ -33,6 +34,7 @@ struct msg_t {
struct msgarea_t **areas;
int area_count;
int mynode = 0;
int hubnode = 0;
int copy_file(char *src, char *dest) {
FILE *src_file;
@@ -140,6 +142,9 @@ int parse_config_file(char *filename) {
if (strcasecmp(bufferw, "TRUE") == 0) {
imhub = 1;
}
} else if (strncasecmp(buffer, "UPLINK", 6) == 0) {
trimwhitespace(bufferw, 256, &buffer[7]);
hubnode = atoi(bufferw);
} else if (strncasecmp(buffer, "INDIR", 5) == 0) {
trimwhitespace(bufferw, 256, &buffer[6]);
baseindir = strdup(bufferw);
@@ -159,20 +164,27 @@ int parse_config_file(char *filename) {
newarea->id = atoi(bufferw);
newarea->link_count = 0;
ptr = strtok(NULL, ",");
if (ptr != NULL) {
trimwhitespace(bufferw, 256, ptr);
newarea->basedir = strdup(bufferw);
newarea->hub = atoi(bufferw);
ptr = strtok(NULL, ",");
while (ptr != NULL) {
if (ptr != NULL) {
trimwhitespace(bufferw, 256, ptr);
if (newarea->link_count == 0) {
newarea->links = (int *)malloc(sizeof(int));
} else {
newarea->links = (int *)realloc(newarea->links, sizeof(int) * (newarea->link_count + 1));
}
newarea->links[newarea->link_count] = atoi(bufferw);
newarea->link_count++;
newarea->basedir = strdup(bufferw);
ptr = strtok(NULL, ",");
while (ptr != NULL) {
trimwhitespace(bufferw, 256, ptr);
if (newarea->link_count == 0) {
newarea->links = (int *)malloc(sizeof(int));
} else {
newarea->links = (int *)realloc(newarea->links, sizeof(int) * (newarea->link_count + 1));
}
newarea->links[newarea->link_count] = atoi(bufferw);
newarea->link_count++;
ptr = strtok(NULL, ",");
}
}
}
}
@@ -265,7 +277,7 @@ int import(char *filename) {
s_JamSubfield jsf;
snprintf(buffer, PATH_MAX, "%s/%s", baseindir, filename);
strncpy(uuid, filename, 36);
strncpy(uuid, strchr(filename, '-') + 1, 36);
uuid[36] = '\0';
@@ -289,29 +301,46 @@ int import(char *filename) {
fclose(fptr);
for (i=0;i<area_count;i++) {
if (msg.area == areas[i]->id) {
areaid = i;
break;
}
}
if (imhub) {
for (i=0;i<areas[areaid]->link_count;i++) {
if (areas[areaid]->links[i] == msg.oaddr) {
continue;
}
snprintf(buffer2, PATH_MAX, "%s/%d/", baseoutdir, areas[areaid]->links[i]);
if (stat(buffer2, &st) != 0) {
if (mkdir(buffer2, 0755) != 0) {
fprintf(stderr, "Error making directory %s\n", buffer2);
continue;
}
}
snprintf(buffer2, PATH_MAX, "%s/%d/%s", baseoutdir, areas[areaid]->links[i], filename);
if (msg.daddr != mynode) {
if (imhub) {
snprintf(buffer2, PATH_MAX, "%s/%d/%s", baseoutdir, msg.daddr, filename);
copy_file(buffer, buffer2);
}
}
return 1;
} else {
for (i=0;i<area_count;i++) {
if (msg.area == areas[i]->id) {
areaid = i;
break;
}
}
if (areas[areaid]->hub == mynode) {
for (i=0;i<areas[areaid]->link_count;i++) {
if (areas[areaid]->links[i] == msg.oaddr) {
continue;
}
if (imhub) {
snprintf(buffer2, PATH_MAX, "%s/%d/", baseoutdir, areas[areaid]->links[i]);
} else {
snprintf(buffer2, PATH_MAX, "%s/%d/", baseoutdir, hubnode);
}
if (stat(buffer2, &st) != 0) {
if (mkdir(buffer2, 0755) != 0) {
fprintf(stderr, "Error making directory %s\n", buffer2);
continue;
}
}
if (imhub) {
snprintf(buffer2, PATH_MAX, "%s/%d/%d-%s", baseoutdir, areas[areaid]->links[i], areas[areaid]->links[i], filename);
} else {
snprintf(buffer2, PATH_MAX, "%s/%d/%d-%s", baseoutdir, hubnode, areas[areaid]->links[i], filename);
}
copy_file(buffer, buffer2);
}
}
}
ret = isdupe(&msg, uuid);
if (ret == -1) {