--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsscriptreceiver.cpp Fri Jun 11 14:27:06 2010 +0300
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2006, 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This class implements the dps script receiving function.
+*
+*/
+
+
+#include <e32debug.h>
+#include <f32file.h>
+#include "dpsscriptreceiver.h"
+#include "dpsstatemachine.h"
+#include "pictbridge.h"
+#include "dpsconst.h"
+
+#ifdef _DEBUG
+# define IF_DEBUG(t) {RDebug::t;}
+#else
+# define IF_DEBUG(t)
+#endif
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CDpsScriptReceiver* CDpsScriptReceiver::NewL(CDpsStateMachine* aOperator)
+ {
+ IF_DEBUG(Print(_L("CDpsScriptReceiver::NewL")));
+ CDpsScriptReceiver* self = new(ELeave) CDpsScriptReceiver(aOperator);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CDpsScriptReceiver::CDpsScriptReceiver(CDpsStateMachine* aOperator) :
+ CActive(EPriorityNormal), iOperator(aOperator),
+ iFileNameAndPath(KDpsHostResponseFileName)
+ {
+ IF_DEBUG(Print(_L(">>>CDpsScriptReceiver::Ctor")));
+ CActiveScheduler::Add(this);
+ WaitForReceive();
+ IF_DEBUG(Print(_L("<<<CDpsScriptReceiver::Ctor")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CDpsScriptReceiver::~CDpsScriptReceiver()
+ {
+ IF_DEBUG(Print(_L(">>>~CDpsScriptReceiver")));
+ Cancel();
+ IF_DEBUG(Print(_L("<<<~CDpsScriptReceiver")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CDpsScriptReceiver::WaitForReceive()
+ {
+ IF_DEBUG(Print(_L(">>>CDpsScriptReceiver::WaitForReceive")));
+ if (!IsActive())
+ {
+ iOperator->DpsEngine()->Ptp().ObjectReceivedNotify(KDpsScriptFile,
+ iFileNameAndPath, iStatus, EFalse);
+ SetActive();
+ }
+ IF_DEBUG(Print(_L("<<<CDpsScriptReceiver::WaitForReceive")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDpsScriptReceiver::GetFileName(TDes& aFileName)
+ {
+ TParse p;
+ TInt err = p.Set(iFileNameAndPath, NULL, NULL);
+ if (KErrNone == err)
+ {
+ aFileName.Copy(p.NameAndExt());
+ }
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+const TDesC& CDpsScriptReceiver::FileNameAndPath()
+ {
+ return iFileNameAndPath;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CDpsScriptReceiver::RunL()
+ {
+ IF_DEBUG(Print(_L(">>>CDpsScriptReceiver::RunL %S"), &iFileNameAndPath));
+ // in the certain error case, it is possible that the printer sending
+ // the device status before the UI is ready to receive this event.
+ // in this case, pictbridge engine still does not get the ptp folder
+ // setting from the stack.
+ // if we receive script from host, the stack has started. so we check if
+ // we already get the ptp folder here.
+ if (!iOperator->DpsEngine()->DpsFolder().Length())
+ {
+ iOperator->DpsEngine()->SetDpsFolder(
+ iOperator->DpsEngine()->Ptp().PtpFolder());
+ }
+ if (KErrNone == iStatus.Int())
+ {
+ TFileName receive;
+ User::LeaveIfError(GetFileName(receive));
+ IF_DEBUG(Print(_L("received file is %S"), &receive));
+ // reply from Host is received
+ if (!receive.Compare(KDpsHostResponseFileName))
+ {
+ iOperator->ScriptReceivedNotifyL(ETrue);
+ }
+ // request from Host is received
+ else if (!receive.Compare(KDpsHostRequestFileName))
+ {
+ iOperator->ScriptReceivedNotifyL(EFalse);
+ }
+ WaitForReceive();
+ }
+ else
+ {
+ IF_DEBUG(Print(_L("the iStatus is wrong!!! %d"), iStatus.Int()));
+ iOperator->Error(iStatus.Int());
+ }
+ IF_DEBUG(Print(_L("<<<CDpsScriptReceiver::RunL")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CDpsScriptReceiver::DoCancel()
+ {
+ IF_DEBUG(Print(_L(">>>CDpsScriptReceiver::DoCancel")));
+ iOperator->DpsEngine()->Ptp().CancelObjectReceivedNotify();
+ IF_DEBUG(Print(_L("<<<CDpsScriptReceiver::DoCancel")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CDpsScriptReceiver::RunError(TInt aError)
+ {
+ IF_DEBUG(Print(_L(">>>CDpsScriptReceiver::RunError is %d"), aError));
+ // if error happened cancel the outstanding request
+ Cancel();
+ iOperator->Error(aError);
+ IF_DEBUG(Print(_L("<<<CDpsScriptReceiver::RunError")));
+ return KErrNone;
+ }