diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ClientResolver/Client/src/CSipClientDiscoveryImpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ClientResolver/Client/src/CSipClientDiscoveryImpl.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,228 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Name : CSIPClientDiscoveryImpl.cpp +// Part of : SIP Client Resolver +// Version : 1.0 +// + + + +// INCLUDES +#include +#include "CSIPClientDiscoveryImpl.h" +#include "CSipCRServer.h" +#include "CSIPClientDiscoverySerializer.h" +#include "CSIPClientDiscoveryReceiver.h" +#include "sipclientdiscoveryobserver.h" +#include "sipstrings.h" +#include "siprequest.h" +#include "uricontainer.h" + + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::NewL +// ---------------------------------------------------------------------------- +// +CSIPClientDiscoveryImpl* CSIPClientDiscoveryImpl::NewL ( + MSIPClientDiscoveryObserver& aObserver, + TUid aSelf) + { + CSIPClientDiscoveryImpl* self = CSIPClientDiscoveryImpl::NewLC (aObserver, + aSelf); + CleanupStack::Pop (self); + return self; + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::NewLC +// ---------------------------------------------------------------------------- +// +CSIPClientDiscoveryImpl* CSIPClientDiscoveryImpl::NewLC ( + MSIPClientDiscoveryObserver& aObserver, + TUid aSelf) + { + CSIPClientDiscoveryImpl* self = new(ELeave)CSIPClientDiscoveryImpl; + CleanupStack::PushL (self); + self->ConstructL (aObserver, aSelf); + return self; + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::ConstructL +// ---------------------------------------------------------------------------- +// +void CSIPClientDiscoveryImpl::ConstructL ( + MSIPClientDiscoveryObserver& aObserver, + TUid aSelf) + { + SIPStrings::OpenL(); + + User::LeaveIfError(iSipClientDiscovery.Connect(aSelf)); + + iSerializer = CSIPClientDiscoverySerializer::NewL(); + iReceiver = new(ELeave)CSIPClientDiscoveryReceiver(iSipClientDiscovery, + aObserver, + *iSerializer); + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscovery::~CSIPClientDiscovery +// ---------------------------------------------------------------------------- +// +CSIPClientDiscoveryImpl::~CSIPClientDiscoveryImpl() + { + delete iReceiver; + iSipClientDiscovery.Close(); + delete iSerializer; + SIPStrings::Close(); + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::RegisterL +// ---------------------------------------------------------------------------- +// +void CSIPClientDiscoveryImpl::RegisterL(TUid aChannel) + { + TPckgBuf clientUidPckg(aChannel); + TIpcArgs ipcArgs(TIpcArgs::ENothing); + ipcArgs.Set (ESIPCRIpcArgClientUid, &clientUidPckg); + User::LeaveIfError(iSipClientDiscovery.Send(ESIPCRIpcRegister,ipcArgs)); + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::DeregisterClientL +// ---------------------------------------------------------------------------- +// +TInt CSIPClientDiscoveryImpl::Deregister(TUid aChannel) + { + TPckgBuf clientUidPckg(aChannel); + TIpcArgs ipcArgs(TIpcArgs::ENothing); + ipcArgs.Set (ESIPCRIpcArgClientUid, &clientUidPckg); + return iSipClientDiscovery.Send(ESIPCRIpcDeregister,ipcArgs); + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::ChannelL +// ---------------------------------------------------------------------------- +// +TUint32 CSIPClientDiscoveryImpl::ChannelL(RStringF aRequestMethod, + const TDesC8& aRequestUri, + const RPointerArray& aHeaders, + const TDesC8& aContent, + const CSIPContentTypeHeader* aContentType) + { + TUid uid(TUid::Null()); + return ChannelL (uid, aRequestMethod, aRequestUri, aHeaders, + aContent, aContentType); + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::ChannelL +// ---------------------------------------------------------------------------- +// +TUint32 CSIPClientDiscoveryImpl::ChannelL(TUid aResolver, + RStringF aRequestMethod, + const TDesC8& aRequestUri, + const RPointerArray& aHeaders, + const TDesC8& aContent, + const CSIPContentTypeHeader* aContentType) + { + CSIPRequest* request = + CreateRequestLC(aRequestMethod, aRequestUri, aHeaders, aContentType); + CBufFlat* buf = iSerializer->ExternalizeSIPRequestL(*request); + CleanupStack::PopAndDestroy(request); + CleanupStack::PushL(buf); + + TPtr8 sipRequest(buf->Ptr(0)); + TIpcArgs args(TIpcArgs::ENothing); + args.Set(ESIPCRIpcArgSipRequest, &sipRequest); + args.Set(ESIPCRIpcArgSipMessageContent, &aContent); + + TPckgBuf reqIdPckg; + args.Set(ESIPCRIpcArgReqId, &reqIdPckg); + + TInt err = KErrNone; + if (aResolver.iUid) + { + TPckgBuf resolverUidPckg(aResolver); + args.Set(ESIPCRIpcArgResolverUid, &resolverUidPckg); + err = iSipClientDiscovery.SendReceive(ESIPCRIpcChannelWithResolver, + args); + } + else + { + err = iSipClientDiscovery.SendReceive(ESIPCRIpcChannel, args); + } + if (err != KErrNone) + { + User::Leave(err); + } + + CleanupStack::PopAndDestroy(buf); + return reqIdPckg(); + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::Cancel +// ---------------------------------------------------------------------------- +// +void CSIPClientDiscoveryImpl::Cancel(TUint32 aRequestId) + { + TPckgBuf requestIdPckg(aRequestId); + TIpcArgs ipcArgs; + ipcArgs.Set (ESIPCRIpcArgReqId, &requestIdPckg); + iSipClientDiscovery.Send(ESIPCRIpcCancelRequest, ipcArgs); + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::CancelAll +// ---------------------------------------------------------------------------- +// +void CSIPClientDiscoveryImpl::CancelAll() + { + TIpcArgs ipcArgs(TIpcArgs::ENothing); + iSipClientDiscovery.Send(ESIPCRIpcCancelAllRequests,ipcArgs); + } + +// ---------------------------------------------------------------------------- +// CSIPClientDiscoveryImpl::CreateRequestLC +// ---------------------------------------------------------------------------- +// +CSIPRequest* CSIPClientDiscoveryImpl::CreateRequestLC(RStringF aRequestMethod, + const TDesC8& aRequestUri, + const RPointerArray& aHeaders, + const CSIPContentTypeHeader* aContentType) + { + CSIPRequest* request = CSIPRequest::NewLC(aRequestMethod); + CURIContainer* uriContainer = CURIContainer::DecodeL(aRequestUri); + CleanupStack::PushL(uriContainer); + request->SetRequestURIL(uriContainer); + CleanupStack::Pop(uriContainer); + + for (TInt i = 0; iAddHeaderL(*(aHeaders[i])); + } + + if (aContentType) + { + request->AddHeaderL((const CSIPHeaderBase&)*aContentType); + } + + return request; + } + +// End of File