00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef INCL_SYNC_MANAGER
00037 #define INCL_SYNC_MANAGER
00038
00042 #include "base/globalsdef.h"
00043 #include "base/util/ArrayList.h"
00044 #include "http/TransportAgent.h"
00045 #include "spds/constants.h"
00046 #include "spds/AbstractSyncConfig.h"
00047 #include "spds/SyncSource.h"
00048 #include "spds/SyncMLBuilder.h"
00049 #include "spds/SyncMLProcessor.h"
00050 #include "spds/CredentialHandler.h"
00051 #include "spds/CredentialHandler.h"
00052 #include "spds/SyncReport.h"
00053 #include "spds/MappingsManager.h"
00054
00055
00056 #define DATA_SIZE_TOLERANCE 1.06
00057
00058 BEGIN_NAMESPACE
00059
00060 typedef enum {
00061 STATE_START = 0,
00062 STATE_PKG1_SENDING = 1,
00063 STATE_PKG1_SENT = 2,
00064 STATE_PKG3_SENDING = 3,
00065 STATE_PKG3_SENT = 4,
00066 STATE_PKG5_SENDING = 5,
00067 STATE_PKG5_SENT = 6
00068 } SyncManagerState ;
00069
00070
00078 class SyncManager {
00079
00080 public:
00088 SyncManager(AbstractSyncConfig& config, SyncReport& report);
00089 ~SyncManager();
00090
00095 int prepareSync(SyncSource** sources);
00096
00105 int sync();
00106
00110 int endSync();
00111
00122 DevInf *createDeviceInfo();
00123
00132 bool askServerDevInf();
00133
00139 void clearServerDevInf();
00140
00141
00147 void setTransportAgent(TransportAgent* t);
00148
00149 private:
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161 static const char encodedKeyPrefix[];
00162
00163 void encodeItemKey(SyncItem *syncItem);
00164 void decodeItemKey(SyncItem *syncItem);
00165
00166
00167 struct CommandInfo {
00168 const char* commandName;
00169 const char* cmdRef;
00170 const char* format;
00171 const char* dataType;
00172 long size;
00173 };
00174
00175 DevInf* devInf;
00176 AbstractSyncConfig& config;
00177 SyncReport& syncReport;
00178
00179 CredentialHandler credentialHandler;
00180 SyncMLBuilder syncMLBuilder;
00181 SyncMLProcessor syncMLProcessor;
00182
00185 TransportAgent* transportAgent;
00186
00187 SyncManagerState currentState;
00188 SyncSource** sources;
00189 ArrayList commands;
00190
00191 MappingsManager** mmanager;
00192
00193
00194
00195 int sourcesNumber;
00196 int count;
00197
00198
00199
00200
00201
00202 char** sortedSourcesFromServer;
00203
00204 StringBuffer syncURL;
00205 StringBuffer deviceId;
00206 int responseTimeout;
00207 int maxMsgSize;
00208 int maxObjSize;
00209 bool loSupport;
00210 unsigned int readBufferSize;
00211 char credentialInfo[1024];
00212
00213
00214
00215
00216
00217 class IncomingSyncItem : public SyncItem {
00218 public:
00219 IncomingSyncItem(const WCHAR* key,
00220 const CommandInfo &cmdInfo,
00221 int currentSource) :
00222 SyncItem(key),
00223 offset(0),
00224 cmdName(cmdInfo.commandName),
00225 cmdRef(cmdInfo.cmdRef),
00226 sourceIndex(currentSource) {
00227 }
00228
00229 long offset;
00230 const StringBuffer cmdName;
00231 const StringBuffer cmdRef;
00232 const int sourceIndex;
00233 } *incomingItem;
00234
00235 void initialize();
00236 bool readSyncSourceDefinition(SyncSource& source);
00237 bool commitChanges(SyncSource& source);
00238 int assignSources(SyncSource** sources);
00239
00240 Status *processSyncItem(Item* item, const CommandInfo &cmdInfo, SyncMLBuilder &syncMLBuilder);
00241 bool checkForServerChanges(SyncML* syncml, ArrayList &statusList);
00242
00253 const char* getUserAgent(AbstractSyncConfig& config);
00254 bool isToExit();
00255 void setSourceStateAndError(unsigned int index, SourceState state,
00256 unsigned int code, const char* msg);
00257
00258
00259
00260 long getToleranceDataSize(long size);
00261 bool testIfDataSizeMismatch(long allocatedSize, long receivedSize);
00262
00271 SyncItem* getItem(SyncSource& source, SyncItem* (SyncSource::* getItem)());
00272
00277 void addMapCommand(int sourceIndex);
00278
00279 };
00280
00281
00282 END_NAMESPACE
00283
00286 #endif
00287