This commit is contained in:
Alexander S. Aganichev
2001-04-08 08:02:01 +00:00
parent b3cf864163
commit 54e47b7b0a
6 changed files with 128 additions and 69 deletions

View File

@@ -118,7 +118,27 @@
#define JAMSUB_PATH2D 2002
#define JAMSUB_FLAGS 2003
#define JAMSUB_TZUTCINFO 2004
#define JAMSUB_UNKNOWN 0xFFFF
#define JAMSUB_OADDRESS_LEN 100
#define JAMSUB_DADDRESS_LEN 100
#define JAMSUB_SENDERNAME_LEN 100
#define JAMSUB_RECEIVERNAME_LEN 100
#define JAMSUB_MSGID_LEN 100
#define JAMSUB_REPLYID_LEN 100
#define JAMSUB_SUBJECT_LEN 100
#define JAMSUB_PID_LEN 40
#define JAMSUB_TRACE_LEN ((ulong)(-1))
#define JAMSUB_ENCLOSEDFILE_LEN ((ulong)(-1))
#define JAMSUB_ENCLOSEDFILEWALIAS_LEN ((ulong)(-1))
#define JAMSUB_ENCLOSEDFREQ_LEN ((ulong)(-1))
#define JAMSUB_ENCLOSEDFILEWCARD_LEN ((ulong)(-1))
#define JAMSUB_ENCLOSEDINDIRECFILE_LEN ((ulong)(-1))
#define JAMSUB_EMBINDAT_LEN ((ulong)(-1))
#define JAMSUB_FTSKLUDGE_LEN 255
#define JAMSUB_SEENBY2D_LEN ((ulong)(-1))
#define JAMSUB_PATH2D_LEN ((ulong)(-1))
#define JAMSUB_FLAGS_LEN ((ulong)(-1))
#define JAMSUB_TZUTCINFO_LEN ((ulong)(-1))
// ------------------------------------------------------------------
@@ -273,7 +293,7 @@ protected:
int load_message(int __mode, gmsg* __msg, JamHdr& __hdr);
void add_subfield(JamHdr& __hdr, byte*& __subfield, word __loid, word __hiid, char* __data);
void add_subfield(JamHdr& __hdr, byte*& __subfield, word __loid, word __hiid, char* __data, ulong maxlen);
void save_message(int __mode, gmsg* __msg, JamHdr& __hdr);

View File

