private void storeAndUpdate(byte[] data, SimppParser parser, UpdateType updateType) { if (LOG.isTraceEnabled()) LOG.trace("Retrieved new data from: " + updateType + ", storing & updating"); if (parser.getVersion() == IGNORE_ID && updateType == UpdateType.FROM_NETWORK) throw new IllegalStateException("shouldn't be here!"); if (updateType == UpdateType.FROM_NETWORK && httpRequestControl.isRequestPending()) return; _lastId = parser.getVersion(); _lastBytes = data; if (updateType != UpdateType.FROM_DISK) { FileUtils.verySafeSave(CommonUtils.getUserSettingsDir(), FILENAME, data); } for (SimppSettingsManager ssm : simppSettingsManagers) ssm.updateSimppSettings(parser.getPropsData()); for (SimppListener listener : listeners) listener.simppUpdated(_lastId); }
private void handleDataInternal(byte[] data, UpdateType updateType, ReplyHandler handler) { if (data == null) { if (updateType == UpdateType.FROM_NETWORK && handler != null) networkUpdateSanityChecker.get().handleInvalidResponse(handler, RequestType.SIMPP); LOG.warn("No data to handle."); return; } SimppDataVerifier verifier = new SimppDataVerifier(data); if (!verifier.verifySource()) { if (updateType == UpdateType.FROM_NETWORK && handler != null) networkUpdateSanityChecker.get().handleInvalidResponse(handler, RequestType.SIMPP); LOG.warn("Couldn't verify signature on data."); return; } if (updateType == UpdateType.FROM_NETWORK && handler != null) networkUpdateSanityChecker.get().handleValidResponse(handler, RequestType.SIMPP); SimppParser parser = null; try { parser = new SimppParser(verifier.getVerifiedData()); } catch (IOException iox) { LOG.error("IOX parsing simpp data", iox); return; } if (LOG.isDebugEnabled()) { LOG.debug( "Got data with version: " + parser.getVersion() + " from: " + updateType + ", current version is: " + _lastId); } switch (updateType) { case FROM_NETWORK: if (parser.getVersion() == IGNORE_ID) { if (_lastId != IGNORE_ID) doHttpMaxFailover(); } else if (parser.getVersion() > _lastId) { storeAndUpdate(data, parser, updateType); } break; case FROM_DISK: if (parser.getVersion() > _lastId) { storeAndUpdate(data, parser, updateType); } break; case FROM_HTTP: if (parser.getVersion() >= _lastId) { storeAndUpdate(data, parser, updateType); } break; } }