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 (13 years, 10 months ago) by douglas
Content type: text/x-c
File size: 2872 byte(s)
Log Message:
Rearranged everything else.

File Contents

# Content
1 // IMAP Handler
2 //
3 // Douglas Thrift
4 //
5 // IMAPHandler.h
6
7 #ifndef _IMAPHandler_h_
8 #define _IMAPHandler_h_
9
10 #include <iostream>
11 #include <sstream>
12 #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 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 string append(const string& args, const string& message)
91 {
92 return imap("APPEND", args, message);
93 }
94 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 bool successful() { return success; }
103 };
104
105 #endif // _IMAPHandler_h_