Support for seeing netmail you've written
This commit is contained in:
parent
b997a67dc9
commit
467adf78c5
210
mail_menu.c
210
mail_menu.c
@ -13,7 +13,8 @@
|
|||||||
#include "lua/lualib.h"
|
#include "lua/lualib.h"
|
||||||
#include "lua/lauxlib.h"
|
#include "lua/lauxlib.h"
|
||||||
|
|
||||||
extern struct bbs_config conf;
|
extern struct bbs_config conf;
|
||||||
|
extern struct user_record *gUser;
|
||||||
extern int mynode;
|
extern int mynode;
|
||||||
struct jam_msg {
|
struct jam_msg {
|
||||||
int msg_no;
|
int msg_no;
|
||||||
@ -84,16 +85,127 @@ void free_message_headers(struct msg_headers *msghs) {
|
|||||||
}
|
}
|
||||||
free(msghs->msgs);
|
free(msghs->msgs);
|
||||||
free(msghs);
|
free(msghs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int msg_is_to(char *addressed_to, char *address, int type, int rn, int msgconf) {
|
||||||
|
char *myname;
|
||||||
|
char *wwiv_addressee;
|
||||||
|
struct fido_addr *dest;
|
||||||
|
int j;
|
||||||
|
if (rn) {
|
||||||
|
myname = (char *)malloc(strlen(gUser->firstname) + strlen(gUser->lastname) + 2);
|
||||||
|
sprintf(myname, "%s %s", gUser->firstname, gUser->lastname);
|
||||||
|
} else {
|
||||||
|
myname = strdup(gUser->loginname);
|
||||||
|
}
|
||||||
|
if (type == NETWORK_WWIV) {
|
||||||
|
wwiv_addressee = strdup(addressed_to);
|
||||||
|
for (j=1;j<strlen(addressed_to);j++) {
|
||||||
|
if (wwiv_addressee[j] == '(' || wwiv_addressee[j] == '#') {
|
||||||
|
wwiv_addressee[j-1] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcasecmp(myname, wwiv_addressee) == 0) {
|
||||||
|
// name match
|
||||||
|
if (conf.mail_conferences[msgconf]->wwivnode == atoi(address)) {
|
||||||
|
free(wwiv_addressee);
|
||||||
|
free(myname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(wwiv_addressee);
|
||||||
|
free(myname);
|
||||||
|
return 0;
|
||||||
|
} else if (type == NETWORK_FIDO) {
|
||||||
|
if (strcasecmp(myname, addressed_to) == 0) {
|
||||||
|
dest = parse_fido_addr(address);
|
||||||
|
if (conf.mail_conferences[msgconf]->fidoaddr->zone == dest->zone &&
|
||||||
|
conf.mail_conferences[msgconf]->fidoaddr->net == dest->net &&
|
||||||
|
conf.mail_conferences[msgconf]->fidoaddr->node == dest->node &&
|
||||||
|
conf.mail_conferences[msgconf]->fidoaddr->point == dest->point) {
|
||||||
|
free(dest);
|
||||||
|
free(myname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
free(dest);
|
||||||
|
}
|
||||||
|
free(myname);
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
if (strcasecmp(myname, addressed_to) == 0) {
|
||||||
|
free(myname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
free(myname);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int msg_is_from(char *addressed_from, char *address, int type, int rn, int msgconf) {
|
||||||
|
char *myname;
|
||||||
|
char *wwiv_addressee;
|
||||||
|
struct fido_addr *orig;
|
||||||
|
int j;
|
||||||
|
if (rn) {
|
||||||
|
myname = (char *)malloc(strlen(gUser->firstname) + strlen(gUser->lastname) + 2);
|
||||||
|
sprintf(myname, "%s %s", gUser->firstname, gUser->lastname);
|
||||||
|
} else {
|
||||||
|
myname = strdup(gUser->loginname);
|
||||||
|
}
|
||||||
|
if (type == NETWORK_WWIV) {
|
||||||
|
wwiv_addressee = strdup(addressed_from);
|
||||||
|
for (j=1;j<strlen(addressed_from);j++) {
|
||||||
|
if (wwiv_addressee[j] == '(' || wwiv_addressee[j] == '#') {
|
||||||
|
wwiv_addressee[j-1] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcasecmp(myname, wwiv_addressee) == 0) {
|
||||||
|
// name match
|
||||||
|
if (conf.mail_conferences[msgconf]->wwivnode == atoi(address)) {
|
||||||
|
free(wwiv_addressee);
|
||||||
|
free(myname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(wwiv_addressee);
|
||||||
|
free(myname);
|
||||||
|
return 0;
|
||||||
|
} else if (type == NETWORK_FIDO) {
|
||||||
|
if (strcasecmp(myname, addressed_from) == 0) {
|
||||||
|
orig = parse_fido_addr(address);
|
||||||
|
if (conf.mail_conferences[msgconf]->fidoaddr->zone == orig->zone &&
|
||||||
|
conf.mail_conferences[msgconf]->fidoaddr->net == orig->net &&
|
||||||
|
conf.mail_conferences[msgconf]->fidoaddr->node == orig->node &&
|
||||||
|
conf.mail_conferences[msgconf]->fidoaddr->point == orig->point) {
|
||||||
|
free(orig);
|
||||||
|
free(myname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
free(orig);
|
||||||
|
}
|
||||||
|
free(myname);
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
if (strcasecmp(myname, addressed_from) == 0) {
|
||||||
|
free(myname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
free(myname);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct msg_headers *read_message_headers(int msgconf, int msgarea, struct user_record *user) {
|
struct msg_headers *read_message_headers(int msgconf, int msgarea, struct user_record *user) {
|
||||||
s_JamBase *jb;
|
s_JamBase *jb;
|
||||||
s_JamBaseHeader jbh;
|
s_JamBaseHeader jbh;
|
||||||
s_JamMsgHeader jmh;
|
s_JamMsgHeader jmh;
|
||||||
s_JamSubPacket* jsp;
|
s_JamSubPacket* jsp;
|
||||||
struct jam_msg *jamm;
|
struct jam_msg *jamm;
|
||||||
char *wwiv_addressee;
|
int to_us;
|
||||||
int to_us;
|
|
||||||
int i;
|
int i;
|
||||||
int z;
|
int z;
|
||||||
int j;
|
int j;
|
||||||
@ -181,66 +293,36 @@ struct msg_headers *read_message_headers(int msgconf, int msgarea, struct user_r
|
|||||||
JAM_DelSubPacket(jsp);
|
JAM_DelSubPacket(jsp);
|
||||||
|
|
||||||
if (jmh.Attribute & MSG_PRIVATE) {
|
if (jmh.Attribute & MSG_PRIVATE) {
|
||||||
wwiv_addressee = strdup(jamm->to);
|
if (!msg_is_to(jamm->to, jamm->daddress, conf.mail_conferences[msgconf]->nettype, conf.mail_conferences[msgconf]->realnames, msgconf) &&
|
||||||
for (j=0;j<strlen(jamm->to);j++) {
|
!msg_is_from(jamm->from, jamm->oaddress, conf.mail_conferences[msgconf]->nettype, conf.mail_conferences[msgconf]->realnames, msgconf)) {
|
||||||
if (wwiv_addressee[j] == ' ') {
|
|
||||||
wwiv_addressee[j] = '\0';
|
if (jamm->subject != NULL) {
|
||||||
break;
|
free(jamm->subject);
|
||||||
}
|
}
|
||||||
|
if (jamm->from != NULL) {
|
||||||
|
free(jamm->from);
|
||||||
|
}
|
||||||
|
if (jamm->to != NULL) {
|
||||||
|
free(jamm->to);
|
||||||
|
}
|
||||||
|
if (jamm->oaddress != NULL) {
|
||||||
|
free(jamm->oaddress);
|
||||||
|
}
|
||||||
|
if (jamm->daddress != NULL) {
|
||||||
|
free(jamm->daddress);
|
||||||
|
}
|
||||||
|
if (jamm->msgid != NULL) {
|
||||||
|
free(jamm->msgid);
|
||||||
|
}
|
||||||
|
if (jamm->replyid != NULL) {
|
||||||
|
free(jamm->replyid);
|
||||||
|
}
|
||||||
|
free(jamm->msg_h);
|
||||||
|
free(jamm);
|
||||||
|
k++;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (conf.mail_conferences[msgconf]->nettype == NETWORK_WWIV) {
|
|
||||||
if (conf.mail_conferences[msgconf]->wwivnode == atoi(jamm->daddress)) {
|
|
||||||
to_us = 1;
|
|
||||||
} else {
|
|
||||||
to_us = 0;
|
|
||||||
}
|
|
||||||
} else if (conf.mail_conferences[msgconf]->nettype == NETWORK_FIDO) {
|
|
||||||
dest = parse_fido_addr(jamm->daddress);
|
|
||||||
if (conf.mail_conferences[msgconf]->fidoaddr->zone == dest->zone &&
|
|
||||||
conf.mail_conferences[msgconf]->fidoaddr->net == dest->net &&
|
|
||||||
conf.mail_conferences[msgconf]->fidoaddr->node == dest->node &&
|
|
||||||
conf.mail_conferences[msgconf]->fidoaddr->point == dest->point) {
|
|
||||||
|
|
||||||
to_us = 1;
|
|
||||||
} else {
|
|
||||||
to_us = 0;
|
|
||||||
}
|
|
||||||
free(dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!(strcasecmp(wwiv_addressee, user->loginname) == 0) || ((strcasecmp(jamm->from, user->loginname) == 0) && to_us)) {
|
|
||||||
|
|
||||||
if (jamm->subject != NULL) {
|
|
||||||
free(jamm->subject);
|
|
||||||
}
|
|
||||||
if (jamm->from != NULL) {
|
|
||||||
free(jamm->from);
|
|
||||||
}
|
|
||||||
if (jamm->to != NULL) {
|
|
||||||
free(jamm->to);
|
|
||||||
}
|
|
||||||
if (jamm->oaddress != NULL) {
|
|
||||||
free(jamm->oaddress);
|
|
||||||
}
|
|
||||||
if (jamm->daddress != NULL) {
|
|
||||||
free(jamm->daddress);
|
|
||||||
}
|
|
||||||
if (jamm->msgid != NULL) {
|
|
||||||
free(jamm->msgid);
|
|
||||||
}
|
|
||||||
if (jamm->replyid != NULL) {
|
|
||||||
free(jamm->replyid);
|
|
||||||
}
|
|
||||||
free(wwiv_addressee);
|
|
||||||
free(jamm->msg_h);
|
|
||||||
free(jamm);
|
|
||||||
k++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
free(wwiv_addressee);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msghs->msg_count == 0) {
|
if (msghs->msg_count == 0) {
|
||||||
msghs->msgs = (struct jam_msg **)malloc(sizeof(struct jam_msg *));
|
msghs->msgs = (struct jam_msg **)malloc(sizeof(struct jam_msg *));
|
||||||
|
Reference in New Issue
Block a user