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

File Transfer Protocol server channel class. More...

#include <ftp.h>

Inheritance diagram for PFTPServer:
Collaboration diagram for PFTPServer:

Public Types

enum  { MaxIllegalPasswords = 3 }
 
- Public Types inherited from PFTP
enum  Commands {
  USER, PASS, ACCT, CWD,
  CDUP, SMNT, QUIT, REIN,
  PORT, PASV, TYPE, STRU,
  MODE, RETR, STOR, STOU,
  APPE, ALLO, REST, RNFR,
  RNTO, ABOR, DELE, RMD,
  MKD, PWD, LIST, NLST,
  SITE, SYST, STATcmd, HELP,
  NOOP, NumCommands
}
 FTP commands. More...
 
enum  RepresentationType { ASCII, EBCDIC, Image }
 Types for file transfer. More...
 
enum  DataChannelType { NormalPort, Passive }
 File transfer mode on data channel. More...
 
enum  NameTypes { ShortNames, DetailedNames }
 Listing types. More...
 
enum  { DefaultPort = 21 }
 

Public Member Functions

 PFTPServer ()
 declare a server socket More...
 
 PFTPServer (const PString &readyString)
 
 ~PFTPServer ()
 Delete the server, cleaning up passive sockets. More...
 
virtual PString GetHelloString (const PString &user) const
 Get the string printed when a user logs in default value is a string giving the user name. More...
 
virtual PString GetGoodbyeString (const PString &user) const
 return the string printed just before exiting More...
 
virtual PString GetSystemTypeString () const
 return the string to be returned by the SYST command More...
 
PBoolean GetAllowThirdPartyPort () const
 return the thirdPartyPort flag, allowing 3 host put and get. More...
 
void SetAllowThirdPartyPort (PBoolean state)
 Set the thirdPartyPort flag. More...
 
PBoolean ProcessCommand ()
 Process commands, dispatching to the appropriate virtual function. More...
 
virtual PBoolean DispatchCommand (PINDEX code, const PString &args)
 Dispatching to the appropriate virtual function. More...
 
virtual PBoolean CheckLoginRequired (PINDEX cmd)
 Check to see if the command requires the server to be logged in before it may be processed. More...
 
virtual PBoolean AuthoriseUser (const PString &user, const PString &password, PBoolean &replied)
 Validate the user name and password for access. More...
 
virtual PBoolean OnUnknown (const PCaselessString &command)
 Handle an unknown command. More...
 
virtual void OnError (PINDEX errorCode, PINDEX cmdNum, const char *msg)
 Handle an error in command. More...
 
virtual void OnSyntaxError (PINDEX cmdNum)
 Called for syntax errors in commands. More...
 
virtual void OnNotImplemented (PINDEX cmdNum)
 Called for unimplemented commands. More...
 
virtual void OnCommandSuccessful (PINDEX cmdNum)
 Called for successful commands. More...
 
virtual PBoolean OnUSER (const PCaselessString &args)
 
virtual PBoolean OnPASS (const PCaselessString &args)
 
virtual PBoolean OnQUIT (const PCaselessString &args)
 
virtual PBoolean OnPORT (const PCaselessString &args)
 
virtual PBoolean OnSTRU (const PCaselessString &args)
 
virtual PBoolean OnMODE (const PCaselessString &args)
 
virtual PBoolean OnTYPE (const PCaselessString &args)
 
virtual PBoolean OnNOOP (const PCaselessString &args)
 
virtual PBoolean OnSYST (const PCaselessString &args)
 
virtual PBoolean OnSTAT (const PCaselessString &args)
 
virtual PBoolean OnRETR (const PCaselessString &args)
 
virtual PBoolean OnSTOR (const PCaselessString &args)
 
virtual PBoolean OnACCT (const PCaselessString &args)
 
virtual PBoolean OnAPPE (const PCaselessString &args)
 
virtual PBoolean OnRNFR (const PCaselessString &args)
 
virtual PBoolean OnRNTO (const PCaselessString &args)
 
virtual PBoolean OnDELE (const PCaselessString &args)
 
virtual PBoolean OnCWD (const PCaselessString &args)
 
virtual PBoolean OnCDUP (const PCaselessString &args)
 
virtual PBoolean OnRMD (const PCaselessString &args)
 
