obex/obexprotocol/obex/test/tobex/serverasyncao.cpp
changeset 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/obex/obexprotocol/obex/test/tobex/serverasyncao.cpp	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,153 @@
+// Copyright (c) 2005-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 "serverasyncao.h"
+#include <e32cons.h>
+#include <obexserver.h>
+
+#include <obexobjects.h>
+
+
+CServerAsyncAO* CServerAsyncAO::NewL(CObexServer& aObexServer)
+	{
+	CServerAsyncAO* self = new(ELeave) CServerAsyncAO(aObexServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+	
+CServerAsyncAO::CServerAsyncAO(CObexServer& aObexServer)
+:CActive(EPriorityStandard),
+ iObexServer(aObexServer)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CServerAsyncAO::ConstructL()
+	{
+	iConsole = Console::NewL(_L("OBEX DLL Test Code"),TSize(55,12));
+	}
+
+CServerAsyncAO::~CServerAsyncAO()
+	{
+	delete iConsole;
+	}
+
+void CServerAsyncAO::CompletionIndication(CObex::TOperation aOpcode, TObexResponse aResponse)
+	{
+	_LIT(KPutIndication, "PutCompleteIndication\n");
+	_LIT(KGetIndication, "GetCompleteIndication\n");
+	_LIT(KSetPathIndication, "SetPathIndication\n");
+	
+	iState = ECompleteIndication;
+	iDefaultResponse = aResponse;
+	
+	switch(aOpcode)
+		{
+		case CObex::EOpPut:
+			iConsole->Printf(KPutIndication);
+			break;
+		case CObex::EOpGet:
+			iConsole->Printf(KGetIndication);
+			break;
+		case CObex::EOpSetPath:
+			iConsole->Printf(KSetPathIndication);
+			break;
+		default:
+			User::Invariant();
+		}
+
+	iConsole->Printf(_L("Please enter the response code: 0x%x"), aResponse);
+	iConsole->Read(iStatus);	
+	SetActive();
+	}
+
+void CServerAsyncAO::RequestIndication(CObex::TOperation aOpcode, CObexBaseObject *aObject)
+	{
+	if(aOpcode == CObex::EOpPut)
+		{
+		iConsole->Printf(_L("Put"));
+		}
+	else if(aOpcode == CObex::EOpGet)
+		{
+		iConsole->Printf(_L("Get"));
+		}
+	else
+		{
+		User::Invariant();
+		}
+	iState = ERequestIndication;
+	iObject = aObject;
+	iConsole->Printf(_L("RequestIndication, press any key to continue\n"));
+	iConsole->Read(iStatus);
+	SetActive();
+	}
+
+void CServerAsyncAO::RunL()
+	{
+	TObexResponse resp = ERespSuccess; 
+	TBuf<2> buf;
+
+	TKeyCode key = iConsole->KeyCode();
+	
+	if(iState == ECompleteIndication)
+		{
+		buf.AppendFormat(_L("%x"), iDefaultResponse);
+		do	{
+		
+			if(key == EKeyBackspace&&buf.Length()!=0)
+				{
+				buf.SetLength(buf.Length()-1);
+				}
+			else if( buf.Length() < buf.MaxLength())
+				{
+				buf.Append(key);
+				}
+			else 
+				continue;
+			iConsole->Printf(_L("%c"),key);
+			}
+		while((key = iConsole->Getch())!=EKeyEnter);
+		iConsole->Printf(_L("\n"));
+		
+		TLex lex(buf);
+		TUint value;
+		TInt lex_err = lex.Val(value, EHex); 
+		
+		if(lex_err == KErrNone)
+			{
+			resp = static_cast<TObexResponse>(value);
+			}
+		else 
+			{
+			iConsole->Printf(_L("Input parsing failed, use success as default response\n"));
+			}
+			
+		TInt ret = iObexServer.RequestCompleteIndicationCallback(resp);
+		iConsole->Printf(_L("Server returned with error code %d\n\n"), ret);
+		}
+	else
+		{
+		TInt ret = iObexServer.RequestIndicationCallback(iObject);
+		iConsole->Printf(_L("Server returned with error code %d\n\n"), ret);
+		}
+	}
+
+void CServerAsyncAO::DoCancel()
+	{
+	iConsole->ReadCancel();
+	}
+