--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BioWatchers/Src/WspPortWatcher.cpp Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,133 @@
+// Copyright (c) 2000-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 "WapSocketWatcher.h"
+#include <watcher.h>
+
+#include <wapmessage.h>
+#include <wapmsgerr.h>
+
+//
+//CWspPortWatcher
+//
+
+CWspPortWatcher::CWspPortWatcher(CWatcherLog& aWatcherLog, TInt aPriority, TUid aBioID, RFs& aFs, Wap::TPort aWapPort)
+ : CWapPortWatcher(aWatcherLog, aPriority, aBioID, aFs, aWapPort),iPushPckgId(0)
+ {
+ }
+
+CWspPortWatcher::~CWspPortWatcher()
+ {
+ Cancel();
+ CloseConn();
+ delete iWspConn;
+ delete iRecvHeader;
+ }
+
+void CWspPortWatcher::CloseConn()
+ {
+ //Close the WSP connection
+ delete iWspConn;
+ iWspConn=NULL;
+
+ delete iRecvHeader;
+ iRecvHeader = NULL;
+
+ CWapPortWatcher::CloseConn(); //deletes iRecvBuf
+ }
+
+void CWspPortWatcher::DoCancel()
+ {
+ if (iWspConn!=NULL)
+ iWspConn->CancelAwaitPush();
+ }
+
+void CWspPortWatcher::DoSetupL()
+ {
+ BIOWATCHERLOG(iWatcherLog.Printf(_L("BioWsp: DoSetupL: %S, port %d"), &iBioMsgText, iWapPort));
+
+ //Open Connectionless WSP connection on port iWapPort
+ if(iWspConn==NULL)
+ iWspConn=CWapBoundCLPushService::NewL();
+ User::LeaveIfError(iWspConn->Connect(Wap::ESMS,iWapPort,EFalse));
+ }
+
+void CWspPortWatcher::WaitForMessageL()
+ {
+ BIOWATCHERLOG(iWatcherLog.Printf(_L("BioWsp: WaitForMessageL: %S, port %d"), &iBioMsgText, iWapPort));
+
+ User::LeaveIfError(iStatus.Int());
+
+ //Wait for WSP push message on port iWapPort
+ iTempRecvBuf.Zero();
+ iTempRecvHeader.Zero();
+ User::LeaveIfError(iWspConn->AwaitPush(iTempRecvHeader,iTempRecvBuf,iPushPckgId,iStatus));
+
+ //SetActive() is called by CBaseSmsActiveSocketWatcher::DoRunL()
+ }
+
+void CWspPortWatcher::ReceiveL()
+ {
+ BIOWATCHERLOG(iWatcherLog.Printf(_L("BioWsp: ReceiveL: %S, port %d"), &iBioMsgText, iWapPort));
+
+ //Receive the WAP Message.
+
+ switch (iStatus.Int())
+ {
+ case Wap::EMoreData:
+ {
+ //if iStatus == EMoreData, then must wait for the rest of the message
+ AppendToHBufC8L(iRecvHeader, iTempRecvHeader);
+ AppendToHBufC8L(iRecvBuf, iTempRecvBuf);
+
+ TRequestStatus* pS=&iStatus;
+ User::RequestComplete(pS, KErrNone);
+ break;
+ }
+ case KErrNone:
+ {
+ AppendToHBufC8L(iRecvHeader, iTempRecvHeader);
+ AppendToHBufC8L(iRecvBuf, iTempRecvBuf);
+
+ // DEF053845 Provide a NULL pointer for GetServerAddress().
+ // GetServerAddress() Allocs and sets up the pointer.
+ HBufC8* serverAddress = NULL;
+ // Pick up and interrogate the return rather than User::LeaveIfError.
+ // Leaving here could result in us receiving the message again
+ // and again.
+ TInt err = iWspConn->GetServerAddress(serverAddress);
+ if(err == KErrNone && serverAddress->Length())
+ {
+ CleanupStack::PushL(serverAddress);
+ DoReceiveL(*serverAddress);
+ CleanupStack::PopAndDestroy(serverAddress);
+ }
+ else
+ {
+ delete serverAddress; // Could have been alloc'd but it won't hurt to delete if NULL
+ DoReceiveL(KNullDesC8);
+ }
+ delete iRecvBuf;
+ iRecvBuf = NULL;
+ delete iRecvHeader;
+ iRecvHeader = NULL;
+ }
+ break;
+ default:
+ User::Leave(iStatus.Int());
+ break;
+ }
+ }