This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
magicka/utils/mgpost/mgpost.c
2016-04-14 12:32:39 +10:00

165 lines
3.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include "../../jamlib/jam.h"
s_JamBase *open_jam_base(char *path) {
int ret;
s_JamBase *jb;
ret = JAM_OpenMB((char *)path, &jb);
if (ret != 0) {
if (ret == JAM_IO_ERROR) {
free(jb);
ret = JAM_CreateMB((char *)path, 1, &jb);
if (ret != 0) {
free(jb);
return NULL;
}
}
}
return jb;
}
int main(int argc, char **argv) {
char buffer[256];
char *body;
char *subject;
char *from;
FILE *fptr;
int len;
int totlen;
time_t thetime;
int z;
int i;
s_JamBase *jb;
s_JamMsgHeader jmh;
s_JamSubPacket* jsp;
s_JamSubfield jsf;
if (argc < 6) {
printf("Usage:\n");
printf("%s [l|e] filename jambase from subject laddress\n", argv[0]);
printf(" l = Local Message, e = Echomail Message\n");
printf(" laddress is your network address, and only required on echomail.\n");
exit(1);
}
if (tolower(argv[1][0]) != 'l' && tolower(argv[1][0]) != 'e') {
printf("Usage:\n");
printf("%s [l|e] filename jambase from subject\n", argv[0]);
printf(" l = Local Message, e = Echomail Message\n");
printf(" laddress is your network address, and only required on echomail.\n");
exit(1);
}
if (tolower(argv[1][0]) == 'e' && argc < 7) {
printf("Usage:\n");
printf("%s [l|e] filename jambase from subject\n", argv[0]);
printf(" l = Local Message, e = Echomail Message\n");
printf(" laddress is your network address, and only required on echomail.\n");
exit(1);
}
fptr = fopen(argv[2], "r");
if (!fptr) {
printf("Unable to open %s\n", argv[2]);
exit(1);
}
body = NULL;
totlen = 0;
len = fread(buffer, 1, 256, fptr);
while (len > 0) {
totlen += len;
if (body == NULL) {
body = (char *)malloc(totlen + 1);
} else {
body = (char *)realloc(body, totlen + 1);
}
memcpy(&body[totlen - len], buffer, len);
body[totlen] = '\0';
len = fread(buffer, 1, 256, fptr);
}
fclose(fptr);
for (i=0;i<totlen;i++) {
if (body[i] == '\n') {
body[i] = '\r';
}
}
jb = open_jam_base(argv[3]);
if (!jb) {
printf("Unable to open JAM base %s\n", argv[2]);
exit(1);
}
thetime = time(NULL);
JAM_ClearMsgHeader( &jmh );
jmh.DateWritten = thetime;
jmh.Attribute |= MSG_LOCAL;
if (tolower(argv[1][0]) == 'l') {
jmh.Attribute |= MSG_TYPELOCAL;
} else if (tolower(argv[1][0]) == 'e') {
jmh.Attribute |= MSG_TYPEECHO;
}
jsp = JAM_NewSubPacket();
jsf.LoID = JAMSFLD_SENDERNAME;
jsf.HiID = 0;
jsf.DatLen = strlen(argv[4]);
jsf.Buffer = (char *)argv[4];
JAM_PutSubfield(jsp, &jsf);
jsf.LoID = JAMSFLD_RECVRNAME;
jsf.HiID = 0;
jsf.DatLen = 3;
jsf.Buffer = "ALL";
JAM_PutSubfield(jsp, &jsf);
jsf.LoID = JAMSFLD_SUBJECT;
jsf.HiID = 0;
jsf.DatLen = strlen(argv[5]);
jsf.Buffer = (char *)argv[5];
JAM_PutSubfield(jsp, &jsf);
if (tolower(argv[1][0]) == 'e') {
jsf.LoID = JAMSFLD_OADDRESS;
jsf.HiID = 0;
jsf.DatLen = strlen(argv[6]);
jsf.Buffer = (char *)argv[6];
JAM_PutSubfield(jsp, &jsf);
}
while (1) {
z = JAM_LockMB(jb, 100);
if (z == 0) {
break;
} else if (z == JAM_LOCK_FAILED) {
sleep(1);
} else {
printf("Failed to lock msg base!\n");
break;
}
}
if (z == 0) {
if (JAM_AddMessage(jb, &jmh, jsp, (char *)body, strlen(body))) {
printf("Failed to add message\n");
}
JAM_UnlockMB(jb);
JAM_DelSubPacket(jsp);
}
JAM_CloseMB(jb);
return 0;
}