mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-09-12 17:55:38 +00:00
Move SMTP from contrib to main lwIP rep - with TLS support, it becomes useful again
This commit is contained in:
parent
38651b8069
commit
3826bcceab
@ -160,6 +160,9 @@ HTTPDFILES=$(LWIPDIR)/apps/httpd/fs.c \
|
|||||||
# LWIPERFFILES: IPERF server
|
# LWIPERFFILES: IPERF server
|
||||||
LWIPERFFILES=$(LWIPDIR)/apps/lwiperf/lwiperf.c
|
LWIPERFFILES=$(LWIPDIR)/apps/lwiperf/lwiperf.c
|
||||||
|
|
||||||
|
# SMTPFILES: SMTP client
|
||||||
|
SMTPFILES=$(LWIPDIR)/apps/smtp/smtp.c
|
||||||
|
|
||||||
# SNTPFILES: SNTP client
|
# SNTPFILES: SNTP client
|
||||||
SNTPFILES=$(LWIPDIR)/apps/sntp/sntp.c
|
SNTPFILES=$(LWIPDIR)/apps/sntp/sntp.c
|
||||||
|
|
||||||
@ -183,6 +186,7 @@ ALTCP_TLS_MBEDTLS=$(LWIPDIR)/apps/altcp_tls/altcp_tls_mbedtls.c \
|
|||||||
LWIPAPPFILES=$(SNMPFILES) \
|
LWIPAPPFILES=$(SNMPFILES) \
|
||||||
$(HTTPDFILES) \
|
$(HTTPDFILES) \
|
||||||
$(LWIPERFFILES) \
|
$(LWIPERFFILES) \
|
||||||
|
$(SMTPFILES) \
|
||||||
$(SNTPFILES) \
|
$(SNTPFILES) \
|
||||||
$(MDNSFILES) \
|
$(MDNSFILES) \
|
||||||
$(NETBIOSNSFILES) \
|
$(NETBIOSNSFILES) \
|
||||||
|
1560
src/apps/smtp/smtp.c
Normal file
1560
src/apps/smtp/smtp.c
Normal file
File diff suppressed because it is too large
Load Diff
123
src/include/lwip/apps/smtp.h
Normal file
123
src/include/lwip/apps/smtp.h
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
#ifndef LWIP_HDR_APPS_SMTP_H
|
||||||
|
#define LWIP_HDR_APPS_SMTP_H
|
||||||
|
|
||||||
|
/** Set this to 1 to enable data handler callback on BODY */
|
||||||
|
#ifndef SMTP_BODYDH
|
||||||
|
#define SMTP_BODYDH 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "lwip/err.h"
|
||||||
|
|
||||||
|
/** The default TCP port used for SMTP */
|
||||||
|
#define SMTP_DEFAULT_PORT 25
|
||||||
|
/** The default TCP port used for SMTPS */
|
||||||
|
#define SMTPS_DEFAULT_PORT 465
|
||||||
|
|
||||||
|
/** Email successfully sent */
|
||||||
|
#define SMTP_RESULT_OK 0
|
||||||
|
/** Unknown error */
|
||||||
|
#define SMTP_RESULT_ERR_UNKNOWN 1
|
||||||
|
/** Connection to server failed */
|
||||||
|
#define SMTP_RESULT_ERR_CONNECT 2
|
||||||
|
/** Failed to resolve server hostname */
|
||||||
|
#define SMTP_RESULT_ERR_HOSTNAME 3
|
||||||
|
/** Connection unexpectedly closed by remote server */
|
||||||
|
#define SMTP_RESULT_ERR_CLOSED 4
|
||||||
|
/** Connection timed out (server didn't respond in time) */
|
||||||
|
#define SMTP_RESULT_ERR_TIMEOUT 5
|
||||||
|
/** Server responded with an unknown response code */
|
||||||
|
#define SMTP_RESULT_ERR_SVR_RESP 6
|
||||||
|
/** Out of resources locally */
|
||||||
|
#define SMTP_RESULT_ERR_MEM 7
|
||||||
|
|
||||||
|
/** Prototype of an smtp callback function
|
||||||
|
*
|
||||||
|
* @param arg argument specified when initiating the email
|
||||||
|
* @param smtp_result result of the mail transfer (see defines SMTP_RESULT_*)
|
||||||
|
* @param srv_err if aborted by the server, this contains the error code received
|
||||||
|
* @param err an error returned by internal lwip functions, can help to specify
|
||||||
|
* the source of the error but must not necessarily be != ERR_OK
|
||||||
|
*/
|
||||||
|
typedef void (*smtp_result_fn)(void *arg, u8_t smtp_result, u16_t srv_err, err_t err);
|
||||||
|
|
||||||
|
/** This structure is used as argument for smtp_send_mail_int(),
|
||||||
|
* which in turn can be used with tcpip_callback() to send mail
|
||||||
|
* from interrupt context, e.g. like this:
|
||||||
|
* struct smtp_send_request *req; (to be filled)
|
||||||
|
* tcpip_callback_with_block(smtp_send_mail_int, (void*)req, 0);
|
||||||
|
*
|
||||||
|
* For member description, see parameter description of smtp_send_mail().
|
||||||
|
* When using with tcpip_callback, this structure has to stay allocated
|
||||||
|
* (e.g. using mem_malloc/mem_free) until its 'callback_fn' is called.
|
||||||
|
*/
|
||||||
|
struct smtp_send_request {
|
||||||
|
const char *from;
|
||||||
|
const char* to;
|
||||||
|
const char* subject;
|
||||||
|
const char* body;
|
||||||
|
smtp_result_fn callback_fn;
|
||||||
|
void* callback_arg;
|
||||||
|
/** If this is != 0, data is *not* copied into an extra buffer
|
||||||
|
* but used from the pointers supplied in this struct.
|
||||||
|
* This means less memory usage, but data must stay untouched until
|
||||||
|
* the callback function is called. */
|
||||||
|
u8_t static_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#if SMTP_BODYDH
|
||||||
|
|
||||||
|
#ifndef SMTP_BODYDH_BUFFER_SIZE
|
||||||
|
#define SMTP_BODYDH_BUFFER_SIZE 256
|
||||||
|
#endif /* SMTP_BODYDH_BUFFER_SIZE */
|
||||||
|
|
||||||
|
struct smtp_bodydh {
|
||||||
|
u16_t state;
|
||||||
|
u16_t length; /* Length of content in buffer */
|
||||||
|
char buffer[SMTP_BODYDH_BUFFER_SIZE]; /* buffer for generated content */
|
||||||
|
#ifdef SMTP_BODYDH_USER_SIZE
|
||||||
|
u8_t user[SMTP_BODYDH_USER_SIZE];
|
||||||
|
#endif /* SMTP_BODYDH_USER_SIZE */
|
||||||
|
};
|
||||||
|
|
||||||
|
enum bdh_retvals_e {
|
||||||
|
BDH_DONE = 0,
|
||||||
|
BDH_WORKING
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Prototype of an smtp body callback function
|
||||||
|
* It receives a struct smtp_bodydh, and a buffer to write data,
|
||||||
|
* must return BDH_WORKING to be called again and BDH_DONE when
|
||||||
|
* it has finished processing. This one tries to fill one TCP buffer with
|
||||||
|
* data, your function will be repeatedly called until that happens; so if you
|
||||||
|
* know you'll be taking too long to serve your request, pause once in a while
|
||||||
|
* by writing length=0 to avoid hogging system resources
|
||||||
|
*
|
||||||
|
* @param arg argument specified when initiating the email
|
||||||
|
* @param smtp_bodydh state handling + buffer structure
|
||||||
|
*/
|
||||||
|
typedef int (*smtp_bodycback_fn)(void *arg, struct smtp_bodydh *bodydh);
|
||||||
|
|
||||||
|
err_t smtp_send_mail_bodycback(const char *from, const char* to, const char* subject,
|
||||||
|
smtp_bodycback_fn bodycback_fn, smtp_result_fn callback_fn, void* callback_arg);
|
||||||
|
|
||||||
|
#endif /* SMTP_BODYDH */
|
||||||
|
|
||||||
|
|
||||||
|
err_t smtp_set_server_addr(const char* server);
|
||||||
|
void smtp_set_server_port(u16_t port);
|
||||||
|
#if LWIP_ALTCP && LWIP_ALTCP_TLS
|
||||||
|
struct altcp_tls_config;
|
||||||
|
void smtp_set_tls_config(struct altcp_tls_config *tls_config);
|
||||||
|
#endif
|
||||||
|
err_t smtp_set_auth(const char* username, const char* pass);
|
||||||
|
err_t smtp_send_mail(const char *from, const char* to, const char* subject, const char* body,
|
||||||
|
smtp_result_fn callback_fn, void* callback_arg);
|
||||||
|
err_t smtp_send_mail_static(const char *from, const char* to, const char* subject, const char* body,
|
||||||
|
smtp_result_fn callback_fn, void* callback_arg);
|
||||||
|
void smtp_send_mail_int(void *arg);
|
||||||
|
#ifdef LWIP_DEBUG
|
||||||
|
const char* smtp_result_str(u8_t smtp_result);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* LWIP_HDR_APPS_SMTP_H */
|
Loading…
Reference in New Issue
Block a user