home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / MMSRC029.ZIP / mmail-0.29 / mmail / mmail.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1999-07-24  |  4.1 KB  |  218 lines

  1. /*
  2.  * MultiMail offline mail reader
  3.  * mmail class
  4.  
  5.  Copyright (c) 1996 Toth Istvan <stoty@vma.bme.hu>
  6.  Copyright (c) 1999 William McBrine <wmcbrine@clark.net>,
  7.                     Robert Vukovic <vrobert@uns.ns.ac.yu>
  8.  
  9.  Distributed under the GNU General Public License.
  10.  For details, see the file COPYING in the parent directory. */
  11.  
  12. #include "mmail.h"
  13. #include "compress.h"
  14. #include "../interfac/error.h"
  15.  
  16. net_address::net_address()
  17. {
  18.     isSet = isInternet = false;
  19.     zone = 0;
  20.     inetAddr = 0;
  21. }
  22.  
  23. net_address::net_address(net_address &x)
  24. {
  25.     copy(x);
  26. }
  27.  
  28. net_address::~net_address()
  29. {
  30.     if (isSet && isInternet)
  31.         delete[] inetAddr;
  32. }
  33.  
  34. bool net_address::operator==(net_address &x)
  35. {
  36.     if (isInternet != x.isInternet)
  37.         return false;
  38.  
  39.     if (isInternet)
  40.         return !strcmp(inetAddr, x.inetAddr);
  41.     else
  42.         return (zone == x.zone) && (net == x.net) &&
  43.             (node == x.node) && (point == x.point);
  44. }
  45.  
  46. net_address &net_address::operator=(const char *source)
  47. {
  48.     isInternet = source ? !(!strchr(source, '@')) : false;
  49.  
  50.     if (isInternet) {
  51.         delete[] inetAddr;
  52.         inetAddr = strdupplus(source);
  53.         isSet = true;
  54.     } else {
  55.         if (sscanf(source ? source : "", "%u:%u/%u.%u",
  56.             &zone, &net, &node, &point) == 3)
  57.                 point = 0;
  58.  
  59.         isSet = !(!zone);
  60.     }
  61.  
  62.     return *this;
  63. }
  64.  
  65. void net_address::copy(net_address &x)
  66. {
  67.     isSet = x.isSet;
  68.     if (isSet) {
  69.         isInternet = x.isInternet;
  70.         if (isInternet)
  71.             inetAddr = strdupplus(x.inetAddr);
  72.         else {
  73.             zone = x.zone;
  74.             net = x.net;
  75.             node = x.node;
  76.             point = x.point;
  77.         }
  78.     }
  79. }
  80.  
  81. net_address &net_address::operator=(net_address &x)
  82. {
  83.     copy(x);
  84.     return *this;
  85. }
  86.  
  87. net_address::operator const char *()
  88. {
  89.     static char netText[25];
  90.  
  91.     if (isSet)
  92.         if (isInternet)
  93.             return inetAddr;
  94.         else
  95.             if (point)
  96.                 sprintf(netText, "%u:%u/%u.%u",
  97.                     zone, net, node, point);
  98.             else
  99.                 sprintf(netText, "%u:%u/%u",
  100.                     zone, net, node);
  101.     else
  102.         netText[0] = '\0';
  103.  
  104.     return netText;
  105. }
  106.  
  107. mmail::mmail()
  108. {
  109.     resourceObject = new resource();
  110. };
  111.  
  112. mmail::~mmail()
  113. {
  114.     delete resourceObject;
  115. };
  116.  
  117. void mmail::Delete()
  118. {
  119.     delete areaList;
  120.     delete driverList;
  121.     delete workList;
  122. }
  123.  
  124. // Open a packet
  125. pktstatus mmail::selectPacket(const char *packetName)
  126. {
  127.       char fname[256];
  128.     pktstatus result;
  129.  
  130.     const char *x = strrchr(packetName, '/');
  131.     if (!x)
  132.         x = strrchr(packetName, '\\');
  133.     if (x) {
  134.         int len = x - packetName;
  135.         strncpy(fname, packetName, len);
  136.         fname[len] = '\0';
  137.         mychdir(error.getOrigDir());
  138.         mychdir(fname);
  139.         mygetcwd(fname);
  140.         resourceObject->set(PacketDir, fname);
  141.         packetName = x + 1;
  142.     }
  143.     resourceObject->set(PacketName, packetName);
  144.  
  145.     // Uncompression is done here
  146.     sprintf(fname, "%s/%s", resourceObject->get(PacketDir),
  147.         packetName);
  148.  
  149.     if (!resourceObject->get(oldPacketName) ||
  150.         strcmp(packetName, resourceObject->get(oldPacketName))) {
  151.         resourceObject->set(oldPacketName, packetName);
  152.         result = uncompressFile(resourceObject, fname,
  153.             resourceObject->get(WorkDir), true);
  154.         if (result != PKT_OK)
  155.             return result;
  156.     }
  157.  
  158.     workList = new file_list(resourceObject->get(WorkDir));
  159.     driverList = new driver_list(this);
  160.  
  161.     if (!driverList->getNoOfDrivers()) {
  162.         delete driverList;
  163.         delete workList;
  164.         return PTYPE_UNK;
  165.     }
  166.     return PKT_OK;
  167. };
  168.  
  169. // Save last read pointers
  170. bool mmail::saveRead()
  171. {
  172.     return driverList->getReadObject(driverList->getDriver(REPLY_AREA
  173.         + 1))->saveAll();
  174. };
  175.  
  176. // Get the BBS' "new files" list, if available
  177. file_header *mmail::getFileList()
  178. {
  179.     return (driverList->getDriver(REPLY_AREA + 1))->getFileList();
  180. }
  181.  
  182. // Get extra files, if available
  183. file_header **mmail::getBulletins()
  184. {
  185.     return (driverList->getDriver(REPLY_AREA + 1))->getBulletins();
  186. }
  187.  
  188. // Is there a reply packet?
  189. bool mmail::checkForReplies()
  190. {
  191.     return (driverList->getReplyDriver())->checkForReplies();
  192. }
  193.  
  194. // Create a reply packet
  195. bool mmail::makeReply()
  196. {
  197.         return (driverList->getReplyDriver())->makeReply();
  198. }
  199.  
  200. void mmail::deleteReplies()
  201. {
  202.     (driverList->getReplyDriver())->deleteReplies();
  203.  
  204.     // to reset the "replyExists" flag (inelegant, I know):
  205.     checkForReplies();    
  206. }
  207.  
  208. void mmail::openReply()
  209. {
  210.     (driverList->getReplyDriver())->init();
  211. }
  212.  
  213. bool mmail::getOffConfig()
  214. {
  215.     return (driverList->getReplyDriver())->getOffConfig();
  216. }
  217.  
  218.