Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы / 2 / lab.67.by mice / tube / src / tb_mail
.h/*******************************************************************************
* file: tb_mail.h *
* version: 0.0.1 *
* author: d-evil [tmd] (mailto:d-evil.tmd@mail.ru) *
* description: not available *
*******************************************************************************/
#ifndef TB_MAIL_INCLUDED
#define TB_MAIL_INCLUDED
#include <afx.h> // i hate this stuff
#include <winsock2.h>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <string>
#include "win_errors.h"
#include "cdm_addr_info.h"
#include "tb_classes.h"
////////////////////////////////////////////////////////////////////////////////
// ctb_link declaration
class ctb_link {
public:
////////////////////////////////////////////////////////////////////////////
// ctb_link public constants
static const int LLOPS_TIMEOUT = 200; // low-level ops timeout
static const int HLOPS_TIMEOUT = 10000; // hi-level ops timeout
ctb_link();
~ctb_link();
int connect(const char *const host, const unsigned short port);
int disconnect();
int send_str(const char *const str, const bool ap_crlf = true);
int write_str(char *const str = NULL, const unsigned int to_ms = HLOPS_TIMEOUT);
int recv_str(char *const str, const int mx = _MX_STR_LEN);
int read_str(char *const str, const int mx = _MX_STR_LEN,
const unsigned int to_ms = HLOPS_TIMEOUT);
int clean_buf();
int can_read_nb() { return _can_read_nb(); }
int can_read(const unsigned int to_ms = LLOPS_TIMEOUT) { return _can_read(to_ms); }
int can_write(const unsigned int to_ms = LLOPS_TIMEOUT) { return _can_write(to_ms); }
int open_log(const char *const fn, const bool erase = false);
int close_log();
protected:
////////////////////////////////////////////////////////////////////////////
// ctb_link protected constants
static const unsigned short _MX_STR_LEN = 1024;
static const unsigned short _BUF_SZ = 0xFFF;
static const char _CRLF[];
static const char *_CRLF_STR;
////////////////////////////////////////////////////////////////////////////
// ctb_link protected functions
bool _sock_invalid() { return INVALID_SOCKET == _sock; }
int _can_read_nb();
int _can_read(const unsigned int to_ms = 200);
int _can_write(const unsigned int to_ms = 200);
static int _escape_str(const char *const from, const int len,
char *const to, const int mx);
static char *_set_str(char *const to, const char *const from = NULL);
static char *_time_str(char *const time_str = NULL);
private:
SOCKET _sock;
cdm_addr_info _ai;
char _buf[_BUF_SZ];
char _recv_buf[_MX_STR_LEN];
char _send_buf[_MX_STR_LEN];
int _buf_top;
FILE *_logf;
};
////////////////////////////////////////////////////////////////////////////////
// ctb_sender declaration
class ctb_sender: public ctb_link {
public:
////////////////////////////////////////////////////////////////////////////
// ctb_sender public constants
static const unsigned short DEF_SMTP_PORT = 25;
ctb_sender();
~ctb_sender();
char *set_from(const char *const str) { return (_from = _set_str(_from, str)); }
char *set_to(const char *const str) { return (_to = _set_str(_to, str)); }
char *set_copy(const char *const str) { return (_copy = _set_str(_copy, str)); }
char *set_subj(const char *const str) { return (_subj = _set_str(_subj, str)); }
char *set_text(const char *const str) { return (_text = _set_str(_text, str)); }
char *last_reply() { return _last_reply; }
int connect(const char *const host, const unsigned short port = DEF_SMTP_PORT);
int open(const char *const as = NULL);
int close();
int send_mail();
protected:
////////////////////////////////////////////////////////////////////////////
// ctb_sender protected constants
static const unsigned int _SMTP_REPLY_READY = 220;
static const unsigned int _SMTP_REPLY_CLOSE = 221;
static const unsigned int _SMTP_REPLY_OK = 250;
static const unsigned int _SMTP_REPLY_UNL = 251; // user not local
static const unsigned int _SMTP_REPLY_STDAT = 354;
static int _get_smtp_code(const char *const str);
int _get_smtp_reply(int *const code);
int _get_smtp_reply();
int _write_mail(const char *const text);
int _cmd_mail(const char *const from);
int _cmd_rcpt(const char *const to);
int _cmd_data();
private:
char _str_buf[_MX_STR_LEN];
char _last_reply[_MX_STR_LEN];
char *_from;
char *_to;
char *_copy;
char *_subj;
char *_text;
};
////////////////////////////////////////////////////////////////////////////////
// ctb_recver declaration
class ctb_recver: public ctb_link {
public:
////////////////////////////////////////////////////////////////////////////
// ctb_recver public tpyes
typedef std::vector<std::string> ctb_list;
ctb_recver();
~ctb_recver();
char *set_user(const char *const str) { return (_user = _set_str(_user, str)); }
char *set_pass(const char *const str) { return (_pass = _set_str(_pass, str)); }
int open();
int close();
int auth(const char *const user = NULL, const char *const pass = NULL);
int stat(int *const total = NULL, int *const sz = NULL) { return _cmd_stat(total, sz); }
int list(ctb_list *const list) { return _cmd_list(list); }
int retr(const int num, char **text) { return _cmd_retr(num, text); }
int retr_free(char *const text) { return _cmd_retr_free(text); }
int retr2(const int num, std::string &text) { return _cmd_retr2(num, text); }
int dele(const int num) { return _cmd_dele(num); }
protected:
static int _get_pop3_code(const char *const _str_buf);
int _get_pop3_reply(int *const code);
int _get_pop3_reply();
int _cmd_user(const char *const user);
int _cmd_pass(const char *const pass);
int _cmd_stat(int *const total = NULL, int *const sz = NULL);
int _cmd_list(ctb_list *const lst);
int _cmd_retr(const int num, char **text);
int _cmd_retr_free(char *const text);
int _cmd_retr2(const int num, std::string &text);
int _cmd_dele(const int num);
private:
char _str_buf[_MX_STR_LEN];
char _last_reply[_MX_STR_LEN];
char *_user;
char *_pass;
};
#endif
Соседние файлы в папке src