virtual PBoolean OnMKD (const PCaselessString &args)
 
virtual PBoolean OnPWD (const PCaselessString &args)
 
virtual PBoolean OnLIST (const PCaselessString &args)
 
virtual PBoolean OnNLST (const PCaselessString &args)
 
virtual PBoolean OnPASV (const PCaselessString &args)
 
virtual PBoolean OnHELP (const PCaselessString &args)
 
virtual PBoolean OnSITE (const PCaselessString &args)
 
virtual PBoolean OnABOR (const PCaselessString &args)
 
virtual PBoolean OnSMNT (const PCaselessString &args)
 
virtual PBoolean OnREIN (const PCaselessString &args)
 
virtual PBoolean OnSTOU (const PCaselessString &args)
 
virtual PBoolean OnALLO (const PCaselessString &args)
 
virtual PBoolean OnREST (const PCaselessString &args)
 
void SendToClient (const PFilePath &filename)
 Send the specified file to the client. More...
 
- Public Member Functions inherited from PFTP
PBoolean SendPORT (const PIPSocket::Address &addr, WORD port)
 Send the PORT command for a transfer. More...
 
- Public Member Functions inherited from PInternetProtocol
virtual PBoolean Read (void *buf, PINDEX len)
 Low level read from the channel. More...
 
virtual int ReadChar ()
 Read a single 8 bit byte from the channel. More...
 
virtual PBoolean Write (const void *buf, PINDEX len)
 Low level write to the channel. More...
 
void SetReadLineTimeout (const PTimeInterval &t)
 Set the maximum timeout between characters within a line. More...
 
virtual PBoolean Connect (const PString &address, WORD port=0)
 Connect a socket to a remote host for the internet protocol. More...
 
virtual PBoolean Connect (const PString &address, const PString &service)
 
virtual PBoolean Accept (PSocket &listener)
 Accept a server socket to a remote host for the internet protocol. More...
 
const PStringGetDefaultService () const
 Get the default service name or port number to use in socket connections. More...
 
PIPSocketGetSocket () const
 Get the eventual socket for the series of indirect channels that may be between the current protocol and the actual I/O channel. More...
 
virtual PBoolean WriteLine (const PString &line)
 Write a string to the socket channel followed by a CR/LF pair. More...
 
virtual PBoolean ReadLine (PString &line, PBoolean allowContinuation=false)
 Read a string from the socket channel up to a CR/LF pair. More...
 
virtual void UnRead (int ch)
 Put back the characters into the data stream so that the next Read() function call will return them first. More...
 
virtual void UnRead (const PString &str)
 
virtual void UnRead (const void *buffer, PINDEX len)
 
virtual bool WriteCommand (PINDEX cmdNumber, const PString &param=PString::Empty())
 Write a single line for a command. More...
 
virtual bool WriteCommand (PINDEX cmdNumber, const PString &param, const PMIMEInfo &mime)
 
virtual PBoolean ReadCommand (PINDEX &num, PString &args)
 Read a single line of a command which ends with a CR/LF pair. More...
 
virtual PBoolean ReadCommand (PINDEX &num, PString &args, PMIMEInfo &mime)
 
virtual PBoolean WriteResponse (unsigned numericCode, const PString &info)
 Write a response code followed by a text string describing the response to a command. More...
 
virtual PBoolean WriteResponse (const PString &code, const PString &info)
 
virtual PBoolean ReadResponse ()
 Read a response code followed by a text string describing the response to a command. More...
 
virtual PBoolean ReadResponse (int &code, PString &info)
 
virtual PBoolean ReadResponse (int &code, PString &info, PMIMEInfo &mime)
 
virtual int ExecuteCommand (PINDEX cmdNumber)
 Write a command to the socket, using WriteCommand() and await a response using ReadResponse(). More...
 
virtual int ExecuteCommand (PINDEX cmdNumber, const PString &param)
 
int GetLastResponseCode () const
 Return the code associated with the last response received by the socket. More...
 
PString GetLastResponseInfo () const
 Return the last response received by the socket. More...
 
- Public Member Functions inherited from PIndirectChannel
 PIndirectChannel ()
 Create a new indirect channel without any channels to redirect to. More...
 
 ~PIndirectChannel ()
 Close the indirect channel, deleting read/write channels if desired. More...
 
