--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerprotocols/telnetengine/SRC/TELSESS.CPP Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,251 @@
+// 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 Protocol API
+// CTelnetSession implementation
+//
+//
+
+/**
+ @file
+*/
+
+#include "TELDEBUG.H"
+#include "TELSESS.H"
+#include "TELRESOL.H"
+#include "IOBUFFER.H"
+#include "TELCTRL.H"
+#include "TELFSM.H"
+
+
+
+// CTelnetSession implementation
+
+CTelnetSession::CTelnetSession()
+/**
+Constructor
+*/
+ {
+ }
+
+CTelnetSession::~CTelnetSession()
+ /** Destructor. */
+ {
+ delete iTelnetProtocol;
+
+ // DEBUG Close
+ __FLOG_STATIC(KTelnetLoggingCompnt(),KTelnetLoggingTag(),_L("CTelnetSession D'Tor"));
+
+ }
+
+EXPORT_C CTelnetSession* CTelnetSession::NewL(const TTelnetConfig& aConfig,const MTelnetNotification* aNotifier)
+ /** Allocates and constructs a new telnet session object.
+ *
+ * @param aConfig The TTelnetConfig object to use. The client should derive from
+ * the TTelnetConfig class and pass this pointer into NewL().
+ * @param aNotifier The MTelnetNotification object to use. The client should derive from
+ * the MTelnetNotification class and pass this pointer into NewL().
+ * @return The newly created telnet session.
+ */
+ {
+
+ CTelnetSession* self=new (ELeave) CTelnetSession();
+ CleanupStack::PushL(self);
+ self->ConstructL(aConfig,aNotifier);
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+EXPORT_C void CTelnetSession::ConstructL(const TTelnetConfig& aConfig,const MTelnetNotification* aNotifier)
+ /** Second-phase protected constructor, called by NewL().
+ *
+ * @see CTelnetSession::NewL()
+ */
+ {
+
+
+ __FLOG_STATIC(KTelnetLoggingCompnt(),KTelnetLoggingTag(),_L("CTelnetSession::ConstructL"));
+
+ iNotifier = CONST_CAST(MTelnetNotification*, aNotifier);
+ iTelnetProtocol = CTelnetControl::NewL(aConfig,iNotifier);
+ }
+
+EXPORT_C TInt CTelnetSession::Connect(const TInetAddr& aNetAddr)
+ /** Initiates connection to the specified IP address on the standard telnet port (port 23).
+ *
+ * The client is asynchronously notified of successful connection by the MTelnetNotification::Connected() function.
+ *
+ * @param aNetAddr The IP address to which connection is to be made.
+ * @return @li KErrNone, if successful
+ * @li KErrInUse, if already connected or if an attempt to connect is already in progress.
+ */
+ {
+ TBuf<20> aBuf;
+ aNetAddr.Output(aBuf);
+ return (iTelnetProtocol->Connect(aNetAddr, 23));
+ }
+
+EXPORT_C TInt CTelnetSession::Connect(const TInetAddr& aNetAddr, TUint aPort)
+ /** Initiates connection to the specified IP address and telnet port.
+ *
+ * The client is asynchronously notified of successful connection by the MTelnetNotification::Connected()
+ * function.
+ *
+ * @param aNetAddr The address to which connection is to be made.
+ * @param aPort The port through which connection is to be made.
+ * @return @li KErrNone, if successful
+ * @li KErrInUse, if already connected or if an attempt to connect is already in progress.
+ */
+ {
+ TBuf<20> aBuf;
+ aNetAddr.Output(aBuf);
+ return (iTelnetProtocol->Connect(aNetAddr, aPort));
+ }
+
+EXPORT_C TInt CTelnetSession::Connect(const TDesC& aServerName)
+ /** Connects to the specified server on the standard telnet port (port 23).
+ *
+ * The client is asynchronously notified of successful connection by the
+ * MTelnetNotification::Connected() function.
+ *
+ * @param aServerName The hostname of the server to which connection is to be made.
+ * @return @li KErrNone, if successful
+ * @li KErrInUse, if already connected or an attempt to connect is already in progress.
+ */
+ {
+ return (iTelnetProtocol->Connect(aServerName, 23));
+ }
+
+EXPORT_C TInt CTelnetSession::Connect(const TDesC& aServerName, TUint aPort)
+ /** Connects to the specified server on the specified port.
+ *
+ * The client is asynchronously notified of successful connection by the MTelnetNotification::Connected()
+ * function.
+ *
+ * @param aServerName The hostname of the server to which connection is to be made.
+ * @param aPort The port through which connection is to be made.
+ * @return @li KErrNone, if successful
+ * @li KErrInUse, if already connected or if an attempt to connect is already in progress.
+ */
+ {
+ return (iTelnetProtocol->Connect(aServerName, aPort));
+ }
+
+EXPORT_C TInt CTelnetSession::Disconnect()
+ /** Requests disconnection from the server.
+ *
+ * @return @li KErrNone, if successful; this will be followed by a Disconnected() notification
+ * if the client previously received a Connected() notification
+ * @li KErrServerBusy, if the socket is in a connecting state; in this case the client will
+ * not receive a ConnectionClosed() notification
+ @li KErrDisconnected, if already already disconnecting.
+ */
+ {
+ // Send Disconnect request to Server.
+ __FLOG_STATIC(KTelnetLoggingCompnt(),KTelnetLoggingTag(),_L("TTelnetSession()::Disconnect()"));
+ return iTelnetProtocol->Disconnect();
+ }
+
+EXPORT_C TInt CTelnetSession::Write(const TDesC8& aBuffer)
+ /** Writes a byte stream over the open telnet connection to the telnet server.
+ *
+ * The client is notified asynchronously by the:
+ * @li MTelnetNotification::WriteComplete() function, if the write is successful
+ * @li MTelnetNotification::Error() function, if the write is not successful.
+ *
+ * @param aBuffer The data to write.
+ * @return @li KErrNone, if successful
+ * @li KErrOverflow, if a write buffer overflow occurred
+ * @li KErrGeneral, if an invalid control code was issued
+ * @li KErrDisconnected, if disconnected
+ * @li KErrNotSupported, when in binary mode.
+ */
+ {
+ return (iTelnetProtocol->Write(aBuffer));
+ }
+
+EXPORT_C TInt CTelnetSession::Write(TTelnetUserControl& aControlCode)
+ /** Writes telnet-defined code over the open telnet connection to the telnet server.
+ *
+ * The client is asynchronously notified by the:
+ * @li MTelnetNotification::WriteComplete() function, if the write is successful
+ * @li MTelnetNotification::Error() function, if the write is not successful.
+ *
+ * @param aControlCode The telnet control code to write. See TTelnetUserControl enum.
+ * @return @li KErrNone, if successful
+ * @li KErrOverflow, if a write buffer overflow occurred
+ * @li KErrGeneral, if an invalid control code was issued
+ * @li KErrDisconnected, if disconnected
+ * @li KErrNotSupported, when in binary mode.
+ */
+ {
+ // Should return eg KErrNotSupported? when in Binary_Mode
+ return(iTelnetProtocol->Write(aControlCode));
+ }
+
+EXPORT_C TInt CTelnetSession::Read()
+ /** Reads the data received over the telnet buffer.
+ *
+ * The client is asynchronously notified by the:*
+ * @li MTelnetNotification::ReadComplete() function, if the read is successful*
+ * @li MTelnetNotification::Error() function, if the read is not successful.
+ *
+ * @return @li KErrNone, if successful
+ * @li KErrDisconnected, if disconnected.
+ */
+ {
+ return (iTelnetProtocol->Read());
+ }
+
+EXPORT_C TInt CTelnetSession::DoForceLogout()
+ /** Forces a logout from the server.
+ *
+ * @return @li KErrNone, if successful
+ * @li KErrDisconnected, if disconnected.
+ */
+ {
+ return(iTelnetProtocol->SetOption(KTelnetProtOptionLogoff));
+ }
+
+EXPORT_C TInt CTelnetSession::DoModifyConfig(TTelnetConfig& aConfig)
+ /** Sets the telnet connection configuration.
+ *
+ * If any options change status as a result, the client is notified through an OptionsChanged() call.
+ *
+ * @param aConfig Telnet connection configuration.
+ * @return KErrNone, if successful; otherwise, one of the system wide error codes.
+ */
+ {
+ return(iTelnetProtocol->SetConfig(aConfig));
+ }
+
+EXPORT_C TInt CTelnetSession::OptionStatus(TOptionStatus& aStatus)
+ /** Gets the status of the supported RFC-defined options.
+ *
+ * See TOptionStatus for a description of options.
+ *
+ * @param aStatus On return, the status of the RFC-defined options.
+ * @return @li KErrNone, if successful
+ * @li KErrDisconnected, if disconnected.
+ */
+ {
+ return(iTelnetProtocol->OptionStatus(aStatus));
+ }
+
+
+EXPORT_C void ClientStubOrdinal1()
+ {
+ _LIT(KStubPanic, "TelSess.dll Stub");
+ User::Panic(KStubPanic, KErrNotSupported);
+ }