MTK6757 增加自定义NTP时间同步(TCP&UDP)

实现自定义NTP时间同步(TCP&UDP)

一. 系统NTP 改造

1. frameworks\base\core\java\android\net\SntpClient.java

 增加log 查看当前request  host 地址

    public boolean requestTime(String host, int timeout) {
        InetAddress address = null;
        try {
            Log.d("olc_ntp", "SntpClient-->requestTime host== " + host);
            address = InetAddress.getByName(host);
            Log.d("olc_ntp", "SntpClient-->requestTime address== " + address);
        } catch (Exception e) {
            if (DBG) Log.d(TAG, "SntpClient-->request time failed: " + e);
            Log.d("olc_ntp", "SntpClient-->request time failed: " + e);
            return false;
        }
        return requestTime(address, NTP_PORT, timeout);
    }

2. frameworks\base\core\java\android\util\NtpTrustedTime.java

根据标识 初始化相应的sSingleton 对象

public static synchronized NtpTrustedTime getInstance(Context context) {
        if (sSingleton == null) {
            .............

            sContext = context;
            
            //wpx NTP
            int LanNTPFlag = 1;
            String NTP_LAN = "192.168.1.111";
            if(LanNTPFlag == 1 && NTP_LAN != null &&!"".equals(NTP_LAN)){
                Log.d("olc_ntp", "NtpTrustedTime NTP_LAN: " + NTP_LAN);
                List<String> ntps = getNTPArr(context);
                if(ntps.size() > 0){
                    Log.d("olc_ntp", "NtpTrustedTime ntps.get(0): " + ntps.get(0));
                    sSingleton = new NtpTrustedTime(ntps.get(0), timeout);
                }
            }else{
                Log.d("olc_ntp", "NtpTrustedTime server: " + server);
                sSingleton = new NtpTrustedTime(server, timeout);
            }            
        }

        return sSingleton;
    }

3. frameworks\base\services\core\java\com\android\server\NetworkTimeUpdateService.java

根据标识初始化相应的NTP 地址集合

public NetworkTimeUpdateService(Context context) {
        ............................

        //wpx NTP 
        int LanNTPFlag = 1;
        String NTP_LAN = "192.168.1.111";
        if(LanNTPFlag == 1 && NTP_LAN != null && !"".equals(NTP_LAN)){
            String[] ntps = NTP_LAN.split(";");
            for(String ntp : ntps){
                mNtpServers.add(ntp);
            }
            mDefaultServer = ntps[0];

            mPollingIntervalMs = 3600000;//NTP success(UDP) next sync time 60*60*1000 ms
            mPollingIntervalShorterMs = 1000;// NTP failed(UDP) try again time 
            mTryAgainTimesMax = 10; // try again 10
        }else{
            //M: For multiple NTP server retry
            mDefaultServer = ((NtpTrustedTime) mTime).getServer();
            mNtpServers.add(mDefaultServer);
            for (String str : SERVERLIST)
            {
               mNtpServers.add(str);
            }            
        }
                    
        mTryAgainCounter = 0;
    }

增加表示的观察者

public void systemRunning() {
        ............
        //wpx NTP
        mNTPSettingsObserver = new NTPSettingsObserver(new Handler());
        mNTPSettingsObserver.registerObserver();
    }

在轮询请求过程中增加TCP 方式获取时间

private void onPollNetworkTimeUnderWakeLock(int event) {
       ........................
        
        //wpx NTP
        syncNTPTime_TCP(mNtpServers.get(mTryAgainCounter % mNtpServers.size()));

....................

}


    private class NTPSettingsObserver extends ContentObserver {
        NTPSettingsObserver(Handler handler) {
            super(handler);
        }
        
        void registerObserver() {
            mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(
                    "****"), false, this);
            mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(
                    "######"), false, this);                    
        }

        @Override
        public void onChange(boolean selfChange) {
            mNtpServers = new ArrayList<String>();
            Log.d("olc_ntp", "NetworkTimeUpdateService NTPSettingsObserver ");
            
            int LanNTPFlag = 1;
            String NTP_LAN = "192.168.1.111";
            if(LanNTPFlag == 1 && NTP_LAN != null && !"".equals(NTP_LAN)){
                String[] ntps = NTP_LAN.split(";");
                for(String ntp : ntps){
                    mNtpServers.add(ntp);
                }
                mDefaultServer = ntps[0];
                
                mPollingIntervalMs = 3600000;//NTP success(UDP) next sync time 60*60*1000 ms
                mPollingIntervalShorterMs = 1000;// NTP failed(UDP) try again time 
                mTryAgainTimesMax = 10; // try again 10
            }else{
                //M: For multiple NTP server retry
                mDefaultServer = ((NtpTrustedTime) mTime).getServer();
                mNtpServers.add(mDefaultServer);
                for (String str : SERVERLIST)
                {
                   mNtpServers.add(str);
                }            
            }       
            //标识改变后 执行轮询获取时间
            onPollNetworkTime(EVENT_NETWORK_CHANGED);
        }
    }
    
    //---wpx NTP 
    private void syncNTPTime_TCP(String ntp){
        try {
            final long currentTime = System.currentTimeMillis();
            Log.d("olc_ntp", "NetworkTimeUpdateService-->syncNTPTime_TCP = " + ntp);
            
            java.net.URL url = new java.net.URL("http://" + ntp);
            java.net.URLConnection uc = url.openConnection();
            uc.setConnectTimeout(3000);
            long id = uc.getDate();
            java.util.Date date = new java.util.Date(id);
            java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMdd.HHmmss");
            String nowTime = format.format(date);
            
            long ntp_time = date.getTime();
            Log.d("olc_ntp", "NetworkTimeUpdateService-->ntp_time = " + ntp_time + " ,currentTime=" + currentTime);
            if(ntp_time - currentTime <= 0){
                Log.d("olc_ntp", "NetworkTimeUpdateService-->NTP sync time failed (TCP)");
            }else{
                Log.d("olc_ntp", "NetworkTimeUpdateService-->nowTime = " + nowTime);
                android.os.SystemClock.setCurrentTimeMillis(date.getTime());                
            }
        } catch (java.net.MalformedURLException e) {
            // TODO Auto-generated catch block
            Log.d("olc_ntp", "NetworkTimeUpdateService-->MalformedURLException ");
            e.printStackTrace();
        } catch (java.io.IOException e) {
            // TODO Auto-generated catch block
            Log.d("olc_ntp", "NetworkTimeUpdateService-->IOException ");
            e.printStackTrace();
        }  catch (Exception e2) {
            // TODO: handle exception
            Log.d("olc_ntp", "NetworkTimeUpdateService-->Exception ");
            e2.printStackTrace();
        }                
    }

