--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/exampleinternetutilities/TFTP/TFTP.CPP Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,225 @@
+// Copyright (c) 2001-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:
+//
+
+#include <in_sock.h>
+#include <c32comm.h>
+#include <e32base.h>
+#include <es_sock.h>
+#include <tftpeng.h>
+#include <nifman.h>
+
+// Device driver names
+#ifndef __EPOC32__
+#define PDD_NAME _L("ECDRV")
+#define LDD_NAME _L("ECOMM")
+#else
+#define PDD_NAME _L("EUART1")
+#define LDD_NAME _L("ECOMM")
+#endif
+
+LOCAL_C void InitCommsL();
+LOCAL_C void ProgramL();
+
+//temporary const for TFTP server on own machine
+_LIT(KInetTempAddr, "10.159.24.32");
+//const for file to be moved
+_LIT(KFileToMove, "test.cpp");
+
+class CCommandParser: public CAsyncOneShot, public MTftpNotifier
+ {
+
+public:
+ ~CCommandParser();
+ static CCommandParser* NewL(CConsoleBase& aConsole);
+
+protected:
+ CCommandParser(CConsoleBase& aConsole);
+ void ConstructL();
+ virtual void RunL();
+ virtual void OpComplete(TOpComp aResult, TInt aOp);
+ virtual void ProgressNotification();
+private:
+ CConsoleBase& iConsole;
+ CTftpEngine* iEngine;
+ };
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ CTrapCleanup* trap = CTrapCleanup::New();
+ if(trap==NULL)
+ return KErrNoMemory;
+
+ TInt err = KErrNone;
+
+ TRAP(err, ProgramL());
+
+ delete trap;
+ __UHEAP_MARKEND;
+ return err;
+ }
+
+//
+// Set up Epoc environment. Put in separate function so we can
+// let heap allocations fail and leave, trapping them all in
+// one place above.
+//
+LOCAL_C void ProgramL()
+ {
+ CActiveScheduler* pS = new(ELeave) CActiveScheduler;
+ CleanupStack::PushL(pS);
+
+ //initialization for COMM port (TFTP server on comm2)
+ InitCommsL();
+
+ CActiveScheduler::Install(pS);
+ //create console for output
+ CConsoleBase* console = Console::NewL(_L("TFTP"),TSize(KConsFullScreen,KConsFullScreen));
+ CleanupStack::PushL(console);
+ CCommandParser* compars= CCommandParser::NewL(*console);
+ compars->Call();
+
+ CActiveScheduler::Start();
+
+ delete compars;
+ CleanupStack::PopAndDestroy(console);
+ CleanupStack::PopAndDestroy(pS);
+ }
+
+LOCAL_C void InitCommsL()
+//
+// Initialisation code - loads the serial LDD and PDD
+// starts the comm subsystem (for EPOC32 builds)
+// On a full EPOC implementation, this code would not
+// be required because higher level components (EIKON)
+// automatically start the services.
+//
+ {
+ // Load the physical device driver
+ // The OS will automatically append .PDD and
+ // search /System/Libs on all drives.
+ TInt r=User::LoadPhysicalDevice(PDD_NAME);
+ if (r != KErrNone && r!= KErrAlreadyExists)
+ User::Leave(r);
+ //test(r==KErrNone || r==KErrAlreadyExists);
+
+ // Similarly for the Logical device driver
+ r=User::LoadLogicalDevice(LDD_NAME);
+ if (r != KErrNone && r != KErrAlreadyExists)
+ User::Leave(r);
+ //test(r==KErrNone|| r==KErrAlreadyExists);
+
+// User::LeaveIfError(Nifman::CheckIniConfig());
+ }
+
+CCommandParser::~CCommandParser()
+//
+// C++ D'tor
+//
+ {
+ delete iEngine;
+ }
+
+CCommandParser::CCommandParser(CConsoleBase& aConsole)
+ : CAsyncOneShot(0), iConsole(aConsole)
+//
+// C++ C'tor
+//
+ {
+ }
+
+void CCommandParser::ConstructL()
+//
+// E32 C'tor
+//
+ {
+ iEngine = CTftpEngine::NewL(0, *this);
+ }
+
+void CCommandParser::RunL()
+//
+// Run method
+//
+ {
+ iConsole.Printf(_L("TFTP>"));
+ TBuf<0x100> command;
+ TKeyCode key;
+ while((key=iConsole.Getch())!=EKeyEnter)
+ {
+ if(command.Length()>=0x100)
+ User::Beep(440, 500000);
+ else if(key == EKeyBackspace)
+ {
+ if(command.Length())
+ {
+ iConsole.Printf(_L("%c"), key);
+ command.SetLength(command.Length()-1);
+ }
+ }
+ else
+ {
+ iConsole.Printf(_L("%c"), key);
+ command.Append(TChar(key));
+ }
+ }
+
+ iConsole.Printf(_L("\n Command %S\n"), &command);
+ if(!command.CompareF(_L("quit")))
+ CActiveScheduler::Stop();
+ else if(!command.CompareF(_L("get")))
+
+ iEngine->Get(KInetTempAddr,KFileToMove);
+ else if(!command.CompareF(_L("put")))
+ iEngine->Put(KInetTempAddr,KFileToMove);
+ else
+ {
+ iConsole.Printf(_L("Unknown Function\n"));
+ Call();
+ }
+ }
+
+void CCommandParser::OpComplete(TOpComp aResult, TInt aOp)
+//
+// Operation completed
+//
+ {
+ iConsole.Printf(_L("\nOperation %d completed %d\n"), aOp, aResult);
+ Call();
+ }
+
+void CCommandParser::ProgressNotification()
+//
+// Progress indication
+//
+ {
+ iConsole.Printf(_L("."));
+ }
+
+CCommandParser* CCommandParser::NewL(CConsoleBase& aConsl)
+//
+// Create and connect client with leaving
+//
+ {
+ CCommandParser* p = new (ELeave) CCommandParser(aConsl);
+ CleanupStack::PushL(p);
+ p->ConstructL();
+ CleanupStack::Pop(p);
+ return p;
+ }
+
+
+
+
+