ImagePrint/ImagePrintEngine/ImagePrintServer/src/server/cimageprintsession.cpp
branchRCL_3
changeset 21 d59c248c9d36
equal deleted inserted replaced
20:159fc2f68139 21:d59c248c9d36
       
     1 /*
       
     2 * Copyright (c) 2004-2007 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 "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:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <usbman.h>
       
    20 #include <usbstates.h>
       
    21 #include <usbpersonalityids.h>
       
    22 
       
    23 #include "cimageprintsession.h"
       
    24 #include "imageprintclientserver.h"
       
    25 #include "cimageprintserver.h"
       
    26 #include "clog.h"
       
    27 #include "cimageprintbody.h"
       
    28 #include "cserveridleguard.h"
       
    29 #include "cserverdiscoveryguard.h"
       
    30 #include "cserverjobguard.h"
       
    31 #include "cnumofcopies.h"
       
    32  
       
    33 namespace
       
    34 	{
       
    35 	// panic
       
    36 	_LIT( KImagePrintSessionPanic, "CIPSes" );
       
    37 	enum TImagePrintSessionPanic
       
    38 		{
       
    39 		ENotSupported
       
    40 		};
       
    41 	
       
    42 	void PanicClient( const TMessageWrp2& aMessage, TImagePrintSessionPanic aCategory )
       
    43 		{
       
    44 		aMessage.Panic( KImagePrintSessionPanic, aCategory );
       
    45 		}
       
    46 	}
       
    47 
       
    48 CImagePrintSession::~CImagePrintSession()
       
    49     { 
       
    50     LOG("CImagePrintSession::~CImagePrintSession begin");
       
    51     delete iNumOfCopies;   
       
    52     delete iIdleGuard;
       
    53     delete iDiscoveryGuard;
       
    54     delete iJobGuard;
       
    55     iCapabilityIDs.Close();
       
    56     iMsgWrappers.ResetAndDestroy();
       
    57     iMsgWrappers.Close();
       
    58     Server().ReleaseEngine( this );
       
    59 	Server().RemoveSession();
       
    60 	LOG("CImagePrintSession::~CImagePrintSession end");
       
    61     }
       
    62 
       
    63 CImagePrintServer& CImagePrintSession::Server()
       
    64     {	
       
    65 	return *static_cast<CImagePrintServer*>( const_cast<CServer2*>( CSession2::Server() ) );
       
    66     }
       
    67 
       
    68 void CImagePrintSession::CreateL()
       
    69     {
       
    70     LOG("CImagePrintSession::CreateL begin");
       
    71 	Server().AddSession();
       
    72 	iIdleGuard =  CServerIdleGuard::NewL( Server().Engine() ); 
       
    73 	iDiscoveryGuard = CServerDiscoveryGuard::NewL( Server().Engine() );
       
    74 	iJobGuard = CServerJobGuard::NewL( Server().Engine() );
       
    75 	iNumOfCopies = CNumOfCopies::NewL();
       
    76 	iConnected = ETrue;
       
    77 	LOG("CImagePrintSession::CreateL end");
       
    78     }
       
    79 
       
    80 void CImagePrintSession::Disconnect(const RMessage2 &aMessage)
       
    81 	{
       
    82 	LOG("CImagePrintSession::Disconnect begin");
       
    83 	Server().Engine().HandleSessionDisconnect( iIdleGuard, iDiscoveryGuard, iJobGuard );
       
    84 	iConnected = EFalse;	
       
    85 	CSession2::Disconnect( aMessage );
       
    86 	LOG("CImagePrintSession::Disconnect end");
       
    87 	}
       
    88 
       
    89 void CImagePrintSession::ServiceL( const RMessage2& aMessage )
       
    90     {
       
    91     LOG1("CImagePrintSession::ServiceL aMessage.Function(): %d", aMessage.Function());
       
    92     
       
    93     // wrapper array clean begin
       
    94 	TInt index = iMsgWrappers.Count();
       
    95 	LOG1("CImagePrintSession::ServiceL index: %d", index);
       
    96 	TBool result( EFalse );
       
    97 	while( --index >= 0 && !result )
       
    98 		{
       
    99 		if( ( iMsgWrappers[index] )->Disposable() )
       
   100 			{
       
   101 			TMessageWrp2* toDispose = iMsgWrappers[index];
       
   102 			iMsgWrappers.Remove( index );
       
   103 			delete toDispose;
       
   104 			toDispose = NULL;
       
   105 			result = ETrue;
       
   106 			}
       
   107 		}	
       
   108 	// wrapper array clean end
       
   109     
       
   110     TMessageWrp2* msgWrapper = new (ELeave) TMessageWrp2( aMessage, iConnected );    
       
   111     TInt err = iMsgWrappers.Insert( msgWrapper, 0 );
       
   112     if( err )
       
   113     	{
       
   114     	delete msgWrapper;
       
   115     	User::Leave( err );
       
   116     	}
       
   117     else
       
   118     	{
       
   119     	msgWrapper = NULL;
       
   120     	}    
       
   121       
       
   122     TInt messageIndex = aMessage.Function();
       
   123     
       
   124     if ( messageIndex <= EContinuePrintJob )
       
   125 		{
       
   126 	    ServiceFirstPartL( messageIndex );
       
   127 		}
       
   128     else if ( messageIndex >= ERemoveCachedPrinter && messageIndex <= EGetPrinterCapHigh )
       
   129     	{
       
   130 		ServiceSecondPartL( messageIndex );				
       
   131     	}		
       
   132     else if ( messageIndex >= EGetPrinterCapEnumCount && messageIndex <= ESetNumberOfCopies )
       
   133     	{
       
   134 		ServiceThirdPartL ( messageIndex );
       
   135     	}
       
   136     else 
       
   137     	{		
       
   138     	PanicClient( *iMsgWrappers[0], ENotSupported );    
       
   139     	}	
       
   140 
       
   141 	LOG("CImagePrintSession::ServiceL end");
       
   142     }
       
   143 void CImagePrintSession::ServiceFirstPartL( TInt aIndex )
       
   144 	{
       
   145     switch( aIndex )
       
   146 		{
       
   147 		case ECountConnections:
       
   148 			CountConnectionsL( *iMsgWrappers[0] );
       
   149 			break;	
       
   150 			
       
   151 		case ESetForeground:
       
   152 			SetForegroundL( *iMsgWrappers[0] );
       
   153 			break;	
       
   154 			
       
   155 		case EReserveEngine:
       
   156 			ReserveEngine( *iMsgWrappers[0] );
       
   157 			break;
       
   158 
       
   159 		case EReleaseEngine:
       
   160 			ReleaseEngine( *iMsgWrappers[0] );
       
   161 			break;	
       
   162 
       
   163 		case ESupportedProtocols:
       
   164 			SupportedProtocols( *iMsgWrappers[0] );
       
   165 			break;	
       
   166 			
       
   167 		case EGetNumPrintPages:
       
   168 			GetNumPrintPages( *iMsgWrappers[0] );
       
   169 			break;	
       
   170 			
       
   171 		case EGetJobStatus:
       
   172 			GetJobStatus( *iMsgWrappers[0] );
       
   173 			break;	
       
   174 			
       
   175 		case EGetPrinterStatus:
       
   176 			GetPrinterStatus( *iMsgWrappers[0] );
       
   177 			break;	
       
   178 			
       
   179 		case ECancelDiscovery:
       
   180 			CancelDiscovery( *iMsgWrappers[0] );
       
   181 			break;	
       
   182 			
       
   183 		case ESubmitPrintJob:
       
   184 			SubmitPrintJobL( *iMsgWrappers[0] );
       
   185 			break;	
       
   186 			
       
   187 		case ECancelPrintJob:
       
   188 			CancelPrintJob( *iMsgWrappers[0] );
       
   189 			break;
       
   190 			
       
   191 		case EContinuePrintJob:
       
   192 			ContinuePrintJobL( *iMsgWrappers[0] );
       
   193 			break;
       
   194 			
       
   195 		default:
       
   196 		LOG1("[CImagePrintSession::ServiceFirstPartL]\t Method reached to an end with index: %d", aIndex);
       
   197 			break;
       
   198 		}
       
   199 	}
       
   200             
       
   201 void CImagePrintSession::ServiceSecondPartL( TInt aIndex )
       
   202 	{
       
   203     switch( aIndex )
       
   204 		{
       
   205 		case ERemoveCachedPrinter:
       
   206 			RemoveCachedPrinterL( *iMsgWrappers[0] );
       
   207 			break;
       
   208 		
       
   209 		case EGetJobTemplateIcon:
       
   210 			GetJobTemplateIconL( *iMsgWrappers[0] );
       
   211 			break;
       
   212 			
       
   213 		case EGetNumPreviewPages:
       
   214 			GetNumPreviewPages( *iMsgWrappers[0] );
       
   215 			break;
       
   216 		
       
   217 		case ESetJobSetting:
       
   218 			SetJobSettingL( *iMsgWrappers[0] );
       
   219 			break;	
       
   220 		
       
   221 		case EGetJobSetting:
       
   222 			GetJobSettingL( *iMsgWrappers[0] );
       
   223 			break;
       
   224 			
       
   225 		case EGetPrinterCapability:
       
   226 			GetPrinterCapabilityL( *iMsgWrappers[0] );
       
   227 			break;
       
   228 			
       
   229 		case EGetPrinterCapId:
       
   230 			GetPrinterCapIdL( *iMsgWrappers[0] );
       
   231 			break;
       
   232 					
       
   233 		case EGetPrinterCapType:
       
   234 			GetPrinterCapTypeL( *iMsgWrappers[0] );
       
   235 			break;
       
   236 		
       
   237     	case EGetPrinterCapDef:
       
   238 			GetPrinterCapDefL( *iMsgWrappers[0] );
       
   239 			break;
       
   240     				
       
   241 		case EGetPrinterCapLow:
       
   242 			GetPrinterCapLowL( *iMsgWrappers[0] );
       
   243 			break;
       
   244 			
       
   245 		case EGetPrinterCapHigh:
       
   246 			GetPrinterCapHighL( *iMsgWrappers[0] );
       
   247 			break;	
       
   248 			
       
   249 		default:
       
   250 			LOG1("[CImagePrintSession::ServiceSecondPartL]\t Method reached to an end with index: %d", aIndex);
       
   251 			break;
       
   252 		}
       
   253 	}
       
   254 
       
   255 void CImagePrintSession::ServiceThirdPartL( TInt aIndex )
       
   256 	{
       
   257     switch( aIndex )
       
   258 		{
       
   259 		case EGetPrinterCapEnumCount:
       
   260 			GetPrinterCapEnumCountL( *iMsgWrappers[0] );
       
   261 			break;
       
   262 			
       
   263 		case EGetPrinterCapEnum:
       
   264 			GetPrinterCapEnumL( *iMsgWrappers[0] );
       
   265 			break;	
       
   266 																										
       
   267 		case EGetPrinterCapabilityIDsCount:
       
   268 			GetPrinterCapabilityIDsCountL( *iMsgWrappers[0] );
       
   269 			break;
       
   270 			
       
   271 		case EGetPrinterCapabilityID:
       
   272 			GetPrinterCapabilityIDL( *iMsgWrappers[0] );
       
   273 			break;
       
   274 				
       
   275 		case ERegisterIdleObserver:
       
   276 			RegisterIdleObserverL( *iMsgWrappers[0] );
       
   277 			break;
       
   278 			
       
   279 		case ECancelRegisterIdleObserver:
       
   280 			CancelRegisterIdleObserverL( *iMsgWrappers[0] );
       
   281 			break;
       
   282 				
       
   283 		case EStartDiscovery:
       
   284 			StartDiscoveryL( *iMsgWrappers[0] );
       
   285 			break;
       
   286 			
       
   287 		case EContinueDiscovery:
       
   288 			ContinueDiscoveryL( *iMsgWrappers[0] );
       
   289 			break;
       
   290 			
       
   291 		case EPrepareJob:
       
   292 			PrepareJobL( *iMsgWrappers[0] );
       
   293 			break;
       
   294 			
       
   295 		case ECreateJob:
       
   296 			CreateJobL( *iMsgWrappers[0] );
       
   297 			break;			
       
   298 		
       
   299 		case EContinueCreateJob:
       
   300 			ContinueCreateJobL( *iMsgWrappers[0] );
       
   301 			break;
       
   302 			
       
   303 		case ECancelStartDiscovery:
       
   304 			CancelStartDiscoveryL( *iMsgWrappers[0] );
       
   305 			break;
       
   306 			
       
   307 		case ECancelCreateJob:
       
   308 			CancelCreateJobL( *iMsgWrappers[0] );
       
   309 			break;
       
   310 			
       
   311 		case EIsPictBridgeMode:
       
   312 			IsPictBridgeModeL( *iMsgWrappers[0] );
       
   313 			break;
       
   314 			
       
   315 		case ESetNumberOfCopiesCount:
       
   316 			SetNumberOfCopiesCountL( *iMsgWrappers[0] );
       
   317 			break;
       
   318 			
       
   319 		case ESetNumberOfCopies:
       
   320 			SetNumberOfCopiesL( *iMsgWrappers[0] );
       
   321 			break;
       
   322 			
       
   323 		default:
       
   324 			LOG1("[CImagePrintSession::ServiceThirdPartL]\t Method reached to an end with index: %d", aIndex);
       
   325 			break;
       
   326 		}
       
   327 	}
       
   328 
       
   329 
       
   330 void CImagePrintSession::CountConnectionsL( TMessageWrp2& aMessage )
       
   331 	{	
       
   332 	TInt count = Server().SessionCount();
       
   333 	TPckgC<TInt> countDes( count );
       
   334 	aMessage.WriteL( 0, countDes );
       
   335 	aMessage.SetDisposable( ETrue );
       
   336 	aMessage.Complete( KErrNone );
       
   337 	}
       
   338 		
       
   339 void CImagePrintSession::SetForegroundL( TMessageWrp2& aMessage )
       
   340 	{
       
   341 	TInt fg = aMessage.Int0();
       
   342 	aMessage.SetDisposable( ETrue );
       
   343 	aMessage.Complete( KErrNone );
       
   344 	}
       
   345 	
       
   346 void CImagePrintSession::ReserveEngine( TMessageWrp2& aMessage )
       
   347 	{
       
   348 	TInt err = Server().ReserveEngine( this );
       
   349 	aMessage.SetDisposable( ETrue );
       
   350 	aMessage.Complete( err );
       
   351 	}
       
   352 
       
   353 void CImagePrintSession::ReleaseEngine( TMessageWrp2& aMessage )
       
   354 	{
       
   355 	TInt err = Server().ReleaseEngine( this );
       
   356 	aMessage.SetDisposable( ETrue );
       
   357 	aMessage.Complete( err );	
       
   358 	}
       
   359 
       
   360 void CImagePrintSession::SupportedProtocols( TMessageWrp2& aMessage )
       
   361 	{
       
   362 	TInt err = Server().ReserveEngine( this );
       
   363 	aMessage.SetDisposable( ETrue );
       
   364 	if( !err )	
       
   365 		{
       
   366 		TInt protocols = Server().Engine().SupportedProtocols();
       
   367 		aMessage.Complete( protocols );	
       
   368 		}
       
   369 	else
       
   370 		{
       
   371 		aMessage.Complete( err );	
       
   372 		}
       
   373 	}
       
   374 	
       
   375 void CImagePrintSession::GetNumPrintPages( TMessageWrp2& aMessage )
       
   376 {
       
   377 	TInt err = Server().ReserveEngine( this );
       
   378 	aMessage.SetDisposable( ETrue );
       
   379 	if( !err )	
       
   380 		{
       
   381 		TInt pages = Server().Engine().GetNumPrintPages();
       
   382 		aMessage.Complete( pages );	
       
   383 		}
       
   384 	else
       
   385 		{
       
   386 		aMessage.Complete( err );	
       
   387 		}
       
   388 	}	
       
   389 
       
   390 void CImagePrintSession::GetJobStatus( TMessageWrp2& aMessage )
       
   391 {
       
   392 	TInt err = Server().ReserveEngine( this );
       
   393 	aMessage.SetDisposable( ETrue );
       
   394 	if( !err )	
       
   395 		{
       
   396 		TInt status = Server().Engine().GetJobStatus();
       
   397 		aMessage.Complete( status );	
       
   398 		}
       
   399 	else
       
   400 		{
       
   401 		aMessage.Complete( err );	
       
   402 		}
       
   403 	}	
       
   404 	
       
   405 void CImagePrintSession::GetPrinterStatus( TMessageWrp2& aMessage )
       
   406 {
       
   407 	TInt err = Server().ReserveEngine( this );
       
   408 	aMessage.SetDisposable( ETrue );
       
   409 	if( !err )	
       
   410 		{
       
   411 		TInt id = aMessage.Int0();
       
   412 		TInt status = Server().Engine().GetPrinterStatus( id );
       
   413 		aMessage.Complete( status );	
       
   414 		}
       
   415 	else
       
   416 		{
       
   417 		aMessage.Complete( err );	
       
   418 		}
       
   419 	}
       
   420 	
       
   421 void CImagePrintSession::CancelDiscovery( TMessageWrp2& aMessage )
       
   422 	{
       
   423 	TInt err = Server().ReserveEngine( this );
       
   424 	if( !err )	
       
   425 		{
       
   426 		Server().Engine().CancelDiscovery();
       
   427 		}
       
   428 	aMessage.SetDisposable( ETrue );
       
   429 	aMessage.Complete( err );
       
   430 	}
       
   431 	
       
   432 void CImagePrintSession::SubmitPrintJobL( TMessageWrp2& aMessage )
       
   433 	{
       
   434 	TInt err = Server().ReserveEngine( this );
       
   435 	if( !err )	
       
   436 		{
       
   437 		Server().Engine().SubmitPrintJobL();			
       
   438 		}
       
   439 	aMessage.SetDisposable( ETrue );
       
   440 	aMessage.Complete( err );
       
   441 	}
       
   442 	
       
   443 void CImagePrintSession::CancelPrintJob( TMessageWrp2& aMessage )
       
   444 	{	
       
   445 	TInt err = Server().ReserveEngine( this );
       
   446 	if( !err )	
       
   447 		{
       
   448 		err = Server().Engine().CancelPrintJob();
       
   449 		}
       
   450 	aMessage.SetDisposable( ETrue );
       
   451 	aMessage.Complete( err );
       
   452 	}
       
   453 	
       
   454 void CImagePrintSession::ContinuePrintJobL( TMessageWrp2& aMessage )
       
   455 	{
       
   456 	TInt err = Server().ReserveEngine( this );
       
   457 	if( !err )	
       
   458 		{
       
   459 		err = Server().Engine().ContinuePrintJobL();			
       
   460 		}
       
   461 	aMessage.SetDisposable( ETrue );
       
   462 	aMessage.Complete( err );
       
   463 	}			
       
   464 
       
   465 void CImagePrintSession::RemoveCachedPrinterL( TMessageWrp2& aMessage )
       
   466 	{
       
   467 	TInt err = Server().ReserveEngine( this );
       
   468 	if( !err )	
       
   469 		{
       
   470 		TInt id = aMessage.Int0();
       
   471 		err = Server().Engine().RemoveCachedPrinterL( id );			
       
   472 		}
       
   473 	aMessage.SetDisposable( ETrue );
       
   474 	aMessage.Complete( err );
       
   475 	}				
       
   476 
       
   477 void CImagePrintSession::GetJobTemplateIconL( TMessageWrp2& aMessage )
       
   478 	{
       
   479 	TInt err = Server().ReserveEngine( this );
       
   480 	if( !err )	
       
   481 		{
       
   482 		TInt id = aMessage.Int0();
       
   483 		TInt handle;
       
   484 		err = Server().Engine().GetJobTemplateIconL( id, handle );
       
   485 		TPckgC<TInt> handleDes( handle );
       
   486 		aMessage.WriteL( 1, handleDes );			
       
   487 		}
       
   488 	aMessage.SetDisposable( ETrue );
       
   489 	aMessage.Complete( err );
       
   490 	}
       
   491 
       
   492 void CImagePrintSession::GetNumPreviewPages( TMessageWrp2& aMessage )
       
   493 	{
       
   494 	TInt err = Server().ReserveEngine( this );
       
   495 	aMessage.SetDisposable( ETrue );
       
   496 	if( !err )	
       
   497 		{
       
   498 		TInt num = Server().Engine().GetNumPreviewPages();
       
   499 		aMessage.Complete( num );	
       
   500 		}
       
   501 	else
       
   502 		{
       
   503 		aMessage.Complete( err );	
       
   504 		}
       
   505 	}
       
   506 	
       
   507 void CImagePrintSession::SetJobSettingL( TMessageWrp2& aMessage )
       
   508 	{
       
   509 	TInt err = Server().ReserveEngine( this );
       
   510 	if( !err )	
       
   511 		{
       
   512 		TInt capabilityID = aMessage.Int0();
       
   513 		TInt value = aMessage.Int1();		
       
   514 		TInt affectedCapability;
       
   515 		
       
   516 		LOG2("CImagePrintSession::SetJobSettingL || capabilityID = %d, value = %d", capabilityID, value );
       
   517 		
       
   518 		err = Server().Engine().SetJobSettingL( capabilityID, value, affectedCapability );
       
   519 		TPckgC<TInt> affectedCapabilityDes( affectedCapability );
       
   520 		aMessage.WriteL( 2, affectedCapabilityDes );			
       
   521 		}
       
   522 	aMessage.SetDisposable( ETrue );
       
   523 	aMessage.Complete( err );
       
   524 	}
       
   525 	
       
   526 void CImagePrintSession::GetJobSettingL( TMessageWrp2& aMessage )
       
   527 	{
       
   528 	TInt err = Server().ReserveEngine( this );
       
   529 	if( !err )	
       
   530 		{
       
   531 		TInt capabilityID = aMessage.Int0();
       
   532 		TInt value;		
       
   533 		err = Server().Engine().GetJobSetting( capabilityID, value );
       
   534 		TPckgC<TInt> valueDes( value );
       
   535 		aMessage.WriteL( 1, valueDes );			
       
   536 		}
       
   537 	aMessage.SetDisposable( ETrue );
       
   538 	aMessage.Complete( err );
       
   539 	}			
       
   540 	
       
   541 void CImagePrintSession::GetPrinterCapabilityL( TMessageWrp2& aMessage )
       
   542 	{
       
   543 	TInt err = Server().ReserveEngine( this );
       
   544 	if( !err )	
       
   545 		{
       
   546 		TInt printerID = aMessage.Int0();
       
   547 		TInt capabilityID = aMessage.Int1();	
       
   548 		err = Server().Engine().GetPrinterCapabilityL( printerID, capabilityID, iCapability );
       
   549 		}
       
   550 	aMessage.SetDisposable( ETrue );
       
   551 	aMessage.Complete( err );	
       
   552 	}
       
   553 	
       
   554 void CImagePrintSession::GetPrinterCapIdL( TMessageWrp2& aMessage )
       
   555 	{
       
   556 	TInt err = Server().ReserveEngine( this );
       
   557 	if( !err )	
       
   558 		{		
       
   559 		TPckgC<TInt> capIdDes( iCapability.iCapabilityID );
       
   560 		aMessage.WriteL( 0, capIdDes );			
       
   561 		}
       
   562 	aMessage.SetDisposable( ETrue );
       
   563 	aMessage.Complete( err );	
       
   564 	}
       
   565 
       
   566 void CImagePrintSession::GetPrinterCapTypeL( TMessageWrp2& aMessage )
       
   567 	{
       
   568 	TInt err = Server().ReserveEngine( this );
       
   569 	if( !err )	
       
   570 		{		
       
   571 		TPckgC<TInt> typeDes( iCapability.iType );
       
   572 		aMessage.WriteL( 0, typeDes );			
       
   573 		}
       
   574 	aMessage.SetDisposable( ETrue );
       
   575 	aMessage.Complete( err );	
       
   576 	}
       
   577 
       
   578 void CImagePrintSession::GetPrinterCapDefL( TMessageWrp2& aMessage )
       
   579 	{
       
   580 	TInt err = Server().ReserveEngine( this );
       
   581 	if( !err )	
       
   582 		{		
       
   583 		TPckgC<TInt> defDes( iCapability.iDefaultValue );
       
   584 		aMessage.WriteL( 0, defDes );			
       
   585 		}
       
   586 	aMessage.SetDisposable( ETrue );
       
   587 	aMessage.Complete( err );	
       
   588 	}
       
   589 
       
   590 void CImagePrintSession::GetPrinterCapLowL( TMessageWrp2& aMessage )
       
   591 	{
       
   592 	TInt err = Server().ReserveEngine( this );
       
   593 	if( !err )	
       
   594 		{		
       
   595 		TPckgC<TInt> lowDes( iCapability.iLow );
       
   596 		aMessage.WriteL( 0, lowDes );			
       
   597 		}
       
   598 	aMessage.SetDisposable( ETrue );
       
   599 	aMessage.Complete( err );	
       
   600 	}
       
   601 
       
   602 void CImagePrintSession::GetPrinterCapHighL( TMessageWrp2& aMessage )
       
   603 	{
       
   604 	TInt err = Server().ReserveEngine( this );
       
   605 	if( !err )	
       
   606 		{		
       
   607 		TPckgC<TInt> highDes( iCapability.iHigh );
       
   608 		aMessage.WriteL( 0, highDes );			
       
   609 		}
       
   610 	aMessage.SetDisposable( ETrue );
       
   611 	aMessage.Complete( err );	
       
   612 	}
       
   613 
       
   614 void CImagePrintSession::GetPrinterCapEnumCountL( TMessageWrp2& aMessage )
       
   615 	{
       
   616 	TInt err = Server().ReserveEngine( this );
       
   617 	if( !err )	
       
   618 		{		
       
   619 		TPckgC<TInt> countDes( iCapability.iEnumCount );
       
   620 		aMessage.WriteL( 0, countDes );			
       
   621 		}
       
   622 	aMessage.SetDisposable( ETrue );
       
   623 	aMessage.Complete( err );	
       
   624 	}
       
   625 
       
   626 void CImagePrintSession::GetPrinterCapEnumL( TMessageWrp2& aMessage )	
       
   627 	{
       
   628 	TInt err = Server().ReserveEngine( this );
       
   629 	if( !err )	
       
   630 		{
       
   631 		TInt index = aMessage.Int0();		
       
   632 		TPckgC<TInt> enumDes( iCapability.iEnumCodes[index] );
       
   633 		aMessage.WriteL( 1, enumDes );			
       
   634 		}
       
   635 	aMessage.SetDisposable( ETrue );
       
   636 	aMessage.Complete( err );	
       
   637 	}
       
   638 	
       
   639 
       
   640 void CImagePrintSession::GetPrinterCapabilityIDsCountL( TMessageWrp2& aMessage )
       
   641 	{
       
   642 	TInt err = Server().ReserveEngine( this );
       
   643 	if( !err )
       
   644 		{
       
   645 		iCapabilityIDs.Reset();
       
   646 		TInt printerID = aMessage.Int0();	
       
   647 		err = Server().Engine().GetPrinterCapabilityIDsL( printerID, iCapabilityIDs );
       
   648 		if( !err )
       
   649 			{
       
   650 			TInt count = iCapabilityIDs.Count();
       
   651 			TPckgC<TInt> countDes( count );
       
   652 			aMessage.WriteL( 1, countDes );	
       
   653 			}
       
   654 		}
       
   655 	aMessage.SetDisposable( ETrue );
       
   656 	aMessage.Complete( err );	
       
   657 	}
       
   658 
       
   659 void CImagePrintSession::GetPrinterCapabilityIDL( TMessageWrp2& aMessage )
       
   660 	{
       
   661 	TInt err = Server().ReserveEngine( this );
       
   662 	if( !err )
       
   663 		{
       
   664 		TInt index = aMessage.Int0();
       
   665 		TInt id = iCapabilityIDs[index];
       
   666 		TPckgC<TInt> idDes( id );
       
   667 		aMessage.WriteL( 1, idDes );
       
   668 		}
       
   669 	aMessage.SetDisposable( ETrue );
       
   670 	aMessage.Complete( err );
       
   671 	}
       
   672 	
       
   673 void CImagePrintSession::RegisterIdleObserverL( TMessageWrp2& aMessage )
       
   674 	{
       
   675 	iIdleGuard->Guard( aMessage );	
       
   676 	}
       
   677 	
       
   678 void CImagePrintSession::CancelRegisterIdleObserverL( TMessageWrp2& aMessage )
       
   679 	{
       
   680 	TInt err = Server().ReserveEngine( this );
       
   681 	if( !err )	
       
   682 		{
       
   683 		iIdleGuard->Stop();					
       
   684 		}
       
   685 	aMessage.SetDisposable( ETrue );
       
   686 	aMessage.Complete( err );			
       
   687 	}	
       
   688 	
       
   689 void CImagePrintSession::StartDiscoveryL( TMessageWrp2& aMessage )
       
   690 	{
       
   691 	TInt err = iDiscoveryGuard->StartL( aMessage );
       
   692 	aMessage.SetDisposable( ETrue );
       
   693 	aMessage.Complete( err );	
       
   694 	}
       
   695 
       
   696 void CImagePrintSession::ContinueDiscoveryL( TMessageWrp2& aMessage )
       
   697 	{
       
   698 	iDiscoveryGuard->ContinueL( aMessage );	
       
   699 	}
       
   700 	
       
   701 void CImagePrintSession::PrepareJobL( TMessageWrp2& aMessage )
       
   702 	{
       
   703 	iJobGuard->PrepareL( aMessage );
       
   704 	aMessage.SetDisposable( ETrue );
       
   705 	aMessage.Complete( KErrNone );
       
   706 	}
       
   707 
       
   708 void CImagePrintSession::CreateJobL( TMessageWrp2& aMessage )
       
   709 	{
       
   710 	TInt err = iJobGuard->CreateL( aMessage );
       
   711 	aMessage.SetDisposable( ETrue );
       
   712 	aMessage.Complete( err );
       
   713 	}
       
   714 	
       
   715 void CImagePrintSession::ContinueCreateJobL( TMessageWrp2& aMessage )
       
   716 	{
       
   717 	iJobGuard->ContinueCreateL( aMessage );
       
   718 	}
       
   719 	
       
   720 void CImagePrintSession::CancelStartDiscoveryL( TMessageWrp2& aMessage )
       
   721 	{
       
   722 	TInt err = Server().ReserveEngine( this );
       
   723 	if( !err )	
       
   724 		{
       
   725 		iDiscoveryGuard->Stop();					
       
   726 		}
       
   727 	aMessage.SetDisposable( ETrue );
       
   728 	aMessage.Complete( err );	
       
   729 	}
       
   730 
       
   731 void CImagePrintSession::CancelCreateJobL( TMessageWrp2& aMessage )
       
   732 	{
       
   733 	TInt err = Server().ReserveEngine( this );
       
   734 	if( !err )	
       
   735 		{
       
   736 		iJobGuard->Stop();					
       
   737 		}
       
   738 	aMessage.SetDisposable( ETrue );
       
   739 	aMessage.Complete( err );	
       
   740 	}
       
   741 	
       
   742 void CImagePrintSession::IsPictBridgeModeL( TMessageWrp2& aMessage )
       
   743 	{
       
   744 		RUsb usbManager;
       
   745 		TUsbDeviceState dState;
       
   746 		TInt personality;
       
   747 		TInt err = EFalse;
       
   748 		User::LeaveIfError( usbManager.Connect());
       
   749 		User::LeaveIfError( usbManager.GetDeviceState(dState));
       
   750 		User::LeaveIfError( usbManager.GetCurrentPersonalityId(personality));
       
   751 		usbManager.Close();
       
   752 		
       
   753 		/* 
       
   754 		*	If there is some problems with pictbridge, check from usbpersonalityids.h that constants haven't been changed.
       
   755 		*/
       
   756         if( dState == EUsbDeviceStateConfigured && 
       
   757                 ((personality == KUsbPersonalityIdMTP)||(personality == KUsbPersonalityIdPCSuiteMTP)))
       
   758 			err = ETrue;		
       
   759 
       
   760 		aMessage.SetDisposable( ETrue );
       
   761 		aMessage.Complete( err );
       
   762 	}	
       
   763 
       
   764 void CImagePrintSession::SetNumberOfCopiesCountL( TMessageWrp2& aMessage )
       
   765 	{
       
   766 	LOG("CImagePrintSession::CheckNumberOfCopiesL begin");
       
   767 	TInt count = aMessage.Int0();
       
   768 	LOG1("CImagePrintSession::CheckNumberOfCopiesL count: %d", count);
       
   769 	TInt err = ( count > 0 ) ? KErrNone : KErrInvalidData;
       
   770 	if( !err )
       
   771 		{
       
   772 		iNumOfCopies->Reset( count );
       
   773 		}					
       
   774 	LOG1("CImagePrintSession::CheckNumberOfCopiesL return: %d", err);
       
   775 	aMessage.SetDisposable( ETrue );	
       
   776 	aMessage.Complete( err );
       
   777 	}
       
   778 
       
   779 void CImagePrintSession::SetNumberOfCopiesL( TMessageWrp2& aMessage )
       
   780 	{
       
   781 	LOG("CImagePrintSession::SetNumberOfCopiesL begin");
       
   782 	TInt copies = aMessage.Int0();
       
   783 	LOG1("CImagePrintSession::SetNumberOfCopiesL copies: %d", copies);	
       
   784 	TInt err = ( copies < 0 ) ? KErrInvalidData : KErrNone;
       
   785 	if( !err )
       
   786 		{
       
   787 		TBool full;
       
   788 		iNumOfCopies->AddNumOfCopyL( copies, full );
       
   789 		LOG1("CImagePrintSession::SetNumberOfCopiesL full: %d", full);
       
   790 		if( full )
       
   791 			{
       
   792 			Server().Engine().SetNumsOfCopiesL( iNumOfCopies->NumsOfCopies(), err );	
       
   793 			}						
       
   794 		}	
       
   795 	LOG1("CImagePrintSession::SetNumberOfCopiesL return: %d", err);
       
   796 	aMessage.SetDisposable( ETrue );	
       
   797 	aMessage.Complete( err );
       
   798 	}
       
   799 
       
   800 //  End of File