diff -r f5050f1da672 -r 04becd199f91 javaextensions/wma/sms_cbs/pushplugin/src/serverconnectionbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/wma/sms_cbs/pushplugin/src/serverconnectionbase.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,220 @@ +/* +* Copyright (c) 2008 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: + * +*/ + + +#include "logger.h" +#include "fileutilities.h" +#include "exceptionbase.h" +#include "javacommonutils.h" +#include "serverconnectionbase.h" + +using namespace java::util; +using namespace java::fileutils; + +namespace java +{ +namespace wma +{ + +const TInt KFirstMessage = 10000001; + +ServerConnectionBase::ServerConnectionBase(const std::wstring& aUri, + const std::wstring& aFilter) + :mIsAppLaunched(false), mIsListening(false),mPort(0), mUri(aUri), + mFilter(aFilter), mMessagesOnStore(0), mNextMessageInStore(KFirstMessage), + mFirstMessageInStore(-1) +{ + JELOG2(EWMA); +} + +void ServerConnectionBase::deleteMessage() +{ + JELOG2(EWMA); + std::wstring path(mMessageStoreDirName); + path += JavaCommonUtils::intToWstring(mFirstMessageInStore); + char* messagePath = JavaCommonUtils::wstringToUtf8(path); + //Delete message from the store + if ((remove(messagePath)) != 0) + { + // If deleting of message fails , increment the first message + // in store so next read retrieves the next message. + ELOG1(EWMA, "WMA : Removing File Failed : %s", messagePath); + } + mFirstMessageInStore++; + delete[] messagePath; +} + +OS_EXPORT std::wstring ServerConnectionBase::getUri() const +{ + JELOG2(EWMA); + return mUri; +} + +OS_EXPORT void ServerConnectionBase::setFilter(const std::wstring& aFilter) +{ + JELOG2(EWMA); + mFilter = aFilter; +} + +OS_EXPORT std::wstring ServerConnectionBase::getFilter() const +{ + JELOG2(EWMA); + return mFilter; +} + +OS_EXPORT int ServerConnectionBase::getMessagesOnStore() const +{ + JELOG2(EWMA); + return mMessagesOnStore; +} + +int ServerConnectionBase::createMessageStore(std::wstring aDirectoryPath) +{ + JELOG2(EWMA); + aDirectoryPath += JavaCommonUtils::intToWstring(mPort); + aDirectoryPath +=L"\\" ; + mMessageStoreDirName = aDirectoryPath; + LOG1(EWMA, EInfo , " Creating message store in path %S", + mMessageStoreDirName.c_str()); + // See if directory is present + if (FileUtilities::isDirectory(mMessageStoreDirName)) + { + std::list dirList = FileUtilities::getDirContentsList + (mMessageStoreDirName); + mMessagesOnStore = dirList.size(); + if (mMessagesOnStore> 0) + { + // Get the id of the first message in the store + dirList.sort(); + mFirstMessageInStore = JavaCommonUtils::wstringToInt( + dirList.front()); + // Get the id of the next message to be added to the store, + // which will be one more than the value of the last + // message in the store + mNextMessageInStore = JavaCommonUtils::wstringToInt(dirList.back()); + mNextMessageInStore++; + } + return 0; + } + else + { + // Otherwise create a new directory + return makeDirAll(mMessageStoreDirName); + } +} + +int ServerConnectionBase::makeDirAll(const std::wstring aDirPath) +{ + JELOG2(EWMA); + bool ableToOpen = true; + std::wstring path; + wchar_t *last, *tok, *delim =L"\\" ; + wchar_t *stringToTokenize = new wchar_t[aDirPath.length()+ 1]; + wcscpy(stringToTokenize, aDirPath.c_str()); + + struct stat temp; + + for (tok = wcstok(stringToTokenize,delim,&last); tok!=NULL; + tok = wcstok(NULL, delim, &last)) + { + path += std::wstring(tok); + path += L"\\"; + char *dirName = JavaCommonUtils::wstringToUtf8(path); + if (ableToOpen) + { + if (0 != lstat(dirName, &temp)) + { + ableToOpen = false; + if (mkdir(dirName,0666) < 0) + { + ELOG1(EWMA,"WMA : Directory Creation Failed : %s",dirName); + delete[] dirName; + delete[] stringToTokenize; + return -1; + } + } + } + else + { + if (mkdir(dirName,0666) < 0) + { + ELOG1(EWMA,"WMA : Directory Creation Failed : %s",dirName); + delete[] dirName; + delete[] stringToTokenize; + return -1; + } + } + delete[] dirName; + } + delete[] stringToTokenize; + return 0; +} + +int ServerConnectionBase::removeDir(const std::wstring aDirPath) +{ + JELOG2(EWMA); + std::wstring path1; + path1 += aDirPath; + int error = 0; + try + { + char* path = JavaCommonUtils::wstringToUtf8(path1); + LOG1(EWMA, EInfo, "WMA : Removing Message Store %s",path); + struct stat temp; + if (0 != lstat(path, &temp)) + { + ELOG1(EWMA, "WMA : Directory doesn't Exists : %s", path); + delete[] path; + return -1; + } + std::list dirList = + FileUtilities::getDirContentsList(aDirPath); + std::list::iterator it; + if (dirList.size()) + { + for (it = dirList.begin(); it != dirList.end(); it++) + { + std::wstring element(aDirPath); + element += *it; + char *fileName = JavaCommonUtils::wstringToUtf8(element); + if ((error = remove(fileName)) != 0) + { + ELOG1(EWMA, "WMA : Removing File Failed : %s", fileName); + delete[] fileName; + delete[] path; + return error; + } + delete[] fileName; + } + } + if ((error = remove(path)) != 0) + { + ELOG1(EWMA, "WMA : Removing Directory Failed : %s", path); + delete[] path; + return error; + } + delete[] path; + } + catch (ExceptionBase ex) + { + ELOG(EWMA,"WMA : Cought an exception while removing Dir"); + } + return error; +} + +}// end of namespace wma +}// end of namespace java