Comparison Compare (const PObject &obj) const
 Determine if the two objects refer to the same indirect channel. More...
 
virtual PString GetName () const
 Get the name of the channel. More...
 
virtual P_INT_PTR GetHandle () const
 Get the OS specific handle for the PSoundChannel. More...
 
virtual PBoolean Close ()
 Close the channel. More...
 
virtual PBoolean IsOpen () const
 Determine if the channel is currently open and read and write operations can be executed on it. More...
 
virtual PBoolean Shutdown (ShutdownValue option)
 Close one or both of the data streams associated with a channel. More...
 
virtual bool SetLocalEcho (bool localEcho)
 Set local echo mode. More...
 
virtual PChannelGetBaseReadChannel () const
 This function returns the eventual base channel for reading of a series of indirect channels provided by descendents of PIndirectChannel. More...
 
virtual PChannelGetBaseWriteChannel () const
 This function returns the eventual base channel for writing of a series of indirect channels provided by descendents of PIndirectChannel. More...
 
virtual PString GetErrorText (ErrorGroup group=NumErrorGroups) const
 Get error message description. More...
 
PBoolean Open (PChannel &channel)
 Set the channel for both read and write operations. More...
 
PBoolean Open (PChannel *channel, PBoolean autoDelete=true)
 Set the channel for both read and write operations. More...
 
PBoolean Open (PChannel *readChannel, PChannel *writeChannel, PBoolean autoDeleteRead=true, PBoolean autoDeleteWrite=true)
 Set the channel for both read and write operations. More...
 
PChannelDetach (ShutdownValue option=ShutdownReadAndWrite)
 Detach without closing the read/write channel. More...
 
PChannelGetReadChannel () const
 Get the channel used for read operations. More...
 
bool SetReadChannel (PChannel *channel, bool autoDelete=true, bool closeExisting=false)
 Set the channel for read operations. More...
 
PChannelGetWriteChannel () const
 Get the channel used for write operations. More...
 
PBoolean SetWriteChannel (PChannel *channel, bool autoDelete=true, bool closeExisting=false)
 Set the channel for read operations. More...
 
- Public Member Functions inherited from PChannel
PBoolean SetErrorValues (Errors errorCode, int osError, ErrorGroup group=LastGeneralError)
 Set error values to those specified. More...
 
virtual PINDEX HashFunction () const
 Calculate a hash value for use in sets and dictionaries. More...
 
FILE * FDOpen (const char *mode)
 Re-open the device using the stdio library. More...
 
void SetReadTimeout (const PTimeInterval &time)
 Set the timeout for read operations. More...
 
PTimeInterval GetReadTimeout () const
 Get the timeout for read operations. More...
 
PINDEX GetLastReadCount () const
 Get the number of bytes read by the last Read() call. More...
 
PBoolean ReadBlock (void *buf, PINDEX len)
 Read len bytes into the buffer from the channel. More...
 
PString ReadString (PINDEX len)
 Read len character into a string from the channel. More...
 
void SetWriteTimeout (const PTimeInterval &time)
 Set the timeout for write operations to complete. More...
 
PTimeInterval GetWriteTimeout () const
 Get the timeout for write operations to complete. More...
 
virtual PBoolean Write (const void *buf, PINDEX len, const void *)
 Low level write to the channel with marker. More...
 
virtual PINDEX GetLastWriteCount () const
 Get the number of bytes written by the last Write() call. More...
 
PBoolean WriteChar (int c)
 Write a single character to the channel. More...
 
PBoolean WriteString (const PString &str)
 Write a string to the channel. More...
 
 ~PChannel ()
 Close down the channel. More...
 
Errors GetErrorCode (ErrorGroup group=NumErrorGroups) const
 Get normalised error code. More...
 
int GetErrorNumber (ErrorGroup group=NumErrorGroups) const
 Get OS errro code. More...
 
virtual bool ReadAsync (AsyncContext &context)
 Begin an asynchronous read from channel. More...
 
virtual void OnReadComplete (AsyncContext &context)
 User callback function for when a ReadAsync() call has completed or timed out. More...
 
virtual bool WriteAsync (AsyncContext &context)
 Begin an asynchronous write from channel. More...
 
