localconnectivityservice/obexsendservices/obexservicesendutils/src/BTSUCapabilityResolver.cpp
branchRCL_3
changeset 40 52a167391590
parent 0 c3e98f10fcf4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/obexsendservices/obexservicesendutils/src/BTSUCapabilityResolver.cpp	Wed Sep 01 12:20:40 2010 +0100
@@ -0,0 +1,377 @@
+/*
+* Copyright (c) 2002 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:  Capability resolver implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include "BTServiceUtils.h"
+#include "BTSUCapabilityResolver.h"
+#include "BTSUDebug.h"
+#include <utf.h>
+
+
+// CONSTANTS
+
+_LIT8( KBTSUImageTag, "image-formats" );
+_LIT8( KBTSUAttributeEncoding, "encoding" );
+_LIT8( KBTSUAttributePixel, "pixel" );
+_LIT8( KBTSUAttributeMaxSize,"maxsize");
+_LIT(minus,"-");
+_LIT(star,"*");
+
+
+
+
+#define  INVALIDVALUE   -1
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBTSBIPController::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSUCapabilityResolver* CBTSUCapabilityResolver::NewL(CDesCArrayFlat* aCapabilityList)
+    {
+    CBTSUCapabilityResolver* self = new( ELeave ) CBTSUCapabilityResolver( aCapabilityList );
+    CleanupStack::PushL( self );
+    self->ConstructL(  );
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSBIPController::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBTSUCapabilityResolver* CBTSUCapabilityResolver::NewL(RArray<TBTSUImageCap>* aCapabilityList)
+    {
+    CBTSUCapabilityResolver* self = new( ELeave ) CBTSUCapabilityResolver( aCapabilityList );
+    CleanupStack::PushL( self );
+    self->ConstructL(  );
+    CleanupStack::Pop(self);
+    return self;
+    }
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::CBTSUCapabilityResolver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBTSUCapabilityResolver::CBTSUCapabilityResolver( CDesCArrayFlat* aCapabilityList )
+	{	
+	aCapabilityList=aCapabilityList;
+	}
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::CBTSUCapabilityResolver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//	
+CBTSUCapabilityResolver::CBTSUCapabilityResolver( 
+    RArray<TBTSUImageCap>* aCapabilityList ) : iCapabilityList( aCapabilityList )
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSBIPController::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBTSUCapabilityResolver::ConstructL ()
+    {
+    }   
+  
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CBTSUCapabilityResolver::~CBTSUCapabilityResolver()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::StartDocument
+// -----------------------------------------------------------------------------
+//
+void CBTSUCapabilityResolver::OnStartDocumentL(const Xml::RDocumentParameters& /*aDocParam*/, TInt aErrorCode)
+    {
+    FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::OnStartDocumentL()"));
+    if(aErrorCode!=KErrNone)
+        {
+        FLOG(_L("[BTSU]\t Error OnStartDocument"));            
+        }    
+    iCompleted=EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::EndDocument
+// -----------------------------------------------------------------------------
+//
+void CBTSUCapabilityResolver::OnEndDocumentL(TInt aErrorCode)
+    {
+    FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::OnEndDocumentL()"));
+    if(aErrorCode!=KErrNone)
+        {
+        FLOG(_L("[BTSU]\t Error EndDocument"));            
+        }            
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::StartElement
+// -----------------------------------------------------------------------------
+//
+void CBTSUCapabilityResolver::OnStartElementL(const Xml::RTagInfo& aElement, const Xml::RAttributeArray& aAttributes, 
+								 TInt /*aErrorCode*/)  
+    {    
+ 
+    TBool status = EFalse;
+    TBTSUImageCap param;
+    TLex lex;
+    TPtrC sizemaxwidth;
+    TPtrC sizemaxheight;
+    TPtrC sizeminwidth;
+    TPtrC sizeminheight;
+    TPtrC sizemin;
+    TPtrC sizemax;	
+    TInt index;
+    HBufC* enc;	 
+    param.iMaxByteSize=0;                
+
+    TBuf<KBTSUMaxStringLength> conversionBuf;
+    
+    if( aElement.LocalName().DesC() != KBTSUImageTag )
+        {        
+        return;
+        }
+    
+  
+    if(aAttributes.Count()>0)
+        {		
+	
+        param.iEncoding=NULL; 
+        param.iMaxByteSize=-1;
+        param.iMinPixelSize.iHeight=INVALIDVALUE;
+        param.iMinPixelSize.iWidth=INVALIDVALUE;		 
+        param.iMaxPixelSize.iWidth=INVALIDVALUE;
+        param.iMaxPixelSize.iHeight=INVALIDVALUE;
+		 
+    	//Check and add to attribute list if there is encoding    	    	    	
+        for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )
+            {
+            if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeEncoding )
+                {                              
+                User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC()));                                                    
+                
+                if (conversionBuf.Length()>0)
+                    {	                                        		
+                    enc=conversionBuf.Alloc();
+                    TPtr rwdata(enc->Des());     
+                    rwdata.Copy(conversionBuf);                 
+                    param.iEncoding=enc;         	                    
+                    if (param.iEncoding!=NULL)
+                    	{                    	
+                    	status=ETrue;
+                    	}         		
+                    }
+                }
+            }          			
+       	conversionBuf = KNullDesC;
+        for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )        
+            {                
+            if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributePixel )
+                {                    ;
+                User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC()));
+                }
+            }            
+            
+		if(conversionBuf.Length()>1)
+			{				
+			index=conversionBuf.Find(minus);	
+			if(index!=KErrNotFound) //max size is given
+				{					
+				sizemin.Set(conversionBuf.Left(index));					
+				sizemax.Set(conversionBuf.Right(conversionBuf.Length()-index-1));
+				//solve min size
+				index=sizemin.Find(star); 	
+				if(index!=KErrNotFound)
+					{
+					sizeminwidth.Set(sizemin.Left(index));
+					sizeminheight.Set(sizemin.Right(sizemin.Length()-index-1));
+													
+					lex.Assign(sizeminwidth);
+					lex.Val(param.iMinPixelSize.iHeight);
+						
+					lex.Assign(sizeminheight);
+					lex.Val(param.iMinPixelSize.iWidth);						
+					}
+				//solve max size	
+				index=sizemax.Find(star);	
+				if(index!=KErrNotFound)
+					{
+					sizemaxwidth.Set(sizemax.Left(index));
+					sizemaxheight.Set(sizemax.Right(sizemax.Length()-index-1));
+						
+					lex.Assign(sizemaxwidth);
+					lex.Val(param.iMaxPixelSize.iWidth);
+						
+					lex.Assign(sizemaxheight);
+					lex.Val(param.iMaxPixelSize.iHeight);
+					status=ETrue;
+					}						
+				}
+			else	//if max size not given
+				{						
+				index=conversionBuf.Find(star);	
+				if(index!=KErrNotFound) 
+					{
+					//solve min size
+					TPtrC sizeminwidth=conversionBuf.Left( index );						
+					TPtrC sizeminheight=conversionBuf.Right( conversionBuf.Length() - index-1);		
+					
+					lex.Assign(sizeminwidth);
+					lex.Val(param.iMinPixelSize.iWidth);
+					
+					lex.Assign(sizeminheight);
+					lex.Val(param.iMinPixelSize.iHeight);
+					//set max size
+					param.iMaxPixelSize.iWidth=param.iMinPixelSize.iWidth;
+					param.iMaxPixelSize.iHeight=param.iMinPixelSize.iHeight;
+                    status=ETrue;							
+					}						
+				}				
+		    }        	
+
+
+        	//Check and add to attribute list if there is maxsize
+            TPtrC maxsizevalue;
+            conversionBuf = KNullDesC;
+            for ( TInt iCounter = 0 ; iCounter < aAttributes.Count() ; iCounter++ )        
+                {                
+                if ( aAttributes[iCounter].Attribute().LocalName().DesC() == KBTSUAttributeMaxSize )
+                    {                                            
+                    User::LeaveIfError( CnvUtfConverter::ConvertToUnicodeFromUtf8( conversionBuf, aAttributes[iCounter].Value().DesC()));                                    
+                    }
+                }         
+            
+            
+            if (conversionBuf.Length()>0)
+            	{			
+    			lex.Assign(conversionBuf);
+    			lex.Val(param.iMaxByteSize);			
+            	}           
+            	
+            if(status)
+            	{
+            	iCapabilityList->Append(param); //add to list
+            	}   
+
+        }     
+   	 
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnEndElementL
+// -----------------------------------------------------------------------------
+//    
+void CBTSUCapabilityResolver::OnEndElementL(const Xml::RTagInfo& /*aElement*/, TInt aErrorCode)
+  {
+    FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::EndElement()"));    
+    if(aErrorCode==KErrNone)
+        {        
+        iCompleted=ETrue;       
+        }
+    FLOG(_L("[BTSU]\t CBTSUCapabilityResolver::EndElement()"));    
+        
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnContentL
+// -----------------------------------------------------------------------------
+//     
+void CBTSUCapabilityResolver::OnContentL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/)
+    {   
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnStartPrefixMappingL
+// -----------------------------------------------------------------------------
+// 
+void CBTSUCapabilityResolver::OnStartPrefixMappingL(const RString& /*aPrefix*/, const RString& /*aUri*/, 
+								   TInt /*aErrorCode*/)
+    {    
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnEndPrefixMappingL
+// -----------------------------------------------------------------------------
+// 
+void CBTSUCapabilityResolver::OnEndPrefixMappingL(const RString& /*aPrefix*/, TInt /*aErrorCode*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnIgnorableWhiteSpaceL
+// -----------------------------------------------------------------------------
+// 
+void CBTSUCapabilityResolver::OnIgnorableWhiteSpaceL(const TDesC8& /*aBytes*/, TInt /*aErrorCode*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnSkippedEntityL
+// -----------------------------------------------------------------------------
+// 
+void CBTSUCapabilityResolver::OnSkippedEntityL(const RString& /*aName*/, TInt /*aErrorCode*/)
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnProcessingInstructionL
+// -----------------------------------------------------------------------------
+//     
+void CBTSUCapabilityResolver::OnProcessingInstructionL(const TDesC8& /*aTarget*/, const TDesC8& /*aData*/, 
+										  TInt /*aErrorCode*/)
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::OnError
+// -----------------------------------------------------------------------------
+//    
+void CBTSUCapabilityResolver::OnError(TInt /*aErrorCode*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::GetExtendedInterface
+// -----------------------------------------------------------------------------
+// 
+TAny* CBTSUCapabilityResolver::GetExtendedInterface(const TInt32 /*aUid*/)
+    {
+        return NULL;
+    }    
+    
+// -----------------------------------------------------------------------------
+// CBTSUCapabilityResolver::IsCompleted
+// -----------------------------------------------------------------------------
+    
+TBool CBTSUCapabilityResolver::IsCompleted()
+    {
+    return iCompleted;
+    }
+
+//  End of File