eapol/eapol_framework/eapol_symbian/am/common/symbian/EapMessageQueue.cpp
changeset 33 938269283a16
child 34 ad1f037f1ac2
equal deleted inserted replaced
22:093cf0757204 33:938269283a16
       
     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:  EAP and WLAN authentication protocols.
       
    15 *
       
    16 */
       
    17 
       
    18 /*
       
    19 * %version: 11 %
       
    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 }
       
    36 
       
    37 //----------------------------------------------------------------------------
       
    38 
       
    39 EAP_FUNC_EXPORT EapMessageBuffer::~EapMessageBuffer()
       
    40 {
       
    41 	iRequestType = EEapNone;
       
    42 	delete iData;
       
    43 	iData = 0;
       
    44 }
       
    45 
       
    46 //----------------------------------------------------------------------------
       
    47 
       
    48 EAP_FUNC_EXPORT TInt EapMessageBuffer::CopyData(TEapRequests message, const void * const data, const TUint length)
       
    49 {
       
    50 	EAP_TRACE_DEBUG(
       
    51 		iTools,
       
    52 		TRACE_FLAGS_DEFAULT,
       
    53 		(EAPL("EapMessageBuffer::CopyData(): message=%d, data=0x%08x, length=%d\n"),
       
    54 		message,
       
    55 		data,
       
    56 		length));
       
    57 
       
    58 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageBuffer::CopyData()");
       
    59 
       
    60 	iRequestType = message;
       
    61 
       
    62 	TUint buffer_size = length;
       
    63 	if (buffer_size == 0)
       
    64 	{
       
    65 		buffer_size = 1;
       
    66 	}
       
    67 
       
    68 	iData = HBufC8::New(buffer_size);
       
    69 
       
    70 	if (iData == 0)
       
    71 	{
       
    72 		EAP_TRACE_DEBUG(
       
    73 			iTools,
       
    74 			TRACE_FLAGS_DEFAULT,
       
    75 			(EAPL("ERROR: EapMessageBuffer::CopyData(): iData == 0\n")));
       
    76 
       
    77 		return KErrNoMemory;
       
    78 	}
       
    79 	else
       
    80 	{
       
    81 		if (data != 0
       
    82 		&& length > 0ul)
       
    83 		{
       
    84 			EAP_TRACE_DEBUG(
       
    85 				iTools,
       
    86 				TRACE_FLAGS_DEFAULT,
       
    87 				(EAPL("EapMessageBuffer::CopyData(): copies data\n")));
       
    88 
       
    89 			TPtr8 aDataPtr = iData->Des();
       
    90 			aDataPtr.Copy(reinterpret_cast<const unsigned char*>(data), length);
       
    91 		}
       
    92 		else
       
    93 		{
       
    94 			EAP_TRACE_DEBUG(
       
    95 				iTools,
       
    96 				TRACE_FLAGS_DEFAULT,
       
    97 				(EAPL("EapMessageBuffer::CopyData(): set length zero\n")));
       
    98 
       
    99 			iData->Des().SetLength(0ul);
       
   100 		}
       
   101 	}
       
   102 
       
   103 	EAP_TRACE_DEBUG(
       
   104 		iTools,
       
   105 		TRACE_FLAGS_DEFAULT,
       
   106 		(EAPL("EapMessageBuffer::CopyData(): ends\n")));
       
   107 
       
   108 	return KErrNone;
       
   109 }
       
   110 
       
   111 //----------------------------------------------------------------------------
       
   112 
       
   113 EAP_FUNC_EXPORT HBufC8 * EapMessageBuffer::GetData() const
       
   114 {
       
   115 	return iData;
       
   116 }
       
   117 
       
   118 //----------------------------------------------------------------------------
       
   119 
       
   120 EAP_FUNC_EXPORT TEapRequests EapMessageBuffer::GetRequestType() const
       
   121 {
       
   122 	return iRequestType;
       
   123 }
       
   124 
       
   125 //----------------------------------------------------------------------------
       
   126 //----------------------------------------------------------------------------
       
   127 //----------------------------------------------------------------------------
       
   128 
       
   129 EAP_FUNC_EXPORT EapMessageQueue::EapMessageQueue(abs_eap_am_tools_c * const tools)
       
   130 	: iTools(tools)
       
   131 {
       
   132 }
       
   133 
       
   134 //----------------------------------------------------------------------------
       
   135 
       
   136 EAP_FUNC_EXPORT EapMessageQueue::~EapMessageQueue()
       
   137 {
       
   138     DeleteFirstMessage();
       
   139 	iEapMessageQueue.Close();
       
   140 }
       
   141 
       
   142 //----------------------------------------------------------------------------
       
   143 
       
   144 EAP_FUNC_EXPORT TInt EapMessageQueue::AddMessage(TEapRequests message, const void * const data, const TUint length)
       
   145 {
       
   146 	EAP_TRACE_DEBUG(
       
   147 		iTools,
       
   148 		TRACE_FLAGS_DEFAULT,
       
   149 		(EAPL("EapMessageQueue::AddMessage(): message=%d, data=0x%08x, length=%d, iEapMessageQueue.Count()=%d\n"),
       
   150 		message,
       
   151 		data,
       
   152 		length,
       
   153 		iEapMessageQueue.Count()));
       
   154 
       
   155 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageQueue::AddMessage()");
       
   156 
       
   157 	EapMessageBuffer * const buffer = new EapMessageBuffer(iTools);
       
   158 
       
   159 	if (buffer == 0)
       
   160 	{
       
   161 		EAP_TRACE_DEBUG(
       
   162 			iTools,
       
   163 			TRACE_FLAGS_DEFAULT,
       
   164 			(EAPL("ERROR: EapMessageQueue::AddMessage(): buffer == 0\n")));
       
   165 
       
   166 		return KErrNoMemory;
       
   167 	}
       
   168 
       
   169 	TInt error = buffer->CopyData(message, data, length);
       
   170 	if (error != KErrNone)
       
   171 	{
       
   172 		EAP_TRACE_DEBUG(
       
   173 			iTools,
       
   174 			TRACE_FLAGS_DEFAULT,
       
   175 			(EAPL("ERROR: EapMessageQueue::AddMessage(): buffer->CopyData() failed = %d\n"),
       
   176 			error));
       
   177 
       
   178 		delete buffer;
       
   179 
       
   180 		return error;
       
   181 	}
       
   182 
       
   183 	error = iEapMessageQueue.Append(buffer);
       
   184 	if (error != KErrNone)
       
   185 	{
       
   186 		EAP_TRACE_DEBUG(
       
   187 			iTools,
       
   188 			TRACE_FLAGS_DEFAULT,
       
   189 			(EAPL("ERROR: EapMessageQueue::AddMessage(): iEapMessageQueue.Append() failed = %d\n"),
       
   190 			error));
       
   191 
       
   192 		delete buffer;
       
   193 
       
   194 		return error;
       
   195 	}
       
   196 
       
   197 	return error;
       
   198 }
       
   199 
       
   200 //----------------------------------------------------------------------------
       
   201 
       
   202 EAP_FUNC_EXPORT EapMessageBuffer * EapMessageQueue::GetFirstMessage()
       
   203 {
       
   204 	EAP_TRACE_DEBUG(
       
   205 		iTools,
       
   206 		TRACE_FLAGS_DEFAULT,
       
   207 		(EAPL("EapMessageQueue::GetFirstMessage()\n")));
       
   208 
       
   209 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageQueue::GetFirstMessage()");
       
   210 
       
   211 	TInt aCount = iEapMessageQueue.Count();
       
   212 	if (aCount > 0)
       
   213 	{
       
   214 		EAP_TRACE_DEBUG(
       
   215 			iTools,
       
   216 			TRACE_FLAGS_DEFAULT,
       
   217 			(EAPL("EapMessageQueue::GetFirstMessage(): iEapMessageQueue[0].iRequestType=%d=%s, iEapMessageQueue.Count()=%d\n"),
       
   218 			iEapMessageQueue[0]->GetRequestType(),
       
   219 			EapServerStrings::GetEapRequestsString(iEapMessageQueue[0]->GetRequestType()),
       
   220 			iEapMessageQueue.Count()));
       
   221 
       
   222 		return iEapMessageQueue[0];
       
   223 	}
       
   224 	else
       
   225 	{
       
   226 		EAP_TRACE_DEBUG(
       
   227 			iTools,
       
   228 			TRACE_FLAGS_DEFAULT,
       
   229 			(EAPL("EapMessageQueue::GetFirstMessage(): Empty array\n")));
       
   230 		return 0;
       
   231 	}
       
   232 }
       
   233 
       
   234 //----------------------------------------------------------------------------
       
   235 
       
   236 EAP_FUNC_EXPORT TInt EapMessageQueue::DeleteFirstMessage()
       
   237 {
       
   238 	EAP_TRACE_DEBUG(
       
   239 		iTools,
       
   240 		TRACE_FLAGS_DEFAULT,
       
   241 		(EAPL("EapMessageQueue::DeleteFirstMessage()\n")));
       
   242 
       
   243 	EAP_TRACE_RETURN_STRING(iTools, "returns: EapMessageQueue::DeleteFirstMessage()");
       
   244 
       
   245 	TInt aCount = iEapMessageQueue.Count();
       
   246 	if (aCount > 0)
       
   247 	{
       
   248 		EAP_TRACE_DEBUG(
       
   249 			iTools,
       
   250 			TRACE_FLAGS_DEFAULT,
       
   251 			(EAPL("EapMessageQueue::DeleteFirstMessage(): iEapMessageQueue[0].iRequestType=%d=%s, iEapMessageQueue.Count()=%d\n"),
       
   252 			iEapMessageQueue[0]->GetRequestType(),
       
   253 			EapServerStrings::GetEapRequestsString(iEapMessageQueue[0]->GetRequestType()),
       
   254 			iEapMessageQueue.Count()));
       
   255 
       
   256 		delete iEapMessageQueue[0];
       
   257 		iEapMessageQueue.Remove(0);
       
   258 	}
       
   259 	else
       
   260 	{
       
   261 		EAP_TRACE_DEBUG(
       
   262 			iTools,
       
   263 			TRACE_FLAGS_DEFAULT,
       
   264 			(EAPL("EapMessageQueue::DeleteFirstMessage(): Empty array\n")));
       
   265 	}
       
   266 
       
   267 	return KErrNone;
       
   268 }
       
   269 
       
   270 //----------------------------------------------------------------------------
       
   271 // end
       
   272