2 * Copyright (C) 2009 Intel Corporation
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) version 3.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 #include <syncevo/SynthesisEngine.h>
21 #include <syncevo/util.h>
23 #include <synthesis/SDK_util.h>
25 #include <syncevo/declarations.h>
28 void SharedEngine::Connect(const string &aEngineName,
29 sysync::CVersion aPrgVersion,
30 sysync::uInt16 aDebugFlags)
32 sysync::TSyError err = m_engine->Connect(aEngineName, aPrgVersion, aDebugFlags);
34 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, std::string("cannot connect to engine '") + aEngineName + "'", static_cast<sysync::TSyErrorEnum>(err));
38 void SharedEngine::Disconnect()
40 sysync::TSyError err = m_engine->Disconnect();
42 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, "cannot disconnect engine", static_cast<sysync::TSyErrorEnum>(err));
46 void SharedEngine::InitEngineXML(const string &aConfigXML)
48 sysync::TSyError err = m_engine->InitEngineXML(aConfigXML.c_str());
50 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, "Synthesis XML config parser error", static_cast<sysync::TSyErrorEnum>(err));
54 class FreeEngineItem {
55 SharedEngine m_engine;
57 FreeEngineItem(const SharedEngine &engine) :
60 void operator () (sysync::KeyH key) {
61 m_engine.get()->CloseKey(key);
63 void operator () (sysync::SessionH session) {
64 m_engine.get()->CloseSession(session);
69 SharedSession SharedEngine::OpenSession(const string &aSessionID)
71 sysync::SessionH sessionH = NULL;
72 sysync::TSyError err = m_engine->OpenSession(sessionH, 0,
73 aSessionID.empty() ? NULL : aSessionID.c_str());
75 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, "opening session failed", static_cast<sysync::TSyErrorEnum>(err));
77 return SharedSession(sessionH, FreeEngineItem(*this));
80 SharedKey SharedEngine::OpenSessionKey(SharedSession &aSessionH)
83 sysync::TSyError err = m_engine->OpenSessionKey(aSessionH.get(), key, 0);
85 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, "opening session key failed", static_cast<sysync::TSyErrorEnum>(err));
87 return SharedKey(key, FreeEngineItem(*this));
90 void SharedEngine::SessionStep(const SharedSession &aSessionH,
91 sysync::uInt16 &aStepCmd,
92 sysync::TEngineProgressInfo *aInfoP)
94 sysync::TSyError err = m_engine->SessionStep(aSessionH.get(),
98 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, "proceeding with session failed", static_cast<sysync::TSyErrorEnum>(err));
102 class FreeSyncMLBuffer {
103 SharedEngine m_engine;
104 SharedSession m_session;
108 FreeSyncMLBuffer(const SharedEngine &engine,
109 const SharedSession &session,
117 void operator () (char *buffer) {
118 m_engine.get()->RetSyncMLBuffer(m_session.get(), m_forSend, m_size);
122 SharedBuffer SharedEngine::GetSyncMLBuffer(const SharedSession &aSessionH, bool aForSend)
124 sysync::appPointer buffer;
125 sysync::memSize bufSize;
126 sysync::TSyError err = m_engine->GetSyncMLBuffer(aSessionH.get(),
130 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult,"acquiring SyncML buffer failed", static_cast<sysync::TSyErrorEnum>(err));
133 return SharedBuffer((char *)buffer, (size_t)bufSize,
134 FreeSyncMLBuffer(*this, aSessionH, aForSend, bufSize));
137 void SharedEngine::WriteSyncMLBuffer(const SharedSession &aSessionH, const char *data, size_t len)
139 sysync::TSyError err = m_engine->WriteSyncMLBuffer(aSessionH.get(), const_cast<char *>(data), len);
141 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, "writing SyncML buffer failed", static_cast<sysync::TSyErrorEnum>(err));
145 SharedKey SharedEngine::OpenKeyByPath(const SharedKey &aParentKeyH,
149 sysync::KeyH key = NULL;
150 sysync::TSyError err = m_engine->OpenKeyByPath(key, aParentKeyH.get(), aPath.c_str(), 0);
151 if (err && noThrow) {
155 string what = "opening key ";
157 if (err == sysync::DB_NoContent) {
158 SE_THROW_EXCEPTION(NoSuchKey, what);
160 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, what, static_cast<sysync::TSyErrorEnum>(err));
163 return SharedKey(key, FreeEngineItem(*this));
166 SharedKey SharedEngine::OpenSubkey(const SharedKey &aParentKeyH,
170 sysync::KeyH key = NULL;
171 sysync::TSyError err = m_engine->OpenSubkey(key, aParentKeyH.get(), aID, 0);
172 if (err && noThrow) {
176 string what = "opening sub key";
177 if (err == sysync::DB_NoContent) {
178 SE_THROW_EXCEPTION(NoSuchKey, what);
180 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, what, static_cast<sysync::TSyErrorEnum>(err));
183 return SharedKey(key, FreeEngineItem(*this));
186 string SharedEngine::GetStrValue(const SharedKey &aKeyH, const string &aValName)
189 sysync::TSyError err = m_engine->GetStrValue(aKeyH.get(), aValName.c_str(), s);
191 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, string("error reading value ") + aValName, static_cast<sysync::TSyErrorEnum>(err));
196 void SharedEngine::SetStrValue(const SharedKey &aKeyH, const string &aValName, const string &aValue)
198 sysync::TSyError err = m_engine->SetStrValue(aKeyH.get(), aValName.c_str(), aValue);
200 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, string("error writing value ") + aValName, static_cast<sysync::TSyErrorEnum>(err));
204 sysync::sInt32 SharedEngine::GetInt32Value(const SharedKey &aKeyH, const string &aValName)
207 sysync::TSyError err = m_engine->GetInt32Value(aKeyH.get(), aValName.c_str(), v);
209 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, string("error reading value ") + aValName, static_cast<sysync::TSyErrorEnum>(err));
214 void SharedEngine::SetInt32Value(const SharedKey &aKeyH, const string &aValName, sysync::sInt32 aValue)
216 sysync::TSyError err = m_engine->SetInt32Value(aKeyH.get(), aValName.c_str(), aValue);
218 SE_THROW_EXCEPTION_STATUS(BadSynthesisResult, string("error writing value ") + aValName, static_cast<sysync::TSyErrorEnum>(err));
222 void SharedEngine::doDebug(Logger::Level level,
226 const char *function,
230 std::string str = StringPrintfV(format, args);
231 SySyncDebugPuts(m_engine->fCI, file, line, function,
232 level <= Logger::ERROR ? DBG_ERROR :
233 level <= Logger::INFO ? DBG_HOT :
239 sysync::TSyError SDKInterface::setValue(sysync::KeyH aItemKey,
240 const std::string &field,
244 return this->ui.SetValue(this,
247 sysync::VALTYPE_TEXT,
252 sysync::TSyError SDKInterface::getValue(sysync::KeyH aItemKey,
253 const std::string &field,
258 this->ui.GetValue(this,
261 sysync::VALTYPE_TEXT,
265 data = SharedBuffer(new char[len + 1], len);
267 res = this->ui.GetValue(this,
270 sysync::VALTYPE_TEXT,