/* * Created on 20 mai 2004 * Created by Olivier Chalouhi * * Copyright (C) 2004, 2005, 2006 Aelitis SAS, All rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details ( see the LICENSE file ). * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * AELITIS, SAS au capital de 46,603.30 euros, * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. */ package org.gudy.azureus2.ui.swt.updater2; import java.util.Map; import org.eclipse.swt.SWT; import org.gudy.azureus2.core3.logging.*; import org.gudy.azureus2.core3.util.AEVerifier; import org.gudy.azureus2.core3.util.Constants; import org.gudy.azureus2.platform.PlatformManager; import org.gudy.azureus2.platform.PlatformManagerCapabilities; import org.gudy.azureus2.platform.PlatformManagerFactory; import com.aelitis.azureus.core.versioncheck.VersionCheckClient; import org.gudy.azureus2.plugins.update.UpdateChecker; /** * @author Olivier Chalouhi * */ public class SWTVersionGetter { private static final LogIDs LOGID = LogIDs.GUI; private String platform; private int currentVersion; private int latestVersion; private UpdateChecker checker; private String[] mirrors; private String infoURL; public SWTVersionGetter( UpdateChecker _checker ) { this.platform = SWT.getPlatform(); this.currentVersion = SWT.getVersion(); /** * Hack to make users re-download swt package which is hacked to include * our osx platform jnilib. */ if (currentVersion == 3232 && Constants.isOSX) { PlatformManager p_man = PlatformManagerFactory.getPlatformManager(); if (p_man != null && !p_man.hasCapability(PlatformManagerCapabilities.GetVersion)) { currentVersion = 3231; } } /* hack no longer needed as most (all?) CVS users will have rolled back by now and * we're shipping with 3.1.1 if ( currentVersion == 3206 ){ // problem here with 3.2M2 that we rolled out to CVS users - it doesn't work // on windows 98 (hangs the app). We therefore decided to fall back to 3.1.1 // which does work. However, to rollback the CVS users we need to make it appear // that 3206 is < 3.1.1. We do this by hacking the version here System.out.println( "Rolling back SWT version 3.2M2 to 3.1.1" ); currentVersion = 3138; // 3.1.1 is 3139 } */ this.latestVersion = 0; checker = _checker; } public boolean needsUpdate() { try { downloadLatestVersion(); String msg = "SWT: current version = " + currentVersion + ", latest version = " + latestVersion; checker.reportProgress( msg ); if (Logger.isEnabled()) Logger.log(new LogEvent(LOGID, msg)); return latestVersion > currentVersion; } catch(Exception e) { e.printStackTrace(); return false; } } private void downloadLatestVersion() { if (Logger.isEnabled()) Logger.log(new LogEvent(LOGID, "Requesting latest SWT version " + "and url from version check client.")); Map reply = VersionCheckClient.getSingleton().getVersionCheckInfo(VersionCheckClient.REASON_CHECK_SWT); String msg = "SWT version check received:"; byte[] version_bytes = (byte[])reply.get( "swt_version" ); if( version_bytes != null ) { latestVersion = Integer.parseInt( new String( version_bytes ) ); msg += " version=" + latestVersion; } byte[] url_bytes = (byte[])reply.get( "swt_url" ); if( url_bytes != null ) { mirrors = new String[] { new String( url_bytes ) }; msg += " url=" + mirrors[0]; } byte[] info_bytes = (byte[])reply.get( "swt_info_url" ); if ( info_bytes != null ){ byte[] sig = (byte[])reply.get( "swt_info_sig" ); if ( sig == null ){ Logger.log( new LogEvent( LogIDs.LOGGER, "swt info signature check failed - missing signature" )); }else{ try{ infoURL = new String( info_bytes ); try{ AEVerifier.verifyData( infoURL, sig ); }catch( Throwable e ){ Logger.log( new LogEvent( LogIDs.LOGGER, "swt info signature check failed", e )); infoURL = null; } }catch ( Exception e ){ Logger.log(new LogEvent(LOGID, "swt info_url", e)); } } } if (Logger.isEnabled()) Logger.log(new LogEvent(LOGID, msg)); } /** * @return Returns the latestVersion. */ public int getLatestVersion() { return latestVersion; } public int getCurrentVersion() { return currentVersion; } /** * @return Returns the platform. */ public String getPlatform() { return platform; } /** * @return Returns the mirrors. */ public String[] getMirrors() { return mirrors; } public String getInfoURL() { return infoURL; } }