#ifndef __MAIL_SMTP_H__ #define __MAIL_SMTP_H__ #include "stellar/session.h" #include "mail_decoder_email.h" #define SMTP_STR_220 "220" #define SMTP_STR_HELO "HELO " #define SMTP_STR_EHLO "EHLO " #define SMTP_STR_PLAIN_LEN 10 #define SMTP_PLAIN_MAXLEN 1024 #define SMTP_PLAIN_FLAG 100 #define MAIL_FROM_LEN 120 #define RSETQUIT_CMD_LEN 20 #define BDAT_CMD_LEN 50 #define MAX_MAIL_USER_LEN 512 enum SMTP_COMMAND { SMTP_COMMAND_UNKNOWN, SMTP_COMMAND_EHLO, SMTP_COMMAND_HELO, SMTP_COMMAND_AUTH, SMTP_COMMAND_STARTTLS, SMTP_COMMAND_MAIL, SMTP_COMMAND_SEND, SMTP_COMMAND_SOML, SMTP_COMMAND_SAML, SMTP_COMMAND_RCPT, SMTP_COMMAND_DATA, SMTP_COMMAND_VRFY, SMTP_COMMAND_EXPN, SMTP_COMMAND_NOOP, SMTP_COMMAND_RSET, SMTP_COMMAND_QUIT, SMTP_COMMAND_MAX, }; typedef enum SMTP_CMD_STATE { SMTP_CMD_EHLO=20, SMTP_CMD_AUTH, SMTP_CMD_USER_PASS, SMTP_CMD_MAIL_FROM, SMTP_CMD_RCPT_TO, SMTP_CMD_DATA, SMTP_CMD_RSET, SMTP_CMD_BDAT, SMTP_CMD_QUIT, SMTP_CMD_DROP, SMTP_CMD_XOAUTH2, SMTP_CMD_UNKNOWN, SMTP_CMD_STARTTLS, }SMTP_CMD_STATE_t; struct smtp_parser { struct mail_command *current_command; int command_topic_id; struct mq_runtime *mq; struct email_parser *eml_parser; }; int smtp_identify(const char *payload, size_t payload_len, int is_c2s); int smtp_parser_entry(struct smtp_parser *parser, struct session *sess, const char *payload, size_t payload_len, int is_c2s); void smtp_parser_free(struct smtp_parser *parser); struct smtp_parser * smtp_parser_new(struct mq_runtime *mq, struct mail_topics *topics, int is_c2s); #endif