mtptransports/mtpptpiptransport/ptpipcontroller/src/cptpipcontroller.cpp
changeset 49 c20dd21d1eb4
parent 0 d0791faffa3f
child 52 866b4af7ffbe
equal deleted inserted replaced
41:2c19c7cf5550 49:c20dd21d1eb4
    12 //
    12 //
    13 // Description:
    13 // Description:
    14 //
    14 //
    15 
    15 
    16 #include "cptpipcontroller.h"	// Cptpipcontroller	
    16 #include "cptpipcontroller.h"	// Cptpipcontroller	
       
    17 #include "mtpdebug.h"
    17 
    18 
    18 #include <mtp/tmtptypeuint128.h>
    19 #include <mtp/tmtptypeuint128.h>
    19 #include "ptpipsocketpublish.h"
    20 #include "ptpipsocketpublish.h"
    20 #include <in_sock.h>
    21 #include <in_sock.h>
    21 #include "ptpipprotocolconstants.h"
    22 #include "ptpipprotocolconstants.h"
       
    23 #include "OstTraceDefinitions.h"
       
    24 #ifdef OST_TRACE_COMPILER_IN_USE
       
    25 #include "cptpipcontrollerTraces.h"
       
    26 #endif
       
    27 
    22 
    28 
    23 
    29 
    24  
    30  
    25 _LIT_SECURITY_POLICY_PASS(KAllowReadAll);
    31 _LIT_SECURITY_POLICY_PASS(KAllowReadAll);
    26 _LIT_SECURITY_POLICY_C1(KProcPolicy,ECapability_None);
    32 _LIT_SECURITY_POLICY_C1(KProcPolicy,ECapability_None);
    27 __FLOG_STMT(_LIT8(KComponent,"PTPIPController");)
       
    28 
       
    29 
    33 
    30 #define PTPIP_INIT_COMMAND_REQUEST	1
    34 #define PTPIP_INIT_COMMAND_REQUEST	1
    31 #define PTPIP_INIT_COMMAND_ACK		2
    35 #define PTPIP_INIT_COMMAND_ACK		2
    32 #define PTPIP_INIT_EVENT_REQUEST	3
    36 #define PTPIP_INIT_EVENT_REQUEST	3
    33 #define PTPIP_INIT_FAIL				5
    37 #define PTPIP_INIT_FAIL				5
    41     };
    45     };
    42 
    46 
    43 
    47 
    44 EXPORT_C CPTPIPController* CPTPIPController::NewLC()
    48 EXPORT_C CPTPIPController* CPTPIPController::NewLC()
    45 	{
    49 	{
       
    50 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_NEWLC_ENTRY );
    46 	CPTPIPController* self = new (ELeave) CPTPIPController;
    51 	CPTPIPController* self = new (ELeave) CPTPIPController;
    47 	CleanupStack::PushL(self);
    52 	CleanupStack::PushL(self);
    48 	self->ConstructL();
    53 	self->ConstructL();
       
    54 	OstTraceFunctionExit0( CPTPIPCONTROLLER_NEWLC_EXIT );
    49 	return self;
    55 	return self;
    50 	}
    56 	}
    51 
    57 
    52 /*
    58 /*
    53  Factory Method
    59  Factory Method
    54 */
    60 */
    55 EXPORT_C CPTPIPController* CPTPIPController::NewL()
    61 EXPORT_C CPTPIPController* CPTPIPController::NewL()
    56 	{
    62 	{
       
    63 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_NEWL_ENTRY );
    57 	CPTPIPController* self = CPTPIPController::NewLC();
    64 	CPTPIPController* self = CPTPIPController::NewLC();
    58 	CleanupStack::Pop(1);
    65 	CleanupStack::Pop(1);
       
    66 	OstTraceFunctionExit0( CPTPIPCONTROLLER_NEWL_EXIT );
    59 	return self;
    67 	return self;
    60 	}
    68 	}
    61 
    69 
    62 
    70 
    63 CPTPIPController::CPTPIPController():
    71 CPTPIPController::CPTPIPController():
    64 		CActive(EPriorityStandard),iDeviceGUID()
    72 		CActive(EPriorityStandard),iDeviceGUID()
    65 	{
    73 	{
       
    74 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_CPTPIPCONTROLLER_ENTRY );
    66 	iCtrlState=EIdle;
    75 	iCtrlState=EIdle;
    67 	iTransportId=TUid::Uid(KMTPPTPIPTransportImplementationUid);
    76 	iTransportId=TUid::Uid(KMTPPTPIPTransportImplementationUid);
    68 	iCounter=0;
    77 	iCounter=0;
    69 	CActiveScheduler::Add(this);
    78 	CActiveScheduler::Add(this);
       
    79 	OstTraceFunctionExit0( CPTPIPCONTROLLER_CPTPIPCONTROLLER_EXIT );
    70 	}
    80 	}
    71 
    81 
    72 /*
    82 /*
    73 Creates two PTPIP SocketHandlers and handles the sockets to 
    83 Creates two PTPIP SocketHandlers and handles the sockets to 
    74 PTPIP SocketHandler & loads the Filter plugin.
    84 PTPIP SocketHandler & loads the Filter plugin.
    75 */
    85 */
    76 void CPTPIPController::ConstructL()
    86 void CPTPIPController::ConstructL()
    77 	{
    87 	{
    78    	 __FLOG_OPEN(KMTPSubsystem, KComponent);	 
    88    	 OstTraceFunctionEntry0( CPTPIPCONTROLLER_CONSTRUCTL_ENTRY );	 
    79 	 iCmdHandler = CPTPIPSocketHandler::NewL();
    89 	 iCmdHandler = CPTPIPSocketHandler::NewL();
    80 	 iEvtHandler = CPTPIPSocketHandler::NewL();
    90 	 iEvtHandler = CPTPIPSocketHandler::NewL();
    81 	 iFilter=CPTPIPHostFilterInterface::NewL();
    91 	 iFilter=CPTPIPHostFilterInterface::NewL();
    82 	 iInitCmdAck   = CPTPIPInitCmdAck::NewL(); 
    92 	 iInitCmdAck   = CPTPIPInitCmdAck::NewL(); 
    83 	 iTimer=CPTPIPTimer::NewL(*this);	 
    93 	 iTimer=CPTPIPTimer::NewL(*this);	 
    90 	const TUid KUidMTPRepository = {KUidMTPRepositoryValue};
   100 	const TUid KUidMTPRepository = {KUidMTPRepositoryValue};
    91 	iRepository = CRepository::NewL(KUidMTPRepository);		
   101 	iRepository = CRepository::NewL(KUidMTPRepository);		
    92 	iDeviceFriendlyName = HBufC16::NewL(100);
   102 	iDeviceFriendlyName = HBufC16::NewL(100);
    93 	TPtr16 name = iDeviceFriendlyName->Des();	
   103 	TPtr16 name = iDeviceFriendlyName->Des();	
    94 	TInt result=iRepository->Get(param,name);		
   104 	TInt result=iRepository->Get(param,name);		
       
   105 	OstTraceFunctionExit0( CPTPIPCONTROLLER_CONSTRUCTL_EXIT );
    95 	}
   106 	}
    96 
   107 
    97 /*
   108 /*
    98 Destructor
   109 Destructor
    99 */
   110 */
   100 EXPORT_C CPTPIPController::~CPTPIPController()
   111 EXPORT_C CPTPIPController::~CPTPIPController()
   101 	{
   112 	{
       
   113 	OstTraceFunctionEntry0( DUP1_CPTPIPCONTROLLER_CPTPIPCONTROLLER_ENTRY );
   102 	delete iCmdHandler;
   114 	delete iCmdHandler;
   103    	delete iEvtHandler;
   115    	delete iEvtHandler;
   104    	delete iFilter; 
   116    	delete iFilter; 
   105    	delete iTimer;
   117    	delete iTimer;
   106    	delete iDeviceFriendlyName;  
   118    	delete iDeviceFriendlyName;  
   109 	delete iInitCmdAck;
   121 	delete iInitCmdAck;
   110    	iMTP.Close();
   122    	iMTP.Close();
   111 	iIsConnectedToMTP = EFalse;
   123 	iIsConnectedToMTP = EFalse;
   112 	iProperty.Close();
   124 	iProperty.Close();
   113 	iConnectionState.Close();
   125 	iConnectionState.Close();
   114    	__FLOG_CLOSE;
   126 	OstTraceFunctionExit0( DUP1_CPTPIPCONTROLLER_CPTPIPCONTROLLER_EXIT );
   115 	}
   127 	}
   116 
   128 
   117 
   129 
   118 
   130 
   119 EXPORT_C RSocket& CPTPIPController::NewSocketL()
   131 EXPORT_C RSocket& CPTPIPController::NewSocketL()
   120 	{
   132 	{
       
   133 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_NEWSOCKETL_ENTRY );
   121 	iCounter++;
   134 	iCounter++;
   122 	if(iCounter==1)
   135 	if(iCounter==1)
   123 	return iCmdHandler->Socket();
   136 	return iCmdHandler->Socket();
   124 	else if(iCounter==2)
   137 	else if(iCounter==2)
   125 	return iEvtHandler->Socket();
   138 	return iEvtHandler->Socket();
   129 	 //the same socket that we have given him third time.
   142 	 //the same socket that we have given him third time.
   130 	
   143 	
   131 	}
   144 	}
   132 TInt  CPTPIPController::CheckMTPConnection()
   145 TInt  CPTPIPController::CheckMTPConnection()
   133 {
   146 {
       
   147 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_CHECKMTPCONNECTION_ENTRY );
   134 	TInt error = KErrNone;
   148 	TInt error = KErrNone;
   135 	if(iIsConnectedToMTP == EFalse)
   149 	if(iIsConnectedToMTP == EFalse)
   136 		{
   150 		{
   137 		error = iMTP.Connect();	
   151 		error = iMTP.Connect();	
   138 		}	
   152 		}	
   139 	if(error ==KErrNone) 
   153 	if(error ==KErrNone) 
   140 		{
   154 		{
   141 		iIsConnectedToMTP = ETrue;		
   155 		iIsConnectedToMTP = ETrue;		
   142 		error = iMTP.IsAvailable(iTransportId);
   156 		error = iMTP.IsAvailable(iTransportId);
   143 		}
   157 		}
       
   158     OstTraceFunctionExit0( CPTPIPCONTROLLER_CHECKMTPCONNECTION_EXIT );
   144     return error;
   159     return error;
   145 }
   160 }
   146 /*
   161 /*
   147 Validates the socket connection based on the current value of iCtrlState
   162 Validates the socket connection based on the current value of iCtrlState
   148 @return ETrue on succes EFalse on failure*/
   163 @return ETrue on succes EFalse on failure*/
   149 TBool CPTPIPController::Validate()
   164 TBool CPTPIPController::Validate()
   150 	{
   165 	{
       
   166 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_VALIDATE_ENTRY );
   151 	if(iCtrlState==EIdle || iCtrlState==EInitEvtAwaited)
   167 	if(iCtrlState==EIdle || iCtrlState==EInitEvtAwaited)
   152 	return ETrue;
   168 	return ETrue;
   153 	else 
   169 	else
   154 	return EFalse;
   170 	return EFalse;
   155 	}
   171 	}
   156 
   172 
   157 
   173 
   158 /*Saves the CommandSocket and EventSocket;The respective SocketHandlers are given the sockets
   174 /*Saves the CommandSocket and EventSocket;The respective SocketHandlers are given the sockets
   160  @param aSocket Pointer to socket
   176  @param aSocket Pointer to socket
   161  @param TRequestStatus of the caller i.e., CPTPIPAgent
   177  @param TRequestStatus of the caller i.e., CPTPIPAgent
   162 */ 
   178 */ 
   163 EXPORT_C void CPTPIPController::SocketAccepted(TRequestStatus& aStatus)
   179 EXPORT_C void CPTPIPController::SocketAccepted(TRequestStatus& aStatus)
   164 	{
   180 	{
       
   181    	OstTraceFunctionEntry0( CPTPIPCONTROLLER_SOCKETACCEPTED_ENTRY );
   165    	iCallerStatus=&aStatus;
   182    	iCallerStatus=&aStatus;
   166    	aStatus=KRequestPending;    	   		
   183    	aStatus=KRequestPending;    	   		
   167 	TBool result=Validate();
   184 	TBool result=Validate();
   168 	if(result==EFalse)
   185 	if(result==EFalse)
   169 		{
   186 		{
   170 		User::RequestComplete(iCallerStatus,KErrServerBusy);
   187 		User::RequestComplete(iCallerStatus,KErrServerBusy);
       
   188 		OstTraceFunctionExit0( CPTPIPCONTROLLER_SOCKETACCEPTED_EXIT );
   171 		return;
   189 		return;
   172 		}
   190 		}
   173 	
   191 	
   174     if(iCtrlState==EInitEvtAwaited)  
   192     if(iCtrlState==EInitEvtAwaited)  
   175     	{ // we are not gracefully rejecting a new PTPIP connection from other  host
   193     	{ // we are not gracefully rejecting a new PTPIP connection from other  host
   176     	  // as of now just socket closed.
   194     	  // as of now just socket closed.
   177         if(CompareHost(iEvtHandler->Socket())==EFalse)
   195         if(CompareHost(iEvtHandler->Socket())==EFalse)
   178         	{       
   196         	{       
   179         	User::RequestComplete(iCallerStatus,KErrServerBusy);	
   197         	User::RequestComplete(iCallerStatus,KErrServerBusy);	
       
   198         	OstTraceFunctionExit0( DUP1_CPTPIPCONTROLLER_SOCKETACCEPTED_EXIT );
   180         	return;
   199         	return;
   181  			}
   200  			}
   182     	}
   201     	}
   183 	if(iCtrlState==EPTPIPConnected)  
   202 	if(iCtrlState==EPTPIPConnected)  
   184     	{ 
   203     	{ 
   200       	{        
   219       	{        
   201        	iCtrlState = EInitEvtAwaited;
   220        	iCtrlState = EInitEvtAwaited;
   202       	}
   221       	}
   203       	
   222       	
   204       Schedule();        
   223       Schedule();        
       
   224 	OstTraceFunctionExit0( DUP2_CPTPIPCONTROLLER_SOCKETACCEPTED_EXIT );
   205 	}
   225 	}
   206 	
   226 	
   207 	
   227 	
   208 /*
   228 /*
   209 Compares whether the second connection request is from the same remote host
   229 Compares whether the second connection request is from the same remote host
   210 @param returns ETrue if the second request comes from the same host
   230 @param returns ETrue if the second request comes from the same host
   211 */	
   231 */	
   212 TBool CPTPIPController::CompareHost(RSocket& aSocket)
   232 TBool CPTPIPController::CompareHost(RSocket& aSocket)
   213 	{
   233 	{
       
   234      OstTraceFunctionEntry0( CPTPIPCONTROLLER_COMPAREHOST_ENTRY );
   214      
   235      
   215 	TInetAddr  thisaddr, newAddr;
   236 	TInetAddr  thisaddr, newAddr;
   216      
   237      
   217     iCmdHandler->Socket().RemoteName(thisaddr);     
   238     iCmdHandler->Socket().RemoteName(thisaddr);     
   218 	aSocket.RemoteName(newAddr);	
   239 	aSocket.RemoteName(newAddr);	
   219     if(newAddr.Address() == thisaddr.Address())
   240     if(newAddr.Address() == thisaddr.Address())
   220     	{
   241     	{
       
   242 		OstTraceFunctionExit0( CPTPIPCONTROLLER_COMPAREHOST_EXIT );
   221 		return ETrue;
   243 		return ETrue;
   222     	}
   244     	}
   223     else
   245     else
   224     	{
   246     	{
       
   247    	 	OstTraceFunctionExit0( DUP1_CPTPIPCONTROLLER_COMPAREHOST_EXIT );
   225    	 	return EFalse;
   248    	 	return EFalse;
   226     	}
   249     	}
   227 
   250 
   228 	}		
   251 	}		
   229 			
   252 			
   230 /**
   253 /**
   231 Schedules the next request phase or event.
   254 Schedules the next request phase or event.
   232 */
   255 */
   233 void CPTPIPController::Schedule()
   256 void CPTPIPController::Schedule()
   234 	{	 
   257 	{	 
       
   258  	OstTraceFunctionEntry0( CPTPIPCONTROLLER_SCHEDULE_ENTRY );
   235  	iStatus = KRequestPending; 
   259  	iStatus = KRequestPending; 
   236  	TRequestStatus* status(&iStatus);  
   260  	TRequestStatus* status(&iStatus);  
   237     SetActive();
   261     SetActive();
   238     User::RequestComplete(status, KErrNone);	 
   262     User::RequestComplete(status, KErrNone);	 
       
   263 	OstTraceFunctionExit0( CPTPIPCONTROLLER_SCHEDULE_EXIT );
   239 	}
   264 	}
   240 
   265 
   241 /*
   266 /*
   242  Defines the two socket names to be published
   267  Defines the two socket names to be published
   243  @return one of the system wide error codes on failure
   268  @return one of the system wide error codes on failure
   244 */
   269 */
   245 TInt  CPTPIPController::PublishSocketNamePair()
   270 TInt  CPTPIPController::PublishSocketNamePair()
   246 	{
   271 	{
       
   272 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_PUBLISHSOCKETNAMEPAIR_ENTRY );
   247 	TName iCommandSocketSysName,iEventSocketSysName;			  
   273 	TName iCommandSocketSysName,iEventSocketSysName;			  
   248    	iCmdHandler->Socket().Name(iCommandSocketSysName);
   274    	iCmdHandler->Socket().Name(iCommandSocketSysName);
   249    	iEvtHandler->Socket().Name(iEventSocketSysName);
   275    	iEvtHandler->Socket().Name(iEventSocketSysName);
   250 	
   276 	
   251 	
   277 	
   267 	
   293 	
   268 	error=iProperty.Attach(KPropertyUid,EEventSocketName);
   294 	error=iProperty.Attach(KPropertyUid,EEventSocketName);
   269 	
   295 	
   270     error=RProperty::Set(KPropertyUid,EEventSocketName,iEventSocketSysName);  
   296     error=RProperty::Set(KPropertyUid,EEventSocketName,iEventSocketSysName);  
   271 	
   297 	
       
   298 	OstTraceFunctionExit0( CPTPIPCONTROLLER_PUBLISHSOCKETNAMEPAIR_EXIT );
   272 	return error;
   299 	return error;
   273 	}
   300 	}
   274 	
   301 	
   275 
   302 
   276 /*Makes the sockets Transfer enabled
   303 /*Makes the sockets Transfer enabled
   277  @return one of the system wide error codes on failure
   304  @return one of the system wide error codes on failure
   278  */
   305  */
   279 TInt CPTPIPController::EnableSocketTransfer()
   306 TInt CPTPIPController::EnableSocketTransfer()
   280 	{
   307 	{
       
   308 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_ENABLESOCKETTRANSFER_ENTRY );
   281 	TInt err;
   309 	TInt err;
   282 	err = iCmdHandler->Socket().SetOpt(KSOEnableTransfer, KSOLSocket,KProcPolicy().Package());	
   310 	err = iCmdHandler->Socket().SetOpt(KSOEnableTransfer, KSOLSocket,KProcPolicy().Package());	
   283 	
   311 	
   284 	if(err != KErrNone) return err;
   312 	if(err != KErrNone) return err;
   285 	
   313 	
   286 	err = iEvtHandler->Socket().SetOpt(KSOEnableTransfer, KSOLSocket,KProcPolicy().Package());
   314 	err = iEvtHandler->Socket().SetOpt(KSOEnableTransfer, KSOLSocket,KProcPolicy().Package());
   287 	
   315 	
       
   316 	 OstTraceFunctionExit0( CPTPIPCONTROLLER_ENABLESOCKETTRANSFER_EXIT );
   288 	 return err;
   317 	 return err;
   289 	}	
   318 	}	
   290 
   319 
   291 /*
   320 /*
   292 Sets the obtained DeviceGUID as the current DeviceGUID
   321 Sets the obtained DeviceGUID as the current DeviceGUID
   293 @param TDesC8& aDeviceGUID
   322 @param TDesC8& aDeviceGUID
   294 @return TInt KErrArgument if DeviceGUID is invalid or KErrNone
   323 @return TInt KErrArgument if DeviceGUID is invalid or KErrNone
   295 */
   324 */
   296 EXPORT_C TInt CPTPIPController::SetDeviceGUID(TDesC8& aDeviceGUID)
   325 EXPORT_C TInt CPTPIPController::SetDeviceGUID(TDesC8& aDeviceGUID)
   297 	{	     
   326 	{	     
       
   327     OstTraceFunctionEntry0( CPTPIPCONTROLLER_SETDEVICEGUID_ENTRY );
   298     TInt size = aDeviceGUID.Size();
   328     TInt size = aDeviceGUID.Size();
   299     if (size != 16) return KErrArgument;
   329     if (size != 16) return KErrArgument;
   300 	TMTPTypeUint128  guid(aDeviceGUID);	
   330 	TMTPTypeUint128  guid(aDeviceGUID);	
   301 	iDeviceGUID = guid;	
   331 	iDeviceGUID = guid;	
       
   332 	OstTraceFunctionExit0( CPTPIPCONTROLLER_SETDEVICEGUID_EXIT );
   302 	return KErrNone;
   333 	return KErrNone;
   303 	}
   334 	}
   304 
   335 
   305 /*
   336 /*
   306 Sets the obtained DeviceFriendlyName
   337 Sets the obtained DeviceFriendlyName
   307 @param TDesC16* aDeviceGUID
   338 @param TDesC16* aDeviceGUID
   308 */    
   339 */    
   309 EXPORT_C void CPTPIPController::SetDeviceFriendlyName(TDesC16* aDeviceFreindlyName)
   340 EXPORT_C void CPTPIPController::SetDeviceFriendlyName(TDesC16* aDeviceFreindlyName)
   310 	{
   341 	{
       
   342 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_SETDEVICEFRIENDLYNAME_ENTRY );
   311 	delete iDeviceFriendlyName;
   343 	delete iDeviceFriendlyName;
   312 	
   344 	
   313 	TRAPD(err, iDeviceFriendlyName=aDeviceFreindlyName->AllocL());
   345 	TRAPD(err, iDeviceFriendlyName=aDeviceFreindlyName->AllocL());
   314 	
   346 	
   315 	if(err != KErrNone)
   347 	if(err != KErrNone)
   316 		{
   348 		{
   317 		 __FLOG_VA((_L8("CPTPIPController::SetDeviceFriendlyName ERROR = %d\n"), err));	
   349 		OstTrace1( TRACE_NORMAL, CPTPIPCONTROLLER_SETDEVICEFRIENDLYNAME, "CPTPIPController::SetDeviceFriendlyName ERROR = %d\n", err );
   318 		}
   350 		}
   319 	
   351 	
       
   352 	OstTraceFunctionExit0( CPTPIPCONTROLLER_SETDEVICEFRIENDLYNAME_EXIT );
   320 	}
   353 	}
   321 	
   354 	
   322 
   355 
   323 void CPTPIPController::Reset()
   356 void CPTPIPController::Reset()
   324 	{
   357 	{
       
   358 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_RESET_ENTRY );
   325 	iCmdHandler->Socket().Close();
   359 	iCmdHandler->Socket().Close();
   326 	iEvtHandler->Socket().Close();
   360 	iEvtHandler->Socket().Close();
   327 	if(iIsConnectedToMTP)
   361 	if(iIsConnectedToMTP)
   328 	{
   362 	{
   329 	TInt stopStatus=iMTP.StopTransport(iTransportId);
   363 	TInt stopStatus=iMTP.StopTransport(iTransportId);
   330 	if (KErrNone != stopStatus)
   364 	if (KErrNone != stopStatus)
   331 	{
   365 	{
   332 	 __FLOG_VA((_L8("CPTPIPController::Reset ERROR = %d\n"), stopStatus));	
   366 	 OstTrace1( TRACE_NORMAL, CPTPIPCONTROLLER_RESET, "CPTPIPController::Reset ERROR = %d\n", stopStatus );
       
   367 	 
   333 	}	
   368 	}	
   334 		
   369 		
   335 	}
   370 	}
   336 				
   371 				
   337 	iMTP.Close();
   372 	iMTP.Close();
   340 	iCounter=0;
   375 	iCounter=0;
   341 	iIsConnectedToMTP = EFalse;	
   376 	iIsConnectedToMTP = EFalse;	
   342 	iCtrlState = EIdle;	
   377 	iCtrlState = EIdle;	
   343 	iCmdHandler->State()=EReadState;
   378 	iCmdHandler->State()=EReadState;
   344 	iEvtHandler->State()=EReadState;
   379 	iEvtHandler->State()=EReadState;
       
   380 	OstTraceFunctionExit0( CPTPIPCONTROLLER_RESET_EXIT );
   345 	}
   381 	}
   346 
   382 
   347 EXPORT_C void CPTPIPController::StopTransport()
   383 EXPORT_C void CPTPIPController::StopTransport()
   348 	{
   384 	{
       
   385 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_STOPTRANSPORT_ENTRY );
   349 	Reset();
   386 	Reset();
       
   387 	OstTraceFunctionExit0( CPTPIPCONTROLLER_STOPTRANSPORT_EXIT );
   350 	}
   388 	}
   351 
   389 
   352 
   390 
   353 
   391 
   354 void CPTPIPController:: CheckAndHandleErrorL(TInt  aError)
   392 void CPTPIPController:: CheckAndHandleErrorL(TInt  aError)
   355 	{		
   393 	{		
       
   394 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_CHECKANDHANDLEERRORL_ENTRY );
   356 	if(aError != KErrNone)
   395 	if(aError != KErrNone)
   357 		{
   396 		{
   358 		Reset();							
   397 		Reset();							
   359 		__FLOG_VA((_L8("PTPIP Controller CheckAndHandleErrorL, Error = %d"), aError));	
   398 		OstTrace1( TRACE_NORMAL, CPTPIPCONTROLLER_CHECKANDHANDLEERRORL, "PTPIP Controller CheckAndHandleErrorL, Error = %d", aError );
   360 		User::Leave(aError);
   399 		LEAVEIFERROR( aError, 
       
   400 		        OstTrace1( TRACE_ERROR, DUP1_CPTPIPCONTROLLER_CHECKANDHANDLEERRORL, "error code is %d", aError ));
   361 		}
   401 		}
       
   402 	OstTraceFunctionExit0( CPTPIPCONTROLLER_CHECKANDHANDLEERRORL_EXIT );
   362 	}
   403 	}
   363 	
   404 	
   364 void CPTPIPController:: CheckInitFailL(TInt aError)	
   405 void CPTPIPController:: CheckInitFailL(TInt aError)	
   365 	{
   406 	{
       
   407 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_CHECKINITFAILL_ENTRY );
   366 	
   408 	
   367 	TInitFailReason reason = EInitFailUnSpecified;
   409 	TInitFailReason reason = EInitFailUnSpecified;
   368 		
   410 		
   369 	// we send Init fail packet to Initiator on command channel
   411 	// we send Init fail packet to Initiator on command channel
   370 	// even after InitEvent is received.
   412 	// even after InitEvent is received.
   379 		if(iCmdHandler->State()==EWriteState)
   421 		if(iCmdHandler->State()==EWriteState)
   380 		iCmdHandler->WriteToSocket(iInitFailed,iStatus);		
   422 		iCmdHandler->WriteToSocket(iInitFailed,iStatus);		
   381 		else
   423 		else
   382 		iEvtHandler->WriteToSocket(iInitFailed,iStatus);	
   424 		iEvtHandler->WriteToSocket(iInitFailed,iStatus);	
   383 		StartTimer(30);
   425 		StartTimer(30);
   384 		__FLOG_VA((_L8("PTPIP Controller Error, Error = %d"), aError));
   426 		LEAVEIFERROR( aError, 
   385 		User::Leave(aError);					
   427 		        OstTrace1( TRACE_NORMAL, CPTPIPCONTROLLER_CHECKINITFAILL, "PTPIP Controller Error, Error = %d", aError ));				
   386 		}	
   428 		}	
       
   429 	OstTraceFunctionExit0( CPTPIPCONTROLLER_CHECKINITFAILL_EXIT );
   387 	}	
   430 	}	
   388 
   431 
   389 /*
   432 /*
   390 Cause a Time-Out event to occur
   433 Cause a Time-Out event to occur
   391 */
   434 */
   392 EXPORT_C void CPTPIPController::OnTimeOut()
   435 EXPORT_C void CPTPIPController::OnTimeOut()
   393 	{
   436 	{
       
   437 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_ONTIMEOUT_ENTRY );
   394 	TRequestStatus* status(&iStatus);
   438 	TRequestStatus* status(&iStatus);
   395 	User::RequestComplete(status,KErrTimedOut);
   439 	User::RequestComplete(status,KErrTimedOut);
       
   440 	OstTraceFunctionExit0( CPTPIPCONTROLLER_ONTIMEOUT_EXIT );
   396 	}
   441 	}
   397 	
   442 	
   398 void CPTPIPController::StartTimer(TInt aSecond)	
   443 void CPTPIPController::StartTimer(TInt aSecond)	
   399 	{	
   444 	{	
   400 		iTimer->IssueRequest(aSecond);
   445 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_STARTTIMER_ENTRY );
   401 		iStatus = KRequestPending;	
   446 	iTimer->IssueRequest(aSecond);
   402 		SetActive(); 	
   447 	iStatus = KRequestPending;	
       
   448 	SetActive(); 	
       
   449 	OstTraceFunctionExit0( CPTPIPCONTROLLER_STARTTIMER_EXIT );
   403 	}
   450 	}
   404 	
   451 	
   405 void CPTPIPController::RunL()
   452 void CPTPIPController::RunL()
   406 	{
   453 	{
       
   454 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_RUNL_ENTRY );
   407 	
   455 	
   408 	TInt StatusError=iStatus.Int();
   456 	TInt StatusError=iStatus.Int();
   409 		
   457 		
   410 	if(iCmdHandler->IsActive() || iEvtHandler->IsActive())	
   458 	if(iCmdHandler->IsActive() || iEvtHandler->IsActive())	
   411 	{		
   459 	{		
   542 	  		break;  			
   590 	  		break;  			
   543 	  		}
   591 	  		}
   544 
   592 
   545   	} 
   593   	} 
   546  	
   594  	
       
   595 	OstTraceFunctionExit0( CPTPIPCONTROLLER_RUNL_EXIT );
   547 	}
   596 	}
   548 
   597 
   549 /*
   598 /*
   550 Over-ridden to return KErrNone by checking the state of PTPIP Controller
   599 Over-ridden to return KErrNone by checking the state of PTPIP Controller
   551 */
   600 */
   552 TInt CPTPIPController::RunError(TInt aErr)	
   601 TInt CPTPIPController::RunError(TInt aErr)	
   553 	{			
   602 	{			
       
   603    		OstTraceFunctionEntry0( CPTPIPCONTROLLER_RUNERROR_ENTRY );
   554    		if(iCtrlState != EWaitForInitFail)
   604    		if(iCtrlState != EWaitForInitFail)
   555    		{ 
   605    		{ 
   556    		User::RequestComplete(iCallerStatus,aErr);   			
   606    		User::RequestComplete(iCallerStatus,aErr);   			
   557 		iCtrlState = EIdle;
   607 		iCtrlState = EIdle;
   558 		iCmdHandler->State()=EReadState;
   608 		iCmdHandler->State()=EReadState;
   560 		iCounter=0;		
   610 		iCounter=0;		
   561 		iMTP.Close();		
   611 		iMTP.Close();		
   562 		iIsConnectedToMTP = EFalse; 			   	
   612 		iIsConnectedToMTP = EFalse; 			   	
   563    		}
   613    		}
   564    		//Return KErrNone back to RunL()
   614    		//Return KErrNone back to RunL()
       
   615    		OstTraceFunctionExit0( CPTPIPCONTROLLER_RUNERROR_EXIT );
   565    		return KErrNone;
   616    		return KErrNone;
   566 	}
   617 	}
   567 	
   618 	
   568 
   619 
   569 
   620 
   570 
   621 
   571 void CPTPIPController::DoCancel()
   622 void CPTPIPController::DoCancel()
   572 	{
   623 	{
   573 
   624     OstTraceFunctionEntry0( CPTPIPCONTROLLER_DOCANCEL_ENTRY );
       
   625 
       
   626 	OstTraceFunctionExit0( CPTPIPCONTROLLER_DOCANCEL_EXIT );
   574 	}
   627 	}
   575 	
   628 	
   576 TInt CPTPIPController::ParseInitPacketL()
   629 TInt CPTPIPController::ParseInitPacketL()
   577 {
   630 {
       
   631 		OstTraceFunctionEntry0( CPTPIPCONTROLLER_PARSEINITPACKETL_ENTRY );
   578 		TUint32 length(iInitCmdReq->Uint32L(CPTPIPInitCmdRequest::ELength));
   632 		TUint32 length(iInitCmdReq->Uint32L(CPTPIPInitCmdRequest::ELength));
   579 		TUint32 type(iInitCmdReq->Uint32L(CPTPIPInitCmdRequest::EPktType));
   633 		TUint32 type(iInitCmdReq->Uint32L(CPTPIPInitCmdRequest::EPktType));
   580 		if(type != PTPIP_INIT_COMMAND_REQUEST) 
   634 		if(type != PTPIP_INIT_COMMAND_REQUEST) 
   581 			{
   635 			{
       
   636 			OstTraceFunctionExit0( CPTPIPCONTROLLER_PARSEINITPACKETL_EXIT );
   582 			return KErrBadHandle;	
   637 			return KErrBadHandle;	
   583 			}
   638 			}
   584 		
   639 		
   585 		iInitCmdReq->GetL(CPTPIPInitCmdRequest::EInitiatorGUID,iHostGUID);
   640 		iInitCmdReq->GetL(CPTPIPInitCmdRequest::EInitiatorGUID,iHostGUID);
   586 
   641 
   587 
   642 
   588 		TDesC& name = iInitCmdReq->HostFriendlyName();
   643 		TDesC& name = iInitCmdReq->HostFriendlyName();
   589 		iHostFriendlyName = &name;
   644 		iHostFriendlyName = &name;
   590 		TUint32 version(iInitCmdReq->Uint32L(CPTPIPInitCmdRequest::EVersion));
   645 		TUint32 version(iInitCmdReq->Uint32L(CPTPIPInitCmdRequest::EVersion));
       
   646 		OstTraceFunctionExit0( DUP1_CPTPIPCONTROLLER_PARSEINITPACKETL_EXIT );
   591 		return KErrNone;
   647 		return KErrNone;
   592 }
   648 }
   593 
   649 
   594 TInt CPTPIPController::ParseEvtPacket()
   650 TInt CPTPIPController::ParseEvtPacket()
   595 {
   651 {
       
   652 		OstTraceFunctionEntry0( CPTPIPCONTROLLER_PARSEEVTPACKET_ENTRY );
   596 		TUint32 length(iInitEvtReq.Uint32(TPTPIPInitEvtRequest::ELength));
   653 		TUint32 length(iInitEvtReq.Uint32(TPTPIPInitEvtRequest::ELength));
   597 		TUint32 type(iInitEvtReq.Uint32(TPTPIPInitEvtRequest::EType));	
   654 		TUint32 type(iInitEvtReq.Uint32(TPTPIPInitEvtRequest::EType));	
   598 		if(type != PTPIP_INIT_EVENT_REQUEST) return KErrBadHandle;
   655 		if(type != PTPIP_INIT_EVENT_REQUEST) return KErrBadHandle;
   599 		TUint32 conNumber(iInitEvtReq.Uint32(TPTPIPInitEvtRequest::EconNumber));	
   656 		TUint32 conNumber(iInitEvtReq.Uint32(TPTPIPInitEvtRequest::EconNumber));	
   600 		if(conNumber !=PTPIP_FIXED_CONNECTION_ID)
   657 		if(conNumber !=PTPIP_FIXED_CONNECTION_ID)
   601 			{ 
   658 			{ 
   602 			// We are supporting only one connection,So connection Id is fixed.
   659 			// We are supporting only one connection,So connection Id is fixed.
       
   660 			OstTraceFunctionExit0( CPTPIPCONTROLLER_PARSEEVTPACKET_EXIT );
   603 			return KErrBadHandle;
   661 			return KErrBadHandle;
   604 			}
   662 			}
   605 
   663 
       
   664 		OstTraceFunctionExit0( DUP1_CPTPIPCONTROLLER_PARSEEVTPACKET_EXIT );
   606 		return KErrNone;
   665 		return KErrNone;
   607 }
   666 }
   608 void CPTPIPController::BuildInitAckL()
   667 void CPTPIPController::BuildInitAckL()
   609 {	
   668 {	
       
   669 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_BUILDINITACKL_ENTRY );
   610 	iInitCmdAck->SetUint32L(CPTPIPInitCmdAck::EPktType,PTPIP_INIT_COMMAND_ACK);
   670 	iInitCmdAck->SetUint32L(CPTPIPInitCmdAck::EPktType,PTPIP_INIT_COMMAND_ACK);
   611 	// We are supporting only one connection,So connection Id is fixed
   671 	// We are supporting only one connection,So connection Id is fixed
   612 	iInitCmdAck->SetUint32L(CPTPIPInitCmdAck::EConNumber,PTPIP_FIXED_CONNECTION_ID);
   672 	iInitCmdAck->SetUint32L(CPTPIPInitCmdAck::EConNumber,PTPIP_FIXED_CONNECTION_ID);
   613 
   673 
   614 	iInitCmdAck->SetL(CPTPIPInitCmdAck::EResponderGUID,iDeviceGUID);
   674 	iInitCmdAck->SetL(CPTPIPInitCmdAck::EResponderGUID,iDeviceGUID);
   615 
   675 
   616 	iInitCmdAck->SetDeviceFriendlyName(*iDeviceFriendlyName);
   676 	iInitCmdAck->SetDeviceFriendlyName(*iDeviceFriendlyName);
   617 	iInitCmdAck->SetUint32L(CPTPIPInitCmdAck::EVersion,PTPIP_PRPTOCOL_VERSION);
   677 	iInitCmdAck->SetUint32L(CPTPIPInitCmdAck::EVersion,PTPIP_PRPTOCOL_VERSION);
   618 	TUint64 size =  iInitCmdAck->Size();
   678 	TUint64 size =  iInitCmdAck->Size();
   619 	iInitCmdAck->SetUint32L(CPTPIPInitCmdAck::ELength,(TUint32)size);	
   679 	iInitCmdAck->SetUint32L(CPTPIPInitCmdAck::ELength,(TUint32)size);	
       
   680 	OstTraceFunctionExit0( CPTPIPCONTROLLER_BUILDINITACKL_EXIT );
   620 }
   681 }
   621 
   682 
   622 void CPTPIPController::BuildInitFailL(TInitFailReason aReason)
   683 void CPTPIPController::BuildInitFailL(TInitFailReason aReason)
   623 {	
   684 {	
       
   685 	OstTraceFunctionEntry0( CPTPIPCONTROLLER_BUILDINITFAILL_ENTRY );
   624 	iInitFailed.SetUint32(TPTPIPInitFailed::ELength,iInitFailed.Size());
   686 	iInitFailed.SetUint32(TPTPIPInitFailed::ELength,iInitFailed.Size());
   625 	iInitFailed.SetUint32(TPTPIPInitFailed::EType,PTPIP_INIT_FAIL);
   687 	iInitFailed.SetUint32(TPTPIPInitFailed::EType,PTPIP_INIT_FAIL);
   626 	iInitFailed.SetUint32(TPTPIPInitFailed::EReason,aReason);		
   688 	iInitFailed.SetUint32(TPTPIPInitFailed::EReason,aReason);		
       
   689 	OstTraceFunctionExit0( CPTPIPCONTROLLER_BUILDINITFAILL_EXIT );
   627 }
   690 }
   628 
   691 
   629 TBool E32Dll()
   692 TBool E32Dll()
   630 {
   693 {
       
   694 	OstTraceFunctionEntry0( _E32DLL_ENTRY );
       
   695 	OstTraceFunctionExit0( _E32DLL_EXIT );
   631 	return ETrue;
   696 	return ETrue;
   632 }
   697 }
   633 
   698 
   634 
   699 
   635 
   700