Symbian Security Studio

About symbian software programming ,security analysis and other things about symbian.

Thursday, November 1, 2007

Asynchronous Services example code in User library example code

Asynchronous services example codes

--------------------------------------------------------------------------------

SingleRequest: asynchronous programming without active objects

--------------------------------------------------------------------------------

Example code
These files are found in: examples\Base\IPC\Async\SingleRequest

The files reproduced here are the main files contained in the examples directory. Some extra files may be needed to run the examples, and these will be found in the appropriate examples directory.

// SingleRequest.cpp
//
// Copyright (C) Symbian Software Ltd 2000-2005. All rights reserved.
//
// Shows asynchronous programming (without active objects).
// Example shows how a single request can be issued, followed
// by User::WaitForRequest()


#include "CommonFramework.h"



// Do the example
LOCAL_C void doExampleL()
{
// create and initialize heartbeat timer
RTimer heartbeat; // heartbeat timer

TRequestStatus heartbeatStatus; // request status associated with it
heartbeat.CreateLocal(); // always created for this thread

// go round timing loop
for (TInt i=0; i<10; i++)
{
// issue and wait for single request
heartbeat.After(heartbeatStatus,1000000); // wait 1 second
User::WaitForRequest(heartbeatStatus); // wait for request
// to complete
// say we're here
_LIT(KFormatString1,"Tick %d\n");
console->Printf(KFormatString1, i);
}

// close timer
heartbeat.Close(); // close timer
}
This file is found in examples\Base\CommonFramework

// EUSTD.H
//
// Copyright (C) Symbian Software Ltd 1997-2005. All rights reserved.
//

#ifndef __EUSTD_H
#define __EUSTD_H

#include
#include

_LIT(KTxtEPOC32EX,"EPOC32EX");
_LIT(KTxtExampleCode,"E32 SDK Example Code");
_LIT(KFormatFailed,"failed: leave code=%d");
_LIT(KTxtOK,"ok");
_LIT(KTxtPressAnyKey," [press any key]");

// public
LOCAL_D CConsoleBase* console; // write all your messages to this
LOCAL_C void doExampleL(); // code this function for the real example

// private
LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example

GLDEF_C TInt E32Main() // main function called by E32
{
__UHEAP_MARK;
CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
TRAPD(error,callExampleL()); // more initialization, then do example
__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
delete cleanup; // destroy clean-up stack
__UHEAP_MARKEND;
return 0; // and return
}

LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
{
console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
CleanupStack::PushL(console);
TRAPD(error,doExampleL()); // perform example function
if (error)
console->Printf(KFormatFailed, error);
else
console->Printf(KTxtOK);
console->Printf(KTxtPressAnyKey);
console->Getch(); // get and ignore character
CleanupStack::PopAndDestroy(); // close console
}

#endif
// BLD.INF
// Component description file

// Copyright (C) Symbian Software Ltd 2000-2005. All rights reserved.

PRJ_MMPFILES

SingleRequest.mmp
// SingleRequest.mmp
//
// Copyright (C) Symbian Software Ltd 2000-2005. All rights reserved.

// using relative paths for source and userinclude directories

// No explicit capabilities required to run this.

TARGET SingleRequest.exe
TARGETTYPE exe
UID 0
VENDORID 0x70000001

SOURCEPATH .
SOURCE SingleRequest.cpp

USERINCLUDE .
USERINCLUDE ..\..\..\CommonFramework
SYSTEMINCLUDE \Epoc32\include

LIBRARY euser.lib

CAPABILITY None

--------------------------------------------------------------------------------

Description
This example shows how to issue and wait for a single request.

The example shows the general principles involved in asynchronous programming. It uses a simple wait loop and shows how the completion of asynchronous events are handled without active objects.

This example deliberately does not use active objects.


--------------------------------------------------------------------------------

Classes used
TRequestStatus: Asynchronous request status


--------------------------------------------------------------------------------

Security issues
The example requires no specific capabilities in order to run - and does not demonstrate any security issues.




--------------------------------------------------------------------------------

WaitLoop: asynchronous programming without active objects
Found in: examples\Base\IPC\Async\WaitLoop


--------------------------------------------------------------------------------

Description
This example shows how a wait loop can be used to identify and handle a completed request.

It shows the general principles involved in asynchronous programming. It uses a simple wait loop and shows how the completion of asynchronous events are handled without active objects.

This example deliberately does not use active objects.


--------------------------------------------------------------------------------

Classes used
TRequestStatus: asynchronous request status


--------------------------------------------------------------------------------

Security issues
The example requires no specific capabilities in order to run - and does not demonstrate any security issues.




--------------------------------------------------------------------------------

RealLifeWaitLoop: asynchronous programming without active objects
Found in: examples\Base\IPC\Async\RealLifeWaitLoop


--------------------------------------------------------------------------------

Description
As with the WaitLoop example, this example shows how a wait loop can be used to identify and handle a completed request. However, this example shows how the wait loop can deal with multiple asynchronous service providers.

The example shows the general principles involved in asynchronous programming; it uses a simple wait loop and shows how the completion of asynchronous events are handled without active objects.

This example deliberately does not use active objects.


--------------------------------------------------------------------------------

Classes used
TRequestStatus: asynchronous request status


--------------------------------------------------------------------------------

Security issues
The example requires no specific capabilities in order to run - and does not demonstrate any security issues.




--------------------------------------------------------------------------------

RunComplete: asynchronous programming with active objects
Found in: examples\Base\IPC\Async\RunComplete


--------------------------------------------------------------------------------

Description
The example shows how active objects and an active scheduler can be used to handle asynchronous events. Compare this with the following examples; SingleRequest, WaitLoop and RealLifeWaitLoop.

It demonstrates a single CMessageTimer active object which runs until completion.


--------------------------------------------------------------------------------

Classes used
TRequestStatus: asynchronous request status

CActiveScheduler: the active scheduler

CActive: active object abstraction

CTimer: timer base class (used here as a source of events)


--------------------------------------------------------------------------------

Security issues
The example requires no specific capabilities in order to run - and does not demonstrate any security issues.




--------------------------------------------------------------------------------

AcceptInput1-2: asynchronous programming with active objects
Found in: examples\Base\IPC\Async\AcceptInputX


--------------------------------------------------------------------------------

Description
These examples show how active objects and an active scheduler can be used to handle asynchronous events.

They demonstrate a single CKeyMessengerProcessor active object (derived from class CActiveConsole), which accepts input from keyboard, but does not print it. This object contains a CMessageTimer object which it activates if the user inputs the character "m" and cancelled if the user inputs "c".


--------------------------------------------------------------------------------

Classes used
TRequestStatus: asynchronous request status

CActiveScheduler: the active scheduler

CActive: active object abstraction

CTimer: timer base class (used here as a source of events)


--------------------------------------------------------------------------------

Security issues
The example requires no specific capabilities in order to run - and does not demonstrate any security issues.




--------------------------------------------------------------------------------

Fibonacci1-3: asynchronous programming with active objects
Found in: examples\Base\IPC\Async\FibonacciX


--------------------------------------------------------------------------------

Description
These examples show how active objects and an active scheduler can be used to handle asynchronous events and long-running services to maintain system responsiveness.


--------------------------------------------------------------------------------

Classes used
TRequestStatus: asynchronous request status

CActiveScheduler: the active scheduler

CActive: active object abstraction

CTimer: timer base class (used here as a source of events)


--------------------------------------------------------------------------------

Security issues
The example requires no specific capabilities in order to run - and does not demonstrate any security issues.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home