PTLib  Version 2.14.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PPOP3Server Class Reference

A TCP/IP socket for the Post Office Protocol version 3. More...

#include <inetmail.h>

Inheritance diagram for PPOP3Server:
Collaboration diagram for PPOP3Server:

Public Member Functions

 PPOP3Server ()
 Create a TCP/IP POP3 protocol socket channel. More...
 
PBoolean ProcessCommand ()
 Process commands, dispatching to the appropriate virtual function. More...
 
virtual PBoolean HandleOpenMailbox (const PString &username, const PString &password)
 Log the specified user into the mail system and return sizes of each message in mail box. More...
 
virtual void HandleSendMessage (PINDEX messageNumber, const PString &id, PINDEX lines)
 Handle the sending of the specified message to the remote client. More...
 
virtual void HandleDeleteMessage (PINDEX messageNumber, const PString &id)
 Handle the deleting of the specified message from the mail box. More...
 

Protected Member Functions

PBoolean OnOpen ()
 This callback is executed when the Open() function is called with open channels. More...
 
virtual void OnUSER (const PString &name)
 
virtual void OnPASS (const PString &passwd)
 
virtual void OnQUIT ()
 
virtual void OnRSET ()
 
virtual void OnNOOP ()
 
virtual void OnSTAT ()
 
virtual void OnLIST (PINDEX msg)
 Get the size of a message in mailbox. More...
 
virtual void OnRETR (PINDEX msg)
 
virtual void OnDELE (PINDEX msg)
 
virtual void OnTOP (PINDEX msg, PINDEX count)
 
virtual void OnUIDL (PINDEX msg)
 Get unique ID for message in mailbox. More...
 
virtual PBoolean OnUnknown (const PCaselessString &command)
 Handle an unknown command. More...
 
- Protected Member Functions inherited from PPOP3
 PPOP3 ()
 
virtual PINDEX ParseResponse (const PString &line)
 Parse a response line string into a response code and any extra info on the line. More...
 
- Protected Member Functions inherited from PInternetProtocol
 PInternetProtocol (const char *defaultServiceName, PINDEX cmdCount, char const *const *cmdNames)
 

Protected Attributes

PString username
 
PUnsignedArray messageSizes
 
PStringArray messageIDs
 
PBYTEArray messageDeletions
 

Additional Inherited Members

- Public Types inherited from PPOP3
enum  Commands {
  USER, PASS, QUIT, RSET,
  NOOP, STATcmd, LIST, RETR,
  DELE, APOP, TOP, UIDL,
  AUTH, NumCommands
}
 
- Static Public Member Functions inherited from PChannel
static PString GetErrorText (Errors lastError, int osError=0)
 Get error message description. More...
 
- Static Public Member Functions inherited from PObject
static const char * Class ()
 Get the name of the class as a C string. More...
 
static __inline const PObjectPTraceObjectInstance (const char *)
 
static __inline const PObjectPTraceObjectInstance (const PObject *obj)
 
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 
- Protected Types inherited from PInternetProtocol
enum  StuffState {
  DontStuff, StuffIdle, StuffCR, StuffCRLF,
  StuffCRLFdot, StuffCRLFdotCR
}
 
- Static Protected Member Functions inherited from PPOP3
static const PStringokResponse ()
 
static const PStringerrResponse ()
 
- Friends inherited from PObject

Detailed Description

A TCP/IP socket for the Post Office Protocol version 3.

When acting as a server, a descendant class would be created to override at least the HandleOpenMailbox(), HandleSendMessage() and HandleDeleteMessage() functions. Other functions may be overridden for further enhancement to the sockets capabilities, but these will give a basic POP3 server functionality.

The server socket thread would continuously call the ProcessMessage() function until it returns false. This will then call the appropriate virtual function on parsing the POP3 protocol.

Constructor & Destructor Documentation

PPOP3Server::PPOP3Server ( )

Create a TCP/IP POP3 protocol socket channel.

The parameterless form creates an unopened socket, the form with the address parameter makes a connection to a remote system, opening the socket. The form with the socket parameter opens the socket to an incoming call from a "listening" socket.

Member Function Documentation

virtual void PPOP3Server::HandleDeleteMessage ( PINDEX  messageNumber,
const PString id 
)
virtual

Handle the deleting of the specified message from the mail box.

This is called when the OnQUIT command is called for each message that was deleted using the DELE command.

Returns
true if successfully sent message.
Parameters
messageNumberNumber of message to send.
idUnique id of message to send.
virtual PBoolean PPOP3Server::HandleOpenMailbox ( const PString username,
const PString password 
)
virtual

Log the specified user into the mail system and return sizes of each message in mail box.

The user override of this function is expected to populate the protected member fields messageSizes and messageIDs.

Returns
true if user and password were valid.
Parameters
usernameUser name for mail box
passwordPassword for user name
virtual void PPOP3Server::HandleSendMessage ( PINDEX  messageNumber,
const PString id,
PINDEX  lines 
)
virtual

Handle the sending of the specified message to the remote client.

The data written to the socket will automatically have the '.' character stuffing enabled.

Returns
true if successfully sent message.
Parameters
messageNumberNumber of message to send.
idUnique id of message to send.
linesNuumber of lines in body of message to send.
virtual void PPOP3Server::OnDELE ( PINDEX  msg)
protectedvirtual
Parameters
msgNumber of message.
virtual void PPOP3Server::OnLIST ( PINDEX  msg)
protectedvirtual

Get the size of a message in mailbox.

If msg is 0 then get sizes of all messages in mailbox.

Parameters
msgNumber of message.
virtual void PPOP3Server::OnNOOP ( )
protectedvirtual
PBoolean PPOP3Server::OnOpen ( )
protectedvirtual

This callback is executed when the Open() function is called with open channels.

It may be used by descendent channels to do any handshaking required by the protocol that channel embodies.

The default behaviour is to simply return true.

Returns
Returns true if the protocol handshaking is successful.

Reimplemented from PIndirectChannel.

virtual void PPOP3Server::OnPASS ( const PString passwd)
protectedvirtual
Parameters
passwdPassword for account.
virtual void PPOP3Server::OnQUIT ( )
protectedvirtual
virtual void PPOP3Server::OnRETR ( PINDEX  msg)
protectedvirtual
Parameters
msgNumber of message.
virtual void PPOP3Server::OnRSET ( )
protectedvirtual
virtual void PPOP3Server::OnSTAT ( )
protectedvirtual
virtual void PPOP3Server::OnTOP ( PINDEX  msg,
PINDEX  count 
)
protectedvirtual
Parameters
msgNumber of message.
countCount of messages
virtual void PPOP3Server::OnUIDL ( PINDEX  msg)
protectedvirtual

Get unique ID for message in mailbox.

If msg is 0 then get all IDs for all messages in mailbox.

Parameters
msgNumber of message.
virtual PBoolean PPOP3Server::OnUnknown ( const PCaselessString command)
protectedvirtual

Handle an unknown command.

Returns
true if more processing may be done, false if the ProcessCommand() function is to return false.
Parameters
commandComplete command line received.
virtual void PPOP3Server::OnUSER ( const PString name)
protectedvirtual
Parameters
nameName of user.
PBoolean PPOP3Server::ProcessCommand ( )

Process commands, dispatching to the appropriate virtual function.

This is used when the socket is acting as a server.

Returns
true if more processing may be done, false if the QUIT command was received or the OnUnknown() function returns false.

Member Data Documentation

PBYTEArray PPOP3Server::messageDeletions
protected
PStringArray PPOP3Server::messageIDs
protected
PUnsignedArray PPOP3Server::messageSizes
protected
PString PPOP3Server::username
protected

The documentation for this class was generated from the following file: