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