1 // This may look like C code, but it is really -*- C++ -*-
2
3 // ------------------------------------------------------------------
4 // The Goldware Library
5 // Copyright (C) 1990-1999 Odinn Sorensen
6 // ------------------------------------------------------------------
7 // This library is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU Library General Public
9 // License as published by the Free Software Foundation; either
10 // version 2 of the License, or (at your option) any later version.
11 //
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 // Library General Public License for more details.
16 //
17 // You should have received a copy of the GNU Library General Public
18 // License along with this program; if not, write to the Free
19 // Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20 // MA 02111-1307, USA
21 // ------------------------------------------------------------------
22 // $Id: gmoxbbs3.cpp,v 1.9 2006/05/14 11:45:05 ssianky Exp $
23 // ------------------------------------------------------------------
24 // AdeptXBBS messagebase engine.
25 // ------------------------------------------------------------------
26
27
28 // ------------------------------------------------------------------
29
30 #include <gmemdbg.h>
31 #include <gdbgtrk.h>
32 #include <gstrall.h>
33
34 #include <gmoxbbs.h>
35
36
37 // ------------------------------------------------------------------
38
load_message(int __mode,gmsg * __msg,XbbsHdr & __hdr)39 int XbbsArea::load_message(int __mode, gmsg* __msg, XbbsHdr& __hdr) {
40
41 // Setup some local variables for speed
42 int _fhdata = data->fhdata;
43 uint _reln = Msgn->ToReln(__msg->msgno);
44
45 // Load the message header
46 memset(&__hdr, 0, sizeof(XbbsHdr));
47 lseekset(_fhdata, (_reln-1)*sizeof(XbbsHdr));
48 read(_fhdata, &__hdr, sizeof(XbbsHdr));
49
50 // Convert header
51
52 strcpy(__msg->by, __hdr.from);
53 strcpy(__msg->to, __hdr.to);
54 strcpy(__msg->re, __hdr.subj);
55
56 __msg->orig.zone = __msg->oorig.zone = __hdr.origaddr.zone;
57 __msg->orig.net = __msg->oorig.net = __hdr.origaddr.net;
58 __msg->orig.node = __msg->oorig.node = __hdr.origaddr.node;
59 __msg->orig.point = __msg->oorig.point = __hdr.origaddr.point;
60
61 __msg->dest.zone = __msg->odest.zone = __hdr.destaddr.zone;
62 __msg->dest.net = __msg->odest.net = __hdr.destaddr.net;
63 __msg->dest.node = __msg->odest.node = __hdr.destaddr.node;
64 __msg->dest.point = __msg->odest.point = __hdr.destaddr.point;
65
66 __msg->written = FidoTimeToUnix(__hdr.date);
67 __msg->received = __hdr.timerecv;
68
69 if(__hdr.indate[2])
70 {
71 struct tm t;
72 t.tm_year = __hdr.indate[0]+89;
73 t.tm_mon = __hdr.indate[1]-1;
74 t.tm_mday = __hdr.indate[2];
75 t.tm_hour = t.tm_min = t.tm_sec = 0;
76 t.tm_isdst = -1;
77 time32_t a = gmktime(&t);
78 struct tm tp; ggmtime(&tp, &a);
79 tp.tm_isdst = -1;
80 time32_t b = gmktime(&tp);
81 __msg->arrived = a + a - b;
82 }
83
84 __msg->cost = __hdr.cost;
85 __msg->timesread = __hdr.timesread;
86
87 __msg->txtstart = __hdr.start;
88 __msg->txtlength = __hdr.length;
89
90 // Convert fflag attributes
91 __msg->attr.pvt(__hdr.fflags & FFLAGS_MSGPRIVATE);
92 __msg->attr.cra(__hdr.fflags & FFLAGS_MSGCRASH);
93 __msg->attr.rcv(__hdr.fflags & FFLAGS_MSGREAD);
94 __msg->attr.snt(__hdr.fflags & FFLAGS_MSGSENT);
95 __msg->attr.att(__hdr.fflags & FFLAGS_MSGFILE);
96 __msg->attr.trs(__hdr.fflags & FFLAGS_MSGFWD);
97 __msg->attr.orp(__hdr.fflags & FFLAGS_MSGORPHAN);
98 __msg->attr.k_s(__hdr.fflags & FFLAGS_MSGKILL);
99 __msg->attr.loc(__hdr.fflags & FFLAGS_MSGLOCAL);
100 __msg->attr.frq(__hdr.fflags & FFLAGS_MSGFRQ);
101 __msg->attr.rrq(__hdr.fflags & FFLAGS_MSGRRQ);
102 __msg->attr.rrc(__hdr.fflags & FFLAGS_MSGCPT);
103 __msg->attr.arq(__hdr.fflags & FFLAGS_MSGARQ);
104 __msg->attr.urq(__hdr.fflags & FFLAGS_MSGURQ);
105
106 // Convert xflag attributes
107 __msg->attr.del(__hdr.xflags & XFLAGS_MSGDELETED);
108 __msg->attr.ano(__hdr.xflags & XFLAGS_MSGANON);
109 __msg->attr.ume(__hdr.xflags & XFLAGS_MSGECHO);
110 __msg->attr.umn(__hdr.xflags & XFLAGS_MSGNET);
111 __msg->attr.fsc(__hdr.xflags & XFLAGS_MSGSCANNED);
112 __msg->attr.lok(__hdr.xflags & XFLAGS_MSGKEEP);
113 __msg->attr.trt(__hdr.xflags & XFLAGS_MSGTREATED);
114 __msg->attr.lzs(__hdr.xflags & XFLAGS_MSGPACKED);
115 __msg->attr.gsc(__hdr.xflags & XFLAGS_MSGGSCAN);
116 __msg->attr.rsc(__hdr.xflags & XFLAGS_MSGRSCAN);
117 __msg->attr.arc(__hdr.xflags & XFLAGS_MSGARCHIVED);
118 __msg->attr.tag(__hdr.xflags & XFLAGS_MSGTAGGED);
119
120 // Set the unsent attribute
121 #if 0
122 if(isnet())
123 __msg->attr.uns((__msg->attr.loc() and not __msg->attr.snt()) or (__hdr.xflags & XFLAGS_MSGNET));
124 else
125 __msg->attr.uns(__hdr.xflags & XFLAGS_MSGECHO);
126 #endif
127
128 if(isnet() or isecho())
129 __msg->attr.uns(not (__hdr.xflags & XFLAGS_MSGSCANNED));
130
131 __msg->adeptxbbs.iflags = __hdr.iflags;
132 __msg->adeptxbbs.oflags = __hdr.oflags;
133
134 // If message text is requested
135 if(__mode & GMSG_TXT) {
136
137 // Get length of message text
138 uint _txtlen = __hdr.length;
139
140 // Allocate space for the message text
141 __msg->txt = (char*)throw_calloc(1, _txtlen+256);
142
143 // Read the message text
144 lseekset(data->fhtext, __hdr.start);
145 read(data->fhtext, __msg->txt, _txtlen);
146 }
147
148 GFTRK(0);
149
150 // Success
151 return true;
152 }
153
154
155 // ------------------------------------------------------------------
156
load_hdr(gmsg * __msg)157 int XbbsArea::load_hdr(gmsg* __msg) {
158
159 GFTRK("XbbsLoadHdr");
160
161 XbbsHdr _hdr;
162 return load_message(GMSG_HDR, __msg, _hdr);
163 }
164
165
166 // ------------------------------------------------------------------
167
load_msg(gmsg * __msg)168 int XbbsArea::load_msg(gmsg* __msg) {
169
170 GFTRK("XbbsLoadMsg");
171
172 XbbsHdr _hdr;
173 return load_message(GMSG_HDRTXT, __msg, _hdr);
174 }
175
176
177 // ------------------------------------------------------------------
178
179