Some work on qwk tossing

This commit is contained in:
Andrew Pamment 2018-10-27 15:28:21 +10:00
parent 63438cea6d
commit 26f1e850e2

View File

@ -15,6 +15,17 @@ char *inbound_path;
char *message_base_path; char *message_base_path;
char *temp_dir; char *temp_dir;
char *unpack_cmd; char *unpack_cmd;
char *config_file;
int bases_exists = 0;
struct msg_bases {
int baseno;
char *path;
};
struct msg_bases **msgbases;
int msgbasecount = 0;
int recursive_delete(const char *dir) { int recursive_delete(const char *dir) {
int ret = 0; int ret = 0;
@ -102,7 +113,20 @@ static int handler(void* user, const char* section, const char* name,
} else if (strcasecmp(name, "unpack command") == 0) { } else if (strcasecmp(name, "unpack command") == 0) {
unpack_cmd = strdup(value); unpack_cmd = strdup(value);
} }
} } else if (strcasecmp(section, "bases") == 0) {
bases_exists = 1;
if (msgbasecount == 0) {
msgbases = (struct msg_bases **)malloc(sizeof(struct msg_bases *));
} else {
msgbases = (struct msg_bases **)realloc(msgbases, sizeof(struct msg_bases *) * (msgbasecount + 1));
}
msgbases[msgbasecount] = (struct msg_bases *)malloc(sizeof(struct msg_bases));
msgbases[msgbasecount]->baseno = atoi(name);
msgbases[msgbasecount]->path = strdup(value);
msgbasecount++;
}
return 1; return 1;
} }
@ -130,6 +154,7 @@ size_t trimwhitespace(char *out, size_t len, const char *str) {
int process_msgs_dat(char *msgsdat) { int process_msgs_dat(char *msgsdat) {
FILE *fptr; FILE *fptr;
FILE *cfgfptr;
char buffer[PATH_MAX]; char buffer[PATH_MAX];
struct QwkHeader qhdr; struct QwkHeader qhdr;
int msgrecs; int msgrecs;
@ -148,6 +173,7 @@ int process_msgs_dat(char *msgsdat) {
s_JamSubPacket* jsp; s_JamSubPacket* jsp;
s_JamSubfield jsf; s_JamSubfield jsf;
int z; int z;
int basefound = 0;
snprintf(buffer, PATH_MAX, "%s/%s", temp_dir, msgsdat); snprintf(buffer, PATH_MAX, "%s/%s", temp_dir, msgsdat);
@ -212,7 +238,40 @@ int process_msgs_dat(char *msgsdat) {
msgconf = ((qhdr.Msgareahi & 0xff) << 8) | qhdr.Msgarealo; msgconf = ((qhdr.Msgareahi & 0xff) << 8) | qhdr.Msgarealo;
snprintf(buffer, PATH_MAX, "%s/%d", message_base_path, msgconf); basefound = 0;
for (i=0;i<msgbasecount;i++) {
if (msgbases[i]->baseno == msgconf) {
basefound = 1;
snprintf(buffer, PATH_MAX, "%s/%s", message_base_path, msgbases[i]->path);
break;
}
}
if (!basefound) {
cfgfptr = fopen(config_file, "a");
if (!bases_exists) {
fprintf(cfgfptr, "[bases]\n");
}
fprintf(cfgfptr, "%d = %d\n", msgconf, msgconf);
fclose(cfgfptr);
if (msgbasecount == 0) {
msgbases = (struct msg_bases **)malloc(sizeof(struct msg_bases *));
} else {
msgbases = (struct msg_bases **)realloc(msgbases, sizeof(struct msg_bases *) * (msgbasecount + 1));
}
msgbases[msgbasecount] = (struct msg_bases *)malloc(sizeof(struct msg_bases));
msgbases[msgbasecount]->baseno = msgconf;
snprintf(buffer, PATH_MAX, "%d", msgconf);
msgbases[msgbasecount]->path = strdup(buffer);
msgbasecount++;
snprintf(buffer, PATH_MAX, "%s/%d", message_base_path, msgconf);
}
jb = open_jam_base(buffer); jb = open_jam_base(buffer);
if (!jb) { if (!jb) {
@ -358,8 +417,10 @@ int main(int argc, char **argv) {
return -1; return -1;
} }
if (ini_parse(argv[1], handler, NULL) <0) { config_file = argv[1];
fprintf(stderr, "Unable to load configuration ini (%s)!\n", argv[1]);
if (ini_parse(config_file, handler, NULL) <0) {
fprintf(stderr, "Unable to load configuration ini (%s)!\n", config_file);
exit(-1); exit(-1);
} }