--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothmgmt/bluetoothclientlib/avctpservices/avctpsender.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,150 @@
+// 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:
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#include <bluetooth/logger.h>
+#include "avctpsender.h"
+#include "avctpbody.h"
+#include "AvctpMessageParameters.h"
+#include "avctppacketstatics.h"
+#include "avctpPriorities.h"
+#include "avctpserviceutils.h"
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, LOG_COMPONENT_AVCTP_SERVICES);
+#endif
+
+using namespace SymbianAvctp;
+
+/**
+@param aNotify The class that provides access to the AVCTP client
+@leave system wide reason
+@return pointer to newly created object
+*/
+CAvctpSender* CAvctpSender::NewL(MAvctpEventNotify& aNotify, RSocket& aAvctpSocket, SymbianAvctp::TPid aPid)
+ {
+ LOG_STATIC_FUNC
+ return new(ELeave) CAvctpSender(aNotify, aAvctpSocket, aPid);
+ }
+
+CAvctpSender::CAvctpSender(MAvctpEventNotify& aNotify, RSocket& aAvctpSocket, SymbianAvctp::TPid aPid) :
+ CActive(KDataPlanePriority),
+ iNotify(aNotify),
+ iAvctpSocket(aAvctpSocket)
+ {
+ LOG_FUNC
+ iAddr.SetPid(aPid); // only need to set this once
+ CActiveScheduler::Add(this);
+ }
+
+CAvctpSender::~CAvctpSender()
+ {
+ LOG_FUNC
+ Cancel();
+ }
+
+/**
+Sends AVCTP message
+The Pid to send the message to was given when the client opened the RAvctp object
+used to send this message.
+
+@pre must be connected to remote
+@param aBTDevice device address to which to send message
+@param aTransactionLabel transaction label
+@param aType the message type, i.e. Command or Response
+@param aMessageInformation the contents of the message to send
+@return KErrInUse if the sender AO is active or
+ KErrInvalidTransactionLabel if the transaction label was invalid or
+ another system wide error code
+@internalComponent
+*/
+TInt CAvctpSender::SendMessage(const TBTDevAddr& aBTDevice,
+ TTransactionLabel aTransactionLabel,
+ TMessageType aType,
+ const TDesC8& aMessageInformation)
+ {
+ LOG_FUNC
+
+ TInt ret = KErrNone;
+
+ if (!IsActive())
+ {
+ // Sort out where we want to send stuff (the PID has already been set)
+ iAddr.SetBTAddr(aBTDevice);
+
+ // Use the flags parameter to pass on AVCTP specific information
+ TAvctpMessageParameters parms;
+ parms.SetType(aType);
+ parms.iTransaction = aTransactionLabel;
+
+ // Store the current transaction to use in MaenMessageSendComplete notification
+ iCurrentTrans = aTransactionLabel;
+
+ // Stick it all down the socket
+ iAvctpSocket.SendTo(aMessageInformation, iAddr, parms.GetFlags(), iStatus);
+ SetActive();
+ }
+ else
+ {
+ ret = KErrInUse;
+ }
+
+ return ret;
+ }
+
+inline void CAvctpSender::NotifyMessageSent(const TBTDevAddr& aBTDevice,
+ SymbianAvctp::TTransactionLabel aTransactionLabel,
+ TInt aSendResult)
+ {
+ LOG_FUNC
+ __ASSERT_BTADDR(aBTDevice);
+ SymbianAvctp::AssertValidTransactionLabel(aTransactionLabel);
+ iNotify.MaenMessageSendComplete(aBTDevice, aTransactionLabel, aSendResult);
+ }
+
+//
+// Functions From CActive
+
+void CAvctpSender::DoCancel()
+ {
+ LOG_FUNC
+
+ iAvctpSocket.CancelSend();
+ // Don't complete the client's request since they don't care about it anymore
+ }
+
+void CAvctpSender::RunL()
+ {
+ LOG_FUNC
+ NotifyMessageSent(iAddr.BTAddr(), iCurrentTrans, iStatus.Int());
+ }
+
+//
+// Other Functions
+
+void CAvctpSender::ResetSendInfo()
+ {
+ LOG_FUNC
+
+ iAddr = TAvctpSockAddr(0);
+ iCurrentTrans = KUndefinedTransactionLabel;
+ }
+
+// EOF
+