virtual void OnWriteComplete (AsyncContext &context)
 User callback function for when a WriteAsync() call has completed or timed out. More...
 
virtual bool FlowControl (const void *flowData)
 Flow Control information Pass data to the channel for flowControl determination. More...
 
PBoolean SetBufferSize (PINDEX newSize)
 Set the iostream buffer size for reads and writes. More...
 
PBoolean SendCommandString (const PString &command)
 Send a command meta-string. More...
 
void AbortCommandString ()
 Abort a command string that is in progress. More...
 
- Public Member Functions inherited from PObject
unsigned GetTraceContextIdentifier () const
 Get PTRACE context identifier. More...
 
void SetTraceContextIdentifier (unsigned id)
 
void GetTraceContextIdentifier (PObject &obj)
 
void GetTraceContextIdentifier (PObject *obj)
 
void SetTraceContextIdentifier (const PObject &obj)
 
void SetTraceContextIdentifier (const PObject *obj)
 
virtual ~PObject ()
 
virtual PObjectClone () const
 Create a copy of the class on the heap. More...
 
template<class CLS >
CLS * CloneAs () const
 As for Clone() but converts to specified type. More...
 
virtual Comparison CompareObjectMemoryDirect (const PObject &obj) const
 Determine the byte wise comparison of two objects. More...
 
bool operator== (const PObject &obj) const
 Compare the two objects. More...
 
bool operator!= (const PObject &obj) const
 Compare the two objects. More...
 
bool operator< (const PObject &obj) const
 Compare the two objects. More...
 
bool operator> (const PObject &obj) const
 Compare the two objects. More...
 
bool operator<= (const PObject &obj) const
 Compare the two objects. More...
 
bool operator>= (const PObject &obj) const
 Compare the two objects. More...
 
virtual const char * GetClass (unsigned ancestor=0) const
 Get the current dynamic type of the object instance. More...
 
PBoolean IsClass (const char *cls) const
 
virtual PBoolean InternalIsDescendant (const char *clsName) const
 Determine if the dynamic type of the current instance is a descendent of the specified class. More...
 
__inline const PObjectPTraceObjectInstance () const
 
virtual void PrintOn (ostream &strm) const
 Output the contents of the object to the stream. More...
 
virtual void ReadFrom (istream &strm)
 Input the contents of the object from the stream. More...
 

Protected Types

enum  {
  NotConnected, NeedUser, NeedPassword, Connected,
  ClientConnect
}
 

Protected Member Functions

PBoolean OnOpen ()
 Call back to verify open succeeded in an PInternetProtocol class. More...
 
void Construct ()
 
- Protected Member Functions inherited from PFTP
 PFTP ()
 Construct an ineternal File Transfer Protocol channel. More...
 
- Protected Member Functions inherited from PInternetProtocol
 PInternetProtocol (const char *defaultServiceName, PINDEX cmdCount, char const *const *cmdNames)
 
virtual PINDEX ParseResponse (const PString &line)
 Parse a response line string into a response code and any extra info on the line. More...
 

Protected Attributes

PString readyString
 
PBoolean thirdPartyPort
 
enum PFTPServer:: { ... }  state
 
PIPSocket::Address remoteHost
 
WORD remotePort
 
PTCPSocketpassiveSocket
 
char type
 
char structure
 
char mode
 
PString userName
 
int illegalPasswordCount
 

Additional Inherited Members

- 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 Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 
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)
 
- Friends inherited from PObject

Detailed Description

File Transfer Protocol server channel class.

Member Enumeration Documentation

anonymous enum
Enumerator
MaxIllegalPasswords 
anonymous enum
protected
Enumerator
NotConnected 
NeedUser 
NeedPassword 
Connected 
ClientConnect 

Constructor & Destructor Documentation

PFTPServer::PFTPServer ( )

declare a server socket

PFTPServer::PFTPServer ( const PString readyString)
Parameters
readyStringSign on string on connection ready.
PFTPServer::~PFTPServer ( )

Delete the server, cleaning up passive sockets.

Member Function Documentation

virtual PBoolean PFTPServer::AuthoriseUser ( const PString user,
const PString password,
PBoolean replied 
)
virtual

Validate the user name and password for access.

After three invalid attempts, the socket will close and false is returned.

