eapol/eapol_framework/eapol_symbian/am/common/symbian/EapMessageQueue.cpp
branchRCL_3
changeset 18 bad0cc58d154
equal deleted inserted replaced
17:30e048a7b597 18:bad0cc58d154
       
     1 /*
       
     2 * Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Message queue for EAP-server and -clients.
       
    15 *
       
    16 */
       
    17 
       
    18 /*
       
    19 * %version: 14 %
       
    20 */
       
    21 
       
    22 
       
    23 #include "EapMessageQueue.h"
       
    24 #include "eap_am_tools.h"
       
    25 #include "EapServerStrings.h"
       
    26 #include "eap_automatic_variable.h"
       
    27 
       
    28 //----------------------------------------------------------------------------
       
    29 
       
    30 EAP_FUNC_EXPORT EapMessageBuffer::EapMessageBuffer(abs_eap_am_tools_c * const tools)
       
    31 	: iTools(tools)
       
    32 	, iRequestType(EEapNone)
       
    33 	, iData(0)
       
    34 {
       
    35 	EAP_TRACE_DEBUG(
       
    36 		iTools,
       
    37 		TRACE_FLAGS_DEFAULT,
       
    38 		(EAPL("EapMessageBuffer::EapMessageBuffer(): this=0x%08x\n"),
       
    39 		this));
       
    40 
       
    41 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageBuffer::EapMessageBuffer()");
       
    42 }
       
    43 
       
    44 //----------------------------------------------------------------------------
       
    45 
       
    46 EAP_FUNC_EXPORT EapMessageBuffer::~EapMessageBuffer()
       
    47 {
       
    48 	EAP_TRACE_DEBUG(
       
    49 		iTools,
       
    50 		TRACE_FLAGS_DEFAULT,
       
    51 		(EAPL("EapMessageBuffer::~EapMessageBuffer(): this=0x%08x, iData=0x%08x\n"),
       
    52 		this,
       
    53 		iData));
       
    54 
       
    55 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageBuffer::~EapMessageBuffer()");
       
    56 
       
    57 	iRequestType = EEapNone;
       
    58 	delete iData;
       
    59 	iData = 0;
       
    60 }
       
    61 
       
    62 //----------------------------------------------------------------------------
       
    63 
       
    64 EAP_FUNC_EXPORT TInt EapMessageBuffer::CopyData(TEapRequests message, const void * const data, const TUint length)
       
    65 {
       
    66 	EAP_TRACE_DEBUG(
       
    67 		iTools,
       
    68 		TRACE_FLAGS_DEFAULT,
       
    69 		(EAPL("EapMessageBuffer::CopyData(): this=0x%08x, iData=0x%08x, message=%d, data=0x%08x, length=%d\n"),
       
    70 		this,
       
    71 		iData,
       
    72 		message,
       
    73 		data,
       
    74 		length));
       
    75 
       
    76 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageBuffer::CopyData()");
       
    77 
       
    78 	iRequestType = message;
       
    79 
       
    80 	TUint buffer_size = length;
       
    81 	if (buffer_size == 0)
       
    82 	{
       
    83 		// Allocate at least one byte.
       
    84 		++buffer_size;
       
    85 	}
       
    86 
       
    87 	delete iData;
       
    88 	iData = HBufC8::New(buffer_size);
       
    89 
       
    90 	EAP_TRACE_DEBUG(
       
    91 		iTools,
       
    92 		TRACE_FLAGS_DEFAULT,
       
    93 		(EAPL("EapMessageBuffer::CopyData(): this=0x%08x, iData=0x%08x\n"),
       
    94 		this,
       
    95 		iData));
       
    96 
       
    97 	if (iData == 0)
       
    98 	{
       
    99 		EAP_TRACE_DEBUG(
       
   100 			iTools,
       
   101 			TRACE_FLAGS_DEFAULT,
       
   102 			(EAPL("ERROR: EapMessageBuffer::CopyData(): iData == 0\n")));
       
   103 
       
   104 		return KErrNoMemory;
       
   105 	}
       
   106 	else
       
   107 	{
       
   108 		if (data != 0
       
   109 		&& length > 0ul)
       
   110 		{
       
   111 			EAP_TRACE_DEBUG(
       
   112 				iTools,
       
   113 				TRACE_FLAGS_DEFAULT,
       
   114 				(EAPL("EapMessageBuffer::CopyData(): copies data\n")));
       
   115 
       
   116 			TPtr8 aDataPtr = iData->Des();
       
   117 			aDataPtr.Copy(reinterpret_cast<const unsigned char*>(data), length);
       
   118 		}
       
   119 		else
       
   120 		{
       
   121 			EAP_TRACE_DEBUG(
       
   122 				iTools,
       
   123 				TRACE_FLAGS_DEFAULT,
       
   124 				(EAPL("EapMessageBuffer::CopyData(): set length zero\n")));
       
   125 
       
   126 			iData->Des().SetLength(0ul);
       
   127 		}
       
   128 	}
       
   129 
       
   130 	EAP_TRACE_DEBUG(
       
   131 		iTools,
       
   132 		TRACE_FLAGS_DEFAULT,
       
   133 		(EAPL("EapMessageBuffer::CopyData(): ends\n")));
       
   134 
       
   135 	return KErrNone;
       
   136 }
       
   137 
       
   138 //----------------------------------------------------------------------------
       
   139 
       
   140 EAP_FUNC_EXPORT HBufC8 * EapMessageBuffer::GetData() const
       
   141 {
       
   142 	return iData;
       
   143 }
       
   144 
       
   145 //----------------------------------------------------------------------------
       
   146 
       
   147 EAP_FUNC_EXPORT TEapRequests EapMessageBuffer::GetRequestType() const
       
   148 {
       
   149 	return iRequestType;
       
   150 }
       
   151 
       
   152 //----------------------------------------------------------------------------
       
   153 //----------------------------------------------------------------------------
       
   154 //----------------------------------------------------------------------------
       
   155 
       
   156 EAP_FUNC_EXPORT EapMessageQueue::EapMessageQueue(abs_eap_am_tools_c * const tools)
       
   157 	: iTools(tools)
       
   158 {
       
   159 	EAP_TRACE_DEBUG(
       
   160 		iTools,
       
   161 		TRACE_FLAGS_DEFAULT,
       
   162 		(EAPL("EapMessageQueue::EapMessageQueue(): this=0x%08x, iEapMessageQueue.Count()=%d\n"),
       
   163 		this,
       
   164 		iEapMessageQueue.Count()));
       
   165 
       
   166 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageQueue::EapMessageQueue()");
       
   167 
       
   168 }
       
   169 
       
   170 //----------------------------------------------------------------------------
       
   171 
       
   172 EAP_FUNC_EXPORT EapMessageQueue::~EapMessageQueue()
       
   173 {
       
   174 	EAP_TRACE_DEBUG(
       
   175 		iTools,
       
   176 		TRACE_FLAGS_DEFAULT,
       
   177 		(EAPL("EapMessageQueue::~EapMessageQueue(): this=0x%08x, iEapMessageQueue.Count()=%d\n"),
       
   178 		this,
       
   179 		iEapMessageQueue.Count()));
       
   180 
       
   181 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageQueue::~EapMessageQueue()");
       
   182 
       
   183 	TInt aCount = iEapMessageQueue.Count();
       
   184 
       
   185 	while (aCount > 0)
       
   186 	{
       
   187 		EAP_TRACE_DEBUG(
       
   188 			iTools,
       
   189 			TRACE_FLAGS_DEFAULT,
       
   190 			(EAPL("EapMessageQueue::~EapMessageQueue(): Removes iEapMessageQueue[0].iRequestType=%d=%s, iEapMessageQueue.Count()=%d\n"),
       
   191 			iEapMessageQueue[0]->GetRequestType(),
       
   192 			EapServerStrings::GetEapRequestsString(iEapMessageQueue[0]->GetRequestType()),
       
   193 			iEapMessageQueue.Count()));
       
   194 
       
   195 		delete iEapMessageQueue[0];
       
   196 		iEapMessageQueue.Remove(0);
       
   197 
       
   198 		aCount = iEapMessageQueue.Count();
       
   199 	}
       
   200 
       
   201 	iEapMessageQueue.Close();
       
   202 }
       
   203 
       
   204 //----------------------------------------------------------------------------
       
   205 
       
   206 EAP_FUNC_EXPORT TInt EapMessageQueue::AddMessage(TEapRequests message, const void * const data, const TUint length)
       
   207 {
       
   208 	EAP_TRACE_DEBUG(
       
   209 		iTools,
       
   210 		TRACE_FLAGS_DEFAULT,
       
   211 		(EAPL("EapMessageQueue::AddMessage(): this=0x%08x, message=%d, data=0x%08x, length=%d, iEapMessageQueue.Count()=%d\n"),
       
   212 		this,
       
   213 		message,
       
   214 		data,
       
   215 		length,
       
   216 		iEapMessageQueue.Count()));
       
   217 
       
   218 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageQueue::AddMessage()");
       
   219 
       
   220 	EapMessageBuffer * const buffer = new EapMessageBuffer(iTools);
       
   221 
       
   222 	if (buffer == 0)
       
   223 	{
       
   224 		EAP_TRACE_DEBUG(
       
   225 			iTools,
       
   226 			TRACE_FLAGS_DEFAULT,
       
   227 			(EAPL("ERROR: EapMessageQueue::AddMessage(): buffer == 0\n")));
       
   228 
       
   229 		return KErrNoMemory;
       
   230 	}
       
   231 
       
   232 	TInt error = buffer->CopyData(message, data, length);
       
   233 	if (error != KErrNone)
       
   234 	{
       
   235 		EAP_TRACE_DEBUG(
       
   236 			iTools,
       
   237 			TRACE_FLAGS_DEFAULT,
       
   238 			(EAPL("ERROR: EapMessageQueue::AddMessage(): buffer->CopyData() failed = %d\n"),
       
   239 			error));
       
   240 
       
   241 		delete buffer;
       
   242 
       
   243 		return error;
       
   244 	}
       
   245 
       
   246 	error = iEapMessageQueue.Append(buffer);
       
   247 	if (error != KErrNone)
       
   248 	{
       
   249 		EAP_TRACE_DEBUG(
       
   250 			iTools,
       
   251 			TRACE_FLAGS_DEFAULT,
       
   252 			(EAPL("ERROR: EapMessageQueue::AddMessage(): iEapMessageQueue.Append() failed = %d\n"),
       
   253 			error));
       
   254 
       
   255 		delete buffer;
       
   256 	}
       
   257 
       
   258 	return error;
       
   259 }
       
   260 
       
   261 //----------------------------------------------------------------------------
       
   262 
       
   263 EAP_FUNC_EXPORT EapMessageBuffer * EapMessageQueue::GetFirstMessage()
       
   264 {
       
   265 	EAP_TRACE_DEBUG(
       
   266 		iTools,
       
   267 		TRACE_FLAGS_DEFAULT,
       
   268 		(EAPL("EapMessageQueue::GetFirstMessage(): this=0x%08x\n"),
       
   269 		this));
       
   270 
       
   271 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageQueue::GetFirstMessage()");
       
   272 
       
   273 	TInt aCount = iEapMessageQueue.Count();
       
   274 	if (aCount > 0)
       
   275 	{
       
   276 		EAP_TRACE_DEBUG(
       
   277 			iTools,
       
   278 			TRACE_FLAGS_DEFAULT,
       
   279 			(EAPL("EapMessageQueue::GetFirstMessage(): iEapMessageQueue[0].iRequestType=%d=%s, iEapMessageQueue.Count()=%d\n"),
       
   280 			iEapMessageQueue[0]->GetRequestType(),
       
   281 			EapServerStrings::GetEapRequestsString(iEapMessageQueue[0]->GetRequestType()),
       
   282 			iEapMessageQueue.Count()));
       
   283 
       
   284 		return iEapMessageQueue[0];
       
   285 	}
       
   286 	else
       
   287 	{
       
   288 		EAP_TRACE_DEBUG(
       
   289 			iTools,
       
   290 			TRACE_FLAGS_DEFAULT,
       
   291 			(EAPL("EapMessageQueue::GetFirstMessage(): Empty array\n")));
       
   292 		return 0;
       
   293 	}
       
   294 }
       
   295 
       
   296 //----------------------------------------------------------------------------
       
   297 
       
   298 EAP_FUNC_EXPORT TInt EapMessageQueue::DeleteFirstMessage()
       
   299 {
       
   300 	EAP_TRACE_DEBUG(
       
   301 		iTools,
       
   302 		TRACE_FLAGS_DEFAULT,
       
   303 		(EAPL("EapMessageQueue::DeleteFirstMessage(): this=0x%08x\n"),
       
   304 		this));
       
   305 
       
   306 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageQueue::DeleteFirstMessage()");
       
   307 
       
   308 	TInt aCount = iEapMessageQueue.Count();
       
   309 	if (aCount > 0)
       
   310 	{
       
   311 		EAP_TRACE_DEBUG(
       
   312 			iTools,
       
   313 			TRACE_FLAGS_DEFAULT,
       
   314 			(EAPL("EapMessageQueue::DeleteFirstMessage(): iEapMessageQueue[0].iRequestType=%d=%s, iEapMessageQueue.Count()=%d\n"),
       
   315 			iEapMessageQueue[0]->GetRequestType(),
       
   316 			EapServerStrings::GetEapRequestsString(iEapMessageQueue[0]->GetRequestType()),
       
   317 			iEapMessageQueue.Count()));
       
   318 
       
   319 		delete iEapMessageQueue[0];
       
   320 		iEapMessageQueue.Remove(0);
       
   321 	}
       
   322 	else
       
   323 	{
       
   324 		EAP_TRACE_DEBUG(
       
   325 			iTools,
       
   326 			TRACE_FLAGS_DEFAULT,
       
   327 			(EAPL("EapMessageQueue::DeleteFirstMessage(): Empty array\n")));
       
   328 	}
       
   329 
       
   330 	return KErrNone;
       
   331 }
       
   332 
       
   333 //----------------------------------------------------------------------------
       
   334 // end
       
   335