javaextensions/wma/sms_cbs/pushplugin/src/serverconnectionbase.cpp
branchRCL_3
changeset 19 04becd199f91
child 23 98ccebc37403
--- /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<std::wstring> 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<std::wstring> dirList =
+            FileUtilities::getDirContentsList(aDirPath);
+        std::list<std::wstring>::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