--- a/bluetooth/btstack/l2cap/L2CapFecNegotiator.cpp Thu Sep 23 17:06:47 2010 +0300
+++ b/bluetooth/btstack/l2cap/L2CapFecNegotiator.cpp Wed Oct 13 16:20:29 2010 +0300
@@ -592,32 +592,40 @@
TInt TL2CapOutgoingFecNegotiator::ProcessPeerValue(const TRetransmissionAndFlowControlOption& aFecOption)
{
LOG_FUNC
+ TInt err = KErrNone;
- TInt err = KErrNone;
- TBool disconnect = EFalse;
- TBool peerModeAcceptable = IsPeerModeAcceptable(aFecOption.LinkMode(), disconnect);
-
- if (peerModeAcceptable)
+ if (!iFecNegotiator.ModeSpecificHandlers().IsOptionValid(aFecOption))
{
- iPeer = aFecOption;
- iIncludeValueInPositiveConfigResponse = iFecNegotiator.ModeSpecificHandlers().BuildPositiveResponse(iPreferred, iPeer);
- iConfigStatus = EOptionConfigComplete;
+ iConfigStatus = EOptionConfigFailed;
+ err = KErrBadPacketReceived;
}
else
{
- if (disconnect)
+ TBool disconnect = EFalse;
+ TBool peerModeAcceptable = IsPeerModeAcceptable(aFecOption.LinkMode(), disconnect);
+
+ if (peerModeAcceptable)
{
- // Disconnect immediately without sending an Unacceptable Parameters response.
- iConfigStatus = EOptionConfigFailed;
- err = KErrConfigRejected;
+ iPeer = aFecOption;
+ iIncludeValueInPositiveConfigResponse = iFecNegotiator.ModeSpecificHandlers().BuildPositiveResponse(iPreferred, iPeer);
+ iConfigStatus = EOptionConfigComplete;
}
else
{
- iPreferred.SetLinkMode(iFecNegotiator.DesiredMode());
- iFecNegotiator.ModeSpecificHandlers().BuildNegativeResponse(iPreferred, aFecOption);
- // Cause an Unacceptable Parameters response.
- iConfigStatus = EOptionConfigFailed;
- // Preferred contains our desired FEC, it will be included in the Unaccepted Parameters response.
+ if (disconnect)
+ {
+ // Disconnect immediately without sending an Unacceptable Parameters response.
+ iConfigStatus = EOptionConfigFailed;
+ err = KErrConfigRejected;
+ }
+ else
+ {
+ iPreferred.SetLinkMode(iFecNegotiator.DesiredMode());
+ iFecNegotiator.ModeSpecificHandlers().BuildNegativeResponse(iPreferred, aFecOption);
+ // Cause an Unacceptable Parameters response.
+ iConfigStatus = EOptionConfigFailed;
+ // Preferred contains our desired FEC, it will be included in the Unaccepted Parameters response.
+ }
}
}
LOG1(_L("\tOutgoing FEC Config Status is now %d"), iConfigStatus);