]> code.citadel.org Git - citadel.git/blob - daphne/message.cpp
Fixed a couple of memory leaks detected by Valgrind.
[citadel.git] / daphne / message.cpp
1 #include "includes.hpp"
2 #include <time.h>
3
4 CitMessage::CitMessage(CitClient *sock, wxString getmsg_cmd, wxString inRoom) {
5
6         wxString sendcmd, recvcmd, buf, key;
7         wxString xferbuf;
8         int i, pos;
9         bool in_text = FALSE;           // true if reading the message body
10
11         room.Empty();
12         author.Empty();
13         recipient.Empty();
14         msgtext.Empty();
15         timestamp = time(NULL);         // nb. this is Unix-specific
16         format_type = 0;
17         nodename = sock->NodeName;
18
19         // Fetch the message from the server
20         if (sock->serv_trans(getmsg_cmd, recvcmd, xferbuf, inRoom) != 1) {
21                 msgtext = "<EM>Error: " + recvcmd.Mid(4) + "</EM>" ;
22                 return;
23         }
24
25         while (pos = xferbuf.Find('\n', FALSE),  (pos >= 0) ) {
26                 buf = xferbuf.Left(pos);
27                 xferbuf = xferbuf.Mid(pos+1);
28                 
29                 // Break out important information if in the header
30                 if (!in_text) {
31                         key = buf.Left(4);
32                         if (!key.CmpNoCase("text"))
33                                 in_text = TRUE;
34                         else if (!key.CmpNoCase("from"))
35                                 author = buf.Mid(5);
36                         else if (!key.CmpNoCase("rcpt"))
37                                 recipient = buf.Mid(5);
38                         else if (!key.CmpNoCase("time"))
39                                 timestamp = atol(buf.Mid(5));
40                         else if (!key.CmpNoCase("room"))
41                                 room = buf.Mid(5);
42                         else if (!key.CmpNoCase("type")) {
43                                 format_type = atoi(buf.Mid(5));
44                                 if (format_type != 0) {
45                                         msgtext.Append("<PRE>\n");
46                                 }
47                         }
48                         else if (!key.CmpNoCase("node"))
49                                 nodename = buf.Mid(5);
50
51                 // Otherwise, process message text
52                 } else {
53                         if (format_type != 0) {
54                                 msgtext.Append(buf);
55                                 msgtext.Append("\n");
56                         } else {
57                                 if ( (buf.Left(1) == " ")
58                                    && (msgtext.Len() > 0) )
59                                         msgtext.Append("<BR>");
60                                 msgtext.Append(buf);
61                         }
62                 }
63         }
64         if (format_type != 0) 
65                 msgtext.Append("</PRE>\n");
66 }