sdkcreationmw/sdkruntimes/msgsimulation/MsgRelay/Src/MsgRelayDll.cpp
author rajpuroh
Mon, 08 Mar 2010 12:09:11 +0530
changeset 0 b26acd06ea60
permissions -rw-r--r--
First Contribution of SDK components
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     1
/*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     2
* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     3
* All rights reserved.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     4
* This component and the accompanying materials are made available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     8
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
     9
* Initial Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    11
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    12
* Contributors:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    13
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    14
* Description: 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    15
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    16
*/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    17
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    18
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    19
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    20
//  Include Files  
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    21
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    22
#include <e32std.h>         // GLDEF_C
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    23
#include <s32mem.h>     // RDesReadStream
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    24
#include <Gsmumsg.h>	// CSmsMessage
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    25
#include <gsmubuf.h>	// CSmsBuffer
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    26
#include <smut.h>		// KUidMsgTypeSMS
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    27
#include <msvuids.h>	// KUidMsvMessageEntry
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    28
#include <smsclnt.h>	// CSmsClientMtm
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    29
#include <mtclreg.h>	// CClientMtmRegistry
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    30
#include <mtmuibas.h>	// CBaseMtmUi
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    31
#include <txtrich.h>	// CRichText
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    32
#include <smutset.h>	// CSmsSettings
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    33
#include <smuthdr.h>	// CSmsHeader
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    34
#include <e32property.h> // RProperty 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    35
#include "MsgRelay.h"
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    36
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    37
static const TInt KMaxSubjectLength = 30;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    38
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    39
const TUid KPSUidIdleInformation = {0x102071C0};
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    40
const TUint32 KTelephonyIdleStatus = 0x00000001;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    41
enum TPSTelephonyIdleStatus { EPSTelephonyNotIdle, EPSTelephonyIdle };
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    42
const TUid KPSUidAiInformation = {0x102750F0}; // ActiveIdle2 SID
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    43
const TUint KActiveIdleState = 0x00000002; // Contains one value from following emuneration 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    44
enum EPSActiveIdleState { EPSAiBackground = 0,EPSAiForeground, EPSAiNumberEntry };
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    45
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    46
TVersion MessageRelayVersion = TVersion(1, 0, 0);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    47
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    48
/****************************************************************************
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    49
*   CRelaySession
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    50
*****************************************************************************
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    51
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    52
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    53
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    54
****************************************************************************/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    55
/* Implements actual functionality for clients. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    56
class CRelaySession : public CSession2
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    57
{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    58
	CMessageRelay *iOwner;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    59
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    60
	/* Is the session listening for messages. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    61
	TBool iListening;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    62
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    63
	/* The port that is listened, if iListening is ETrue.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    64
	   Port 0 means that port is not specified. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    65
	TUint iListenPort;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    66
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    67
	/* The message type that is listened. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    68
	TMessageType iListenType;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    69
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    70
	/* Notifies new messages to client...*/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    71
	TRequestStatus *iListenStatus;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    72
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    73
	/* Used for message passing. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    74
	RMessage2 iRcvMessage;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    75
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    76
	void ConstructL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    77
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    78
	CRelaySession(CMessageRelay *aOwner);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    79
public:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    80
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    81
	static CRelaySession *NewL(CMessageRelay *aOwner);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    82
	static CRelaySession *NewLC(CMessageRelay *aOwner);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    83
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    84
	~CRelaySession();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    85
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    86
	void ServiceL(const RMessage2& aMessage);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    87
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    88
	/* If message is accepted ETrue is returned, otherwise EFalse. 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    89
	   An accepted message is relayed to the client listening for the
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    90
	   messages or to the system Inbox(if no port specified). */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    91
	TBool AcceptL(TPtr8 &aMessage, TUint aPort, TMessageType aType);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    92
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    93
	/* Returns ETrue, is the port is already listened for. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    94
	TBool IsListening(TUint aPort, TMessageType aType);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    95
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    96
};
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    97
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    98
CRelaySession::CRelaySession(CMessageRelay *aOwner) : 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
    99
CSession2(),
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   100
iOwner(aOwner),
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   101
iListening(EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   102
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   103
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   104
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   105
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   106
void CRelaySession::ConstructL()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   107
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   108
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   109
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   110
		
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   111
CRelaySession *CRelaySession::NewL(CMessageRelay *aOwner)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   112
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   113
	CRelaySession *self = CRelaySession::NewLC(aOwner);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   114
	CleanupStack::Pop();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   115
	return self;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   116
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   117
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   118
CRelaySession *CRelaySession::NewLC(CMessageRelay *aOwner)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   119
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   120
	CRelaySession *self = new (ELeave) CRelaySession(aOwner);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   121
	CleanupStack::PushL(self);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   122
	self->ConstructL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   123
	return self;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   124
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   125
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   126
CRelaySession::~CRelaySession()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   127
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   128
	for( int i = 0; i < iOwner->iSessions->Count(); i++)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   129
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   130
		if( iOwner->iSessions->At( i ) == this)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   131
			{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   132
			iOwner->iSessions->Delete( i );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   133
			break;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   134
			}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   135
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   136
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   137
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   138
/* Returns ETrue, is the port is already listened for. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   139
TBool CRelaySession::IsListening(TUint aPort, TMessageType aType)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   140
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   141
	if (iListening == EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   142
		return EFalse;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   143
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   144
	if (aType != iListenType)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   145
		return EFalse;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   146
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   147
	if (aPort != iListenPort)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   148
		return EFalse;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   149
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   150
	return ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   151
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   152
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   153
void CRelaySession::ServiceL(const RMessage2& aMessage)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   154
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   155
	HBufC8 *newMessage = NULL;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   156
	TMessageType type;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   157
	TUint port;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   158
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   159
	switch (aMessage.Function())
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   160
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   161
		case KNewMessage:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   162
			{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   163
			if (iOwner == NULL)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   164
				User::Leave(KErrNotReady);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   165
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   166
			if (iOwner->iWriter == NULL)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   167
				User::Leave(KErrNotReady);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   168
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   169
			newMessage = HBufC8::NewL(aMessage.Int0());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   170
			TPtr8 ptr(newMessage->Des());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   171
			aMessage.ReadL( 1, ptr ); 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   172
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   173
			type = (TMessageType)aMessage.Int2();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   174
			iOwner->iWriter->WriteMessageL(ptr, type);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   175
			
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   176
			aMessage.Complete(KErrNone);	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   177
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   178
			delete newMessage;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   179
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   180
			break;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   181
			}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   182
    case KReceive:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   183
      
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   184
      if (iListening) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   185
        if (!iRcvMessage.IsNull()) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   186
          iRcvMessage.Complete(KErrCancel);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   187
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   188
        iRcvMessage = aMessage;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   189
			  iOwner->TraverseInboxL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   190
      }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   191
      else {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   192
        aMessage.Complete(KErrNotReady);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   193
      }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   194
      break;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   195
    case KCancelReceive:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   196
      if (!iRcvMessage.IsNull()) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   197
        iRcvMessage.Complete(KErrCancel);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   198
      }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   199
      aMessage.Complete(KErrNone);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   200
      break;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   201
		case KStartListening:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   202
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   203
			if (iOwner == NULL)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   204
				User::Leave(KErrNotReady);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   205
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   206
			type = (TMessageType)aMessage.Int1();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   207
			port = (TUint)aMessage.Int2();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   208
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   209
			if (iOwner->IsAnyBodyListening(port, type) != EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   210
				{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   211
				aMessage.Complete(KErrInUse);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   212
				return;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   213
				}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   214
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   215
			iListenType = type;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   216
			iListenPort = port;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   217
			iListening = ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   218
      aMessage.Complete(KErrNone);	    	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   219
			break;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   220
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   221
		case KStopListening:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   222
			iListening = EFalse;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   223
      if (!iRcvMessage.IsNull()) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   224
        iRcvMessage.Complete(KErrCancel);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   225
      }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   226
			aMessage.Complete(KErrNone);	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   227
			break;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   228
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   229
		default:
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   230
			User::Leave(KErrNotSupported);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   231
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   232
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   233
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   234
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   235
/* If message is accepted ETrue is returned, otherwise EFalse. 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   236
   An accepted message is relayed to the client listening for the
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   237
   messages. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   238
TBool CRelaySession::AcceptL(TPtr8 &aMessage, TUint aPort, TMessageType aType)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   239
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   240
	if (IsListening(aPort, aType) == EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   241
		return EFalse;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   242
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   243
	/* Write data to client */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   244
  if (!iRcvMessage.IsNull()) {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   245
    iRcvMessage.WriteL(0, aMessage);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   246
    iRcvMessage.Complete(KErrNone);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   247
  }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   248
  
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   249
  return ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   250
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   251
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   252
/****************************************************************************
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   253
*   CMessageRelay
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   254
*****************************************************************************
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   255
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   256
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   257
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   258
****************************************************************************/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   259
EXPORT_C CMessageRelay::CMessageRelay() : CServer2(EPriorityNormal)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   260
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   261
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   262
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   263
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   264
EXPORT_C void CMessageRelay::ConstructL(CMessageWriter *aWriter)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   265
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   266
	iSessions = new (ELeave) CArrayFixFlat<CRelaySession *>(1);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   267
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   268
	SetWriter(aWriter);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   269
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   270
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   271
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   272
EXPORT_C CMessageRelay *CMessageRelay::NewL(CMessageWriter *aWriter /*= NULL*/)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   273
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   274
	CMessageRelay *self = CMessageRelay::NewLC(aWriter);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   275
	CleanupStack::Pop();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   276
	return self;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   277
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   278
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   279
EXPORT_C CMessageRelay *CMessageRelay::NewLC(CMessageWriter *aWriter /*= NULL*/)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   280
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   281
	CMessageRelay *self = new (ELeave) CMessageRelay();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   282
	CleanupStack::PushL(self);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   283
	self->ConstructL(aWriter);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   284
	return self;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   285
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   286
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   287
EXPORT_C CMessageRelay::~CMessageRelay()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   288
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   289
	delete iSessions;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   290
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   291
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   292
/* Goes through all sessions and returns ETrue, is someone
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   293
   is listening the given port. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   294
TBool CMessageRelay::IsAnyBodyListening(TUint aPort, TMessageType aType)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   295
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   296
	TInt i = 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   297
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   298
	for (i = 0; i < iSessions->Count(); i++)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   299
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   300
		if (iSessions->At(i)->IsListening(aPort, aType) != EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   301
			return ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   302
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   303
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   304
	return EFalse;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   305
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   306
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   307
CSession2* CMessageRelay::NewSessionL(const TVersion& aVersion) const
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   308
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   309
	if (!User::QueryVersionSupported(MessageRelayVersion,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   310
                                     aVersion))
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   311
        {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   312
		/* Wrong version. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   313
		User::Leave(KErrNotSupported);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   314
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   315
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   316
	CRelaySession *session = CRelaySession::NewL( (CMessageRelay *)this );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   317
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   318
	iSessions->AppendL(session);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   319
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   320
	return session;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   321
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   322
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   323
CSession2* CMessageRelay::NewSessionL(const TVersion& aVersion, const RMessage2&) const
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   324
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   325
	return NewSessionL( aVersion );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   326
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   327
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   328
/* Starts the server. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   329
void CMessageRelay::StartRelayL()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   330
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   331
	CServer2::StartL(KRelayServiceName);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   332
	} 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   333
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   334
/* Call this method when a new message is received to relay it
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   335
   to possible listeners. Returns ETrue, if the message was 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   336
   accepted. If the message was not accepted, it must not be
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   337
   destroyed, but it must be offered again, as soon as there
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   338
   is a listener for it. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   339
EXPORT_C TBool CMessageRelay::NewMessageL(TPtr8 &aMessage, TMessageType aType)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   340
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   341
	TInt i = 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   342
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   343
	if (aType != ESmsMessage)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   344
		User::Leave(KErrNotSupported);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   345
    
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   346
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   347
		/* Extract the port and check if it's listened to. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   348
		RFs fs;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   349
		fs.Connect();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   350
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   351
		CSmsBuffer *smsBuf = CSmsBuffer::NewL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   352
		CSmsMessage *smsMsg	= CSmsMessage::NewL(fs, CSmsPDU::ESmsSubmit, smsBuf);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   353
		
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   354
		RDesReadStream rs(aMessage);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   355
		smsMsg->InternalizeL(rs);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   356
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   357
		rs.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   358
		fs.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   359
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   360
		CSmsPDU &pdu = smsMsg->SmsPDU(); 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   361
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   362
		TInt src, dst;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   363
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   364
		TBool isPorts = pdu.ApplicationPortAddressing(dst, src);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   365
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   366
		if (isPorts == EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   367
			{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   368
			/* Copy to inbox. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   369
			CopyMessageToSmsInboxL(aMessage);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   370
			return ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   371
           	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   372
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   373
		for (i = 0; i < iSessions->Count(); i++)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   374
			{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   375
			if (iSessions->At(i)->AcceptL(aMessage, dst, aType) != EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   376
				return ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   377
			}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   378
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   379
		/* No listeners. Cache the message to Inbox. Inbox is traversed,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   380
		   when new listener are created. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   381
		TPtr8 &aMessage2 = aMessage;   
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   382
		CopyMessageToSmsInboxL(aMessage2);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   383
		return ETrue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   384
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   385
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   386
/* Sets the message writer. Writers WriteMessageL(...) method
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   387
   is called when a client wants to send a message. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   388
EXPORT_C void CMessageRelay::SetWriter(CMessageWriter *aWriter)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   389
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   390
	iWriter = aWriter;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   391
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   392
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   393
/* Copies the message to inbox. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   394
void CMessageRelay::CopyMessageToSmsInboxL(TPtr8 &aMessage)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   395
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   396
	// Get the idle statuses from P&S
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   397
	TInt aiStatus(0);    
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   398
    TInt aiGetErr = RProperty::Get( KPSUidAiInformation,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   399
									KActiveIdleState,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   400
									aiStatus );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   401
	TInt tiStatus(0);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   402
	TInt tiGetErr = RProperty::Get( KPSUidIdleInformation,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   403
									KTelephonyIdleStatus,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   404
									tiStatus );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   405
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   406
	_LIT(KIdleStatus,"MSGRelay -- aiState:%d aiGetErr:%d tiState:%d tiGetErr:%d");
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   407
	RDebug::Print(KIdleStatus, aiStatus, aiGetErr, tiStatus, tiGetErr);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   408
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   409
	// Update telephony idle status to idle and active idle status 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   410
	// to foreground if needed. Without these "New message" notifications
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   411
	// might not be visible in some cases.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   412
	if( aiStatus != EPSAiForeground )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   413
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   414
		TInt setAiErr = RProperty::Set( KPSUidAiInformation, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   415
											KActiveIdleState, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   416
											EPSAiForeground );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   417
		_LIT( KAISetErr,"MSGRelay -- setAiErr:%d" );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   418
		RDebug::Print( KAISetErr, setAiErr );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   419
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   420
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   421
	if( tiStatus != EPSTelephonyIdle )
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   422
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   423
		TInt setTiErr = RProperty::Set( KPSUidIdleInformation, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   424
											KTelephonyIdleStatus, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   425
											EPSTelephonyIdle );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   426
		_LIT( KTISetErr,"MSGRelay -- setTiErr:%d" );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   427
		RDebug::Print( KTISetErr, setTiErr );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   428
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   429
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   430
	RFs fs;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   431
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   432
	User::LeaveIfError(fs.Connect());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   433
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   434
	CSmsBuffer *smsBuf = CSmsBuffer::NewL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   435
	CSmsMessage *smsMessage = CSmsMessage::NewL(fs, CSmsPDU::ESmsSubmit, smsBuf);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   436
	CMsvSession *iMsvSession = CMsvSession::OpenSyncL(*this);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   437
	CClientMtmRegistry *registry = CClientMtmRegistry::NewL(*iMsvSession);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   438
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   439
	RDesReadStream rs(aMessage);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   440
	rs >> *smsMessage;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   441
	rs.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   442
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   443
	TMsvEntry index;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   444
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   445
	index.iMtm = KUidMsgTypeSMS;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   446
	index.iType = KUidMsvMessageEntry;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   447
	index.iServiceId = KMsvLocalServiceIndexEntryId;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   448
	index.iDate.HomeTime();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   449
	index.SetInPreparation(ETrue);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   450
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   451
	TMsvSelectionOrdering ordering;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   452
	CMsvEntry *entry = CMsvEntry::NewL(*iMsvSession, KMsvGlobalInBoxIndexEntryIdValue,
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   453
									   ordering);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   454
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   455
	entry->CreateL(index);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   456
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   457
	entry->SetEntryL(index.Id());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   458
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   459
	CSmsClientMtm* mtm = (CSmsClientMtm*)registry->NewMtmL(KUidMsgTypeSMS);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   460
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   461
	mtm->SetCurrentEntryL(entry);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   462
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   463
	index = mtm->Entry().Entry();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   464
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   465
	index.iDetails.Set(smsMessage->ToFromAddress());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   466
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   467
	index.SetInPreparation(EFalse);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   468
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   469
	index.SetSendingState(KMsvSendStateNotApplicable);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   470
	index.iDate = smsMessage->Time();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   471
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   472
	// Set the new and unread flags. Enables "New message" notifications.
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   473
	index.SetNew( ETrue );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   474
	index.SetUnread( ETrue );
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   475
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   476
	CRichText &mtmBody = mtm->Body();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   477
	mtmBody.Reset();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   478
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   479
	HBufC *data = HBufC::NewLC(smsBuf->Length());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   480
	TPtr ptr(data->Des());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   481
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   482
	smsBuf->Extract(ptr, 0, smsBuf->Length());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   483
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   484
	mtmBody.InsertL(0, ptr);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   485
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   486
	if (ptr.Length() > KMaxSubjectLength)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   487
		index.iDescription.Set(ptr.Left(KMaxSubjectLength));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   488
	else
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   489
		index.iDescription.Set(ptr);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   490
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   491
	mtm->RestoreServiceAndSettingsL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   492
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   493
	CSmsHeader &hdr = mtm->SmsHeader();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   494
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   495
	CSmsSettings *sendOpt = CSmsSettings::NewL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   496
	CleanupStack::PushL(sendOpt);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   497
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   498
	sendOpt->CopyL(mtm->ServiceSettings());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   499
	sendOpt->SetDelivery(ESmsDeliveryImmediately);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   500
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   501
	hdr.SetSmsSettingsL(*sendOpt);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   502
	hdr.SetFromAddressL(smsMessage->ToFromAddress());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   503
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   504
	CleanupStack::PopAndDestroy(sendOpt);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   505
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   506
	CSmsMessage &newMsg = hdr.Message();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   507
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   508
	newMsg.SetServiceCenterAddressL(smsMessage->ServiceCenterAddress());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   509
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   510
	CSmsPDU &pdu = newMsg.SmsPDU();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   511
	CSmsPDU &oldPdu = smsMessage->SmsPDU();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   512
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   513
	pdu.SetAlphabet(oldPdu.Alphabet());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   514
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   515
	TSmsDataCodingScheme::TSmsClass coding;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   516
	TBool b = oldPdu.Class(coding);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   517
	pdu.SetClass(b, coding);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   518
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   519
	TInt dst = -1;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   520
	TInt src = -1; 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   521
	TBool is16;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   522
	
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   523
	b = oldPdu.ApplicationPortAddressing(dst, src, &is16);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   524
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   525
	if(b != EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   526
		{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   527
		pdu.SetApplicationPortAddressingL(b, dst, src, is16);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   528
		}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   529
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   530
	mtm->AddAddresseeL(smsMessage->ToFromAddress(), index.iDetails);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   531
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   532
    CMsvEntry &newEntry = mtm->Entry();    
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   533
    newEntry.ChangeL(index);                
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   534
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   535
	mtm->SaveMessageL();                 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   536
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   537
	CleanupStack::PopAndDestroy(1);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   538
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   539
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   540
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   541
static CSmsMessage *ConvertEntryToMessageL(TMsvEntry &aIndex, CMsvSession *aSession)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   542
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   543
	CClientMtmRegistry *registry = CClientMtmRegistry::NewL(*aSession);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   544
	CleanupStack::PushL(registry);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   545
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   546
	CSmsClientMtm* mtm = (CSmsClientMtm*)registry->NewMtmL(aIndex.iMtm);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   547
	CleanupStack::PushL(mtm);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   548
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   549
	mtm->SwitchCurrentEntryL(aIndex.Id());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   550
	mtm->LoadMessageL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   551
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   552
	CSmsHeader &hdr = mtm->SmsHeader();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   553
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   554
	CSmsMessage &msg = hdr.Message();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   555
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   556
	HBufC8 *buf = HBufC8::NewLC(KMaxSmsBufferSize);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   557
	TPtr8 ptr(buf->Des());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   558
	RDesWriteStream ws(ptr);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   559
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   560
	ws << msg;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   561
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   562
	ws.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   563
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   564
	RFs fs;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   565
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   566
	User::LeaveIfError(fs.Connect());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   567
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   568
	CSmsBuffer *smsBuf = CSmsBuffer::NewL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   569
	CSmsMessage *newMsg = CSmsMessage::NewL(fs, CSmsPDU::ESmsSubmit, smsBuf);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   570
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   571
	RDesReadStream rs(ptr);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   572
	rs >> *newMsg;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   573
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   574
	rs.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   575
	fs.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   576
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   577
	CleanupStack::PopAndDestroy(3);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   578
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   579
	return newMsg;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   580
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   581
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   582
static void DeleteEntryFromInboxL(CMsvEntry *aEntry, CMsvSession *aSession)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   583
    {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   584
	TMsvEntry index = aEntry->Entry();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   585
	TMsvSelectionOrdering sort = aEntry->SortType();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   586
	sort.SetShowInvisibleEntries(ETrue);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   587
	CMsvEntry* parentEntry = CMsvEntry::NewL(*aSession, index.Parent(), sort);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   588
	CleanupStack::PushL(parentEntry);  
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   589
    
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   590
    TRAPD(err, parentEntry->DeleteL(index.Id()));
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   591
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   592
    if(err != KErrNone)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   593
        {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   594
        aSession->RemoveEntry(index.Id());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   595
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   596
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   597
	CleanupStack::PopAndDestroy(parentEntry);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   598
    }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   599
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   600
/* Traverses the inbox and sends messages to listeners. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   601
void CMessageRelay::TraverseInboxL()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   602
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   603
    TInt count = 0;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   604
    CMsvEntrySelection* childrenEntrySelection;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   605
    CMsvEntry* rootEntry;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   606
    CMsvEntry* child;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   607
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   608
	CMsvSession *iMsvSession = CMsvSession::OpenSyncL(*this);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   609
	CleanupStack::PushL(iMsvSession);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   610
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   611
    rootEntry = iMsvSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   612
    count = rootEntry->Count();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   613
        
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   614
    childrenEntrySelection = rootEntry->ChildrenL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   615
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   616
    for(TInt i = 0; i < count; i++)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   617
        {
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   618
        child = iMsvSession->GetEntryL((*childrenEntrySelection)[i]);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   619
        TMsvEntry msvEntry = child->Entry();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   620
        
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   621
		if (msvEntry.iMtm != KUidMsgTypeSMS)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   622
			/* Not to us. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   623
			continue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   624
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   625
		CSmsMessage *smsMsg = ConvertEntryToMessageL(msvEntry, iMsvSession);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   626
		
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   627
		HBufC8 *buf = HBufC8::NewLC(KMaxSmsBufferSize);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   628
		TPtr8 ptr(buf->Des());
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   629
		RDesWriteStream ws(ptr);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   630
		
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   631
		ws << *smsMsg;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   632
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   633
		ws.Close();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   634
        
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   635
		CSmsPDU &pdu = smsMsg->SmsPDU(); 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   636
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   637
		TInt src, dst;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   638
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   639
		TBool isPorts = pdu.ApplicationPortAddressing(dst, src);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   640
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   641
		if (isPorts == EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   642
			{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   643
			/* No ports, no listeners, leave to inbox. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   644
            CleanupStack::PopAndDestroy(1); //buf
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   645
			continue;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   646
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   647
			}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   648
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   649
		for (i = 0; i < iSessions->Count(); i++)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   650
			{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   651
			if (iSessions->At(i)->AcceptL(ptr, dst, ESmsMessage) != EFalse)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   652
				{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   653
				/* Remove from inbox */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   654
				DeleteEntryFromInboxL(child, iMsvSession);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   655
				
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   656
				/* Inbox has changed, start traversing again. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   657
				rootEntry = iMsvSession->GetEntryL(KMsvGlobalInBoxIndexEntryId);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   658
				count = rootEntry->Count();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   659
				childrenEntrySelection = rootEntry->ChildrenL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   660
				
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   661
				i = -1; /* Will be incremented before testing... */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   662
				break;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   663
				}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   664
			}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   665
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   666
		CleanupStack::PopAndDestroy(1); //buf
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   667
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   668
        }
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   669
	CleanupStack::PopAndDestroy(1); // iMsvSesssion
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   670
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   671
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   672
void CMessageRelay::HandleSessionEventL(TMsvSessionEvent, TAny*, 
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   673
										TAny*, TAny*)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   674
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   675
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   676
/****************************************************************************
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   677
*   CMessageWriter
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   678
*****************************************************************************
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   679
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   680
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   681
*
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   682
****************************************************************************/
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   683
EXPORT_C void CMessageWriter::ConstructL()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   684
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   685
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   686
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   687
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   688
EXPORT_C CMessageWriter *CMessageWriter::NewL()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   689
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   690
	CMessageWriter *self = CMessageWriter::NewLC();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   691
	CleanupStack::Pop();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   692
	return self;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   693
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   694
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   695
EXPORT_C CMessageWriter *CMessageWriter::NewLC()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   696
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   697
	CMessageWriter *self = new (ELeave) CMessageWriter;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   698
	CleanupStack::PushL(self);
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   699
	self->ConstructL();
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   700
	return self;
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   701
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   702
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   703
EXPORT_C CMessageWriter::~CMessageWriter()
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   704
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   705
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   706
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   707
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   708
/* Called when a message is received from client for sending. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   709
EXPORT_C void CMessageWriter::WriteMessageL(TPtr8 & /*aMessage*/, TMessageType /*aType*/)
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   710
	{
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   711
	/* Nothing to do, inherited class will override. */
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   712
	}
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   713
b26acd06ea60 First Contribution of SDK components
rajpuroh
parents:
diff changeset
   714
// End of file