telephonyprotocols/qosextnapi/src/sblpextn.cpp
changeset 49 f50f4094acd7
parent 42 3adadc800673
equal deleted inserted replaced
48:14460bf2a402 49:f50f4094acd7
    67 	iAuthorizationToken = aAuthToken;
    67 	iAuthorizationToken = aAuthToken;
    68 	}
    68 	}
    69 
    69 
    70 EXPORT_C CSblpParameters::TFlowIdentifier& CSblpParameters::GetFlowId(TInt aIndex)
    70 EXPORT_C CSblpParameters::TFlowIdentifier& CSblpParameters::GetFlowId(TInt aIndex)
    71 	{
    71 	{
    72 	__ASSERT_DEBUG(aIndex<iFlowIds.Count(),User::Panic(_L("Sblp"),KErrArgument));
    72 	__ASSERT_DEBUG(aIndex<iFlowIds.Count(),User::Panic(_L("CSblpParameters::GetFlowId"),KErrArgument));
    73 	return iFlowIds[aIndex];
    73 	return iFlowIds[aIndex];
    74 	}
    74 	}
    75 
    75 
    76 EXPORT_C void CSblpParameters::SetFlowIds(const RArray<TFlowIdentifier> &aFlowIds)
    76 EXPORT_C void CSblpParameters::SetFlowIds(const RArray<TFlowIdentifier> &aFlowIds)
    77 	{
    77 	{
       
    78     //in case of low memory the function might not set all the ids
    78 	iFlowIds.Reset();
    79 	iFlowIds.Reset();
    79 	TInt i;
    80 	TInt i;
    80 	for(i=0; i<aFlowIds.Count();i++)
    81 	for(i=0; i<aFlowIds.Count();i++)
    81 		{
    82 		{
    82 		this->iFlowIds.Append(aFlowIds[i]);
    83 		TInt errorCode = this->iFlowIds.Append(aFlowIds[i]);
       
    84 		if (errorCode != KErrNone) 
       
    85 		    {
       
    86             OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CSBLPPARAMETERS_SETFLOWID, "Not Enough Memory");
       
    87 		    }
    83 		}
    88 		}
    84 	}
    89 	}
    85 
    90 
    86 EXPORT_C TInt CSblpParameters::GetFlowIds(RArray<TFlowIdentifier>& aFlowIds)
    91 EXPORT_C TInt CSblpParameters::GetFlowIds(RArray<TFlowIdentifier>& aFlowIds)
    87 	{
    92 	{
       
    93     //in case of low memory the function might not get all the ids and returns an error code
    88 	aFlowIds.Reset();
    94 	aFlowIds.Reset();
    89 	TInt i;
    95 	TInt i;
       
    96 	TInt errorCode = KErrNone;
    90 	for(i=0; i<iFlowIds.Count();i++)
    97 	for(i=0; i<iFlowIds.Count();i++)
    91 		{
    98 		{
    92 		aFlowIds.Append(this->iFlowIds[i]);
    99         errorCode = aFlowIds.Append(this->iFlowIds[i]);
       
   100         if (errorCode != KErrNone) 
       
   101             {
       
   102             OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CSBLPPARAMETERS_GETFLOWID, "Not Enough Memory");
       
   103             return errorCode;
       
   104             }
    93 		}
   105 		}
    94 	return KErrNone;
   106 	return KErrNone;
    95 	}
   107 	}
    96 
   108 
    97 EXPORT_C TInt CSblpParameters::NrOfFlowIds()
   109 EXPORT_C TInt CSblpParameters::NrOfFlowIds()
   166 	header.pfqos_configure_len = (TUint16)((byte_len + 7) / 8);
   178 	header.pfqos_configure_len = (TUint16)((byte_len + 7) / 8);
   167 	header.pfqos_ext_type = EPfqosExtExtension;
   179 	header.pfqos_ext_type = EPfqosExtExtension;
   168 	header.reserved = 0;
   180 	header.reserved = 0;
   169 	header.protocol_id = 0;
   181 	header.protocol_id = 0;
   170 	bufPtr.Append((TUint8*)&header, sizeof(pfqos_configure));
   182 	bufPtr.Append((TUint8*)&header, sizeof(pfqos_configure));
   171 
   183 	
   172 	pfqos_extension extensionType;
   184 	pfqos_extension extensionType;
   173 	extensionType.pfqos_ext_len = 0;
   185 	extensionType.pfqos_ext_len = 0;
   174 	extensionType.pfqos_ext_type = EPfqosExtExtension;
   186 	extensionType.pfqos_ext_type = EPfqosExtExtension;
   175 	extensionType.pfqos_extension_type = KPfqosExtensionSBLP;
   187 	extensionType.pfqos_extension_type = KPfqosExtensionSBLP;
   176 	bufPtr.Append((TUint8*)&extensionType, sizeof(pfqos_extension));
   188 	bufPtr.Append((TUint8*)&extensionType, sizeof(pfqos_extension));
   185 	TAuthorizationToken authToken; 
   197 	TAuthorizationToken authToken; 
   186 	pfqos_configblock stringBlock;
   198 	pfqos_configblock stringBlock;
   187 	iSblp->GetMAT(authToken);
   199 	iSblp->GetMAT(authToken);
   188 	SetStringBlockHeader(stringBlock,authToken,KDescSblpMediaAuthorizationToken);
   200 	SetStringBlockHeader(stringBlock,authToken,KDescSblpMediaAuthorizationToken);
   189 	bufPtr.Append((TUint8*)&stringBlock, sizeof(pfqos_configblock));
   201 	bufPtr.Append((TUint8*)&stringBlock, sizeof(pfqos_configblock));
       
   202 
   190 	// put the string now
   203 	// put the string now
   191 	authToken.ZeroTerminate();
   204 	authToken.ZeroTerminate();
   192 	bufPtr.Append((TUint8*)authToken.Ptr(),KAuthorizationTokenAdjustedStringLength);
   205 	bufPtr.Append((TUint8*)authToken.Ptr(),KAuthorizationTokenAdjustedStringLength);
   193 
   206 
   194 
       
   195 	// Flowids
   207 	// Flowids
   196 	pfqos_configblock_int ext;
   208 	pfqos_configblock_int ext;
   197 	TInt i;
   209 	TInt i;
   198 	for(i=0; i<iSblp->NrOfFlowIds();i++)
   210 	for(i=0; i<iSblp->NrOfFlowIds();i++)
   199 		{
   211 		{
   200 		CSblpParameters::TFlowIdentifier& flowId = iSblp->GetFlowId(i);
   212 		CSblpParameters::TFlowIdentifier& flowId = iSblp->GetFlowId(i);
   201 		SetIntValue(ext,flowId.iMediaComponentNumber,KDescSblpMediaComponentNumber);
   213 		SetIntValue(ext,flowId.iMediaComponentNumber,KDescSblpMediaComponentNumber);
   202 		bufPtr.Append((TUint8*)&ext, sizeof(pfqos_configblock_int));
   214 		bufPtr.Append((TUint8*)&ext, sizeof(pfqos_configblock_int));
       
   215 
   203 		SetIntValue(ext,flowId.iIPFlowNumber,KDescSblpIPFlowNumber);
   216 		SetIntValue(ext,flowId.iIPFlowNumber,KDescSblpIPFlowNumber);
   204 		bufPtr.Append((TUint8*)&ext, sizeof(pfqos_configblock_int));
   217 		bufPtr.Append((TUint8*)&ext, sizeof(pfqos_configblock_int));
   205 		}
   218 		}
   206 
   219 
   207 	bufPtr.AppendFill(0, header.pfqos_configure_len * 8 - byte_len);
   220 	bufPtr.AppendFill(0, header.pfqos_configure_len * 8 - byte_len);
       
   221 
   208 	return *iData;
   222 	return *iData;
   209 	}
   223 	}
   210 
   224 
   211 EXPORT_C TInt CSblpPolicy::ParseMessage(const TDesC8& /*aData*/)
   225 EXPORT_C TInt CSblpPolicy::ParseMessage(const TDesC8& /*aData*/)
   212 	{
   226 	{
   235 
   249 
   236 
   250 
   237 	// following code is to create logs
   251 	// following code is to create logs
   238 	TAuthorizationToken authToken;
   252 	TAuthorizationToken authToken;
   239 	iSblp->GetMAT (authToken);
   253 	iSblp->GetMAT (authToken);
   240 	RArray<CSblpParameters::TFlowIdentifier> flowIds;
   254     RArray<CSblpParameters::TFlowIdentifier> flowIds;
   241 	iSblp->GetFlowIds(flowIds);
   255 	iSblp->GetFlowIds(flowIds);
       
   256 	// in case of low memory GetFlowIds might return an error and flowIds might not have all the ids, but we still try to log as much as we can
   242 	TBuf<KAuthorizationTokenSize> label;
   257 	TBuf<KAuthorizationTokenSize> label;
   243 	label.Copy(authToken);
   258 	label.Copy(authToken);
   244 		
   259 		
   245 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CSBLPPOLICY_SETSBLPPARAMETERS_1, "<------------------------------------------------\n");
   260 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CSBLPPOLICY_SETSBLPPARAMETERS_1, "<------------------------------------------------\n");
   246 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CSBLPPOLICY_SETSBLPPARAMETERS_2, "CSblpPolicy::SetSblpParameters");
   261 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_BORDER, CSBLPPOLICY_SETSBLPPARAMETERS_2, "CSblpPolicy::SetSblpParameters");