I am a Protocol for handling Telnet connections. I have two
sets of special methods, telnet_ and iac_. telnet_ methods get called on every line sent to me. The method
to call is decided by the current mode. The initial mode is 'User';
this means that telnet_User is the first telnet_ method to be called.
All telnet_ methods should return a string which specifies the mode
to go into next; thus dictating which telnet_ method to call next.
For example, the default telnet_User method returns Password to go
into Password mode, and the default telnet_Password method returns
Command to go into Command mode.
The iac_* methods are less-used; they are called when an IAC telnet
byte is received. You can define iac_DO, iac_DONT, iac_WILL, iac_WONT,
and iac_IP methods to do what you want when one of these bytes is
received.
Methods
|
|
|
|
connectionMade
|
connectionMade ( self )
I will write a welcomeMessage and loginPrompt to the client.
|
|
dataReceived
|
dataReceived ( self, data )
|
|
iacSBchunk
|
iacSBchunk ( self, chunk )
|
|
iac_DO
|
iac_DO ( self, feature )
|
|
iac_DONT
|
iac_DONT ( self, feature )
|
|
iac_IP
|
iac_IP ( self, feature )
|
|
iac_WILL
|
iac_WILL ( self, feature )
|
|
iac_WONT
|
iac_WONT ( self, feature )
|
|
loggedIn
|
loggedIn ( self )
Called after the user succesfully logged in.
Override in subclasses.
|
|
loginPrompt
|
loginPrompt ( self )
Override me to return a 'login:'-type prompt.
|
|
processChunk
|
processChunk ( self, chunk )
I take a chunk of data and delegate out to telnet_* methods
by way of processLine. If the current mode is Done , I'll close
the connection.
|
|
processLine
|
processLine ( self, line )
I call a method that looks like 'telnet_ where ' is filled
in by the current mode. telnet_* methods should return a string which
will become the new mode.
|
|
telnet_Command
|
telnet_Command ( self, cmd )
The default command processing mode. You probably want to
override me.
|
|
telnet_Password
|
telnet_Password ( self, paswd )
I accept a password as an argument, and check it with the
checkUserAndPass method. If the login is successful, I call
loggedIn().
|
|
telnet_User
|
telnet_User ( self, user )
I take a username, set it to the self.username attribute,
print out a password prompt, and switch to Password mode. If
you want to do something else when the username is received (ie,
create a new user if the user doesn't exist), override me.
|
|
welcomeMessage
|
welcomeMessage ( self )
Override me to return a string which will be sent to the client
before login.
|
|