1 /* $XConsortium: mailbox.C /main/4 1996/04/21 19:44:02 drk $ */
8 * RESTRICTED CONFIDENTIAL INFORMATION:
10 * The information in this document is subject to special
11 * restrictions in a confidential disclosure agreement between
12 * HP, IBM, Sun, USL, SCO and Univel. Do not distribute this
13 * document outside HP, IBM, Sun, USL, SCO, or Univel without
14 * Sun's specific written approval. This document and all copies
15 * and derivative works thereof must be returned or destroyed at
18 * Copyright 1994 Sun Microsystems, Inc. All rights reserved.
27 DmxMailbox::DmxMailbox (void)
37 DmxMailbox::loadMessages (void)
40 boolean_t moreMessages = B_TRUE;
44 mbox->open (env, /* DtMailEnv */
45 DTM_FALSE, /* auto_create */
46 O_RDONLY, /* open(2) flag */
47 (mode_t) 0, /* create(2) mode */
48 DTM_FALSE, /* lock_flag */
49 DTM_TRUE /* auto_parse */
52 if (handleError (env, "open mailbox") == B_TRUE)
55 // get the first message handle
56 DtMailMessageHandle first = NULL, next = NULL, prev = NULL;
57 DtMailHeaderRequest request;
58 DtMailHeaderLine hdrline;
60 DtMail::Message *m = NULL; // temporary
62 createHeaderRequest (request);
64 first = mbox->getFirstMessageSummary (env, request, hdrline);
66 if (handleError (env, "get first msg summary") == B_TRUE)
72 "loadMessages: error w/1st message...exiting.\n");
76 // this makes hash of the caching strategy, but oh well....
77 m = mbox->getMessage (env, first);
78 if (handleError (env, "get first msg") == B_TRUE)
80 msg [i].setMessage (m);
84 msg [i].setHandle (first);
85 msg [i].setHeader (hdrline);
87 while (moreMessages == B_TRUE)
89 next = mbox->getNextMessageSummary (env, prev,
94 moreMessages = B_FALSE;
95 if (handleError (env, "msgLoop") == B_TRUE)
97 break; // break out if error
100 msg [i].setHandle (next);
101 msg [i].setHeader (hdrline);
110 // fill in the remaining message structures .. temporary, honest!
111 for (int j = 1; j <= messageCount; j++)
113 m = mbox->getMessage (env, msg [j].msgHandle);
114 if (handleError (env, "getMessage loop") == B_TRUE)
116 printf ("fatal error...bailing...\n");
119 msg [j].setMessage (m);
122 sprintf (tmp, "%d", j); // ick
123 msg [j].setInfo (tmp);
126 if (msg[j].isNew == B_TRUE)
137 // no new messages -- start with first message in mailbox
141 // free header request structure
143 // this assumes that you have allocated all of the possible headers
144 // in the enum DmxHeaders -- a bad assumption, but currently true
145 for (k = 0; k < DMXNUMHDRS; k++)
147 free (request.header_name [k]);
149 delete request.header_name;
155 DmxMailbox::createHeaderRequest (DtMailHeaderRequest &request)
157 // set up default headers
158 request.number_of_names = DMXNUMHDRS;
159 request.header_name = new (char* [DMXNUMHDRS]);
160 request.header_name[DMXFROM] = strdup(DtMailMessageSender);
161 request.header_name[DMXSUBJ] = strdup(DtMailMessageSubject);
162 request.header_name[DMXDATE] = strdup(DtMailMessageReceivedTime);
163 request.header_name[DMXCLENGTH] = strdup(DtMailMessageContentLength);
164 request.header_name[DMXSTATUS] = strdup(DtMailMessageStatus);
165 request.header_name[DMXTO] = strdup(DtMailMessageTo);
166 request.header_name[DMXV3CHARSET] = strdup(DtMailMessageV3charset);
167 request.header_name[DMXCONTENTTYPE] = strdup(DtMailMessageContentType);
173 DmxMailbox::printMailboxInfo (void)
177 printf ("\"%s\": %d messages %d new\n",
178 name, messageCount, newMessages);
180 printf ("\"%s\": %d messages\n",