ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/IMAPHandler/IMAPHandler.h
Revision: 368
Committed: 2008-08-23T02:44:00-07:00 (14 years, 3 months ago) by douglas
Content type: text/x-c
File size: 2872 byte(s)
Log Message:
Rearranged everything else.

File Contents

# User Rev Content
1 douglas 108 // IMAP Handler
2     //
3     // Douglas Thrift
4     //
5     // IMAPHandler.h
6    
7     #ifndef _IMAPHandler_h_
8     #define _IMAPHandler_h_
9    
10     #include <iostream>
11 douglas 122 #include <sstream>
12 douglas 108 #include <string>
13     #include <cstdlib>
14     #include <cstdio>
15    
16     using namespace std;
17    
18     // Lovely C Sockets!
19     #ifdef _WIN32
20    
21     // Windows Sockets
22     #include <winsock2.h>
23     #include <windows.h>
24    
25     #else
26    
27     // BSD Sockets
28     #include <unistd.h>
29     #include <sys/types.h>
30     #include <sys/socket.h>
31     #include <netinet/in.h>
32     #include <netdb.h>
33    
34     #define INVALID_SOCKET -1
35     #define SOCKET_ERROR -1
36    
37     typedef int SOCKET;
38    
39     inline int closesocket(SOCKET s) { return close(s); }
40    
41     #endif // _WIN32
42    
43     #include <openssl/ssl.h>
44     #include <openssl/err.h>
45     #include <openssl/rand.h>
46    
47     extern string program;
48     extern bool debug;
49    
50     class IMAPHandler
51     {
52     private:
53     #ifdef _WIN32
54     WSADATA data;
55     #endif // _WIN32
56     SOCKET sock;
57     SSL_CTX* ctx;
58     SSL* ssl;
59     bool tls;
60     char* buffer;
61     char letter;
62     unsigned number;
63     bool success;
64     string command();
65     string imap(const string& imap);
66     string imap(const string& imap, const string& args);
67     string imap(const string& imap, const string& args, const string& message);
68     void putline(const string line = "");
69     string getline();
70     void error(const string& prefix, bool host = false);
71     void error(const string& prefix, int code);
72     public:
73     IMAPHandler(const string& server, bool tls = false);
74     ~IMAPHandler();
75     string capability() { return imap("CAPABILITY"); }
76     string starttls();
77     string noop() { return imap("NOOP"); }
78     string logout() { return imap("LOGOUT"); }
79     string login(const string& args) { return imap("LOGIN", args); }
80 douglas 115 string select(const string& args) { return imap("SELECT", args); }
81     string examine(const string& args) { return imap("EXAMINE", args); }
82     string create(const string& args) { return imap("CREATE", args); }
83     string delete_(const string& args) { return imap("DELETE", args); }
84     string rename(const string& args) { return imap("RENAME", args); }
85     string subscribe(const string& args) { return imap("SUBSCRIBE", args); }
86     string unsubscribe(const string& args) { return imap("UNSUBSCRIBE", args); }
87     string list(const string& args) { return imap("LIST", args); }
88     string lsub(const string& args) { return imap("LSUB", args); }
89     string status_(const string& args) { return imap("STATUS", args); }
90 douglas 108 string append(const string& args, const string& message)
91     {
92 douglas 115 return imap("APPEND", args, message);
93 douglas 108 }
94 douglas 115 string check() { return imap("CHECK"); }
95     string close() { return imap("CLOSE"); }
96     string expunge() { return imap("EXPUNGE"); }
97     string search(const string& args) { return imap("SEARCH", args); }
98     string fetch(const string& args) { return imap("FETCH", args); }
99     string store(const string& args) { return imap("STORE", args); }
100     string copy(const string& args) { return imap("COPY", args); }
101     string uid(const string& args) { return imap("UID", args); }
102 douglas 108 bool successful() { return success; }
103     };
104    
105     #endif // _IMAPHandler_h_