"Fossies" - the Fresh Open Source Software Archive 
Member "postal-0.76/tcp.h" (12 Jan 2007, 2710 Bytes) of package /linux/privat/postal-0.76.tgz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "tcp.h" see the
Fossies "Dox" file reference documentation.
1 #ifndef TCP_H
2 #define TCP_H
3
4 // Misnamed really. This class does all the common functionality between SMTP
5 // and POP clients.
6
7 using namespace std;
8 #include "postal.h"
9 #include <sys/poll.h>
10 #include <string>
11 #include "cmd5.h"
12 #include "thread.h"
13 #include <sys/types.h>
14 #include <netinet/in.h>
15
16 class Logit;
17 class address;
18
19 #ifdef USE_SSL
20 #ifdef USE_OPENSSL
21 #ifndef TCP_BODY
22 struct SSL_METHOD;
23 struct SSL_CTX;
24 struct SSL;
25 struct X509;
26 #else // TCP_BODY
27 #include <openssl/crypto.h>
28 #include <openssl/x509.h>
29 #include <openssl/pem.h>
30 #include <openssl/ssl.h>
31 #include <openssl/err.h>
32 #endif // TCP_BODY
33 #else // USE_OPENSSL
34 #include <gnutls/gnutls.h>
35 #endif // USE_OPENSSL
36 #endif // USE_SSL
37
38 class tcp : public Thread
39 {
40 public:
41 tcp(int *exitCount, const char *addr, unsigned short default_port, Logit *log
42 #ifdef USE_SSL
43 , int ssl
44 #endif
45 , const char *sourceAddr, Logit *debug);
46 tcp(int threadNum, const tcp *parent);
47 virtual ~tcp();
48
49 // connect returns 0 for connect, 1 for can't connect, and 2 for serious
50 // errors.
51 int Connect(short port = 0);
52 #ifdef USE_SSL
53 // after calling Connect() and getting high-level protocol ready call
54 // ConnectTLS() to start TLS.
55 int ConnectTLS();
56 #endif
57 int sendMsg();
58 virtual int disconnect();
59 int doAllWork(int rate);
60
61 protected:
62 virtual int pollRead() = 0;
63 virtual int WriteWork(PVOID buf, int size, int timeout) = 0;
64
65 int readLine(char *buf, int bufSize);
66 ERROR_TYPE sendData(CPCCHAR buf, int size);
67 ERROR_TYPE sendString(const string &s) { return sendData(s.c_str(), s.size()); }
68 void endIt();
69 virtual void error() = 0;
70 virtual void sentData(int bytes) = 0;
71 virtual void receivedData(int bytes) = 0;
72 Cmd5 m_md5;
73
74 virtual ERROR_TYPE readCommandResp(bool important = true) = 0;
75 virtual ERROR_TYPE sendCommandData(const char *buf, int size, bool important = true);
76 virtual ERROR_TYPE sendCommandString(const string &str, bool important = true);
77
78 int m_destAffinity;
79 Logit *m_log;
80 struct sockaddr_in m_connectionLocalAddr;
81 #ifdef USE_SSL
82 bool m_canTLS;
83 int m_useTLS;
84 #endif
85 int *m_exitCount;
86
87 private:
88 int m_fd;
89 pollfd m_poll;
90 char m_buf[4096];
91 int m_start;
92 int m_end;
93 bool m_open;
94 address *m_addr; // destination
95 address *m_sourceAddr;
96 // debug file management object (NULL if no debugging)
97 // if used a new Logit object is created for each instance unlike the
98 // m_log instance
99 Logit *m_debug;
100
101 #ifdef USE_SSL
102 #ifdef USE_OPENSSL
103 SSL_METHOD *m_sslMeth;
104 SSL_CTX* m_sslCtx;
105 SSL *m_ssl;
106 #else
107 gnutls_session_t *m_gnutls_session;
108 gnutls_anon_client_credentials_t m_gnutls_anoncred;
109 #endif
110 bool m_isTLS;
111 #endif
112
113 tcp(const tcp&);
114 tcp & operator=(const tcp&);
115 };
116
117 #endif