diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c index 39980dc1c8a29006bf3f82cde3789e6db3680314..5974abee653f3df0e50a8139f43a2f2446a78e34 100644 --- a/src/sbbs3/js_msgbase.c +++ b/src/sbbs3/js_msgbase.c @@ -335,6 +335,14 @@ static BOOL parse_header_object(JSContext* cx, private_t* p, JSObject* hdr, smbm smb_hfield(msg, FIDOPID, (ushort)strlen(cp), cp); } + if(JS_GetProperty(cx, hdr, "ftn_tid", &val) && val!=JSVAL_VOID) { + if((js_str=JS_ValueToString(cx,val))==NULL) + return(FALSE); + if((cp=JS_GetStringBytes(js_str))==NULL) + return(FALSE); + smb_hfield(msg, FIDOTID, (ushort)strlen(cp), cp); + } + if(JS_GetProperty(cx, hdr, "date", &val) && val!=JSVAL_VOID) { if((js_str=JS_ValueToString(cx,val))==NULL) return(FALSE); @@ -568,6 +576,10 @@ js_get_msg_header(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval * JS_DefineProperty(cx, hdrobj, "ftn_pid" ,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.ftn_pid)) ,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE); + if(msg.ftn_tid!=NULL) + JS_DefineProperty(cx, hdrobj, "ftn_tid" + ,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.ftn_pid)) + ,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE); if(msg.ftn_area!=NULL) JS_DefineProperty(cx, hdrobj, "ftn_area" ,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,msg.ftn_area)) diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c index 6cef322e224ed1f737c2a599d1a4fbed6c47bf3d..717ada8677afd04c147f145536c0654b36356304 100644 --- a/src/sbbs3/sbbsecho.c +++ b/src/sbbs3/sbbsecho.c @@ -2420,6 +2420,15 @@ int fmsgtosmsg(uchar HUGE16 *fbuf, fmsghdr_t fmsghdr, uint user, uint subnum) if(m>l) smb_hfield(&msg,FIDOPID,(ushort)(m-l),fbuf+l); } + else if(!strncmp((char *)fbuf+l+1,"TID:",4)) { + l+=5; + while(l<length && fbuf[l]<=SP) l++; + m=l; + while(m<length && fbuf[m]!=CR) m++; + while(m && fbuf[m-1]<=SP) m--; + if(m>l) + smb_hfield(&msg,FIDOTID,(ushort)(m-l),fbuf+l); } + else if(!strncmp((char *)fbuf+l+1,"TZUTC:",6)) { /* FSP-1001 */ l+=7; while(l<length && fbuf[l]<=SP) l++; @@ -3761,8 +3770,10 @@ void export_echomail(char *sub_code,faddr_t addr) } if(msg.ftn_pid!=NULL) /* use original PID */ f+=sprintf(fmsgbuf+f,"\1PID: %.256s\r", msg.ftn_pid); - else /* generate PID */ - f+=sprintf(fmsgbuf+f,"\1PID: SBBSecho v%s-%s r%s %s %s\r" + if(msg.ftn_tid!=NULL) /* use original TID */ + f+=sprintf(fmsgbuf+f,"\1TID: %.256s\r", msg.ftn_tid); + else /* generate TID */ + f+=sprintf(fmsgbuf+f,"\1TID: SBBSecho v%s-%s r%s %s %s\r" ,SBBSECHO_VER,PLATFORM_DESC,revision,__DATE__,compiler); /* Unknown kludge lines are added here */ diff --git a/src/smblib/smbdefs.h b/src/smblib/smbdefs.h index 6b102a3b96638c2b744bf7ba0075ae5a1f61c3c7..87f07e8c4c8a0d08e59dbb96673271787b611d65 100644 --- a/src/smblib/smbdefs.h +++ b/src/smblib/smbdefs.h @@ -265,6 +265,7 @@ #define FIDOREPLYID 0xa5 #define FIDOPID 0xa6 #define FIDOFLAGS 0xa7 +#define FIDOTID 0xa8 #define RFC822HEADER 0xb0 #define RFC822MSGID 0xb1 @@ -518,6 +519,7 @@ typedef struct { // Message *path, // USENET Path *newsgroups, // USENET Newsgroups *ftn_pid, // FTN PID + *ftn_tid, // FTN TID *ftn_area, // FTN AREA *ftn_flags, // FTN FLAGS *ftn_msgid, // FTN MSGID diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c index d2dcdf9615f922fe49183e1014c490e679d0aca1..3a6f16bbb6ca6468da5c256c886b8fa0a35a5f35 100644 --- a/src/smblib/smblib.c +++ b/src/smblib/smblib.c @@ -845,6 +845,9 @@ int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg) case FIDOPID: msg->ftn_pid=(char*)msg->hfield_dat[i]; break; + case FIDOTID: + msg->ftn_tid=(char*)msg->hfield_dat[i]; + break; case FIDOFLAGS: msg->ftn_flags=(char*)msg->hfield_dat[i]; break; @@ -1833,6 +1836,7 @@ char* SMBCALL smb_hfieldtype(ushort type) case FIDOREPLYID: return("FIDOREPLYID"); case FIDOPID: return("FIDOPID"); case FIDOFLAGS: return("FIDOFLAGS"); + case FIDOTID: return("FIDOTID"); case RFC822HEADER: return("RFC822HEADER"); case RFC822MSGID: return("RFC822MSGID");