1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/mw/telsess.h Wed Mar 31 12:27:01 2010 +0100
1.3 @@ -0,0 +1,314 @@
1.4 +/**
1.5 +* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description:
1.18 +* Telnet Session API
1.19 +*
1.20 +*
1.21 +*/
1.22 +
1.23 +
1.24 +
1.25 +
1.26 +
1.27 +/**
1.28 + @file TELSESS.H
1.29 +*/
1.30 +
1.31 +#ifndef _TELSESS_H_
1.32 +#define _TELSESS_H_
1.33 +
1.34 +#include <in_sock.h>
1.35 +#include <e32std.h>
1.36 +#include <e32cons.h>
1.37 +#include <f32file.h>
1.38 +
1.39 +#define __TELNETSESSDEBUG__ // Put in Debug mode
1.40 +
1.41 +class CTelnetControl;
1.42 +
1.43 +// Used by client to retrieve RFC option state
1.44 +// Flags for Telnet negotiated options
1.45 +// 1 = Enabled 0 = Disabled
1.46 +
1.47 +/**
1.48 +Defines the supported, RFC-defined, option status.
1.49 +
1.50 +@publishedAll
1.51 +@released
1.52 +*/
1.53 +typedef struct
1.54 + {
1.55 + /** If ETrue, the server is sending in binary (RFC 856). */
1.56 + TBool iServerBinary; ///< RFC 856 (Server Sending in Binary)
1.57 + /** If ETrue, the client is sending in binary (RFC 856). */
1.58 + TBool iClientBinary; ///< RFC 856 (Client Sending in Binary)
1.59 + /** If ETrue, the server is echoing data back to the client (RFC 857). */
1.60 + TBool iEcho; ///< RFC 857 (Server Echoing Data from Client)
1.61 + /** If ETrue, the client will negotiate about window size (RFC 1073). */
1.62 + TBool iNAWS; ///< RFC 1073 (Client Providing Window Size Information)
1.63 + /** If ETrue, the terminal speed option is enabled (RFC 1079). */
1.64 + TBool iTerminalSpeed;///< RFC 1079 (Client Providing Terminal Speed Information)
1.65 + /** If ETrue, the client is providing terminal type information (RFC 1091). */
1.66 + TBool iTerminalType; ///< RFC 1091 (Client Providing Terminal Type Information)
1.67 + /** If ETrue, if the server is providing status information (RFC 859). */
1.68 + TBool iServerStatus; ///< RFC 859 (Server Providing Status Information)
1.69 + /** If ETrue, if the client is providing status information (RFC 859). */
1.70 + TBool iClientStatus; ///< RFC 859 (Client Providing Status Information)
1.71 + }TOptionStatus;
1.72 +
1.73 +// Used by client to configure the Symbian Telnet
1.74 +class TTelnetConfig
1.75 +/**
1.76 +* Specifies telnet session configuration information.
1.77 +*
1.78 +* The client must provide a reference to an instance of this class as a parameter
1.79 +* to the CTelnetSession::NewL() function.
1.80 +*
1.81 +* Configuration options can be modified, when the session is in progress, using
1.82 +* the CTelnetSession::DoModifyConfig() function.
1.83 +*
1.84 +* Configuration option state can be obtained using the CTelnetSession::OptionStatus()
1.85 +* function.
1.86 +* @publishedAll
1.87 +* @released
1.88 +*/
1.89 + {
1.90 + public:
1.91 +
1.92 + /** Constructor. */
1.93 + TTelnetConfig() {
1.94 + iAllowLogout = TRUE; // RFC 727 - Default TRUE = Server Can Logout Client
1.95 + iWindowSize.x = (TInt16)80; // RFC 1073 - Default 80 x 24
1.96 + iWindowSize.y = (TInt16)24;
1.97 + iTermSpeed = _L8("38400"); // RFC 1079 - Default to 38400 Baud Terminal
1.98 + iTermType = _L8("dumb"); // RFC 1091 - Default to base NVT Terminal
1.99 + }
1.100 + /** Destructor. */
1.101 + ~TTelnetConfig(){}
1.102 +
1.103 + typedef struct
1.104 + /**
1.105 + * Specifies the client's window size.
1.106 + *
1.107 + * The default is 80 columns by 24 rows which constructs to x=80, y=24.
1.108 + */
1.109 + {
1.110 + /** The client window's width (number of columns). */
1.111 + TInt16 x;
1.112 + /** The client window's height (number of rows). */
1.113 + TInt16 y;
1.114 + }TWindowSize;
1.115 +
1.116 + /**
1.117 + * Specifies the client's window size.
1.118 + *
1.119 + * The default is 80 columns by 24 rows.
1.120 + *
1.121 + * (RFC 1073 -- Set to Configure Window Size)
1.122 + */
1.123 + TWindowSize iWindowSize;
1.124 +
1.125 + /**
1.126 + * Specifies the speed of the telnet connection.
1.127 + *
1.128 + * The default is "38400" (in ASCII characters). Must be set to a server-supported rate.
1.129 + *
1.130 + * (RFC 1079 -- Set to Configure Terminal Speed)
1.131 + */
1.132 + TBuf8<20> iTermSpeed;
1.133 +
1.134 + /**
1.135 + * Specifies the terminal type.
1.136 + *
1.137 + * The default is "dumb" (in ASCII characters).
1.138 + *
1.139 + * (RFC 1091 -- Set to Configure Terminal Type)
1.140 + */
1.141 + TBuf8<20> iTermType;
1.142 +
1.143 + /**
1.144 + * Specifies whether the telnet server can logout the client.
1.145 + *
1.146 + * The default, ETrue, enables the server to logout the client. If EFalse any
1.147 + * logout request from the telnet server is rejected by the client.
1.148 + *
1.149 + * (RFC 727 -- Set/Clear to Enable/Disable Server Logout)
1.150 + */
1.151 + TBool iAllowLogout;
1.152 +
1.153 + /**
1.154 + * Enables or disables telnet server echo to client.
1.155 + *
1.156 + * The default, ETrue, enables server echo. Note that although this is normal
1.157 + * telnet server behaviour, it is not a formal telnet requirement. It is therefore
1.158 + * recommended that the client implement an optional local echo.
1.159 + *
1.160 + * (RFC 857 -- Set/Clear to Enable/Disable Server Echo to client)
1.161 + */
1.162 + TBool iServerEcho;
1.163 + };
1.164 +
1.165 +// Client can pass these in overloaded CTelnetSession::Write(TTelnetUserControl& aControlCode);
1.166 +
1.167 +/**
1.168 +* Specifies the telnet control code to send to the server.
1.169 +*
1.170 +* This is done using the overloaded CTelnetSession::Write() function.
1.171 +* @publishedAll
1.172 +* @released
1.173 +*/
1.174 +enum TTelnetUserControl
1.175 + {
1.176 + /** Control code not supported. */
1.177 + ENotSupported = 0,
1.178 +
1.179 + /**
1.180 + * Break (the NVT 129th ASCII break code).
1.181 + * The default is 243. This is not a valid control in Binary mode.
1.182 + */
1.183 + EBrk = 243,
1.184 +
1.185 + /**
1.186 + * Interupt Process.
1.187 + * The default is 244.
1.188 + */
1.189 + EIp = 244,
1.190 +
1.191 + /**
1.192 + * Abort Output.
1.193 + * The default is 245.
1.194 + */
1.195 + EAo = 245,
1.196 +
1.197 + /**
1.198 + Are you there?
1.199 + * The default is 246.
1.200 + */
1.201 + EAyt = 246,
1.202 +
1.203 + /**
1.204 + * Erase Character.
1.205 + * The default is 247. This is not a valid control in Binary mode.
1.206 + */
1.207 + EEc = 247,
1.208 +
1.209 + /**
1.210 + * Erase Line.
1.211 + * The default is 248. This is not a valid control in Binary mode.
1.212 + */
1.213 + EEl = 248,
1.214 + };
1.215 +
1.216 +// Client MUST override this class
1.217 +// Client MUST provide a pointer to an instance of this class as a parameter to CTelnetSession::NewL()
1.218 +class MTelnetNotification
1.219 +/**
1.220 +* Symbian telnet notification interface.
1.221 +*
1.222 +* Informs the client when an error occurs, when reads and writes have completed,
1.223 +* when a connection is made or closed and when configuration options change.
1.224 +* @publishedAll
1.225 +* @released
1.226 +*/
1.227 + {
1.228 + public:
1.229 + /**
1.230 + * Reports errors on the Telnet connection.
1.231 + *
1.232 + * The error code is supplied by the server. If this function is called, it is
1.233 + * likely that the connection has failed. Therefore it is recommended that the
1.234 + * client disconnects and resets its state.
1.235 + *
1.236 + * @param aError Error code from server.
1.237 + */
1.238 + virtual void Error(TInt aError) = 0; ///< Miscellaneous Error callback
1.239 +
1.240 + /**
1.241 + * Passes the data that was received from the server to the client.
1.242 + *
1.243 + * It is recommended that the client copies the data from this buffer, as it
1.244 + * is owned by the Symbian telnet.
1.245 + *
1.246 + * @param aBuffer Data received from server.
1.247 + */
1.248 + virtual void ReadComplete(const TDesC8& aBuffer) = 0; ///< Last Read to Server completion callback
1.249 +
1.250 + /** Notifies the client that a write to the server from the client has completed. */
1.251 + virtual void WriteComplete() = 0; ///< Last Write to Server completion callback
1.252 +
1.253 + /** Notifies the client that the connection to the server has been closed. */
1.254 + virtual void ConnectionClosed() = 0; ///< Telnet Connection Closed callback
1.255 +
1.256 + /** Notifies the client that a connection to the server has been made. */
1.257 + virtual void Connected() = 0; ///< Telnet Connected callback
1.258 +
1.259 + /** Notifies the client that telnet configuration options have changed. */
1.260 + virtual void OptionsChanged() = 0; ///< Telnet RFC Options Changed callback
1.261 + };
1.262 +
1.263 +class CTelnetControl;
1.264 +
1.265 +class CTelnetSession : public CBase
1.266 +/**
1.267 +* The main Symbian telnet class.
1.268 +*
1.269 +* Consists of a connection interface and a protocol interface. The connection
1.270 +* interface comprises member functions that: connect to, read from, write to
1.271 +* and disconnect from a telnet server.
1.272 +*
1.273 +* The protocol interface includes member functions that get and set telnet configuration.
1.274 +*
1.275 +* @publishedAll
1.276 +* @released
1.277 +*/
1.278 + {
1.279 + //public:
1.280 + // Data Structures
1.281 + public:
1.282 + ~CTelnetSession();
1.283 + // Construction
1.284 + // Need to add max buffer size to constructor [check]
1.285 + IMPORT_C static CTelnetSession* NewL(const TTelnetConfig& aConfig,const MTelnetNotification* aNotifier);
1.286 + protected:
1.287 + IMPORT_C void ConstructL(const TTelnetConfig& aConfig,const MTelnetNotification* aNotifier);
1.288 + //
1.289 + // Connection Interface
1.290 + //
1.291 + public:
1.292 + IMPORT_C TInt Connect(const TInetAddr& aNetAddr); ///< Connects to aNetAddr on the standard telnet port (port 23)
1.293 + IMPORT_C TInt Connect(const TInetAddr& aNetAddr, TUint aPort); ///< Connects to aNetAddr on user specified port
1.294 + IMPORT_C TInt Connect(const TDesC& aServerName); ///< Connects to aSeverName on the standard telnet port (port 23)
1.295 + IMPORT_C TInt Connect(const TDesC& aServerName, TUint aPort); ///< Connects to aServerName on user specified port
1.296 + IMPORT_C TInt Disconnect(); ///< Disconnects current connection
1.297 + IMPORT_C TInt Write(const TDesC8& aBuffer); ///< Writes a byte stream over the open telnet connection.
1.298 + IMPORT_C TInt Write(TTelnetUserControl& aControlCode); ///< Writes NVT code to stream. Prepends \<IAC\> code (255)
1.299 + IMPORT_C TInt Read(); ///< Read data received over telnet buffer.
1.300 +
1.301 + //
1.302 + // Protocol Interface
1.303 + //
1.304 + IMPORT_C TInt DoForceLogout();
1.305 + IMPORT_C TInt DoModifyConfig(TTelnetConfig& aConfig);
1.306 + IMPORT_C TInt OptionStatus(TOptionStatus& aStatus);
1.307 + private:
1.308 + CTelnetSession();
1.309 +
1.310 + private:
1.311 + MTelnetNotification* iNotifier;
1.312 + CTelnetControl* iTelnetProtocol;
1.313 +
1.314 + };
1.315 +
1.316 +
1.317 +#endif // _TELNETPROTOCOLAPI_H_