internet handling fixes
This commit is contained in:
parent
d9b791db8e
commit
fc8735b3a1
@ -12,6 +12,17 @@ ______________________________________________________________________
|
|||||||
Notes for GoldED+ 1.1.5, March xx 2001
|
Notes for GoldED+ 1.1.5, March xx 2001
|
||||||
______________________________________________________________________
|
______________________________________________________________________
|
||||||
|
|
||||||
|
+ Added new keyword WRITETEMPLATE which defines template to be used on
|
||||||
|
saving messages. Could be used in Random System Groups or globally.
|
||||||
|
|
||||||
|
+ You can explicitly select built-in template by defining "built-in".
|
||||||
|
|
||||||
|
! A lot of manipulations with Internet addressing was done. If at
|
||||||
|
least one person will be able to send message to expected
|
||||||
|
destination I'll be happy :-) If you'll find a bug please write me
|
||||||
|
a detailed guide (functional requirements specification :)) on how
|
||||||
|
everything should work.
|
||||||
|
|
||||||
! Fixed filelocking in UNIX version.
|
! Fixed filelocking in UNIX version.
|
||||||
|
|
||||||
- Fixed "Via" kludge handling in JAM areas.
|
- Fixed "Via" kludge handling in JAM areas.
|
||||||
@ -47,9 +58,6 @@ ______________________________________________________________________
|
|||||||
- Template keyword now properly extracts filename within random system
|
- Template keyword now properly extracts filename within random system
|
||||||
groups.
|
groups.
|
||||||
|
|
||||||
! If @ofrom or @oto is about to expanding to nothing they expanded to
|
|
||||||
real name of person (if available).
|
|
||||||
|
|
||||||
! @*addr macroses now expanded by default without domain, if you ever
|
! @*addr macroses now expanded by default without domain, if you ever
|
||||||
need 5d addresses use @*addr{domain} scheme.
|
need 5d addresses use @*addr{domain} scheme.
|
||||||
|
|
||||||
@ -83,6 +91,8 @@ ______________________________________________________________________
|
|||||||
@odtime expanded according to MS_DateTimeFmt for original
|
@odtime expanded according to MS_DateTimeFmt for original
|
||||||
message time
|
message time
|
||||||
@cdtime current time in MS_DateTimeFmt format
|
@cdtime current time in MS_DateTimeFmt format
|
||||||
|
@fpgp either e-mail or name from "From" field
|
||||||
|
@dpgp either e-mail or name from "To" field
|
||||||
|
|
||||||
- Fixed bug in expanding fixed lenght macroses.
|
- Fixed bug in expanding fixed lenght macroses.
|
||||||
|
|
||||||
|
@ -612,6 +612,7 @@ CfgGed::CfgGed() {
|
|||||||
// twitname.clear();
|
// twitname.clear();
|
||||||
// twitsubj.clear();
|
// twitsubj.clear();
|
||||||
// username.clear();
|
// username.clear();
|
||||||
|
// wtpl.clear();
|
||||||
// xlatcharset.clear();
|
// xlatcharset.clear();
|
||||||
// xlatescset.clear();
|
// xlatescset.clear();
|
||||||
|
|
||||||
|
@ -373,6 +373,7 @@ const word CRC_VIEWKLUDGE = 0x4078;
|
|||||||
const word CRC_VIEWQUOTE = 0x0AB3;
|
const word CRC_VIEWQUOTE = 0x0AB3;
|
||||||
const word CRC_WHOTO = 0xB25F;
|
const word CRC_WHOTO = 0xB25F;
|
||||||
const word CRC_WILDCATUSERNO = 0xC2FE;
|
const word CRC_WILDCATUSERNO = 0xC2FE;
|
||||||
|
const word CRC_WRITETEMPLATE = 0xF4CB;
|
||||||
const word CRC_XLATCHARSET = 0xA860;
|
const word CRC_XLATCHARSET = 0xA860;
|
||||||
const word CRC_XLATESCSET = 0x4BA7;
|
const word CRC_XLATESCSET = 0x4BA7;
|
||||||
const word CRC_XLATEXPORT = 0x29CB;
|
const word CRC_XLATEXPORT = 0x29CB;
|
||||||
|
@ -579,6 +579,7 @@ SwitchW:
|
|||||||
switch(crc) {
|
switch(crc) {
|
||||||
case CRC_WHOTO : CfgWhoto (); break;
|
case CRC_WHOTO : CfgWhoto (); break;
|
||||||
case CRC_WILDCATUSERNO : CfgWildcatuserno (); break;
|
case CRC_WILDCATUSERNO : CfgWildcatuserno (); break;
|
||||||
|
case CRC_WRITETEMPLATE : CfgWritetemplate (); break;
|
||||||
default : found = false;
|
default : found = false;
|
||||||
}
|
}
|
||||||
goto End;
|
goto End;
|
||||||
|
@ -435,6 +435,20 @@ void CfgWildcatuserno() {
|
|||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
void CfgWritetemplate() {
|
||||||
|
|
||||||
|
if(cfgingroup) {
|
||||||
|
Path buf;
|
||||||
|
strxcpy(buf, val, sizeof(buf));
|
||||||
|
CFG->grp.AddItm(GRP_WRITETEMPLATE, buf, strlen(buf)+1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CFG->wtpl = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
void CfgXlatcharset() {
|
void CfgXlatcharset() {
|
||||||
|
|
||||||
Map xlt;
|
Map xlt;
|
||||||
|
@ -357,6 +357,7 @@ void CfgViewkludge ();
|
|||||||
void CfgViewquote ();
|
void CfgViewquote ();
|
||||||
void CfgWhoto ();
|
void CfgWhoto ();
|
||||||
void CfgWildcatuserno ();
|
void CfgWildcatuserno ();
|
||||||
|
void CfgWritetemplate ();
|
||||||
void CfgXlatcharset ();
|
void CfgXlatcharset ();
|
||||||
void CfgXlatescset ();
|
void CfgXlatescset ();
|
||||||
void CfgXlatexport ();
|
void CfgXlatexport ();
|
||||||
|
@ -351,6 +351,7 @@ public:
|
|||||||
bool viewquote;
|
bool viewquote;
|
||||||
Name whoto;
|
Name whoto;
|
||||||
int wildcatuserno;
|
int wildcatuserno;
|
||||||
|
string wtpl;
|
||||||
vector<Map> xlatcharset;
|
vector<Map> xlatcharset;
|
||||||
vector<Map> xlatescset;
|
vector<Map> xlatescset;
|
||||||
char xlatexport[17]; // exportcharset[17];
|
char xlatexport[17]; // exportcharset[17];
|
||||||
|
@ -35,6 +35,14 @@
|
|||||||
int _use_fwd = true;
|
int _use_fwd = true;
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool isuucp(const char *name) {
|
||||||
|
|
||||||
|
return strieql("UUCP", name) or (*AA->Internetgate().name and strieql(AA->Internetgate().name, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
char* MakeOrigin(GMsg* msg, const char* orig) {
|
char* MakeOrigin(GMsg* msg, const char* orig) {
|
||||||
@ -537,17 +545,8 @@ void DoKludges(int mode, GMsg* msg, bool attronly) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(AA->isnet()) {
|
if(AA->isnet()) {
|
||||||
if(*msg->iaddr and not AA->isinternet()) {
|
if(*msg->ito and not AA->isinternet()) {
|
||||||
if(not (CFG->internetgateexp == RFCAddress) and *msg->To() and (strpbrk(msg->iaddr, "<>()\"") == NULL) and not strieql(msg->To(), *AA->Internetgate().name ? AA->Internetgate().name : "UUCP")) {
|
sprintf(buf, "To: %s\r", msg->ito);
|
||||||
Name name;
|
|
||||||
strcpy(name, msg->To());
|
|
||||||
if(CFG->internetgateexp == ((RFCName << 2) | RFCAddress))
|
|
||||||
sprintf(buf, "To: \"%s\" <%s>\r", StripQuotes(name), msg->iaddr);
|
|
||||||
else
|
|
||||||
sprintf(buf, "To: %s (%s)\r", msg->iaddr, StripQuotes(name));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sprintf(buf, "To: %s\r", msg->iaddr);
|
|
||||||
line = AddKludge(line, buf);
|
line = AddKludge(line, buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ void SaveLines(int mode, const char* savefile, GMsg* msg, int margin, bool clip)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
TemplateToText(((mode == MODE_WRITE) and prnheader) ? ((prnheader & WRITE_ONLY_HEADER) ? MODE_HEADER : MODE_WRITEHEADER) : MODE_WRITE, msg, msg, AA->Tpl(), CurrArea);
|
TemplateToText(((mode == MODE_WRITE) and prnheader) ? ((prnheader & WRITE_ONLY_HEADER) ? MODE_HEADER : MODE_WRITEHEADER) : MODE_WRITE, msg, msg, AA->WTpl(), CurrArea);
|
||||||
msg->attr.tou1();
|
msg->attr.tou1();
|
||||||
msg->TextToLines(margin);
|
msg->TextToLines(margin);
|
||||||
msg->attr.tou0();
|
msg->attr.tou0();
|
||||||
|
@ -472,6 +472,8 @@ void IEclass::GoEOL() {
|
|||||||
|
|
||||||
// Move cursor to the last char on the line
|
// Move cursor to the last char on the line
|
||||||
col = currline->txt.length();
|
col = currline->txt.length();
|
||||||
|
if(currline->txt[col-1] == '\n')
|
||||||
|
--col;
|
||||||
|
|
||||||
// String must not be longer than the window width
|
// String must not be longer than the window width
|
||||||
_test_haltab(col > maxcol, col, maxcol);
|
_test_haltab(col > maxcol, col, maxcol);
|
||||||
|
@ -305,23 +305,21 @@ bool GMsgHeaderEdit::validate() {
|
|||||||
fromaddr.buf = ffromaddr->buf; fromaddr.update = false;
|
fromaddr.buf = ffromaddr->buf; fromaddr.update = false;
|
||||||
subj.buf = fsubj->buf; subj.update = false;
|
subj.buf = fsubj->buf; subj.update = false;
|
||||||
|
|
||||||
INam iaddr, realto;
|
string iaddr(msg->iaddr), realto(msg->realto);
|
||||||
strcpy(iaddr, msg->iaddr);
|
|
||||||
strcpy(realto, msg->realto);
|
|
||||||
|
|
||||||
bool res = set_to_address(msg, &toname, &toaddr, &fromaddr, &subj, 0, LNG->SelectDestNode, lookup);
|
bool res = set_to_address(msg, &toname, &toaddr, &fromaddr, &subj, 0, LNG->SelectDestNode, lookup);
|
||||||
|
|
||||||
vcurshow();
|
vcurshow();
|
||||||
char bot2[200];
|
__extension__ char bot2[EDIT->HdrNodeLen()+1];
|
||||||
MakeAttrStr(bot2, sizeof(bot2), &msg->attr);
|
MakeAttrStr(bot2, sizeof(bot2), &msg->attr);
|
||||||
strsetsz(bot2, EDIT->HdrNodeLen());
|
strsetsz(bot2, EDIT->HdrNodeLen());
|
||||||
window.prints(1, EDIT->HdrNodePos(), C_HEADW, bot2);
|
window.prints(1, EDIT->HdrNodePos(), C_HEADW, bot2);
|
||||||
|
|
||||||
// once we changed name invalidate realto and internet address
|
// once we changed name invalidate realto and internet address
|
||||||
if(not strieql(orig_toname.c_str(), toname.buf)) {
|
if(not strieql(orig_toname.c_str(), toname.buf)) {
|
||||||
if(strieql(realto, msg->realto))
|
if(strieql(realto.c_str(), msg->realto))
|
||||||
*msg->realto = NUL;
|
*msg->realto = NUL;
|
||||||
if(not AA->isinternet() and strieql(iaddr, msg->iaddr))
|
if(not AA->isinternet() and strieql(iaddr.c_str(), msg->iaddr))
|
||||||
*msg->iaddr = NUL;
|
*msg->iaddr = NUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +443,7 @@ int EditHeaderinfo(int mode, GMsgHeaderView &view) {
|
|||||||
to_name = tmp_to_name;
|
to_name = tmp_to_name;
|
||||||
|
|
||||||
if(AA->isinternet()) {
|
if(AA->isinternet()) {
|
||||||
strcpy(msg->to, to_name.c_str());
|
strcpy(msg->to, *AA->Internetgate().name ? AA->Internetgate().name : to_name.c_str());
|
||||||
strcpy(msg->realby, msg->by);
|
strcpy(msg->realby, msg->by);
|
||||||
strcpy(msg->realto, msg->to);
|
strcpy(msg->realto, msg->to);
|
||||||
strcpy(msg->iorig, from_addr.c_str());
|
strcpy(msg->iorig, from_addr.c_str());
|
||||||
@ -481,15 +479,21 @@ int EditHeaderinfo(int mode, GMsgHeaderView &view) {
|
|||||||
strcpy(msg->to, to_name.c_str());
|
strcpy(msg->to, to_name.c_str());
|
||||||
|
|
||||||
if(*msg->iaddr) {
|
if(*msg->iaddr) {
|
||||||
if(*msg->To() and (strpbrk(msg->iaddr, "<>()\"") == NULL) and not strieql(msg->To(), *AA->Internetgate().name ? AA->Internetgate().name : "UUCP")) {
|
if(not (CFG->internetgateexp == RFCAddress) and *msg->To() and (strpbrk(msg->iaddr, "<>()\"") == NULL) and not isuucp(msg->To())) {
|
||||||
Name name;
|
Name name;
|
||||||
strcpy(name, msg->To());
|
strcpy(name, msg->To());
|
||||||
sprintf(msg->ito, "%s (%s)", msg->iaddr, StripQuotes(name));
|
if(CFG->internetgateexp == ((RFCName << 2) | RFCAddress))
|
||||||
|
sprintf(msg->ito, "\"%s\" <%s>", StripQuotes(name), msg->iaddr);
|
||||||
|
else
|
||||||
|
sprintf(msg->ito, "%s (%s)", msg->iaddr, StripQuotes(name));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strcpy(msg->ito, msg->iaddr);
|
strcpy(msg->ito, msg->iaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(not *msg->realto and isuucp(msg->to))
|
||||||
|
strcpy(msg->realto, strlword(msg->iaddr, "@"));
|
||||||
|
|
||||||
Addr address;
|
Addr address;
|
||||||
address = AA->Aka().addr;
|
address = AA->Aka().addr;
|
||||||
|
|
||||||
|
@ -174,9 +174,9 @@ char* TokenXlat(int mode, char* input, GMsg* msg, GMsg* oldmsg, int __origarea)
|
|||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@otzoffset", (oldmsg->tzutc == -32767) ? "" : (sprintf(buf, " %+05d", oldmsg->tzutc), buf)))
|
if(tokenxchg(dst, "@otzoffset", (oldmsg->tzutc == -32767) ? "" : (sprintf(buf, " %+05d", oldmsg->tzutc), buf)))
|
||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@ofrom", *oldmsg->ifrom ? oldmsg->ifrom : oldmsg->By()))
|
if(tokenxchg(dst, "@ofrom", oldmsg->ifrom))
|
||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@oto", *oldmsg->ito ? oldmsg->ito : oldmsg->To()))
|
if(tokenxchg(dst, "@oto", oldmsg->ito))
|
||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@omessageid", oldmsg->messageid ? oldmsg->messageid : ""))
|
if(tokenxchg(dst, "@omessageid", oldmsg->messageid ? oldmsg->messageid : ""))
|
||||||
continue;
|
continue;
|
||||||
@ -185,6 +185,8 @@ char* TokenXlat(int mode, char* input, GMsg* msg, GMsg* oldmsg, int __origarea)
|
|||||||
if(tokenxchg(dst, "@dname", strbtrim(strtmp(oldmsg->To())), 34, 3,
|
if(tokenxchg(dst, "@dname", strbtrim(strtmp(oldmsg->To())), 34, 3,
|
||||||
msg->to_me(), msg->to_you(), oldmsg->to_all()))
|
msg->to_me(), msg->to_you(), oldmsg->to_all()))
|
||||||
continue;
|
continue;
|
||||||
|
if(tokenxchg(dst, "@dpgp", *msg->iaddr ? msg->iaddr : msg->To()))
|
||||||
|
continue;
|
||||||
if(tokenxchg(dst, "@dfname", strlword(oldmsg->To()), 0, 3,
|
if(tokenxchg(dst, "@dfname", strlword(oldmsg->To()), 0, 3,
|
||||||
msg->to_me(), msg->to_you(), oldmsg->to_all()))
|
msg->to_me(), msg->to_you(), oldmsg->to_all()))
|
||||||
continue;
|
continue;
|
||||||
@ -268,9 +270,9 @@ char* TokenXlat(int mode, char* input, GMsg* msg, GMsg* oldmsg, int __origarea)
|
|||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@clname", strrword(strcpy(buf, AA->Username().name))))
|
if(tokenxchg(dst, "@clname", strrword(strcpy(buf, AA->Username().name))))
|
||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@cfrom", *msg->ifrom ? msg->ifrom : msg->By()))
|
if(tokenxchg(dst, "@cfrom", msg->ifrom))
|
||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@cto", *msg->ito ? msg->ito : msg->To()))
|
if(tokenxchg(dst, "@cto", msg->ito))
|
||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@cdate", cdate))
|
if(tokenxchg(dst, "@cdate", cdate))
|
||||||
continue;
|
continue;
|
||||||
@ -282,6 +284,8 @@ char* TokenXlat(int mode, char* input, GMsg* msg, GMsg* oldmsg, int __origarea)
|
|||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@fname", strbtrim(strtmp(msg->By())), 34))
|
if(tokenxchg(dst, "@fname", strbtrim(strtmp(msg->By())), 34))
|
||||||
continue;
|
continue;
|
||||||
|
if(tokenxchg(dst, "fpgp", *msg->iorig ? msg->iorig : msg->By()))
|
||||||
|
continue;
|
||||||
if(tokenxchg(dst, "@ffname", strlword(msg->By())))
|
if(tokenxchg(dst, "@ffname", strlword(msg->By())))
|
||||||
continue;
|
continue;
|
||||||
if(tokenxchg(dst, "@flname", strrword(msg->By())))
|
if(tokenxchg(dst, "@flname", strrword(msg->By())))
|
||||||
|
@ -832,7 +832,7 @@ void MakeMsg(int mode, GMsg* omsg, bool ignore_replyto) {
|
|||||||
omsg->attr.tou0();
|
omsg->attr.tou0();
|
||||||
omsg->TextToLines(-CFG->quotemargin);
|
omsg->TextToLines(-CFG->quotemargin);
|
||||||
if(ignore_replyto)
|
if(ignore_replyto)
|
||||||
omsg->ireplyto[0] = NUL;
|
*omsg->ireplyto = NUL;
|
||||||
if(omsg->attr.rot())
|
if(omsg->attr.rot())
|
||||||
Rot13(omsg);
|
Rot13(omsg);
|
||||||
// Drop through
|
// Drop through
|
||||||
@ -859,14 +859,12 @@ void MakeMsg(int mode, GMsg* omsg, bool ignore_replyto) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do aka matching
|
// Do aka matching
|
||||||
{
|
if(AA->Akamatching()) {
|
||||||
if(AA->Akamatching()) {
|
// ... but only if we did NOT change aka manually
|
||||||
// ... but only if we did NOT change aka manually
|
if(AA->Aka().addr.equals(AA->aka())) {
|
||||||
if(AA->Aka().addr.equals(AA->aka())) {
|
Addr aka_addr = AA->Aka().addr;
|
||||||
Addr aka_addr = AA->Aka().addr;
|
AkaMatch(&aka_addr, &omsg->orig);
|
||||||
AkaMatch(&aka_addr, &omsg->orig);
|
AA->SetAka(aka_addr);
|
||||||
AA->SetAka(aka_addr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -882,6 +880,8 @@ void MakeMsg(int mode, GMsg* omsg, bool ignore_replyto) {
|
|||||||
msg->dest = omsg->orig;
|
msg->dest = omsg->orig;
|
||||||
strcpy(msg->idest, *omsg->ireplyto ? omsg->ireplyto : omsg->iorig);
|
strcpy(msg->idest, *omsg->ireplyto ? omsg->ireplyto : omsg->iorig);
|
||||||
}
|
}
|
||||||
|
if(not *msg->iaddr)
|
||||||
|
strcpy(msg->iaddr, msg->idest);
|
||||||
strcpy(msg->re, omsg->re);
|
strcpy(msg->re, omsg->re);
|
||||||
|
|
||||||
if(AA->Replyre() or AA->isinternet()) {
|
if(AA->Replyre() or AA->isinternet()) {
|
||||||
@ -928,13 +928,15 @@ void MakeMsg(int mode, GMsg* omsg, bool ignore_replyto) {
|
|||||||
msg->dest.set(msg->igate);
|
msg->dest.set(msg->igate);
|
||||||
char* ptr = strchr(msg->igate, ' ');
|
char* ptr = strchr(msg->igate, ' ');
|
||||||
if(ptr) {
|
if(ptr) {
|
||||||
strcpy(msg->realto, msg->to);
|
if(not isuucp(msg->to))
|
||||||
|
strcpy(msg->realto, msg->to);
|
||||||
strcpy(msg->to, strskip_wht(ptr));
|
strcpy(msg->to, strskip_wht(ptr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(*omsg->iaddr and (strlen(omsg->iaddr) < sizeof(Name))) {
|
else if(*omsg->iaddr and (strlen(omsg->iaddr) < sizeof(Name))) {
|
||||||
strcpy(msg->realto, msg->to);
|
if(not isuucp(msg->to))
|
||||||
|
strcpy(msg->realto, msg->to);
|
||||||
strcpy(msg->to, omsg->iaddr);
|
strcpy(msg->to, omsg->iaddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -442,6 +442,11 @@ inline char *spanfeeds(const char *str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool isuucp(const char *name);
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -310,6 +310,11 @@ void Area::RandomizeData(int mode) {
|
|||||||
strxcpy(adat->tpl, buf, sizeof(adat->tpl));
|
strxcpy(adat->tpl, buf, sizeof(adat->tpl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(CFG->grp.GetItm(GRP_WRITETEMPLATE, buf, sizeof(buf))) {
|
||||||
|
if(*buf == '@')
|
||||||
|
GetRandomLine(buf, sizeof(buf), buf+1);
|
||||||
|
strxcpy(adat->wtpl, buf, sizeof(adat->wtpl));
|
||||||
|
}
|
||||||
|
|
||||||
CFG->grp.GetItm(GRP_TEMPLATEMATCH, adat->templatematch);
|
CFG->grp.GetItm(GRP_TEMPLATEMATCH, adat->templatematch);
|
||||||
CFG->grp.GetItm(GRP_TWITMODE, adat->twitmode);
|
CFG->grp.GetItm(GRP_TWITMODE, adat->twitmode);
|
||||||
|
@ -179,24 +179,30 @@ int TemplateToText(int mode, GMsg* msg, GMsg* oldmsg, const char* tpl, int origa
|
|||||||
|
|
||||||
strcpy(tplfile, tpl);
|
strcpy(tplfile, tpl);
|
||||||
|
|
||||||
if(AA->Templatematch() and not (CFG->tplno or AA->isnewsgroup() or AA->isemail())) {
|
if((mode != MODE_WRITEHEADER) and (mode != MODE_WRITE) and (mode != MODE_HEADER)) {
|
||||||
if(not ((mode == MODE_NEW or mode == MODE_REPLYCOMMENT or mode == MODE_FORWARD)
|
if(AA->Templatematch() and not (CFG->tplno or AA->isnewsgroup() or AA->isemail())) {
|
||||||
and (AA->isecho() or AA->islocal()))) {
|
if(not ((mode == MODE_NEW or mode == MODE_REPLYCOMMENT or mode == MODE_FORWARD)
|
||||||
vector<Tpl>::iterator tp;
|
and (AA->isecho() or AA->islocal()))) {
|
||||||
for(tp = CFG->tpl.begin(); tp != CFG->tpl.end(); tp++)
|
vector<Tpl>::iterator tp;
|
||||||
if(tp->match.net and msg->dest.match(tp->match)) {
|
for(tp = CFG->tpl.begin(); tp != CFG->tpl.end(); tp++)
|
||||||
strcpy(tplfile, tp->file);
|
if(tp->match.net and msg->dest.match(tp->match)) {
|
||||||
break;
|
strcpy(tplfile, tp->file);
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tplfile == CleanFilename(tplfile))
|
if(not strieql(tplfile, "built-in")) {
|
||||||
strcpy(tplfile, AddPath(CFG->templatepath, tplfile));
|
if(tplfile == CleanFilename(tplfile))
|
||||||
|
strcpy(tplfile, AddPath(CFG->templatepath, tplfile));
|
||||||
|
|
||||||
if(not fexist(tplfile) and not CFG->tpl.empty())
|
if((mode != MODE_WRITEHEADER) and (mode != MODE_WRITE) and (mode != MODE_HEADER)) {
|
||||||
strcpy(tplfile, AddPath(CFG->templatepath, CFG->tpl[CFG->tplno].file));
|
if(not fexist(tplfile) and not CFG->tpl.empty())
|
||||||
if(not fexist(tplfile) or CFG->tpl.empty()) {
|
strcpy(tplfile, AddPath(CFG->templatepath, CFG->tpl[CFG->tplno].file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(strieql(tplfile, "built-in") or not fexist(tplfile) or CFG->tpl.empty()) {
|
||||||
tmptpl = YES; // Create a temporary template
|
tmptpl = YES; // Create a temporary template
|
||||||
mktemp(strcpy(tplfile, AddPath(CFG->templatepath, "GDXXXXXX")));
|
mktemp(strcpy(tplfile, AddPath(CFG->templatepath, "GDXXXXXX")));
|
||||||
fp = fsopen(tplfile, "wt", CFG->sharemode);
|
fp = fsopen(tplfile, "wt", CFG->sharemode);
|
||||||
|
@ -715,7 +715,7 @@ void guserbase::update_addressbook(GMsg* msg, bool reverse, bool force) {
|
|||||||
INam name;
|
INam name;
|
||||||
|
|
||||||
strcpy(name, (reverse ? msg->By() : msg->To()));
|
strcpy(name, (reverse ? msg->By() : msg->To()));
|
||||||
strcpy(iaddr, (reverse ? msg->iorig : msg->idest));
|
strcpy(iaddr, (reverse ? (*msg->iorig ? msg->iorig : msg->iaddr) : msg->idest));
|
||||||
fidoaddr = (reverse ? msg->orig : msg->dest);
|
fidoaddr = (reverse ? msg->orig : msg->dest);
|
||||||
|
|
||||||
if(not strblank(name)) {
|
if(not strblank(name)) {
|
||||||
@ -755,7 +755,7 @@ void guserbase::update_addressbook(GMsg* msg, bool reverse, bool force) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 6. It's a UUCP name
|
// 6. It's a UUCP name
|
||||||
if(strieql("UUCP", name) or (*AA->Internetgate().name and strieql(AA->Internetgate().name, name)))
|
if(isuucp(name))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 7. If it is already an email address
|
// 7. If it is already an email address
|
||||||
@ -815,7 +815,17 @@ bool guserbase::lookup_addressbook(GMsg* msg, char* name, char* aka, bool browse
|
|||||||
|
|
||||||
found = true;
|
found = true;
|
||||||
|
|
||||||
strcpy(name, entry.name);
|
if(*msg->iaddr and not AA->isinternet()) {
|
||||||
|
// do UUCP addressing
|
||||||
|
strcpy(msg->realto, entry.name);
|
||||||
|
if(*AA->Internetgate().name)
|
||||||
|
strcpy(name, AA->Internetgate().name);
|
||||||
|
else
|
||||||
|
strcpy(name, entry.name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
strcpy(name, entry.name);
|
||||||
|
|
||||||
if(not strblank(entry.pseudo))
|
if(not strblank(entry.pseudo))
|
||||||
strcpy(msg->pseudoto, entry.pseudo);
|
strcpy(msg->pseudoto, entry.pseudo);
|
||||||
|
|
||||||
@ -826,14 +836,10 @@ bool guserbase::lookup_addressbook(GMsg* msg, char* name, char* aka, bool browse
|
|||||||
else {
|
else {
|
||||||
entry.fidoaddr.make_string(aka);
|
entry.fidoaddr.make_string(aka);
|
||||||
if(strblank(aka) and not strblank(entry.iaddr)) {
|
if(strblank(aka) and not strblank(entry.iaddr)) {
|
||||||
// do UUCP addressing
|
|
||||||
strcpy(msg->realto, entry.name);
|
|
||||||
strcpy(msg->idest, entry.iaddr);
|
strcpy(msg->idest, entry.iaddr);
|
||||||
strcpy(msg->iaddr, entry.iaddr);
|
strcpy(msg->iaddr, entry.iaddr);
|
||||||
if(AA->Internetgate().addr.valid())
|
if(AA->Internetgate().addr.valid())
|
||||||
AA->Internetgate().addr.make_string(aka);
|
AA->Internetgate().addr.make_string(aka);
|
||||||
if(*AA->Internetgate().name)
|
|
||||||
strcpy(name, AA->Internetgate().name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -849,7 +855,7 @@ bool guserbase::lookup_addressbook(GMsg* msg, char* name, char* aka, bool browse
|
|||||||
|
|
||||||
void guserbase::build_pseudo(GMsg* msg, char* name, char* aka, bool direction) {
|
void guserbase::build_pseudo(GMsg* msg, char* name, char* aka, bool direction) {
|
||||||
|
|
||||||
if(*msg->iaddr and strieql("UUCP", name) or (*AA->Internetgate().name and strieql(AA->Internetgate().name, name)))
|
if(*msg->iaddr and isuucp(name))
|
||||||
strcpy(direction ? msg->pseudoto : msg->pseudofrom, strlword(msg->iaddr, " @"));
|
strcpy(direction ? msg->pseudoto : msg->pseudofrom, strlword(msg->iaddr, " @"));
|
||||||
else
|
else
|
||||||
strcpy(direction ? msg->pseudoto : msg->pseudofrom, strlword(name, " @"));
|
strcpy(direction ? msg->pseudoto : msg->pseudofrom, strlword(name, " @"));
|
||||||
|
@ -310,6 +310,7 @@ struct AreaData {
|
|||||||
Node username;
|
Node username;
|
||||||
bool usetzutc;
|
bool usetzutc;
|
||||||
IAdr whoto;
|
IAdr whoto;
|
||||||
|
Path wtpl;
|
||||||
XlatName xlatexport;
|
XlatName xlatexport;
|
||||||
XlatName xlatimport;
|
XlatName xlatimport;
|
||||||
|
|
||||||
@ -569,6 +570,7 @@ public:
|
|||||||
bool Viewkludge() const { return adat->viewkludge; }
|
bool Viewkludge() const { return adat->viewkludge; }
|
||||||
bool Viewquote() const { return adat->viewquote; }
|
bool Viewquote() const { return adat->viewquote; }
|
||||||
const char* Whoto() const { return adat->whoto; }
|
const char* Whoto() const { return adat->whoto; }
|
||||||
|
const char* WTpl() const { return adat->wtpl; }
|
||||||
const char* Xlatexport() const { return adat->xlatexport; }
|
const char* Xlatexport() const { return adat->xlatexport; }
|
||||||
const char* Xlatimport() const { return adat->xlatimport; }
|
const char* Xlatimport() const { return adat->xlatimport; }
|
||||||
|
|
||||||
|
@ -100,6 +100,7 @@ enum {
|
|||||||
GRP_VIEWKLUDGE,
|
GRP_VIEWKLUDGE,
|
||||||
GRP_VIEWQUOTE,
|
GRP_VIEWQUOTE,
|
||||||
GRP_WHOTO,
|
GRP_WHOTO,
|
||||||
|
GRP_WRITETEMPLATE,
|
||||||
GRP_XLATEXPORT,
|
GRP_XLATEXPORT,
|
||||||
GRP_XLATIMPORT,
|
GRP_XLATIMPORT,
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user