blob: a792e849c67dab3f86b411ebfe684849369dffb3 [file] [log] [blame]
adamdunkelsca9ddcb2003-03-19 14:13:31 +00001/*
2 * Copyright (c) 2002, Adam Dunkels.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following
12 * disclaimer in the documentation and/or other materials provided
13 * with the distribution.
adamdunkels06f897e2004-06-06 05:59:20 +000014 * 3. The name of the author may not be used to endorse or promote
adamdunkelsca9ddcb2003-03-19 14:13:31 +000015 * products derived from this software without specific prior
16 * written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
19 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
24 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * This file is part of the Contiki desktop environment for the C64.
31 *
oliverschmidt69cbdb32005-05-05 22:15:49 +000032 * $Id: email.c,v 1.21 2005/05/05 22:15:49 oliverschmidt Exp $
adamdunkelsca9ddcb2003-03-19 14:13:31 +000033 *
34 */
35
36
adamdunkelsf2f8cb22004-07-04 11:35:07 +000037#include "ek.h"
adamdunkelsca9ddcb2003-03-19 14:13:31 +000038#include "ctk.h"
adamdunkelsca9ddcb2003-03-19 14:13:31 +000039#include "smtp.h"
adamdunkelsdb300d22004-02-24 09:57:49 +000040#include "uiplib.h"
oliverschmidt69cbdb32005-05-05 22:15:49 +000041#include "resolv.h"
adamdunkelsca9ddcb2003-03-19 14:13:31 +000042#include "petsciiconv.h"
adamdunkels8af703e2003-04-08 11:50:20 +000043#include "loader.h"
adamdunkelsf2f8cb22004-07-04 11:35:07 +000044#include "tcpip.h"
adamdunkels8af703e2003-04-08 11:50:20 +000045
oliverschmidt1f615e42005-05-04 23:47:39 +000046#include "ctk-textentry-multiline.h"
adamdunkels3a30cde2003-08-11 22:23:24 +000047
oliverschmidt764c4742004-12-22 09:38:24 +000048#include "email-conf.h"
49
oliverschmidt317947c2004-12-23 10:33:24 +000050#include <string.h>
51
oliverschmidt764c4742004-12-22 09:38:24 +000052#define MAIL_WIDTH EMAIL_CONF_WIDTH
53#define MAIL_HEIGHT EMAIL_CONF_HEIGHT
54/*
oliverschmidt1f615e42005-05-04 23:47:39 +000055#define MAIL_WIDTH 37
oliverschmidt764c4742004-12-22 09:38:24 +000056#define MAIL_HEIGHT 17
57*/
adamdunkelsca9ddcb2003-03-19 14:13:31 +000058
oliverschmidt1f615e42005-05-04 23:47:39 +000059#if (MAIL_WIDTH - 9) < 39
60#define TEXTENTRY_WIDTH (MAIL_WIDTH - 9)
oliverschmidt317947c2004-12-23 10:33:24 +000061#else
oliverschmidt1f615e42005-05-04 23:47:39 +000062#define TEXTENTRY_WIDTH 39
oliverschmidt317947c2004-12-23 10:33:24 +000063#endif
adamdunkelsca9ddcb2003-03-19 14:13:31 +000064
65static struct ctk_menu menu;
adamdunkels3a30cde2003-08-11 22:23:24 +000066unsigned char menuitem_compose, menuitem_setup, menuitem_quit;
adamdunkelsca9ddcb2003-03-19 14:13:31 +000067
68/* The main window. */
adamdunkels3a30cde2003-08-11 22:23:24 +000069static struct ctk_window composewindow;
adamdunkelsca9ddcb2003-03-19 14:13:31 +000070
adamdunkelsca9ddcb2003-03-19 14:13:31 +000071static struct ctk_separator sep1 =
oliverschmidt1f615e42005-05-04 23:47:39 +000072 {CTK_SEPARATOR(0, MAIL_HEIGHT + 3, MAIL_WIDTH + 1)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +000073static struct ctk_label statuslabel =
oliverschmidt69cbdb32005-05-05 22:15:49 +000074 {CTK_LABEL(7, MAIL_HEIGHT + 4, MAIL_WIDTH - 14, 1, "")};
adamdunkelsca9ddcb2003-03-19 14:13:31 +000075
76
77static struct ctk_label tolabel =
adamdunkels3a30cde2003-08-11 22:23:24 +000078 {CTK_LABEL(0, 0, 3, 1, "To:")};
adamdunkelsca9ddcb2003-03-19 14:13:31 +000079static char to[40];
80static struct ctk_textentry totextentry =
oliverschmidt1f615e42005-05-04 23:47:39 +000081 {CTK_TEXTENTRY(8, 0, TEXTENTRY_WIDTH, 1, to, 39)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +000082
83static struct ctk_label cclabel =
adamdunkels3a30cde2003-08-11 22:23:24 +000084 {CTK_LABEL(0, 1, 3, 1, "Cc:")};
adamdunkelsca9ddcb2003-03-19 14:13:31 +000085static char cc[40];
86static struct ctk_textentry cctextentry =
oliverschmidt1f615e42005-05-04 23:47:39 +000087 {CTK_TEXTENTRY(8, 1, TEXTENTRY_WIDTH, 1, cc, 39)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +000088
89static struct ctk_label subjectlabel =
adamdunkels3a30cde2003-08-11 22:23:24 +000090 {CTK_LABEL(0, 2, 8, 1, "Subject:")};
adamdunkelsca9ddcb2003-03-19 14:13:31 +000091static char subject[40];
92static struct ctk_textentry subjecttextentry =
oliverschmidt1f615e42005-05-04 23:47:39 +000093 {CTK_TEXTENTRY(8, 2, TEXTENTRY_WIDTH, 1, subject, 39)};
adamdunkels01e7ba12003-08-11 23:01:56 +000094
95static char mail[MAIL_WIDTH * MAIL_HEIGHT];
oliverschmidt1f615e42005-05-04 23:47:39 +000096struct ctk_textentry mailtextentry =
97 {CTK_TEXTENTRY_INPUT(0, 3, MAIL_WIDTH - 1, MAIL_HEIGHT, mail, MAIL_WIDTH - 1, \
98 ctk_textentry_multiline_input)};
adamdunkels3a30cde2003-08-11 22:23:24 +000099
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000100
101static struct ctk_button sendbutton =
oliverschmidt764c4742004-12-22 09:38:24 +0000102 {CTK_BUTTON(0, MAIL_HEIGHT + 4, 4, "Send")};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000103static struct ctk_button erasebutton =
oliverschmidt1f615e42005-05-04 23:47:39 +0000104 {CTK_BUTTON(MAIL_WIDTH - 6, MAIL_HEIGHT + 4, 5, "Erase")};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000105
adamdunkels3a30cde2003-08-11 22:23:24 +0000106/* The "Really erase message?" dialog. */
107static struct ctk_window erasedialog;
108static struct ctk_label erasedialoglabel1 =
109 {CTK_LABEL(2, 1, 22, 1, "Really erase message?")};
110static struct ctk_label erasedialoglabel2 =
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000111 {CTK_LABEL(0, 2, 26, 1, "All contents will be lost.")};
adamdunkels3a30cde2003-08-11 22:23:24 +0000112static struct ctk_button eraseyesbutton =
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000113 {CTK_BUTTON(4, 4, 3, "Yes")};
adamdunkels3a30cde2003-08-11 22:23:24 +0000114static struct ctk_button erasenobutton =
adamdunkelsc8809032003-04-11 20:13:33 +0000115 {CTK_BUTTON(18, 4, 2, "No")};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000116
117/* The setup window. */
118static struct ctk_window setupwindow;
119static struct ctk_label fromaddresslabel =
120 {CTK_LABEL(0, 0, 25, 1, "Name and e-mail address")};
121static char fromaddress[40];
122static struct ctk_textentry fromaddresstextentry =
oliverschmidt1f615e42005-05-04 23:47:39 +0000123 {CTK_TEXTENTRY(0, 1, 26, 1, fromaddress, 39)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000124
125static struct ctk_label smtpserverlabel =
126 {CTK_LABEL(0, 3, 20, 1, "Outgoing mailserver")};
127static char smtpserver[40];
128static struct ctk_textentry smtpservertextentry =
oliverschmidt1f615e42005-05-04 23:47:39 +0000129 {CTK_TEXTENTRY(0, 4, 26, 1, smtpserver, 39)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000130
131static struct ctk_label pop3serverlabel =
132 {CTK_LABEL(0, 6, 20, 1, "Incoming mailserver")};
133static char pop3server[40];
134static struct ctk_textentry pop3servertextentry =
oliverschmidt1f615e42005-05-04 23:47:39 +0000135 {CTK_TEXTENTRY(0, 7, 26, 1, pop3server, 39)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000136
137static struct ctk_label pop3userlabel =
138 {CTK_LABEL(0, 9, 20, 1, "Mailserver username")};
139static char pop3user[40];
140static struct ctk_textentry pop3usertextentry =
oliverschmidt1f615e42005-05-04 23:47:39 +0000141 {CTK_TEXTENTRY(0, 10, 26, 1, pop3user, 39)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000142
143static struct ctk_label pop3passwordlabel =
144 {CTK_LABEL(0, 12, 20, 1, "Mailserver password")};
145static char pop3password[40];
146static struct ctk_textentry pop3passwordtextentry =
oliverschmidt1f615e42005-05-04 23:47:39 +0000147 {CTK_TEXTENTRY(0, 13, 26, 1, pop3password, 39)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000148
149
150static struct ctk_button setupokbutton =
151 {CTK_BUTTON(24, 15, 2, "Ok")};
152
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000153/*
adamdunkels78c03dc2003-04-09 13:45:05 +0000154static DISPATCHER_SIGHANDLER(email_sighandler, s, data);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000155static struct dispatcher_proc p =
adamdunkels78c03dc2003-04-09 13:45:05 +0000156 {DISPATCHER_PROC("E-mail client", NULL, email_sighandler, smtp_appcall)};
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000157static ek_id_t id;
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000158*/
159EK_EVENTHANDLER(email_eventhandler, ev, data);
160EK_PROCESS(p, "E-mail client", EK_PRIO_NORMAL,
161 email_eventhandler, NULL, NULL);
162static ek_id_t id = EK_ID_NONE;
adamdunkels3a30cde2003-08-11 22:23:24 +0000163
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000164/*-----------------------------------------------------------------------------------*/
165static void
adamdunkels0137b442003-04-08 23:27:33 +0000166email_quit(void)
adamdunkels1cd53bd2003-04-08 19:24:55 +0000167{
168 ctk_window_close(&setupwindow);
adamdunkels3a30cde2003-08-11 22:23:24 +0000169 ctk_window_close(&composewindow);
adamdunkels1cd53bd2003-04-08 19:24:55 +0000170 ctk_menu_remove(&menu);
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000171 ek_exit();
adamdunkels1cd53bd2003-04-08 19:24:55 +0000172 id = EK_ID_NONE;
173 LOADER_UNLOAD();
174}
175/*-----------------------------------------------------------------------------------*/
adamdunkels8bb5cca2003-08-24 22:41:31 +0000176LOADER_INIT_FUNC(email_init, arg)
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000177{
adamdunkels8bb5cca2003-08-24 22:41:31 +0000178 arg_free(arg);
179
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000180 if(id == EK_ID_NONE) {
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000181 id = ek_start(&p);
182 } else {
183 ctk_window_open(&composewindow);
184 }
185}
186/*-----------------------------------------------------------------------------------*/
187static void
188applyconfig(void)
189{
oliverschmidt69cbdb32005-05-05 22:15:49 +0000190 u16_t addr[2], *addrptr;
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000191 char *cptr;
192
193 for(cptr = smtpserver; *cptr != ' ' && *cptr != 0; ++cptr);
194 *cptr = 0;
195
oliverschmidt69cbdb32005-05-05 22:15:49 +0000196 addrptr = &addr[0];
197 if(uiplib_ipaddrconv(smtpserver, (unsigned char *)addr) == 0) {
198 addrptr = resolv_lookup(smtpserver);
199 if(addrptr == NULL) {
200 resolv_query(smtpserver);
201 ctk_label_set_text(&statuslabel, "Resolving host...");
202 return;
203 }
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000204 }
oliverschmidt69cbdb32005-05-05 22:15:49 +0000205 smtp_configure("contiki", addrptr);
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000206}
207/*-----------------------------------------------------------------------------------*/
208static void
209prepare_message(void)
210{
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000211 /* Convert fields to ASCII. */
212 petsciiconv_toascii(to, sizeof(to));
oliverschmidt1f615e42005-05-04 23:47:39 +0000213 petsciiconv_toascii(cc, sizeof(cc));
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000214 petsciiconv_toascii(subject, sizeof(subject));
oliverschmidt1f615e42005-05-04 23:47:39 +0000215 petsciiconv_toascii(mail, sizeof(mail));
216}
217/*-----------------------------------------------------------------------------------*/
218static void
219erase_message(void)
220{
oliverschmidt4e061552005-05-05 20:57:09 +0000221 CTK_TEXTENTRY_CLEAR(&totextentry);
222 CTK_TEXTENTRY_CLEAR(&cctextentry);
223 CTK_TEXTENTRY_CLEAR(&subjecttextentry);
224 CTK_TEXTENTRY_CLEAR(&mailtextentry);
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000225}
226/*-----------------------------------------------------------------------------------*/
227/*static
228 DISPATCHER_SIGHANDLER(email_sighandler, s, data)*/
229EK_EVENTHANDLER(email_eventhandler, ev, data)
230{
231 struct ctk_widget *w;
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000232 EK_EVENTHANDLER_ARGS(ev, data);
233
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000234 if(ev == tcpip_event) {
235 smtp_appcall(data);
236 } else if(ev == EK_EVENT_INIT) {
237
adamdunkels3a30cde2003-08-11 22:23:24 +0000238 /* Create the "Really erase message?" dialog. */
239 ctk_dialog_new(&erasedialog, 26, 6);
240 CTK_WIDGET_ADD(&erasedialog, &erasedialoglabel1);
241 CTK_WIDGET_ADD(&erasedialog, &erasedialoglabel2);
242 CTK_WIDGET_ADD(&erasedialog, &eraseyesbutton);
243 CTK_WIDGET_ADD(&erasedialog, &erasenobutton);
244 CTK_WIDGET_FOCUS(&erasedialog, &erasenobutton);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000245
246 /* Create setup window. */
247 ctk_window_new(&setupwindow, 28, 16, "E-mail setup");
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000248
249 CTK_WIDGET_ADD(&setupwindow, &fromaddresslabel);
250 CTK_WIDGET_ADD(&setupwindow, &fromaddresstextentry);
251 CTK_WIDGET_ADD(&setupwindow, &smtpserverlabel);
252 CTK_WIDGET_ADD(&setupwindow, &smtpservertextentry);
oliverschmidt69cbdb32005-05-05 22:15:49 +0000253 /* CTK_WIDGET_ADD(&setupwindow, &pop3serverlabel);*/
adamdunkels3a30cde2003-08-11 22:23:24 +0000254 /* CTK_WIDGET_ADD(&setupwindow, &pop3servertextentry);*/
oliverschmidt69cbdb32005-05-05 22:15:49 +0000255 /* CTK_WIDGET_ADD(&setupwindow, &pop3userlabel);*/
adamdunkels3a30cde2003-08-11 22:23:24 +0000256 /* CTK_WIDGET_ADD(&setupwindow, &pop3usertextentry);*/
oliverschmidt69cbdb32005-05-05 22:15:49 +0000257 /* CTK_WIDGET_ADD(&setupwindow, &pop3passwordlabel);*/
adamdunkels3a30cde2003-08-11 22:23:24 +0000258 /* CTK_WIDGET_ADD(&setupwindow, &pop3passwordtextentry);*/
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000259 CTK_WIDGET_ADD(&setupwindow, &setupokbutton);
260
261 CTK_WIDGET_FOCUS(&setupwindow, &fromaddresstextentry);
262
263
adamdunkels3a30cde2003-08-11 22:23:24 +0000264 /* Create compose window. */
265
oliverschmidt1f615e42005-05-04 23:47:39 +0000266 ctk_window_new(&composewindow, MAIL_WIDTH + 1, MAIL_HEIGHT + 5, "Compose e-mail");
adamdunkels3a30cde2003-08-11 22:23:24 +0000267
268 CTK_WIDGET_ADD(&composewindow, &tolabel);
269 CTK_WIDGET_ADD(&composewindow, &cclabel);
270 CTK_WIDGET_ADD(&composewindow, &subjectlabel);
271
272 CTK_WIDGET_ADD(&composewindow, &totextentry);
273 CTK_WIDGET_FOCUS(&composewindow, &totextentry);
274 CTK_WIDGET_ADD(&composewindow, &cctextentry);
275 CTK_WIDGET_ADD(&composewindow, &subjecttextentry);
276
oliverschmidt1f615e42005-05-04 23:47:39 +0000277 CTK_WIDGET_ADD(&composewindow, &mailtextentry);
adamdunkels3a30cde2003-08-11 22:23:24 +0000278
279 CTK_WIDGET_ADD(&composewindow, &sep1);
280 CTK_WIDGET_ADD(&composewindow, &statuslabel);
281
282 CTK_WIDGET_ADD(&composewindow, &sendbutton);
283 CTK_WIDGET_ADD(&composewindow, &erasebutton);
284
oliverschmidt1f615e42005-05-04 23:47:39 +0000285 erase_message();
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000286
287 /* Create and add the menu */
288 ctk_menu_new(&menu, "E-mail");
289 menuitem_setup = ctk_menuitem_add(&menu, "Setup");
adamdunkels3a30cde2003-08-11 22:23:24 +0000290 menuitem_compose = ctk_menuitem_add(&menu, "Compose");
adamdunkels8af703e2003-04-08 11:50:20 +0000291 menuitem_quit = ctk_menuitem_add(&menu, "Quit");
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000292 ctk_menu_add(&menu);
293
294 /* Attach listeners to signals. */
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000295 /* dispatcher_listen(ctk_signal_widget_activate);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000296 dispatcher_listen(ctk_signal_menu_activate);
adamdunkels8af703e2003-04-08 11:50:20 +0000297 dispatcher_listen(ctk_signal_window_close);
adamdunkels3a30cde2003-08-11 22:23:24 +0000298
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000299 dispatcher_listen(ctk_signal_keypress);*/
adamdunkels8af703e2003-04-08 11:50:20 +0000300
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000301 /* Open setup window */
302 ctk_window_open(&setupwindow);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000303
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000304 } else if(ev == ctk_signal_widget_activate) {
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000305 w = (struct ctk_widget *)data;
adamdunkels3a30cde2003-08-11 22:23:24 +0000306 if(w == (struct ctk_widget *)&sendbutton) {
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000307 prepare_message();
oliverschmidt1f615e42005-05-04 23:47:39 +0000308 smtp_send(to, cc, fromaddress, subject, mail, MAIL_WIDTH, MAIL_HEIGHT);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000309 ctk_label_set_text(&statuslabel, "Sending message...");
adamdunkelse9354c42003-06-30 20:39:53 +0000310 CTK_WIDGET_REDRAW(&statuslabel);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000311 } else if(w == (struct ctk_widget *)&erasebutton) {
adamdunkels3a30cde2003-08-11 22:23:24 +0000312 ctk_dialog_open(&erasedialog);
313 } else if(w == (struct ctk_widget *)&eraseyesbutton) {
oliverschmidt1f615e42005-05-04 23:47:39 +0000314 erase_message();
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000315 ctk_dialog_close();
adamdunkels3a30cde2003-08-11 22:23:24 +0000316 } else if(w == (struct ctk_widget *)&erasenobutton) {
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000317 ctk_dialog_close();
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000318 } else if(w == (struct ctk_widget *)&setupokbutton) {
319 applyconfig();
320 ctk_window_close(&setupwindow);
adamdunkels3a30cde2003-08-11 22:23:24 +0000321 ctk_window_open(&composewindow);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000322 }
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000323 } else if(ev == ctk_signal_menu_activate) {
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000324 if((struct ctk_menu *)data == &menu) {
adamdunkels3a30cde2003-08-11 22:23:24 +0000325 if(menu.active == menuitem_compose) {
326 ctk_window_open(&composewindow);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000327 } else if(menu.active == menuitem_setup) {
328 ctk_window_open(&setupwindow);
adamdunkels8af703e2003-04-08 11:50:20 +0000329 } else if(menu.active == menuitem_quit) {
adamdunkels0137b442003-04-08 23:27:33 +0000330 email_quit();
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000331 }
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000332 }
oliverschmidt69cbdb32005-05-05 22:15:49 +0000333 } else if(ev == resolv_event_found) {
334 if(strcmp(data, smtpserver) == 0) {
335 if(resolv_lookup(smtpserver) != NULL) {
336 applyconfig();
337 ctk_label_set_text(&statuslabel, "");
338 } else {
339 ctk_label_set_text(&statuslabel, "Host not found");
340 }
341 CTK_WIDGET_REDRAW(&statuslabel);
342 }
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000343 } else if(ev == EK_EVENT_REQUEST_EXIT) {
adamdunkels0137b442003-04-08 23:27:33 +0000344 email_quit();
adamdunkelsf2f8cb22004-07-04 11:35:07 +0000345 }
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000346}
347/*-----------------------------------------------------------------------------------*/
348void
349smtp_done(unsigned char error)
350{
adamdunkels01e7ba12003-08-11 23:01:56 +0000351 if(error == SMTP_ERR_OK) {
352 ctk_label_set_text(&statuslabel, "Mail sent");
oliverschmidt1f615e42005-05-04 23:47:39 +0000353 erase_message();
adamdunkels01e7ba12003-08-11 23:01:56 +0000354 ctk_window_open(&composewindow);
355 } else {
356 ctk_label_set_text(&statuslabel, "Mail error");
357 }
adamdunkelse9354c42003-06-30 20:39:53 +0000358 CTK_WIDGET_REDRAW(&statuslabel);
adamdunkelsca9ddcb2003-03-19 14:13:31 +0000359}
360/*-----------------------------------------------------------------------------------*/