|
|
| version 1.15, 2002/12/05 12:53:47 | version 1.20.2.1, 2003/01/31 12:34:29 |
|---|---|
| Line 1 | Line 1 |
| /** @file | /** @file |
| Parser: SMTP sender. | Parser: SMTP sender. |
| Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) | Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) |
| Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) | Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) |
| Parts of the code here is based upon an early gensock and blat | Parts of the code here is based upon an early gensock and blat |
| Line 12 static const char* IDENT_SMTP_C="$Date$" | Line 12 static const char* IDENT_SMTP_C="$Date$" |
| #include "pa_exception.h" | #include "pa_exception.h" |
| #include "smtp.h" | #include "smtp.h" |
| //#define DEBUG_SHOW | |
| SMTP::SMTP(Pool& pool, const String& aorigin_string) : Pooled(pool), | SMTP::SMTP(Pool& pool, const String& aorigin_string) : Pooled(pool), |
| origin_string(aorigin_string) { | origin_string(aorigin_string) { |
| the_socket = 0; | the_socket = 0; |
| Line 30 SMTP::SMTP(Pool& pool, const String& aor | Line 32 SMTP::SMTP(Pool& pool, const String& aor |
| // --------------------------------------------------------------------------- | // --------------------------------------------------------------------------- |
| void SMTP:: | void SMTP:: |
| ConnectToHost(const char *hostname, const char *service) | ConnectToHost(const char* hostname, const char* service) |
| { | { |
| struct sockaddr_in sa_in; | struct sockaddr_in sa_in; |
| int our_port; | int our_port; |
| Line 210 get_line( void ) | Line 212 get_line( void ) |
| //--------------------------------------------------------------------------- | //--------------------------------------------------------------------------- |
| // returns 0 if all is OK | // returns 0 if all is OK |
| void SMTP:: | void SMTP:: |
| SendLine(const char *data, unsigned long length) | SendLine(const char* data, unsigned long length) |
| { | { |
| int num_sent; | int num_sent; |
| Line 264 SendLine(const char *data, unsigned long | Line 266 SendLine(const char *data, unsigned long |
| //--------------------------------------------------------------------------- | //--------------------------------------------------------------------------- |
| // returns 0 if all is OK | // returns 0 if all is OK |
| void SMTP:: | void SMTP:: |
| SendBuffer(const char *data, unsigned long length) | SendBuffer(const char* data, unsigned long length) |
| { | { |
| DWORD retval = 0; | DWORD retval = 0; |
| unsigned int sorta_sent = 0; | unsigned int sorta_sent = 0; |
| Line 316 CloseConnect() | Line 318 CloseConnect() |
| //---------------------------------------------------------------------- | //---------------------------------------------------------------------- |
| void SMTP:: | void SMTP:: |
| SendSmtpError(const char * message) | SendSmtpError(const char* message) |
| { | { |
| SendLine("QUIT\r\n", 6); | SendLine("QUIT\r\n", 6); |
| CloseConnect(); | CloseConnect(); |
| Line 331 SendSmtpError(const char * message) | Line 333 SendSmtpError(const char * message) |
| // returns 20, 21, 22, 23, 24, 25 if SendBuffer() fails | // returns 20, 21, 22, 23, 24, 25 if SendBuffer() fails |
| // returns 26 if FlushBuffer() fails | // returns 26 if FlushBuffer() fails |
| void SMTP:: | void SMTP:: |
| transform_and_send_edit_data(const char * editptr ) | transform_and_send_edit_data(const char* editptr ) |
| { | { |
| const char *index; | const char *index; |
| const char *header_end; | |
| char previous_char = 'x'; | char previous_char = 'x'; |
| unsigned int send_len; | unsigned int send_len; |
| BOOL done = 0; | BOOL done = 0; |
| Line 390 transform_and_send_edit_data(const char | Line 391 transform_and_send_edit_data(const char |
| // returns 16 if any get_line()'s fail | // returns 16 if any get_line()'s fail |
| // returns 20, 21, 22, 23, 24, 25, 26 if transform_and_send_edit_data() fails | // returns 20, 21, 22, 23, 24, 25, 26 if transform_and_send_edit_data() fails |
| void SMTP:: | void SMTP:: |
| send_data(const char * message) | send_data(const char* message) |
| { | { |
| transform_and_send_edit_data(message); | transform_and_send_edit_data(message); |
| if( 250 != get_line() ) | if( 250 != get_line() ) |
| Line 401 send_data(const char * message) | Line 402 send_data(const char * message) |
| // returns 0 if all is OK | // returns 0 if all is OK |
| // returns 50, 51, 52 if fails | // returns 50, 51, 52 if fails |
| void SMTP:: | void SMTP:: |
| open_socket( const char *server, const char *service ) | open_socket( const char* server, const char* service ) |
| { | { |
| ConnectToHost(server, service); | ConnectToHost(server, service); |
| Line 416 open_socket( const char *server, const c | Line 417 open_socket( const char *server, const c |
| // returns 50, 51, 52 if open_socket() fails | // returns 50, 51, 52 if open_socket() fails |
| // returns 10, 11, 12, 13, 14, 15 if any get_line()'s fail | // returns 10, 11, 12, 13, 14, 15 if any get_line()'s fail |
| void SMTP:: | void SMTP:: |
| prepare_message(char *from, char *to, const char *server, const char *service) | prepare_message(char *from, char *to, const char* server, const char* service) |
| { | { |
| char out_data[MAXOUTLINE]; | char out_data[MAXOUTLINE]; |
| char *ptr; | char *ptr; |
| Line 501 static char *rsplit(char *string, char d | Line 502 static char *rsplit(char *string, char d |
| // returns 1 if MakeSmtpHeader() fails | // returns 1 if MakeSmtpHeader() fails |
| // returns 10, 11, 12, 13, 14, 15, 50, 51, 52 if prepare_message() fails | // returns 10, 11, 12, 13, 14, 15, 50, 51, 52 if prepare_message() fails |
| void SMTP:: | void SMTP:: |
| Send(const char *server, const char *service, const char *msg, char *from, char *to) | Send(const char* server, const char* service, const char* msg, char *from, char *to) |
| { | { |
| throw Exception("paf.debug", | #ifdef DEBUG_SHOW |
| 0, | throw Exception("paf.debug",0,"from=%s|to=%s|msg=%s", from,to,msg); |
| "%s|%s|%s", from, to, msg); | #endif |
| prepare_message( from, to, server, service); | prepare_message( from, to, server, service); |