void CSmsSnapshotImpl::Error(TInt aCode, const TDesC& aDescription)
{
	CALLSTACKITEM_N(_CL("CSmsSnapshotImpl"), _CL("Error"));

	if (iDeleting) return;

	iRetryCount++;
	if (iRetryCount<=5) {
		iSnapShot->TakeSnapShot(DataDir(), this);
		cb->status_change(aDescription);
		cb->status_change(_L("retrying snapshot"));
		return;
	}

	TSendTo t=iToBeSend->Pop();
	auto_ptr<HBufC> b(HBufC::NewL(aDescription.Length()+30+t.iBody.Length()));
	b->Des().Append(_L("Failed to take picture: "));
	b->Des().Append(aDescription);
	b->Des().Append(_L(" for "));
	b->Des().Append(t.iBody);
#ifndef TESTING
	if (t.iTo.Length()>0)
		iMMS->SendMessage(t.iTo, *b, _L(""), t.iBody, false);
#endif

	b->Des().Zero();
	b->Des().Append(aDescription);
	b->Des().Append(_L(": "));
	b->Des().AppendNum(aCode);
	cb->error(*b);
}
void CBBListenerImpl::WriteAckL()
{
	CALLSTACKITEM_N(_CL("CBBListenerImpl"), _CL("WriteAckL"));
	TUint ack=iToAck->Top();
	TBuf<100> xml=_L("<ack><id>");
	xml.AppendNum(ack);
	xml.Append(_L("</id></ack>\n"));
	iProtocol->WriteL(xml);
	iToAck->Pop();
}
void CSmsSnapshotImpl::TakenL(const TDesC& aFileName)
{
	CALLSTACKITEM_N(_CL("CSmsSnapshotImpl"), _CL("TakenL"));

	TFileName recfilename=aFileName;
	recfilename.Replace(recfilename.Length()-3, 3, _L("amr"));

	iState=_L("create array");
	auto_ptr<CDesCArrayFlat> a(new (ELeave) CDesCArrayFlat(2));
	a->AppendL(aFileName);

	if (BaflUtils::FileExists(Fs(), recfilename))
		a->AppendL(recfilename);

	TSendTo t=iToBeSend->Pop();
#ifndef TESTING

	iState=_L("send MMS");
	auto_ptr<HBufC> b(HBufC::NewL(t.iBody.Length()+t.iTo.Length()+10));
	b->Des().Append(t.iBody);
	if (t.iTo.Length()>0) {
		cb->status_change(_L("sending MMS"));
		iMMS->SendMessage(t.iTo, *b, *a, t.iBody, false);

		b->Des().Append(_L(" from "));
		b->Des().Append(t.iTo);
	}

	iState=_L("makepacket");
	bb_auto_ptr<CCMPost> buf(CCMPost::NewL(BBDataFactory()));
	buf->iPresence.SetValue(bb_cast<CBBPresence>(iPresence->Data()->CloneL(KNullDesC)));
	buf->iBodyText->Append(*b);

	iState=_L("send pic");
	iTransferer->AddFileToQueueL(aFileName, SETTING_PUBLISH_URLBASE, SETTING_PUBLISH_SCRIPT, 
		true, _L("Unknown"), buf.get(), 120);
	iState=_L("send rec");
	if (BaflUtils::FileExists(Fs(), recfilename))
		iTransferer->AddFileToQueueL(recfilename, SETTING_PUBLISH_URLBASE, SETTING_PUBLISH_SCRIPT, 
			true, _L("Unknown"), buf.get(), 120);
	iState=_L("destroy");
#else
	iTransferer->AddFileToQueueL(aFileName, SETTING_PUBLISH_URLBASE, SETTING_PUBLISH_SCRIPT, 
		true, _L("SMS"), buf.get(), 120);
	if (BaflUtils::FileExists(Fs(), recfilename))
		iTransferer->AddFileToQueueL(recfilename, SETTING_PUBLISH_URLBASE, SETTING_PUBLISH_SCRIPT, 
			true, _L("SMS"), buf.get(), 120);
#endif

}
void CUploadViewImpl::HandleCommandL(TInt aCommand)
{
	CALLSTACKITEM_N(_CL("CUploadViewImpl"), _CL("HandleCommandL"));

	iNext=false; 
	MUploadCallBack* cb=iCallBack; iCallBack=0;
	if (cb) {
		switch(aCommand) {
		case Econtext_logCmdSoftkeyUpload:
			{
			TBool del=ETrue;
			Settings().GetSettingL(SETTING_DELETE_UPLOADED, del);
			MBBData* buf=MakePacketLC();
			iContainer->CloseFile();
			cb->Back(true, del, buf);
			Reporting().ShowGlobalNote(EAknGlobalConfirmationNote, _L("Queued for Upload"));
			CleanupStack::PopAndDestroy();
			}
			break;
		case Econtext_logCmdSoftkeyCancel:
			iContainer->CloseFile();
			cb->Back(false, false, 0);
			Reporting().ShowGlobalNote(EAknGlobalConfirmationNote, _L("Moved to NotShared"));
			break;
		default:
			return;
			break;
		}
	}
	if (!iNext && iCallBacks->iCount > 0) {
		iCallBack=0;
		TCallBackItem i=iCallBacks->Pop();
		Prompt(i.iFileName, i.iCallBack);
	}
	if (!iNext) {
		// if no next, just display previous view
		iCallBack=0;
		TUid statusv={1};
		AppUi()->ActivateLocalViewL(statusv);
		//CSwitchBack::NewL(iPrevView);
		*iNextViewId=iPrevView;
	} else {
		//if iNext -> save callback, remove view, reload it, faking previous view id 
		MUploadCallBack* cb=iCallBack; iCallBack=0;
		DoDeactivate();
		TUid dummy={0};
		iCallBack=cb;
		DoActivateL(iPrevView, dummy, _L8(""));
	}
}
void CBBSubSessionImpl::CheckedRunL()
{
	CALLSTACKITEM_N(_CL("CBBSubSessionImpl"), _CL("CheckedRunL"));

	TItem t=iPending->Pop();
	TInt err;
	if (iPending->iCount > 0) Async();
	if (t.iData) {
		CC_TRAP(err, iObserver->NewValueL(t.iId, t.iName, t.iSubName, t.iComponentName, t.iData->Get()));
		t.iData->Release();
	} else {
		CC_TRAP(err, iObserver->DeletedL(t.iName, t.iSubName));
	}
	User::LeaveIfError(err);
}