diff -r f742655b05bf -r d38647835c2e voipplugins/dhcppositionprovider/src/dhcpdatasender.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/dhcppositionprovider/src/dhcpdatasender.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,142 @@ +/* +* Copyright (c) 2007 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: Send request data packets to the connected wlan network. +* +*/ + + +#include +#include + +#include "cipapputilsaddressresolver.h" +#include "dhcpconstants.h" +#include "dhcpdatasender.h" +#include "dhcppsylogging.h" + +_LIT8 (KDhcpWlanMacAddressFrmt, "" ); +const TInt KDhcpWlanMacAddressLength = 0x20; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CDhcpDataRequestor* CDhcpDataRequestor::NewL(RSocket& aSocket) + { + CDhcpDataRequestor* self = new( ELeave ) CDhcpDataRequestor(aSocket); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CDhcpDataRequestor::~CDhcpDataRequestor() + { + TRACESTRING( "CDhcpDataRequestor::~CDhcpDataRequestor" ); + Cancel(); + delete iIpAppUtilsResolver; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CDhcpDataRequestor::CDhcpDataRequestor(RSocket& aSocket): + CActive ( EPriorityStandard ), iSocket ( aSocket ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// For sending a DHCP message. If a DHCP server address has been found then we +// use that, but if it has not been found then we try broadcasting. +// --------------------------------------------------------------------------- +// +void CDhcpDataRequestor::SendDHCPMessageL(TInetAddr aDhcpSrvAddr, TUint32 aIapProfileId, + TRequestStatus& aStatus ) + { + TRACESTRING2( "CDhcpDataRequestor::SendDHCPMessageL, dhcp server address: %u", + aDhcpSrvAddr.Address() ); + + // Make location request message. + iIapProfileId = aIapProfileId; + + TBuf8 wlanMacAddress (KNullDesC8); + + User::LeaveIfError( + iIpAppUtilsResolver->GetWlanMACAddress(wlanMacAddress, + KDhcpWlanMacAddressFrmt) + ); + + User::LeaveIfError ( + iIpAppUtilsResolver->GetLocalIpAddressFromIap(iInetLclIpAddress, aIapProfileId) + ); + + TRACESTRING2( "CDhcpDataRequestor::SendDHCPMessage, local Ipaddres address: %u", + iInetLclIpAddress.Address() ); + + iLocationRequestMsg.MakeDhcpInformMsg (iInetLclIpAddress.Address(), + wlanMacAddress ); + + aStatus = KRequestPending; + iClientStatus = &aStatus; + TInetAddr inetAddr (aDhcpSrvAddr) ; + inetAddr.SetPort( KDhcpDefaultSrvPort ); + iSocket.SendTo( iLocationRequestMsg, inetAddr, 0, iStatus, iLen ); + SetActive(); + } + +// --------------------------------------------------------------------------- +// TransActionIdToFollow +// --------------------------------------------------------------------------- +// +TUint32 CDhcpDataRequestor::TransActionIdToFollow () + { + return iLocationRequestMsg.TransactionId(); + } + +// --------------------------------------------------------------------------- +// ContructL +// --------------------------------------------------------------------------- +// +void CDhcpDataRequestor::ConstructL () + { + iIpAppUtilsResolver = CIPAppUtilsAddressResolver::NewL (); + } + +// --------------------------------------------------------------------------- +// RunL +// --------------------------------------------------------------------------- +// +void CDhcpDataRequestor::RunL () + { + TRACESTRING2( "CDhcpDataRequestor::RunL %d", iStatus.Int()); + TRequestStatus *status = iClientStatus; + User::RequestComplete (status, iStatus.Int()); + } + +// --------------------------------------------------------------------------- +// CDhcpDataRequestor::DoCancel +// --------------------------------------------------------------------------- +// +void CDhcpDataRequestor::DoCancel () + { + TRACESTRING( "CDhcpDataRequestor::DoCancel" ); + iSocket.CancelSend(); + }