Bincimap 2.0.16
Easy Imapping
Loading...
Searching...
No Matches
session.cc
Go to the documentation of this file.
1
5#include <unistd.h>
6#include <syslog.h>
7
8#include "argparser.h"
9#include "convert.h"
10#include "globals.h"
11#include "session.h"
12#include "tools.h"
13#include <string>
14#include <map>
15
16using namespace ::std;
17using namespace Binc;
18
19extern char **environ;
20
21//----------------------------------------------------------------------
22Session::Session(void)
23{
24 readbytes = 0;
25 writebytes = 0;
26 statements = 0;
27 bodies = 0;
28 mailboxchanges = true;
29 logfacility = LOG_DAEMON;
30}
31
32//----------------------------------------------------------------------
34{
35 static Session session;
36 return session;
37}
38
39//----------------------------------------------------------------------
40const int Session::getState(void) const
41{
42 return state;
43}
44
45//----------------------------------------------------------------------
47{
48 state = n;
49}
50
51//----------------------------------------------------------------------
52const string &Session::getUserID(void) const
53{
54 return userid;
55}
56
57//----------------------------------------------------------------------
58void Session::setUserID(const string &s)
59{
60 userid = s;
61}
62
63//----------------------------------------------------------------------
64const string &Session::getIP(void) const
65{
66 return ip;
67}
68
69//----------------------------------------------------------------------
70void Session::setIP(const string &s)
71{
72 ip = s;
73}
74
75//----------------------------------------------------------------------
76void Session::setLogFacility(int facility)
77{
78 logfacility = facility;
79}
80
81//----------------------------------------------------------------------
83{
84 return logfacility;
85}
86
87//----------------------------------------------------------------------
89{
90 ++bodies;
91}
92
93//----------------------------------------------------------------------
95{
96 ++statements;
97}
98
99//----------------------------------------------------------------------
101{
102 readbytes += i;
103}
104
105//----------------------------------------------------------------------
107{
108 writebytes += i;
109}
110
111//----------------------------------------------------------------------
112int Session::getBodies(void) const
113{
114 return bodies;
115}
116
117//----------------------------------------------------------------------
119{
120 return statements;
121}
122
123//----------------------------------------------------------------------
125{
126 return writebytes;
127}
128
129//----------------------------------------------------------------------
131{
132 return readbytes;
133}
134
135//----------------------------------------------------------------------
136bool Session::parseCommandLine(int argc, char * argv[])
137{
138 args.addOptional("h|help", "Display this help screen", true);
139 args.addOptional("version", "Display the version of Binc IMAP", true);
140 args.addOptional("a|allow-plain", "Allow authentication when not TLS protected", true);
141 args.addOptional("v|show-version", "Enable verbose IMAP greeting", false);
142 args.addOptional("l|log-type", "Sets the method used for logging", false);
143 args.addOptional("d|depot", "Sets the depot type", false);
144 args.addOptional("D|delimiter", "Sets the mailbox delimiter", false);
145
146 if (!args.parse(argc, argv)) {
147 setLastError("Command line error, " + args.errorString());
148 return false;
149 }
150
151 command.help = args["help"] == "yes" ? true : false;
152 command.version = args["version"] == "yes" ? true : false;
153
154 unparsedArgs = argv + args.argc();
155
156 return true;
157}
158
159//----------------------------------------------------------------------
161{
162 if (args.hasArg("allow-plain"))
163 setEnv("ALLOW_NONSSL_PLAINTEXT_LOGINS", "yes");
164
165 if (args.hasArg("show-version"))
166 setEnv("SHOW_VERSION_IN_GREETING", "yes");
167
168 if (args.hasArg("log-type"))
169 setEnv("LOG_TYPE", args["log-type"]);
170
171 if (args.hasArg("depot"))
172 setEnv("DEPOT", args["depot"]);
173
174 if (args.hasArg("delimiter"))
175 setEnv("DELIMITER", args["delimiter"]);
176}
177
178//----------------------------------------------------------------------
179const string &Session::getLastError(void) const
180{
181 return lastError;
182}
183
184//----------------------------------------------------------------------
185void Session::setLastError(const string &error) const
186{
187 lastError = error;
188}
189
190//----------------------------------------------------------------------
191const string &Session::getResponseCode(void) const
192{
193 return responseCode;
194}
195
196//----------------------------------------------------------------------
197void Session::setResponseCode(const string &code) const
198{
199 responseCode = "[" + code + "] ";
200}
201
202//----------------------------------------------------------------------
204{
205 responseCode = "";
206}
207
208//----------------------------------------------------------------------
210{
211 if (pid == 0)
212 pid = getpid();
213
214 return pid;
215}
216
217//----------------------------------------------------------------------
219{
220 return state == NONAUTHENTICATED ? AUTH_TIMEOUT : IDLE_TIMEOUT;
221}
222
223//----------------------------------------------------------------------
224bool Session::hasEnv(const string &key) const
225{
226 return getenv(key.c_str()) != 0;
227}
228
229//----------------------------------------------------------------------
230string Session::getEnv(const string &key)
231{
232 char *c = getenv(key.c_str());
233 return c ? c : "";
234}
235
236//----------------------------------------------------------------------
237void Session::setEnv(const string &key, const string &value)
238{
239 string env = key + "=" + value;
240 putenv(strdup(env.c_str()));
241}
Declaration of the argument parser class.
bool hasArg(const std::string &arg) const
Definition: argparser.cc:253
bool parse(int argc, char *argv[])
Definition: argparser.cc:24
std::string errorString(void) const
Definition: argparser.cc:211
int argc(void) const
Definition: argparser.cc:307
void addOptional(const std::string &arg, const std::string &desc, bool boolean)
Definition: argparser.cc:224
void setLogFacility(int facility)
Definition: session.cc:76
const int getState(void) const
Definition: session.cc:40
int getLogFacility(void) const
Definition: session.cc:82
bool mailboxchanges
Definition: session.h:33
void setEnv(const std::string &key, const std::string &value)
Definition: session.cc:237
void assignCommandLineArgs(void)
Definition: session.cc:160
void setLastError(const std::string &error) const
Definition: session.cc:185
void addBody(void)
Definition: session.cc:88
CommandLineArgs args
Definition: session.h:42
const std::string & getIP(void) const
Definition: session.cc:64
void setUserID(const std::string &s)
Definition: session.cc:58
void setState(int n)
Definition: session.cc:46
const std::string & getLastError(void) const
Definition: session.cc:179
void setIP(const std::string &ip)
Definition: session.cc:70
char ** unparsedArgs
Definition: session.h:25
int timeout() const
Definition: session.cc:218
@ NONAUTHENTICATED
Definition: session.h:36
const std::string & getUserID() const
Definition: session.cc:52
void addStatement(void)
Definition: session.cc:94
int getBodies(void) const
Definition: session.cc:112
void setResponseCode(const std::string &error) const
Definition: session.cc:197
int getWriteBytes(void) const
Definition: session.cc:124
void addReadBytes(int)
Definition: session.cc:100
int getReadBytes(void) const
Definition: session.cc:130
struct Binc::Session::@3 command
int getStatements(void) const
Definition: session.cc:118
void addWriteBytes(int)
Definition: session.cc:106
void clearResponseCode(void) const
Definition: session.cc:203
pid_t getPid(void)
Definition: session.cc:209
bool parseCommandLine(int argc, char *argv[])
Definition: session.cc:136
static Session & getInstance(void)
Definition: session.cc:33
const std::string & getResponseCode(void) const
Definition: session.cc:191
std::string getEnv(const std::string &key)
Definition: session.cc:230
bool hasEnv(const std::string &key) const
Definition: session.cc:224
Declaration of miscellaneous convertion functions.
Global constants.
Definition: bincimapd.cc:9
char ** environ
Declaration of miscellaneous tools.