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
00124 private:
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136 static const char encodedKeyPrefix[];
00137
00138 void encodeItemKey(SyncItem *syncItem);
00139 void decodeItemKey(SyncItem *syncItem);
00140
00141
00142 struct CommandInfo {
00143 const char* commandName;
00144 const char* cmdRef;
00145 const char* format;
00146 const char* dataType;
00147 long size;
00148 };
00149
00150 DevInf* devInf;
00151 AbstractSyncConfig& config;
00152 SyncReport& syncReport;
00153
00154 CredentialHandler credentialHandler;
00155 SyncMLBuilder syncMLBuilder;
00156 SyncMLProcessor syncMLProcessor;
00157 TransportAgent* transportAgent;
00158
00159 SyncManagerState currentState;
00160 SyncSource** sources;
00161 ArrayList commands;
00162
00163 MappingsManager** mmanager;
00164
00165
00166
00167 int sourcesNumber;
00168 int count;
00169
00170
00171
00172
00173
00174 char** sortedSourcesFromServer;
00175
00176 StringBuffer syncURL;
00177 StringBuffer deviceId;
00178 int responseTimeout;
00179 int maxMsgSize;
00180 int maxObjSize;
00181 bool loSupport;
00182 unsigned int readBufferSize;
00183 char credentialInfo[1024];
00184
00185
00186
00187
00188
00189 class IncomingSyncItem : public SyncItem {
00190 public:
00191 IncomingSyncItem(const WCHAR* key,
00192 const CommandInfo &cmdInfo,
00193 int currentSource) :
00194 SyncItem(key),
00195 offset(0),
00196 cmdName(cmdInfo.commandName),
00197 cmdRef(cmdInfo.cmdRef),
00198 sourceIndex(currentSource) {
00199 }
00200
00201 long offset;
00202 const StringBuffer cmdName;
00203 const StringBuffer cmdRef;
00204 const int sourceIndex;
00205 } *incomingItem;
00206
00207 void initialize();
00208 bool readSyncSourceDefinition(SyncSource& source);
00209 bool commitChanges(SyncSource& source);
00210 int assignSources(SyncSource** sources);
00211
00212 Status *processSyncItem(Item* item, const CommandInfo &cmdInfo, SyncMLBuilder &syncMLBuilder);
00213 bool checkForServerChanges(SyncML* syncml, ArrayList &statusList);
00214
00215 const char* getUserAgent(AbstractSyncConfig& config);
00216 bool isToExit();
00217 void setSourceStateAndError(unsigned int index, SourceState state,
00218 unsigned int code, const char* msg);
00219
00220
00221
00222 long getToleranceDataSize(long size);
00223 bool testIfDataSizeMismatch(long allocatedSize, long receivedSize);
00224
00233 SyncItem* getItem(SyncSource& source, SyncItem* (SyncSource::* getItem)());
00234
00239 void addMapCommand(int sourceIndex);
00240
00241 };
00242
00243
00244 END_NAMESPACE
00245
00248 #endif
00249