wmclockmon: update change-log
[dockapps.git] / wmbiff / wmbiff / Client.h
blob5cfcb01ed4e1627dad63d93ffaa080d7be9a3c8c
1 /* $Id: Client.h,v 1.42 2005/05/08 21:31:22 bluehal Exp $ */
2 /* Author : Scott Holden ( scotth@thezone.net )
3 Modified : Yong-iL Joh ( tolkien@mizi.com )
4 Modified : Jorge GarcĂ­a ( Jorge.Garcia@uv.es )
6 * Email Checker Pop3/Imap4/Gicu/mbox/maildir/finger
8 * Last Updated : $Date: 2005/05/08 21:31:22 $
12 #ifndef CLIENT
13 #define CLIENT
15 #ifdef HAVE_CONFIG_H
16 #include <config.h>
17 #endif
19 #include <string.h>
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <stdint.h>
23 #include <sys/time.h>
25 #ifdef HAVE_GCRYPT_H
26 #include <gcrypt.h>
27 #endif
29 #ifdef __LCLINT__
30 typedef unsigned int off_t;
31 #endif
33 #define BUF_BIG 256
34 #define BUF_SMALL 32
35 #define BUF_SIZE 1024
37 struct msglst;
39 typedef struct Pop3_ {
40 char label[BUF_SMALL]; /* Printed at left; max 5 chars */
41 char path[BUF_BIG]; /* Path to mailbox */
42 char notify[BUF_BIG]; /* Program to notify mail arrivation */
43 char action[BUF_BIG]; /* Action to execute on mouse click, reduces to
44 * what happens on button1. this is executed after
45 * either actionnew or actionnonew (if they are
46 * defined in the config file) */
47 char actionnew[BUF_BIG]; /* Action to execute on mouse click when new mail */
48 char actionnonew[BUF_BIG]; /* Action to execute on mouse click when no new mail */
49 char actiondc[BUF_BIG]; /* Action to execute when icq is disconnected */
50 char button2[BUF_BIG]; /* What to run on button2. (middle) */
51 char fetchcmd[BUF_BIG]; /* Action for mail fetching for pop3/imap, reduces to what happens on button3 */
52 int fetchinterval;
53 int TotalMsgs; /* Total messages in mailbox */
54 int UnreadMsgs; /* New (unread) messages in mailbox */
55 int OldMsgs;
56 int OldUnreadMsgs;
57 char TextStatus[10]; /* if set to a string, toupper() and blit
58 * that string. instead of a message count */
59 int blink_stat; /* blink digits flag-counter */
60 int debug; /* debugging status */
62 struct msglst *headerCache;
64 union {
65 struct {
66 time_t mtime;
67 off_t size;
68 } mbox;
69 struct {
70 char *detail;
71 } shell;
72 struct {
73 time_t mtime_new;
74 off_t size_new;
75 time_t mtime_cur;
76 off_t size_cur;
77 unsigned int dircache_flush:1; /* hack to flush directory caches */
78 } maildir;
79 struct {
80 char password[BUF_SMALL];
81 char userName[BUF_BIG];
82 char serverName[BUF_BIG];
83 uint16_t serverPort;
84 uint16_t localPort;
85 char authList[100];
86 unsigned int dossl:1; /* use tls. */
87 /* prompt the user if we can't login / password is empty */
88 unsigned int interactive_password:1;
89 /* using the msglst feature, fetch the headers
90 to have them on hand */
91 unsigned int wantCacheHeaders:1;
92 size_t password_len; /* memfrob may shorten passwords */
93 } pop_imap;
94 } u;
96 int (*checkMail) ( /*@notnull@ */ struct Pop3_ *);
98 /* collect the headers to show in a pop up */
99 struct msglst *(*getHeaders) ( /*@notnull@ */ struct Pop3_ *);
100 /* allow the client to free the headers, or keep them cached */
101 void (*releaseHeaders) ( /*@notnull@ */ struct Pop3_ *, struct msglst * ml);
103 time_t prevtime;
104 time_t prevfetch_time;
105 int loopinterval; /* loop interval for this mailbox */
107 /* command to execute to get a password, if needed */
108 const char *askpass;
109 } Pop3;
111 /* creation calls must have this prototype */
112 int pop3Create( /*@notnull@ */ Pop3 *pc, const char *str);
113 int imap4Create( /*@notnull@ */ Pop3 *pc, const char *str);
114 int shellCreate( /*@notnull@ */ Pop3 *pc, const char *str);
115 int mboxCreate( /*@notnull@ */ Pop3 *pc, const char *str);
116 int maildirCreate( /*@notnull@ */ Pop3 *pc, const char *str);
118 int sock_connect(const char *hostname, uint16_t port);
119 FILE *openMailbox(Pop3 *pc, const char *mbox_filename);
121 /* backtickExpand returns null on failure */
122 /*@null@ */
123 char *backtickExpand(Pop3 *pc, const char *path);
124 int fileHasChanged(const char *mbox_filename, time_t * atime,
125 time_t * mtime, off_t * size);
126 int grabCommandOutput(Pop3 *pc, const char *command,
127 /*@out@ */ char **output,
128 /*@out@ *//*@null@ */ char **details);
129 int exists(const char *filename); /* test -f */
131 /* _NONE is for silent operation. _ERROR is for things that should
132 be printed assuming that the user might possibly see them. _INFO is
133 for reasonably useless but possibly interesting messages. _ALL is
134 for everything. Restated, _ERROR will always be printed, _INFO only
135 if debugging messages were requested. */
136 #define DEBUG_NONE 0
137 #define DEBUG_ERROR 1
138 #define DEBUG_INFO 2
139 #define DEBUG_ALL 2
140 /* inspired by ksymoops-2.3.4/ksymoops.h */
141 #define DM(mbox, msglevel, X...) \
142 do { \
143 if (mbox == NULL || (mbox)->debug >= msglevel) { \
144 printf("wmbiff/%s ", (mbox != NULL) ? (mbox)->label : "NULL"); \
145 printf(X); \
146 (void)fflush(NULL); \
148 } while(0)
150 extern int debug_default;
151 #define DMA(msglevel, X...) \
152 do { \
153 if (debug_default >= msglevel) { \
154 printf("wmbiff: " X); \
155 (void)fflush(NULL); \
157 } while(0)
159 /* technique used in apache to allow GCC's attribute tags,
160 without requiring gcc as the compiler */
161 #if !defined(__GNUC__) || __GNUC__ < 2 || \
162 (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
163 #ifndef __attribute__
164 #define __attribute__(__x)
165 #endif
166 #endif /* gnuc */
167 #endif /* client.h */
169 #ifndef FALSE
170 #define FALSE (0)
171 #define TRUE (!FALSE)
172 #endif
174 #ifdef __LCLINT__
175 /* lclint doesn't do typeof */
176 #define min(x,y) ((x > y) ? x : y)
177 #define max(x,y) ((x > y) ? x : y)
178 #else
179 /* from linux/kernel.h */
180 #define min(x,y) ({ \
181 const typeof(x) _xi = (x); \
182 const typeof(y) _yi = (y); \
183 (void) (&_xi == &_yi); \
184 _xi < _yi ? _xi : _yi; })
185 #define max(x,y) ({ \
186 const typeof(x) _xa = (x); \
187 const typeof(y) _ya = (y); \
188 (void) (&_xa == &_ya); \
189 _xa > _ya ? _xa : _ya; })
190 #endif
193 /* vim:set ts=4: */
195 * Local Variables:
196 * tab-width: 4
197 * c-indent-level: 4
198 * c-basic-offset: 4
199 * End: