Experimental changes to mnet
This commit is contained in:
@@ -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) {
|
||||
|
Reference in New Issue
Block a user