@@ -103,16 +103,16 @@ void JamArea::unlock() {
// ------------------------------------------------------------------
void JamArea::add_subfield(JamHdr& __hdr, byte*& __subfield, word __loid, word __hiid, char* __data) {
void JamArea::add_subfield(JamHdr& __hdr, byte*& __subfield, word __loid, word __hiid, char* __data, ulong __maxlen) {
uint _datlen = strlen(__data);
ulong _datlen = strlen(__data);
__subfield = (byte*)throw_realloc(__subfield, (uint)__hdr.subfieldlen+sizeof(JamSubFieldHdr)+_datlen);
JamSubField* _subfieldptr = (JamSubField*)(__subfield + (uint)__hdr.subfieldlen);
_subfieldptr->loid = __loid;
_subfieldptr->hiid = __hiid;
_subfieldptr->datlen = _datlen;
memcpy(_subfieldptr->buffer, __data, _datlen);
__hdr.subfieldlen += sizeof(JamSubFieldHdr) + _datlen;
_subfieldptr->datlen = MinV(_datlen, __maxlen);
memcpy(_subfieldptr->buffer, __data, _subfieldptr->datlen);
__hdr.subfieldlen += sizeof(JamSubFieldHdr) + _subfieldptr->datlen;
}
@@ -196,23 +196,23 @@ void JamArea::save_message(int __mode, gmsg* __msg, JamHdr& __hdr) {
}
if(*__msg->by)
add_subfield(__hdr, _subfield, JAMSUB_SENDERNAME, 0, __msg->by);
add_subfield(__hdr, _subfield, JAMSUB_SENDERNAME, 0, __msg->by, JAMSUB_SENDERNAME_LEN);
if(__msg->orig.net) {
__msg->orig.make_string(_buf, __msg->odom);
add_subfield(__hdr, _subfield, JAMSUB_OADDRESS, 0, _buf);
add_subfield(__hdr, _subfield, JAMSUB_OADDRESS, 0, _buf, JAMSUB_OADDRESS_LEN);
}
if(*__msg->to)
add_subfield(__hdr, _subfield, JAMSUB_RECEIVERNAME, 0, __msg->to);
add_subfield(__hdr, _subfield, JAMSUB_RECEIVERNAME, 0, __msg->to, JAMSUB_RECEIVERNAME_LEN);
if(__msg->dest.net) {
__msg->dest.make_string(_buf, __msg->ddom);
add_subfield(__hdr, _subfield, JAMSUB_DADDRESS, 0, _buf);
add_subfield(__hdr, _subfield, JAMSUB_DADDRESS, 0, _buf, JAMSUB_DADDRESS_LEN);
}
if(*__msg->re)
add_subfield(__hdr, _subfield, JAMSUB_SUBJECT, 0, __msg->re);
add_subfield(__hdr, _subfield, JAMSUB_SUBJECT, 0, __msg->re, JAMSUB_SUBJECT_LEN);
// Convert kludges
_line = 0;
@@ -221,6 +221,7 @@ void JamArea::save_message(int __mode, gmsg* __msg, JamHdr& __hdr) {
if(_pdptr->control > CTRL_KLUDGE) {
uint _offset = 0;
word _loid = 0;
ulong _maxlen = 0;
switch(_pdptr->control) {
case CTRL_INTL:
case CTRL_FMPT:
@@ -229,44 +230,53 @@ void JamArea::save_message(int __mode, gmsg* __msg, JamHdr& __hdr) {
break;
case CTRL_MSGID:
_loid = JAMSUB_MSGID;
_maxlen = JAMSUB_MSGID_LEN;
_offset = 8;
strxcpy(__msg->msgids, _pdptr->text+_offset, sizeof(__msg->msgids));
break;
case CTRL_REPLY:
_loid = JAMSUB_REPLYID;
_maxlen = JAMSUB_REPLYID_LEN;
_offset = 8;
strxcpy(__msg->replys, _pdptr->text+_offset, sizeof(__msg->replys));
break;
case CTRL_PID:
_loid = JAMSUB_PID;
_maxlen = JAMSUB_PID_LEN;
_offset = 6;
break;
case CTRL_VIA:
_loid = JAMSUB_TRACE;
_maxlen = JAMSUB_TRACE_LEN;
_offset = 6;
break;
case CTRL_SEENBY:
_loid = JAMSUB_SEENBY2D;
_maxlen = JAMSUB_SEENBY2D_LEN;
_offset = 9;
break;
case CTRL_SEENBY1:
_loid = JAMSUB_SEENBY2D;
_maxlen = JAMSUB_SEENBY2D_LEN;
_offset = 10;
break;
case CTRL_PATH:
_loid = JAMSUB_PATH2D;
_maxlen = JAMSUB_PATH2D_LEN;
_offset = 7;
break;
case CTRL_FLAGS:
_loid = JAMSUB_FLAGS;
_maxlen = JAMSUB_FLAGS_LEN;
_offset = 7;
break;
default:
_loid = JAMSUB_FTSKLUDGE;
_maxlen = JAMSUB_FTSKLUDGE_LEN;
_offset = 1;
}
if(_offset)
add_subfield(__hdr, _subfield, _loid, 0, _pdptr->text+_offset);
add_subfield(__hdr, _subfield, _loid, 0, _pdptr->text+_offset, _maxlen);
}
_pdptr++;
_line++;