4. vendor\mediatek\proprietary\packages\providers\DrmProvider\src\com\mediatek\providers\drm\DrmSyncTimeService.java

mtk 辅助获取NTP时间帮助类

@Override
    public void onCreate() {
        ...................

        //wpx NTP
        int LanNTPFlag = 1;
        String NTP_LAN = "192.168.1.111";
        if(LanNTPFlag == 1 && NTP_LAN != null && !"".equals(NTP_LAN)){
            String[] ntps = NTP_LAN.split(";");
            for(String ntp : ntps){
                mNtpServers.add(ntp);
            }
        }else{
            // Get default ntp server from system and init sync secure time servers list
            String defaultServer = Settings.Global.getString(mContext.getContentResolver(),
                    Settings.Global.NTP_SERVER);
            if (DEBUG) Log.d(TAG, "defaultServer: " + defaultServer);
            mNtpServers = new ArrayList<String>(sHostList.length + 1);
            for (String host : sHostList) {
                mNtpServers.add(host);
                if (host.equals(defaultServer)) {
                    defaultServer = null;
                }
            }
            if (defaultServer != null) {
                mNtpServers.add(0, defaultServer);
            }            
        }
    }

拦截命令 不执行辅助NTP 获取时间

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
..................
        
        //wpx NTP
        mNtpServers = new ArrayList<String>();
        int LanNTPFlag = com.olc.security.util.SecurityConfig.getLANNTPEnabled(mContext);
        String NTP_LAN = com.olc.security.util.SecurityConfig.getLANNTPIP(mContext);
        if(LanNTPFlag == 1 && NTP_LAN != null && !"".equals(NTP_LAN)){
            return START_NOT_STICKY;
        }
............
    }

 

12-04 00:00:32.826  1017  1853 D olc_ntp : System time = 1575388832826
12-04 00:00:32.844  1017  1853 D olc_ntp : NetworkTimeUpdateService-->syncNTPTime_TCP = 192.168.88.8
12-04 00:00:32.904  1017  1853 D olc_ntp : NetworkTimeUpdateService-->ntp_time = 1587980282000 ,currentTime=1575388832842
12-04 00:00:32.904  1017  1853 D olc_ntp : NetworkTimeUpdateService-->nowTime = 20200427.173802
04-27 17:38:02.001  1017  1853 D olc_ntp : mTryAgainCounter = 0;mNtpServers.size() = 1;index = 0;mNtpServers = 192.168.88.8
04-27 17:38:02.001  1017  1853 D olc_ntp : SntpClient-->requestTime host== 192.168.88.8
04-27 17:38:02.002  1017  1853 D olc_ntp : SntpClient-->requestTime address== /192.168.88.8

二. 服务端配置 win10 UDP 配置

1. AnnounceFlags 值修改为5

打开: 配置 AnnounceFlags 值修改为5

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags]

打开: 配置 Enabled修改为:1

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer]

2. 开启服务

win+X打开管理员shell命令行

net stop w32time 停止服务        net start w32time 启动服务

3. 添加防火墙规则

控制面板--->系统和安全--->windows防火墙--->高级设置--->入站规则(右键)--->新建规则--->端口 ---下一步----UDP----特定本地端口:123(不要换别的)

4. 配置开机自启动

 

三. TCP 方式配置

适用 windows 和 window server

1. URL授权打开

勾选 URL 授权

2.  防火墙配置修改 “万维网服务(HTTP)”

控制面板\所有控制面板项\Windows Defender 防火墙\允许的应用

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值