Default implementation returns true for all strings.

Returns
true if user can access, otherwise false
Parameters
userUser name to authorise.
passwordPassword supplied for the user.
repliedIndication that a reply was sent to client.
virtual PBoolean PFTPServer::CheckLoginRequired ( PINDEX  cmd)
virtual

Check to see if the command requires the server to be logged in before it may be processed.

Returns
true if the command required the user to be logged in.
Parameters
cmdCommand to check if log in required.
void PFTPServer::Construct ( )
protected
virtual PBoolean PFTPServer::DispatchCommand ( PINDEX  code,
const PString args 
)
virtual

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.
Parameters
codeParsed command code.
argsArguments to command.
PBoolean PFTPServer::GetAllowThirdPartyPort ( ) const
inline

return the thirdPartyPort flag, allowing 3 host put and get.

References thirdPartyPort.

virtual PString PFTPServer::GetGoodbyeString ( const PString user) const
virtual

return the string printed just before exiting

virtual PString PFTPServer::GetHelloString ( const PString user) const
virtual

Get the string printed when a user logs in default value is a string giving the user name.

virtual PString PFTPServer::GetSystemTypeString ( ) const
virtual

return the string to be returned by the SYST command

virtual PBoolean PFTPServer::OnABOR ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnACCT ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnALLO ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnAPPE ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnCDUP ( const PCaselessString args)
virtual
virtual void PFTPServer::OnCommandSuccessful ( PINDEX  cmdNum)
virtual

Called for successful commands.

Parameters
cmdNumCommand that had was successful.
virtual PBoolean PFTPServer::OnCWD ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnDELE ( const PCaselessString args)
virtual
virtual void PFTPServer::OnError ( PINDEX  errorCode,
PINDEX  cmdNum,
const char *  msg 
)
virtual

Handle an error in command.

Returns
true if more processing may be done, false if the ProcessCommand() function is to return false.
Parameters
errorCodeError code to use
cmdNumCommand that had the error.
msgError message.
virtual PBoolean PFTPServer::OnHELP ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnLIST ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnMKD ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnMODE ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnNLST ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnNOOP ( const PCaselessString args)
virtual
virtual void PFTPServer::OnNotImplemented ( PINDEX  cmdNum)
virtual

Called for unimplemented commands.

Parameters
cmdNumCommand that was not implemented.
PBoolean PFTPServer::OnOpen ( )
protectedvirtual

Call back to verify open succeeded in an PInternetProtocol class.

Reimplemented from PIndirectChannel.

virtual PBoolean PFTPServer::OnPASS ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnPASV ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnPORT ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnPWD ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnQUIT ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnREIN ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnREST ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnRETR ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnRMD ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnRNFR ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnRNTO ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnSITE ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnSMNT ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnSTAT ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnSTOR ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnSTOU ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnSTRU ( const PCaselessString args)
virtual
virtual void PFTPServer::OnSyntaxError ( PINDEX  cmdNum)
virtual

Called for syntax errors in commands.

Parameters
cmdNumCommand that had the syntax error.
virtual PBoolean PFTPServer::OnSYST ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnTYPE ( const PCaselessString args)
virtual
virtual PBoolean PFTPServer::OnUnknown ( const PCaselessString command)
virtual

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 PBoolean PFTPServer::OnUSER ( const PCaselessString args)
virtual
PBoolean PFTPServer::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.
void PFTPServer::SendToClient ( const PFilePath filename)

Send the specified file to the client.

Parameters
filenameFile name to send.
void PFTPServer::SetAllowThirdPartyPort ( PBoolean  state)
inline

Set the thirdPartyPort flag.

References state, and thirdPartyPort.

Member Data Documentation

int PFTPServer::illegalPasswordCount
protected
char PFTPServer::mode
protected
PTCPSocket* PFTPServer::passiveSocket
protected
PString PFTPServer::readyString
protected
PIPSocket::Address PFTPServer::remoteHost
protected
WORD PFTPServer::remotePort
protected
enum { ... } PFTPServer::state

Referenced by SetAllowThirdPartyPort().

char PFTPServer::structure
protected
PBoolean PFTPServer::thirdPartyPort
protected
char PFTPServer::type
protected
PString PFTPServer::userName
protected

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