--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/telnetengine/INC/TELSESS.H Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,312 @@
+/**
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Telnet Session API
+*
+*
+*/
+
+
+
+/**
+ @file TELSESS.H
+*/
+
+#ifndef _TELSESS_H_
+#define _TELSESS_H_
+
+#include <in_sock.h>
+#include <e32std.h>
+#include <e32cons.h>
+#include <f32file.h>
+
+#define __TELNETSESSDEBUG__ // Put in Debug mode
+
+class CTelnetControl;
+
+// Used by client to retrieve RFC option state
+// Flags for Telnet negotiated options
+// 1 = Enabled 0 = Disabled
+
+/**
+Defines the supported, RFC-defined, option status.
+
+@publishedAll
+@released
+*/
+typedef struct
+ {
+ /** If ETrue, the server is sending in binary (RFC 856). */
+ TBool iServerBinary; ///< RFC 856 (Server Sending in Binary)
+ /** If ETrue, the client is sending in binary (RFC 856). */
+ TBool iClientBinary; ///< RFC 856 (Client Sending in Binary)
+ /** If ETrue, the server is echoing data back to the client (RFC 857). */
+ TBool iEcho; ///< RFC 857 (Server Echoing Data from Client)
+ /** If ETrue, the client will negotiate about window size (RFC 1073). */
+ TBool iNAWS; ///< RFC 1073 (Client Providing Window Size Information)
+ /** If ETrue, the terminal speed option is enabled (RFC 1079). */
+ TBool iTerminalSpeed;///< RFC 1079 (Client Providing Terminal Speed Information)
+ /** If ETrue, the client is providing terminal type information (RFC 1091). */
+ TBool iTerminalType; ///< RFC 1091 (Client Providing Terminal Type Information)
+ /** If ETrue, if the server is providing status information (RFC 859). */
+ TBool iServerStatus; ///< RFC 859 (Server Providing Status Information)
+ /** If ETrue, if the client is providing status information (RFC 859). */
+ TBool iClientStatus; ///< RFC 859 (Client Providing Status Information)
+ }TOptionStatus;
+
+// Used by client to configure the Symbian Telnet
+class TTelnetConfig
+/**
+* Specifies telnet session configuration information.
+*
+* The client must provide a reference to an instance of this class as a parameter
+* to the CTelnetSession::NewL() function.
+*
+* Configuration options can be modified, when the session is in progress, using
+* the CTelnetSession::DoModifyConfig() function.
+*
+* Configuration option state can be obtained using the CTelnetSession::OptionStatus()
+* function.
+* @publishedAll
+* @released
+*/
+ {
+ public:
+
+ /** Constructor. */
+ TTelnetConfig() {
+ iAllowLogout = TRUE; // RFC 727 - Default TRUE = Server Can Logout Client
+ iWindowSize.x = (TInt16)80; // RFC 1073 - Default 80 x 24
+ iWindowSize.y = (TInt16)24;
+ iTermSpeed = _L8("38400"); // RFC 1079 - Default to 38400 Baud Terminal
+ iTermType = _L8("dumb"); // RFC 1091 - Default to base NVT Terminal
+ }
+ /** Destructor. */
+ ~TTelnetConfig(){}
+
+ typedef struct
+ /**
+ * Specifies the client's window size.
+ *
+ * The default is 80 columns by 24 rows which constructs to x=80, y=24.
+ */
+ {
+ /** The client window's width (number of columns). */
+ TInt16 x;
+ /** The client window's height (number of rows). */
+ TInt16 y;
+ }TWindowSize;
+
+ /**
+ * Specifies the client's window size.
+ *
+ * The default is 80 columns by 24 rows.
+ *
+ * (RFC 1073 -- Set to Configure Window Size)
+ */
+ TWindowSize iWindowSize;
+
+ /**
+ * Specifies the speed of the telnet connection.
+ *
+ * The default is "38400" (in ASCII characters). Must be set to a server-supported rate.
+ *
+ * (RFC 1079 -- Set to Configure Terminal Speed)
+ */
+ TBuf8<20> iTermSpeed;
+
+ /**
+ * Specifies the terminal type.
+ *
+ * The default is "dumb" (in ASCII characters).
+ *
+ * (RFC 1091 -- Set to Configure Terminal Type)
+ */
+ TBuf8<20> iTermType;
+
+ /**
+ * Specifies whether the telnet server can logout the client.
+ *
+ * The default, ETrue, enables the server to logout the client. If EFalse any
+ * logout request from the telnet server is rejected by the client.
+ *
+ * (RFC 727 -- Set/Clear to Enable/Disable Server Logout)
+ */
+ TBool iAllowLogout;
+
+ /**
+ * Enables or disables telnet server echo to client.
+ *
+ * The default, ETrue, enables server echo. Note that although this is normal
+ * telnet server behaviour, it is not a formal telnet requirement. It is therefore
+ * recommended that the client implement an optional local echo.
+ *
+ * (RFC 857 -- Set/Clear to Enable/Disable Server Echo to client)
+ */
+ TBool iServerEcho;
+ };
+
+// Client can pass these in overloaded CTelnetSession::Write(TTelnetUserControl& aControlCode);
+
+/**
+* Specifies the telnet control code to send to the server.
+*
+* This is done using the overloaded CTelnetSession::Write() function.
+* @publishedAll
+* @released
+*/
+enum TTelnetUserControl
+ {
+ /** Control code not supported. */
+ ENotSupported = 0,
+
+ /**
+ * Break (the NVT 129th ASCII break code).
+ * The default is 243. This is not a valid control in Binary mode.
+ */
+ EBrk = 243,
+
+ /**
+ * Interupt Process.
+ * The default is 244.
+ */
+ EIp = 244,
+
+ /**
+ * Abort Output.
+ * The default is 245.
+ */
+ EAo = 245,
+
+ /**
+ Are you there?
+ * The default is 246.
+ */
+ EAyt = 246,
+
+ /**
+ * Erase Character.
+ * The default is 247. This is not a valid control in Binary mode.
+ */
+ EEc = 247,
+
+ /**
+ * Erase Line.
+ * The default is 248. This is not a valid control in Binary mode.
+ */
+ EEl = 248,
+ };
+
+// Client MUST override this class
+// Client MUST provide a pointer to an instance of this class as a parameter to CTelnetSession::NewL()
+class MTelnetNotification
+/**
+* Symbian telnet notification interface.
+*
+* Informs the client when an error occurs, when reads and writes have completed,
+* when a connection is made or closed and when configuration options change.
+* @publishedAll
+* @released
+*/
+ {
+ public:
+ /**
+ * Reports errors on the Telnet connection.
+ *
+ * The error code is supplied by the server. If this function is called, it is
+ * likely that the connection has failed. Therefore it is recommended that the
+ * client disconnects and resets its state.
+ *
+ * @param aError Error code from server.
+ */
+ virtual void Error(TInt aError) = 0; ///< Miscellaneous Error callback
+
+ /**
+ * Passes the data that was received from the server to the client.
+ *
+ * It is recommended that the client copies the data from this buffer, as it
+ * is owned by the Symbian telnet.
+ *
+ * @param aBuffer Data received from server.
+ */
+ virtual void ReadComplete(const TDesC8& aBuffer) = 0; ///< Last Read to Server completion callback
+
+ /** Notifies the client that a write to the server from the client has completed. */
+ virtual void WriteComplete() = 0; ///< Last Write to Server completion callback
+
+ /** Notifies the client that the connection to the server has been closed. */
+ virtual void ConnectionClosed() = 0; ///< Telnet Connection Closed callback
+
+ /** Notifies the client that a connection to the server has been made. */
+ virtual void Connected() = 0; ///< Telnet Connected callback
+
+ /** Notifies the client that telnet configuration options have changed. */
+ virtual void OptionsChanged() = 0; ///< Telnet RFC Options Changed callback
+ };
+
+class CTelnetControl;
+
+class CTelnetSession : public CBase
+/**
+* The main Symbian telnet class.
+*
+* Consists of a connection interface and a protocol interface. The connection
+* interface comprises member functions that: connect to, read from, write to
+* and disconnect from a telnet server.
+*
+* The protocol interface includes member functions that get and set telnet configuration.
+*
+* @publishedAll
+* @released
+*/
+ {
+ //public:
+ // Data Structures
+ public:
+ ~CTelnetSession();
+ // Construction
+ // Need to add max buffer size to constructor [check]
+ IMPORT_C static CTelnetSession* NewL(const TTelnetConfig& aConfig,const MTelnetNotification* aNotifier);
+ protected:
+ IMPORT_C void ConstructL(const TTelnetConfig& aConfig,const MTelnetNotification* aNotifier);
+ //
+ // Connection Interface
+ //
+ public:
+ IMPORT_C TInt Connect(const TInetAddr& aNetAddr); ///< Connects to aNetAddr on the standard telnet port (port 23)
+ IMPORT_C TInt Connect(const TInetAddr& aNetAddr, TUint aPort); ///< Connects to aNetAddr on user specified port
+ IMPORT_C TInt Connect(const TDesC& aServerName); ///< Connects to aSeverName on the standard telnet port (port 23)
+ IMPORT_C TInt Connect(const TDesC& aServerName, TUint aPort); ///< Connects to aServerName on user specified port
+ IMPORT_C TInt Disconnect(); ///< Disconnects current connection
+ IMPORT_C TInt Write(const TDesC8& aBuffer); ///< Writes a byte stream over the open telnet connection.
+ IMPORT_C TInt Write(TTelnetUserControl& aControlCode); ///< Writes NVT code to stream. Prepends \<IAC\> code (255)
+ IMPORT_C TInt Read(); ///< Read data received over telnet buffer.
+
+ //
+ // Protocol Interface
+ //
+ IMPORT_C TInt DoForceLogout();
+ IMPORT_C TInt DoModifyConfig(TTelnetConfig& aConfig);
+ IMPORT_C TInt OptionStatus(TOptionStatus& aStatus);
+ private:
+ CTelnetSession();
+
+ private:
+ MTelnetNotification* iNotifier;
+ CTelnetControl* iTelnetProtocol;
+
+ };
+
+
+#endif // _TELNETPROTOCOLAPI_H_