All Classes Namespaces Functions Variables Groups Pages
Pop3Client.qm.dox.h
// -*- mode: c++; indent-tabs-mode: nil -*-
// @file Pop3Client.qm POP3 client module definition
/* Pop3Client.qm Copyright 2012 David Nichols
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
// minimum qore version
// need mime definitions
// need MailMessage classes
/* Version History
* 2012-11-03 v1.1: David Nichols <david@qore.org>
+ added the logPassword() methods and masked password by default in the debug log
* 2012-09-04 v1.0: David Nichols <david@qore.org>
+ doc updates only
* 2012-06-12 v1.0: David Nichols <david@qore.org>
+ initial release
based on:
- http://tools.ietf.org/html/rfc1939 (POP3)
*/
namespace Pop3Client {
const DefaultReadTimeout = 15s;
const DefaultConnectTimeout = 30s;
class Pop3Client {
public:
private :
Socket sock();
// connect string
string connect;
// ensures exclusive access to the object
Mutex mutex();
// optional info log closure
*code log_info;
// optional debug log closure
*code log_debug;
// "tls" flag
bool tls = False;
// "starttls" flag
bool starttls = False;
// "noquit" flag
bool noquit = False;
// authentication credentials
string user;
string pass;
// logged in flag
bool logged_in = False;
// read timeout in milliseconds
timeout readTimeout = DefaultReadTimeout;
// connect timeout in milliseconds
timeout connectTimeout = DefaultConnectTimeout;
// log password
bool log_pass = False;
const MaxDebugLine = 2048;
public:
public :
const POP3Port = 110;
const POP3SPort = 995;
const Protocols = (
"pop3": ("tls": False, "port": POP3Port),
"pop3s": ("tls": True, "port": POP3SPort),
);
public:
constructor(string url, *code log, *code dbglog);
destructor();
logPassword(bool pwd);
bool logPassword();
tls(bool tls);
bool tls();
starttls(bool starttls);
bool starttls();
noquit(bool noquit);
bool noquit();
connect();
*hash getMail();
hash stat();
*hash list();
del(softstring msg);
del(list l);
noop();
reset();
bool isConnected();
disconnect();
setReadTimeout(timeout to);
int getReadTimeoutMs();
date getReadTimeoutDate();
setConnectTimeout(timeout to);
int getConnectTimeoutMs();
date getConnectTimeoutDate();
forceDisconnect();
// don't reimplement this method; fix/enhance it in the module
private:
final disconnectIntern();
public:
// don't reimplement this method; fix/enhance it in the module
private:
final MailMessage::Message retrIntern(softstring id);
public:
// don't reimplement this method; fix/enhance it in the module
private:
final hash statIntern();
public:
// don't reimplement this method; fix/enhance it in the module
private:
final *hash listIntern();
public:
// read a line from the socket (terminated with \n)
private:
string readLine(timeout to);
public:
// gets a trimmed one-line response from the server, throws an exception if an error response is received
// don't reimplement this method; fix/enhance it in the module
private:
final string getResponse();
public:
// gets a trimmed multi-line response from the server, throws an exception if an error response is received
// don't reimplement this method; fix/enhance it in the module
private:
final list getResponseMulti();
public:
// gets a multi-line response from the server, throws an exception if an error response is received
// does not include the first line in the response
// don't reimplement this method; fix/enhance it in the module
private:
final string getResponseMultiStr();
public:
private:
log(string msg);
public:
private:
logDbg(string msg);
public:
// don't reimplement this method; fix/enhance it in the module
private:
final sendCommandIntern(string str, bool masked = False);
public:
// don't reimplement this method; fix/enhance it in the module
private:
final list sendCommandMulti(string str);
public:
// don't reimplement this method; fix/enhance it in the module
private:
final string sendCommandMultiStr(string str);
public:
// don't reimplement this method; fix/enhance it in the module
private:
final string sendCommand(string str);
public:
// don't reimplement this method; fix/enhance it in the module
private:
final string sendCommandMasked(string str);
public:
private:
loginIntern(string r);
public:
private:
doSSLIntern();
public:
// when this method returns without an exception, the object is in the TRANSACTION state
private:
connectIntern();
public:
private:
forceDisconnectIntern();
public:
};
};