From: Piotr S. <ps...@us...> - 2009-09-17 12:05:45
|
Update of /cvsroot/ayttm/ayttm/modules/smtp In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv12682/modules/smtp Modified Files: smtp.c Log Message: reformatted source code Index: smtp.c =================================================================== RCS file: /cvsroot/ayttm/ayttm/modules/smtp/smtp.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- smtp.c 6 Sep 2009 18:23:08 -0000 1.24 +++ smtp.c 17 Sep 2009 12:04:59 -0000 1.25 @@ -47,16 +47,15 @@ ******************************************************************************/ /* Module defines */ #ifndef USE_POSIX_DLOPEN - #define plugin_info smtp_LTX_plugin_info - #define SERVICE_INFO smtp_LTX_SERVICE_INFO - #define module_version smtp_LTX_module_version +#define plugin_info smtp_LTX_plugin_info +#define SERVICE_INFO smtp_LTX_SERVICE_INFO +#define module_version smtp_LTX_module_version #endif - /* Function Prototypes */ static int plugin_init(); static int plugin_finish(); -struct service_callbacks * query_callbacks(); +struct service_callbacks *query_callbacks(); static int is_setting_state = 0; @@ -66,8 +65,7 @@ static int default_online = 0; /* Module Exports */ -PLUGIN_INFO plugin_info = -{ +PLUGIN_INFO plugin_info = { PLUGIN_SERVICE, "SMTP", "Provides Simple Mail Transfer Protocol (SMTP) support", @@ -78,17 +76,22 @@ plugin_finish, NULL }; + struct service SERVICE_INFO = { "SMTP", -1, SERVICE_CAN_OFFLINEMSG | /* all messages are offline */ - SERVICE_CAN_FILETRANSFER, /* true so i can prevent file - transfer altogether */ + SERVICE_CAN_FILETRANSFER, /* true so i can prevent file + transfer altogether */ NULL }; + /* End Module Exports */ -unsigned int module_version() {return CORE_VERSION;} +unsigned int module_version() +{ + return CORE_VERSION; +} static int plugin_init() { @@ -121,9 +124,8 @@ * End Module Code ******************************************************************************/ - #ifdef __STDC__ -int SMTP_DEBUGLOG(char *fmt,...) +int SMTP_DEBUGLOG(char *fmt, ...) #else int SMTP_DEBUGLOG(fmt, va_alist) char *fmt; @@ -144,7 +146,6 @@ return 0; } - #define LOG(x) if(do_smtp_debug) { SMTP_DEBUGLOG("%s:%d: ", __FILE__, __LINE__); \ SMTP_DEBUGLOG x; \ SMTP_DEBUGLOG("\n"); } @@ -153,19 +154,21 @@ SMTP_DEBUGLOG x; \ SMTP_DEBUGLOG("\n"); } - #define SMTP_MSG_COLOR "#2080d0" -static char *eb_smtp_get_color(void) { return SMTP_MSG_COLOR; } +static char *eb_smtp_get_color(void) +{ + return SMTP_MSG_COLOR; +} enum smtp_status_code { SMTP_STATUS_ONLINE, SMTP_STATUS_OFFLINE }; - + typedef struct eb_smtp_account_data { int status; /* always online */ } eb_smtp_account_data; typedef struct eb_smtp_local_account_data { char password[MAX_PREF_LEN]; /* in case of SMTP Auth? */ - int status; /* always online */ + int status; /* always online */ char smtp_host[MAX_PREF_LEN]; char smtp_port[MAX_PREF_LEN]; } eb_smtp_local_account_data; @@ -205,24 +208,24 @@ } -static LList * eb_smtp_buddies = NULL; +static LList *eb_smtp_buddies = NULL; static int smtp_tcp_writeline(char *buff, int fd) { int len = strlen(buff); int i; - for (i=1; i<=2; i++) - if(buff[len-i] == '\r' || buff[len-i] == '\n') - buff[len-i]='\0'; + for (i = 1; i <= 2; i++) + if (buff[len - i] == '\r' || buff[len - i] == '\n') + buff[len - i] = '\0'; return ay_tcp_writeline(buff, strlen(buff), fd); } -static eb_local_account *eb_smtp_read_local_account_config(LList * pairs) +static eb_local_account *eb_smtp_read_local_account_config(LList *pairs) { eb_local_account *ela; eb_smtp_local_account_data *sla; - if(!pairs) { + if (!pairs) { WARNING(("eb_smtp_read_local_account_config: pairs == NULL")); return NULL; } @@ -238,33 +241,33 @@ smtp_account_prefs_init(ela); eb_update_from_value_pair(ela->prefs, pairs); - if(!sla->smtp_host[0]) + if (!sla->smtp_host[0]) strncpy(sla->smtp_host, "127.0.0.1", sizeof(sla->smtp_host)); - if(!sla->smtp_port[0]) + if (!sla->smtp_port[0]) strncpy(sla->smtp_port, "25", sizeof(sla->smtp_host)); return ela; } -static LList *eb_smtp_write_local_config(eb_local_account * account) +static LList *eb_smtp_write_local_config(eb_local_account *account) { return eb_input_to_value_pair(account->prefs); } -static void _buddy_change_state(void * data, void * user_data) +static void _buddy_change_state(void *data, void *user_data) { eb_account *ea = find_account_by_handle(data, SERVICE_INFO.protocol_id); eb_smtp_account_data *sad; int status = (int)user_data; - if(!ea) + if (!ea) return; sad = ea->protocol_account_data; sad->status = status; - if(status == SMTP_STATUS_ONLINE) + if (status == SMTP_STATUS_ONLINE) buddy_login(ea); else buddy_logoff(ea); @@ -272,7 +275,7 @@ buddy_update_status(ea); } -static LList * pending_connects = NULL; +static LList *pending_connects = NULL; static void eb_smtp_login(eb_local_account *account) { @@ -280,42 +283,43 @@ eb_smtp_local_account_data *sla = account->protocol_local_account_data; enum smtp_status_code status = SMTP_STATUS_OFFLINE; - if(account->status_menu) { + if (account->status_menu) { sla->status = SMTP_STATUS_ONLINE; is_setting_state = 1; - eb_set_active_menu_status(account->status_menu, SMTP_STATUS_ONLINE); + eb_set_active_menu_status(account->status_menu, + SMTP_STATUS_ONLINE); is_setting_state = 0; - } + } account->connected = 1; ref_count++; - if(default_online) + if (default_online) status = SMTP_STATUS_ONLINE; - l_list_foreach(eb_smtp_buddies, _buddy_change_state, - (void *)status); + l_list_foreach(eb_smtp_buddies, _buddy_change_state, (void *)status); } static void eb_smtp_logout(eb_local_account *account) { /* cannot logout */ eb_smtp_local_account_data *sla = account->protocol_local_account_data; - LList * l; + LList *l; - for(l = pending_connects; l; l=l->next) + for (l = pending_connects; l; l = l->next) ay_socket_cancel_async((int)l->data); account->connected = 0; ref_count--; - if(account->status_menu) { + if (account->status_menu) { sla->status = SMTP_STATUS_OFFLINE; is_setting_state = 1; - eb_set_active_menu_status(account->status_menu, SMTP_STATUS_OFFLINE); + eb_set_active_menu_status(account->status_menu, + SMTP_STATUS_OFFLINE); is_setting_state = 0; - } + } - l_list_foreach(eb_smtp_buddies, _buddy_change_state, - (void *)SMTP_STATUS_OFFLINE); + l_list_foreach(eb_smtp_buddies, _buddy_change_state, + (void *)SMTP_STATUS_OFFLINE); } static LList *eb_smtp_get_states() @@ -339,26 +343,28 @@ { eb_smtp_local_account_data *sla = account->protocol_local_account_data; - if(is_setting_state) + if (is_setting_state) return; - if(sla->status == SMTP_STATUS_OFFLINE && state == SMTP_STATUS_ONLINE) + if (sla->status == SMTP_STATUS_OFFLINE && state == SMTP_STATUS_ONLINE) eb_smtp_login(account); - else if(sla->status == SMTP_STATUS_ONLINE && state == SMTP_STATUS_OFFLINE) + else if (sla->status == SMTP_STATUS_ONLINE + && state == SMTP_STATUS_OFFLINE) eb_smtp_logout(account); sla->status = state; } -static void eb_smtp_set_idle(eb_local_account * account, int idle) +static void eb_smtp_set_idle(eb_local_account *account, int idle) { } -static void eb_smtp_set_away(eb_local_account * account, char * message, int away) +static void eb_smtp_set_away(eb_local_account *account, char *message, int away) { } -static eb_account *eb_smtp_new_account(eb_local_account *ela, const char * account) +static eb_account *eb_smtp_new_account(eb_local_account *ela, + const char *account) { eb_account *ea = calloc(1, sizeof(eb_account)); eb_smtp_account_data *sad = calloc(1, sizeof(eb_smtp_account_data)); @@ -372,31 +378,31 @@ return ea; } -static void eb_smtp_add_user(eb_account * account) +static void eb_smtp_add_user(eb_account *account) { - eb_smtp_account_data * sad = account->protocol_account_data; - eb_local_account * ela = find_local_account_for_remote(account, 0); + eb_smtp_account_data *sad = account->protocol_account_data; + eb_local_account *ela = find_local_account_for_remote(account, 0); eb_smtp_local_account_data *sla; - if(!ela) { + if (!ela) { WARNING(("eb_smtp_add_user: ela == NULL")); return; } - + sla = ela->protocol_local_account_data; eb_smtp_buddies = l_list_append(eb_smtp_buddies, account->handle); - if( (sad->status = sla->status) == SMTP_STATUS_ONLINE) + if ((sad->status = sla->status) == SMTP_STATUS_ONLINE) buddy_login(account); } -static void eb_smtp_del_user(eb_account * account) +static void eb_smtp_del_user(eb_account *account) { eb_smtp_buddies = l_list_remove(eb_smtp_buddies, account->handle); } -static eb_account *eb_smtp_read_account_config(eb_account *ea, LList * config) +static eb_account *eb_smtp_read_account_config(eb_account *ea, LList *config) { eb_smtp_account_data *sad = calloc(1, sizeof(eb_smtp_account_data)); @@ -409,7 +415,7 @@ return ea; } -static int eb_smtp_query_connected(eb_account * account) +static int eb_smtp_query_connected(eb_account *account) { eb_smtp_account_data *sad = account->protocol_account_data; @@ -421,40 +427,42 @@ "Offline" }; -static char *eb_smtp_get_status_string(eb_account * account) +static char *eb_smtp_get_status_string(eb_account *account) { eb_smtp_account_data *sad = account->protocol_account_data; return status_strings[sad->status]; } - #include "smtp_online.xpm" #include "smtp_away.xpm" -static char ** eb_smtp_get_status_pixmap(eb_account * account) +static char **eb_smtp_get_status_pixmap(eb_account *account) { eb_smtp_account_data *sad; sad = account->protocol_account_data; - if(sad->status == SMTP_STATUS_ONLINE) + if (sad->status == SMTP_STATUS_ONLINE) return smtp_online_xpm; else return smtp_away_xpm; } -static void eb_smtp_send_file(eb_local_account *from, eb_account *to, char *file) +static void eb_smtp_send_file(eb_local_account *from, eb_account *to, + char *file) { - ay_do_info( _("SMTP Warning"), _("You cannot send files through SMTP... yet") ); + ay_do_info(_("SMTP Warning"), + _("You cannot send files through SMTP... yet")); } -static int validate_or_die_gracefully(const char *buff, const char *valid, int fd) +static int validate_or_die_gracefully(const char *buff, const char *valid, + int fd) { - if(strstr(buff, valid) == buff) { + if (strstr(buff, valid) == buff) { return 1; - } + } LOG(("Server responded: %s", buff)); smtp_tcp_writeline("QUIT", fd); @@ -462,9 +470,9 @@ return 0; } -enum smtp_states { - SMTP_CONNECT, SMTP_HELO, - SMTP_FROM, SMTP_TO, +enum smtp_states { + SMTP_CONNECT, SMTP_HELO, + SMTP_FROM, SMTP_TO, SMTP_DATA, SMTP_DATA_END, SMTP_QUIT }; @@ -472,18 +480,19 @@ struct smtp_callback_data { int tag; char localhost[255]; - eb_local_account * from; - eb_account * to; - char * msg; + eb_local_account *from; + eb_account *to; + char *msg; enum smtp_states state; }; -static const char *expected[7]={ +static const char *expected[7] = { "220", "250", "250", "250", "354", "250", "221" }; -static void destroy_callback_data(struct smtp_callback_data * d) + +static void destroy_callback_data(struct smtp_callback_data *d) { - if(d->tag) + if (d->tag) eb_input_remove(d->tag); free(d->msg); free(d); @@ -492,7 +501,7 @@ static void smtp_message_sent(struct smtp_callback_data *d, int success) { char reply[1024] = "<FONT COLOR=\"#a0a0a0\"><I>"; - if(success) + if (success) strcat(reply, _("Message sent via SMTP.")); else strcat(reply, _("Error sending message via SMTP.")); @@ -501,33 +510,35 @@ eb_parse_incoming_message(d->from, d->to, reply); } -static void send_message_async(void * data, int fd, eb_input_condition cond) +static void send_message_async(void *data, int fd, eb_input_condition cond) { - struct smtp_callback_data * d = data; + struct smtp_callback_data *d = data; char buff[1024]; - if(ay_tcp_readline(buff, sizeof(buff)-1, fd) <= 0) { + if (ay_tcp_readline(buff, sizeof(buff) - 1, fd) <= 0) { WARNING(("smtp server closed connection")); close(fd); destroy_callback_data(d); }; - if(!validate_or_die_gracefully(buff, expected[d->state], fd)) { + if (!validate_or_die_gracefully(buff, expected[d->state], fd)) { smtp_message_sent(d, 0); destroy_callback_data(d); } - switch(d->state) { + switch (d->state) { case SMTP_CONNECT: - snprintf(buff, sizeof(buff)-1, "HELO %s", d->localhost); + snprintf(buff, sizeof(buff) - 1, "HELO %s", d->localhost); d->state = SMTP_HELO; break; case SMTP_HELO: - snprintf(buff, sizeof(buff)-1, "MAIL FROM: <%s>", d->from->handle); + snprintf(buff, sizeof(buff) - 1, "MAIL FROM: <%s>", + d->from->handle); d->state = SMTP_FROM; break; case SMTP_FROM: - snprintf(buff, sizeof(buff)-1, "RCPT TO: <%s>", d->to->handle); + snprintf(buff, sizeof(buff) - 1, "RCPT TO: <%s>", + d->to->handle); d->state = SMTP_TO; break; case SMTP_TO: @@ -536,18 +547,21 @@ break; case SMTP_DATA: { - int n, len = strlen(d->msg); - char buf[1024]; - /* avoid having no To: in mail - server may append - "Undisclosed recipients"*/ - snprintf(buf, 1024, "To: %s <%s>", d->to->handle, d->to->handle); - smtp_tcp_writeline(buf, fd); - for(n=1; d->msg[len-n] == '\r' || d->msg[len-n] == '\n'; n++) - d->msg[len-n] = '\0'; - if(strncasecmp(d->msg, "Subject:", strlen("Subject:"))) - smtp_tcp_writeline("", fd); - smtp_tcp_writeline(d->msg, fd); - strcpy(buff, "."); + int n, len = strlen(d->msg); + char buf[1024]; + /* avoid having no To: in mail - server may append + "Undisclosed recipients" */ + snprintf(buf, 1024, "To: %s <%s>", d->to->handle, + d->to->handle); + smtp_tcp_writeline(buf, fd); + for (n = 1; + d->msg[len - n] == '\r' + || d->msg[len - n] == '\n'; n++) + d->msg[len - n] = '\0'; + if (strncasecmp(d->msg, "Subject:", strlen("Subject:"))) + smtp_tcp_writeline("", fd); + smtp_tcp_writeline(d->msg, fd); + strcpy(buff, "."); } d->state = SMTP_DATA_END; break; @@ -565,11 +579,11 @@ static void eb_smtp_got_connected(int fd, int error, void *data) { - struct smtp_callback_data * d = data; + struct smtp_callback_data *d = data; - if(error) { - WARNING(("Could not connect to smtp server: %d: %s", - error, strerror(error))); + if (error) { + WARNING(("Could not connect to smtp server: %d: %s", + error, strerror(error))); destroy_callback_data(d); return; } @@ -579,17 +593,17 @@ d->tag = eb_input_add(fd, EB_INPUT_READ, send_message_async, d); } -static void eb_smtp_send_im(eb_local_account * account_from, - eb_account * account_to, char * message) - +static void eb_smtp_send_im(eb_local_account *account_from, + eb_account *account_to, char *message) { char localhost[255]; - struct smtp_callback_data * d; - eb_smtp_local_account_data *sla = account_from->protocol_local_account_data; + struct smtp_callback_data *d; + eb_smtp_local_account_data *sla = + account_from->protocol_local_account_data; - if(gethostname(localhost, sizeof(localhost)-1) == -1) { + if (gethostname(localhost, sizeof(localhost) - 1) == -1) { strcpy(localhost, "localhost"); - WARNING(("could not get localhost name: %d: %s", + WARNING(("could not get localhost name: %d: %s", errno, strerror(errno))); return; } @@ -599,17 +613,18 @@ d->from = account_from; d->to = account_to; d->msg = strdup(message); - d->tag = ay_socket_new_async(sla->smtp_host, atoi(sla->smtp_port), eb_smtp_got_connected, d, NULL); + d->tag = ay_socket_new_async(sla->smtp_host, atoi(sla->smtp_port), + eb_smtp_got_connected, d, NULL); pending_connects = l_list_append(pending_connects, (void *)d->tag); } -static char * eb_smtp_check_login(const char * user, const char * pass) +static char *eb_smtp_check_login(const char *user, const char *pass) { - if(strchr(user,'@') == NULL) { - return strdup(_("SMTP logins must have @domain.tld part.")); - } - return NULL; + if (strchr(user, '@') == NULL) { + return strdup(_("SMTP logins must have @domain.tld part.")); + } + return NULL; } struct service_callbacks *query_callbacks() @@ -618,35 +633,34 @@ sc = calloc(1, sizeof(struct service_callbacks)); - sc->query_connected = eb_smtp_query_connected; - sc->login = eb_smtp_login; - sc->logout = eb_smtp_logout; - sc->check_login = eb_smtp_check_login; - - sc->send_im = eb_smtp_send_im; - - sc->read_local_account_config = eb_smtp_read_local_account_config; - sc->write_local_config = eb_smtp_write_local_config; - sc->read_account_config = eb_smtp_read_account_config; - - sc->get_states = eb_smtp_get_states; - sc->get_current_state = eb_smtp_get_current_state; - sc->set_current_state = eb_smtp_set_current_state; - - sc->new_account = eb_smtp_new_account; - sc->add_user = eb_smtp_add_user; - sc->del_user = eb_smtp_del_user; - - sc->get_status_string = eb_smtp_get_status_string; - sc->get_status_pixmap = eb_smtp_get_status_pixmap; + sc->query_connected = eb_smtp_query_connected; + sc->login = eb_smtp_login; + sc->logout = eb_smtp_logout; + sc->check_login = eb_smtp_check_login; + + sc->send_im = eb_smtp_send_im; + + sc->read_local_account_config = eb_smtp_read_local_account_config; + sc->write_local_config = eb_smtp_write_local_config; + sc->read_account_config = eb_smtp_read_account_config; + + sc->get_states = eb_smtp_get_states; + sc->get_current_state = eb_smtp_get_current_state; + sc->set_current_state = eb_smtp_set_current_state; - sc->set_idle = eb_smtp_set_idle; - sc->set_away = eb_smtp_set_away; + sc->new_account = eb_smtp_new_account; + sc->add_user = eb_smtp_add_user; + sc->del_user = eb_smtp_del_user; - sc->send_file = eb_smtp_send_file; + sc->get_status_string = eb_smtp_get_status_string; + sc->get_status_pixmap = eb_smtp_get_status_pixmap; - sc->get_color = eb_smtp_get_color; + sc->set_idle = eb_smtp_set_idle; + sc->set_away = eb_smtp_set_away; + + sc->send_file = eb_smtp_send_file; + + sc->get_color = eb_smtp_get_color; return sc; } - |