📄 configurator.java
字号:
/* * * */package org.openacs;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.util.Calendar;import java.util.Iterator;import java.util.logging.Level;import java.util.logging.Logger;import javax.ejb.FinderException;import org.openacs.js.Script;import org.openacs.message.Download;import org.openacs.message.GetParameterNames;import org.openacs.message.GetParameterNamesResponse;import org.openacs.message.GetParameterValues;import org.openacs.message.GetParameterValuesResponse;import org.openacs.message.Inform;import org.openacs.message.SetParameterValues;import org.openacs.message.TransferComplete;import org.openacs.utils.Ejb;import org.openacs.utils.Version;import org.openacs.vendors.Vendor;/** * * @author Administrator */public class Configurator extends Thread { private Inform lastInform; private HostsLocal host; private TransferComplete transferComplete; private String fwpath; private String urlServer; private CPELocal cpe; private String paramConfigVersion; private long timeout; private String KEY_SOFTWARE = "dlSoftware"; private String KEY_CONFIG = "dlConfig"; private String paramConfigName; //private static final String OUI_Thomson = "00147F"; //private static final String OUI_Thomson2 = "0090D0"; public Configurator(Inform lastInform, HostsLocal host, TransferComplete transferComplete, String fwpath, String urlServer) { this.lastInform = lastInform; this.host = host; this.transferComplete = transferComplete; this.fwpath = fwpath; this.urlServer = urlServer; this.cpe = Ejb.lookupCPEBean(); String vcf = lastInform.getRoot() + ".DeviceInfo.VendorConfigFile.1."; this.paramConfigVersion = vcf + "Version"; this.paramConfigName = vcf + "Name"; timeout = 120 * 1000; } @Override public void run() { HardwareModelLocal hw = host.getModel(); if (transferComplete != null) { onTransferComplete(); } else if (!lastInform.isEvent(Inform.EVENT_CONNECTION_REQUEST)) { if (lastInform.isEvent(Inform.EVENT_PERIODIC)) { // updateSoftware(); Vendor vendor = Vendor.getVendor(lastInform.oui, hw.getHclass(), hw.getVersion()); switch (vendor.getConfigUpdateMethod()) { case Vendor.CFG_UPDATE_METHOD_2: System.out.println("Configurator: UPDATE by name/version"); updateConfigThomson(); break; case Vendor.CFG_UPDATE_METHOD_1: default: System.out.println("Configurator: UPDATE ProvisioningCode"); updateConfigByProvisioningCode(); break; } /* FileOutputStream fout = null; try { GetParameterNames nreq = new GetParameterNames(); nreq.nextLevel = false; nreq.parameterPath = ""; GetParameterNamesResponse nrsp = (GetParameterNamesResponse) cpe.Call (host, nreq, 120); System.out.println ("Got "+nrsp.names.size()+" names "); fout = new FileOutputStream("c:/tmp/780.names.xml"); nrsp.writeTo(fout); fout.close (); String[] ns = new String[0]; ns = nrsp.names.keySet().toArray(ns); System.out.println ("Got "+ns.length+" names "); GetParameterValues vreq = new GetParameterValues("InternetGatewayDevice"); //GetParameterValues vreq = new GetParameterValues(nrsp.names.keySet().toArray(ns)); GetParameterValuesResponse vrsp = (GetParameterValuesResponse) cpe.Call (host, vreq, 120); System.out.println ("Got "+vrsp.values.size()+" values "); fout = new FileOutputStream("c:/tmp/780.xml"); vrsp.writeTo(fout); } catch (Exception ex) { Logger.getLogger(Configurator.class.getName()).log(Level.SEVERE, null, ex); } finally { try { fout.close(); } catch (IOException ex) { Logger.getLogger(Configurator.class.getName()).log(Level.SEVERE, null, ex); } } */ } else if (lastInform.isEvent(Inform.EVENT_VALUE_CHANGE) || lastInform.isEvent(Inform.EVENT_BOOT)) { // cache parameter values for browsing } } String scriptName = (transferComplete == null) ? "Default" : "OnTransferComplete"; try { ScriptLocal sb; sb = Ejb.lookupScriptBean(scriptName); Script script = new Script(lastInform, new String(sb.getScript()), host, transferComplete); script.run(); } catch (FinderException ex) { } } protected void updateConfigThomson() { Logger logger = Logger.getLogger(getClass().getName()); ConfigurationLocalHome cs = Ejb.lookupConfigurationBean(); try { String vl = ""; GetParameterValues gpv = new GetParameterValues(new String[]{paramConfigName, paramConfigVersion}); Message m = cpe.Call(host, gpv, 120 * 1000); if (m instanceof GetParameterValuesResponse) { GetParameterValuesResponse gpvr = (GetParameterValuesResponse) m; vl = gpvr.values.get(paramConfigVersion); String nl = gpvr.values.get(paramConfigName); logger.log(Level.INFO, "Got cfg version: " + vl + " name=" + nl); host.setCfgversion(vl); } else { logger.log(Level.SEVERE, m.toString()); } Version vh = new Version(vl); if (host.getConfigname() != null) { System.out.println("Find config: hwid=" + host.getHwid() + " name=" + host.getConfigname()); ConfigurationLocal cfg = cs.findByPrimaryKey(new ConfigurationPK(host.getHwid(), host.getConfigname())); System.out.println("Found config version: " + cfg.getVersion()); Version vc = new Version(cfg.getVersion()); if (!vc.isUptodate(vh)) { DownloadConfig(cfg, null); } } } catch (FinderException e) { host.setCfgupdres(e.getMessage()); host.setCfgupdtime(new java.sql.Timestamp(Calendar.getInstance().getTimeInMillis())); logger.log(Level.WARNING, "Config lookup: " + e.getMessage()); } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage()); } } protected void DownloadConfig(ConfigurationLocal cfg, String key) { Logger.getLogger(getClass().getName()).log(Level.INFO, "Update config '" + cfg.getName() + "' to " + cfg.getVersion() + " key=" + key); host.setCfgupdtime(new java.sql.Timestamp(Calendar.getInstance().getTimeInMillis())); String urlConfig = urlServer + "/cfg"; Download d = new Download(KEY_CONFIG + ((key != null) ? ("." + key) : ""), urlConfig, Download.FT_CONFIG); d.TargetFileName = cfg.getFilename(); d.FileSize = cfg.getConfig().length; cpe.Call(host, d, timeout); } protected void updateConfigByProvisioningCode() { Logger logger = Logger.getLogger(getClass().getName()); ConfigurationLocalHome cs = Ejb.lookupConfigurationBean(); try { String cfgname = host.getConfigname(); if (cfgname != null) { ConfigurationLocal cfg = cs.findByPrimaryKey(new ConfigurationPK(host.getHwid(), host.getConfigname())); String version = cfg.getVersion(); if (version == null) { version = ""; } System.out.println("ProvisioningCode=" + lastInform.getProvisiongCode()); if (!version.equals(lastInform.getProvisiongCode())) { DownloadConfig(cfg, getProvisioningCode(cfgname, version)); } } } catch (FinderException e) { host.setCfgupdres(e.getMessage()); host.setCfgupdtime(new java.sql.Timestamp(Calendar.getInstance().getTimeInMillis())); logger.log(Level.WARNING, "Config lookup: " + e.getMessage()); } } protected void updateSoftware() { Logger logger = Logger.getLogger(getClass().getName()); SoftwareLocalHome sh = Ejb.lookupSoftwareBean(); String vl = lastInform.getSoftwareVersion(); Version CurrentVersion = new Version(vl); try { //String hw = lastInform.getHardwareVersion(); //Collection clc = sh.findByHardware(hw); //Collection clc = sh.findByHardware((Integer)host.getModel().getId()); //Iterator<SoftwareLocal> itSoftware = host.getModel().getFirmware().iterator();// Iterator<SoftwareLocal> itSoftware = sh.findByHardware((Integer)host.getModel().getId()).iterator(); Iterator<SoftwareLocal> itSoftware = sh.findByHardware(host.getHwid()).iterator(); SoftwareLocal swUpdate = null; while (itSoftware.hasNext()) { SoftwareLocal sw = (SoftwareLocal) itSoftware.next(); System.out.println("v=" + sw.getVersion()); Version v2 = new Version(sw.getVersion()); if (!v2.isUptodate(CurrentVersion)) { Version v = null; if (swUpdate != null) { if (!(v = new Version(swUpdate.getVersion())).isUptodate(v2)) { swUpdate = sw; //System.out.println ("Yet newer soft found"); } } else { //System.out.println ("Update software"); swUpdate = sw; } } } //System.out.println ("swUpdate="+swUpdate); if (swUpdate != null) { logger.log(Level.INFO, "Update software to " + swUpdate.getVersion() + /*" hw=" + swUpdate.getHardware() +*/ " size=" + swUpdate.getSize()); host.setSfwupdtime(new java.sql.Timestamp(Calendar.getInstance().getTimeInMillis())); String url = urlServer + "/firmware/" + swUpdate.getFilename(); File f = new File(fwpath + swUpdate.getFilename()); Download d = new Download(KEY_SOFTWARE, url, Download.FT_FIRMWARE);// d.TargetFileName = swUpdate.getFileName (); d.FileSize = swUpdate.getSize(); d.FileSize = f.length(); logger.log(Level.INFO, "Update software to " + swUpdate.getVersion() + /*" hw=" + swUpdate.getHardware() + */ " size=" + d.FileSize + " url=" + url); cpe.Call(host, d, timeout); } } catch (FinderException e) { logger.log(Level.WARNING, "Software lookup: " + e.getMessage());// ex.printStackTrace(); } } public static String getProvisioningCode(String name, String version) {// return Integer.toString(name.hashCode(), 16) + "." + Integer.toString(version.hashCode(), 16); return version; } private void onTransferComplete() { String result = (transferComplete.FaultCode != 0) ? transferComplete.FaultCode + ": " + transferComplete.FaultString : "OK"; if (transferComplete.CommandKey.startsWith(KEY_CONFIG)) { host.setCfgupdres(result); /* if (transferComplete.FaultCode == 0) { String pc[] = transferComplete.CommandKey.split("\\."); if (pc.length == 3) { SetParameterValues spv = new SetParameterValues(); String code = pc[1] + "." + pc[2]; spv.AddValue(lastInform.getRoot() + ".DeviceInfo.ProvisioningCode", code); cpe.Call(host, spv, timeout); } } */ } else if (transferComplete.CommandKey.equals(KEY_SOFTWARE)) { host.setSfwupdres(result); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -