<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:0.5@aar" level="project" />\r
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish:0.5@aar" level="project" />\r
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:2.2.2@aar" level="project" />\r
+ <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\android-logging-log4j-1.0.3.jar:unspecified@jar" level="project" />\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\ftp4j-1.7.2.jar:unspecified@jar" level="project" />\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\LauncherCtrl.jar:unspecified@jar" level="project" />\r
+ <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\log4j-1.2.17.jar:unspecified@jar" level="project" />\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\okio-2.4.3.jar:unspecified@jar" level="project" />\r
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:25.1.0@jar" level="project" />\r
<orderEntry type="library" name="Gradle: io.reactivex:rxjava:1.1.0@jar" level="project" />\r
return json;\r
}\r
\r
+ public final static boolean upload_logs_via_ftp=false;\r
final static String KeyProtocolServerIP="ProtocolServerIP";\r
final static String KeyProtocolServerHOST="ProtocolServerHOST";\r
final static String KeyProtocolServerPort="ProtoclServerPort";;\r
import com.enqualcomm.support.service.Deliver;\r
import com.enqualcomm.support.utils.APNUtil;\r
import com.enqualcomm.support.utils.DeviceInfoUtil;\r
+import com.enqualcomm.support.utils.ICHttpUtil;\r
import com.enqualcomm.support.utils.ICLogger;\r
import com.enqualcomm.support.utils.ServiceUtil;\r
import com.enqualcomm.support.utils.TimeUtil;\r
import rx.Observable;\r
import rx.functions.Action1;\r
\r
+import static com.enqualcomm.support.Config.upload_logs_via_ftp;\r
import static com.enqualcomm.support.Constants.DIALOG_ACTION;\r
import static com.enqualcomm.support.utils.DeviceInfoUtil.getDeviceVersion;\r
\r
Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
public void call(Long param1Long) {\r
sendSMS(phonenumber, "start Upload allLogfile [crashlog APILog log GPS LocationAlarm Battery] to " + Config.getFtpServer(mContext));\r
+ String logtime=TimeUtil.getSystemTime3();\r
for (String file : filelist) {\r
\r
if (Util.LogfileExist(runtime, file)) {\r
String filepath = Util.getLogfilePath(runtime, file);\r
URL serverurl = null;\r
try {\r
- serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), time, file));\r
+ serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), time, file,runtime));\r
} catch (MalformedURLException e) {\r
e.printStackTrace();\r
}\r
- if (ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {\r
- sb.append(" ").append(file);\r
- ICLogger.i("Upload file "+file+" success! ");\r
+ if (upload_logs_via_ftp){\r
+ if (ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {\r
+ sb.append(" ").append(file);\r
+ ICLogger.i("Upload file "+file+" success! ");\r
+ }else{\r
+ ICLogger.i("Upload file "+file+" failed! ");\r
+\r
+ }\r
}else{\r
- ICLogger.i("Upload file "+file+" failed! ");\r
+ if (ICHttpUtil.uploadFile(filepath,runtime,logtime)) {\r
+ sb.append(" ").append(file);\r
+ ICLogger.i("Upload file "+file+" success! ");\r
+ }else{\r
+ ICLogger.i("Upload file "+file+" failed! ");\r
\r
+ }\r
}\r
\r
\r
+\r
}\r
}\r
if (sb.length()>0) {\r
String filepath = Util.getLogfilePath(runtime, logfile);\r
URL serverurl = null;\r
try {\r
- serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), TimeUtil.getSystemTime3(), logfile));\r
+ serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), TimeUtil.getSystemTime3(), logfile,runtime));\r
} catch (MalformedURLException e) {\r
e.printStackTrace();\r
}\r
if (Util.LogfileExist(runtime, logfile)) {\r
\r
sendSMS(phonenumber, "start Upload " + logfile + " to " + Config.getFtpServer(mContext) +" ...");\r
- if( ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {\r
- sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) +" success!");\r
+ String logtime=TimeUtil.getSystemTime3();\r
+\r
+ if (upload_logs_via_ftp) {\r
+ if (ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {\r
+ sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) + " success!");\r
+ } else {\r
+ sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) + " failed!");\r
+ }\r
}else{\r
- sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) +" failed!");\r
+ if (ICHttpUtil.uploadFile(filepath,runtime,logtime)) {\r
+ sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) + " success!");\r
+ } else {\r
+ sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) + " failed!");\r
+ }\r
}\r
} else {\r
sendSMS(phonenumber, logfile + " not exist !");\r
};\r
runTask(temp, call);\r
String ip;\r
+ try {\r
+ Thread.sleep(500L);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
// ICLogger.i(temp.toString());\r
if (temp.domainIp!=null){\r
if (temp.hostIp!=null){\r
--- /dev/null
+package com.enqualcomm.support.utils;\r
+\r
+import android.content.Context;\r
+import android.util.Log;\r
+\r
+import com.enqualcomm.support.Config;\r
+import com.sina.util.dnscache.net.ApacheHttpClientNetworkRequests;\r
+import com.enqualcomm.support.bean.Runtime;\r
+\r
+import java.io.DataInputStream;\r
+import java.io.DataOutputStream;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileOutputStream;\r
+import java.io.OutputStream;\r
+import java.net.HttpURLConnection;\r
+import java.net.URL;\r
+import java.util.zip.CRC32;\r
+import java.util.zip.CheckedOutputStream;\r
+import java.util.zip.ZipOutputStream;\r
+\r
+import static android.content.ContentValues.TAG;\r
+\r
+public class ICHttpUtil {\r
+ public static boolean uploadFile(String filenames, Runtime runtime,String logtime) {\r
+\r
+ try {\r
+ if (Util.zipFile(new File(filenames), runtime.getCacheDir().getAbsolutePath(),\r
+ new ZipOutputStream(new CheckedOutputStream(new FileOutputStream(filenames+".zip"),new CRC32()))\r
+ , filenames)) {\r
+ filenames += ".zip";\r
+ }\r
+ }catch (Exception e){\r
+ e.printStackTrace();\r
+ }\r
+ String server= Config.getFotaServerIP(runtime.getContextProxy().context);\r
+ int port= Config.getFotaServerPort(runtime.getContextProxy().context);\r
+ String product=DeviceInfoUtil.getModule();\r
+ String pkgver=DeviceInfoUtil.getSWVersionDisplayName();\r
+ String imei=runtime.IMEI();\r
+ String actionUrl = "http://"+server+":"+port + "/UploadFile.jsp?product=" + product + "&pkgver="+ pkgver + "&imei="+ imei+"&logtime="+logtime;\r
+ return upLoadFile(actionUrl, new File(filenames));\r
+\r
+ }\r
+ public static boolean upLoadFile(String url, File file) {\r
+ boolean result = false;\r
+ try {\r
+ if (null == url || null == file || !file.exists() || file.length() < 1) {\r
+ return false;\r
+ }\r
+ /**\r
+ * 第一部分\r
+ */\r
+ URL urlObj = new URL(url);\r
+ HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();\r
+\r
+ /**\r
+ * 设置关键值\r
+ */\r
+ con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式\r
+ con.setDoInput(true);\r
+ con.setDoOutput(true);\r
+ con.setUseCaches(false); // post方式不能使用缓存\r
+\r
+ // 设置请求头信息\r
+ con.setRequestProperty("Connection", "Keep-Alive");\r
+ con.setRequestProperty("Charset", "UTF-8");\r
+\r
+ // 设置边界\r
+ String BOUNDARY = "----------" + System.currentTimeMillis();\r
+ con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);\r
+\r
+ // 请求正文信息\r
+\r
+ // 第一部分:\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.append("--"); // ////////必须多两道线\r
+ sb.append(BOUNDARY);\r
+ sb.append("\r\n");\r
+ sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");\r
+ sb.append("Content-Type:application/octet-stream\r\n\r\n");\r
+\r
+ byte[] head = sb.toString().getBytes("utf-8");\r
+\r
+ // 获得输出流\r
+ OutputStream out = new DataOutputStream(con.getOutputStream());\r
+ out.write(head);\r
+\r
+ // 文件正文部分\r
+ DataInputStream in = new DataInputStream(new FileInputStream(file));\r
+ int bytes = 0;\r
+ byte[] bufferOut = new byte[1024];\r
+ while ((bytes = in.read(bufferOut)) != -1) {\r
+ out.write(bufferOut, 0, bytes);\r
+ }\r
+ in.close();\r
+\r
+ // 结尾部分\r
+ byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线\r
+ out.write(foot);\r
+ out.flush();\r
+ out.close();\r
+\r
+ int statusCode = con.getResponseCode();\r
+ String msg=con.getResponseMessage();\r
+ Log.e(TAG,msg);\r
+ if (statusCode == 200) {\r
+ result = true;\r
+ }\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ return result;\r
+ }\r
+}\r
import android.os.Build;\r
\r
\r
+import java.io.BufferedInputStream;\r
+import java.io.BufferedOutputStream;\r
import java.io.ByteArrayOutputStream;\r
import java.io.ByteArrayInputStream;\r
import java.io.File;\r
import java.io.FileInputStream;\r
import java.io.FileOutputStream;\r
import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.OutputStream;\r
import java.lang.reflect.Method;\r
import java.net.InetAddress;\r
import java.nio.ByteBuffer;\r
import java.nio.charset.Charset;\r
import java.util.ArrayList;\r
+import java.util.Enumeration;\r
import java.util.Iterator;\r
+import java.util.List;\r
import java.util.UUID;\r
+import java.util.zip.CRC32;\r
+import java.util.zip.CheckedOutputStream;\r
+import java.util.zip.ZipEntry;\r
+import java.util.zip.ZipFile;\r
+import java.util.zip.ZipOutputStream;\r
\r
import okio.BufferedSink;\r
import okio.Okio;\r
\r
import static android.content.Context.CONNECTIVITY_SERVICE;\r
import static android.content.Context.WIFI_SERVICE;\r
+import static chestnut.utils.FileUtils.closeIO;\r
+import static chestnut.utils.FileUtils.createOrExistsDir;\r
+import static chestnut.utils.FileUtils.createOrExistsFile;\r
+import static chestnut.utils.StringUtils.isSpace;\r
\r
public class Util {\r
public static Charset UTF_16 = Charset.forName("UTF-16LE");\r
return file.getAbsolutePath();\r
}\r
\r
- public static String getServerLogfilePath(String serverhost,String timefolder,String logfilename) {\r
+\r
+ private static int BUFFER_LEN=1024;\r
+ /**\r
+ * 压缩文件\r
+ * @param srcFile 待压缩的源文件\r
+ * @param rootPath 源文件的根路径\r
+ * @param zos Zip输出流\r
+ * @param comment 备注\r
+ * @return 压缩成功返回true\r
+ * @throws IOException\r
+ */\r
+ public static boolean zipFile(final File srcFile, String rootPath ,final ZipOutputStream zos ,final String comment) throws IOException {\r
+ rootPath = rootPath + (isSpace(rootPath) ? "" : File.separator) + srcFile.getName();\r
+\r
+ if (srcFile.isDirectory()) {\r
+ File[] fileList = srcFile.listFiles();\r
+ if (fileList == null || fileList.length <= 0) {\r
+ ZipEntry entry = new ZipEntry(rootPath + '/');\r
+ entry.setComment(comment);\r
+ zos.putNextEntry(entry);\r
+ zos.closeEntry();\r
+ } else {\r
+ for (File file : fileList) {\r
+ if (!zipFile(file, rootPath, zos, comment)) return false;\r
+ }\r
+ }\r
+ } else {\r
+ InputStream is = null;\r
+ try {\r
+ is = new BufferedInputStream(new FileInputStream(srcFile));\r
+ ZipEntry entry = new ZipEntry(rootPath);\r
+ entry.setComment(comment);\r
+ zos.putNextEntry(entry);\r
+ byte buffer[] = new byte[BUFFER_LEN];\r
+ int len;\r
+ while ((len = is.read(buffer, 0, BUFFER_LEN)) != -1) {\r
+ zos.write(buffer, 0, len);\r
+ }\r
+ zos.closeEntry();\r
+ } finally {\r
+ if(is!=null)\r
+ closeIO(is);\r
+ is=null;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+ /**\r
+ * Unzip the file by keyword.\r
+ *\r
+ * @param zipFile The ZIP file.\r
+ * @param destDir The destination directory.\r
+ * @param keyword The keyboard.\r
+ * @return the unzipped files\r
+ * @throws IOException if unzip unsuccessfully\r
+ */\r
+ public static List<File> unzipFileByKeyword(final File zipFile,final File destDir,final String keyword) throws IOException {\r
+ if (zipFile == null || destDir == null) return null;\r
+ List<File> files = new ArrayList<>();\r
+ ZipFile zip = new ZipFile(zipFile);\r
+ Enumeration<?> entries = zip.entries();\r
+ try {\r
+ if (isSpace(keyword)) {\r
+ while (entries.hasMoreElements()) {\r
+ ZipEntry entry = ((ZipEntry) entries.nextElement());\r
+ String entryName = entry.getName();\r
+ if (entryName.contains("../")) {\r
+ ICLogger.log("ZipUtils", "it's dangerous!");//防止被利用漏洞恶意修改文件\r
+ return files;\r
+ }\r
+ if (!unzipChildFile(destDir, files, zip, entry)) return files;\r
+ }\r
+ } else {\r
+ while (entries.hasMoreElements()) {\r
+ ZipEntry entry = ((ZipEntry) entries.nextElement());\r
+ String entryName = entry.getName();\r
+ if (entryName.contains("../")) {\r
+ ICLogger.log("ZipUtils", "it's dangerous!");\r
+ return files;\r
+ }\r
+ if (entryName.contains(keyword)) {\r
+ if (!unzipChildFile(destDir, files, zip, entry)) return files;\r
+ }\r
+ }\r
+ }\r
+ } finally {\r
+ zip.close();\r
+ }\r
+ return files;\r
+ }\r
+\r
+ private static boolean unzipChildFile(final File destDir, final List<File> files, final ZipFile zip, final ZipEntry entry)\r
+ throws IOException {\r
+ File file = new File(destDir, entry.getName());\r
+ files.add(file);\r
+ if (entry.isDirectory()) {\r
+ return createOrExistsDir(file);//创建文件夹\r
+ } else {\r
+ if (!createOrExistsFile(file)) return false;\r
+ InputStream in = null;\r
+ OutputStream out = null;\r
+ try {\r
+ in = new BufferedInputStream(zip.getInputStream(entry));\r
+ out = new BufferedOutputStream(new FileOutputStream(file));\r
+ byte buffer[] = new byte[BUFFER_LEN];\r
+ int len;\r
+ while ((len = in.read(buffer)) != -1) {\r
+ out.write(buffer, 0, len);\r
+ }\r
+ } finally {\r
+ if (in != null) {\r
+ in.close();\r
+ }\r
+ if (out != null) {\r
+ out.close();\r
+ }\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+\r
+ public static String getServerLogfilePath(String serverhost,String timefolder,String logfilename ,Runtime runtime) {\r
StringBuilder urlbuilder=new StringBuilder();\r
- urlbuilder.append("ftp://").append(serverhost).append("/")\r
+ String srvIP=serverhost;\r
+ if (SimSignalUtil.checkNet(runtime.getContextProxy().context) ) {\r
+ srvIP=runtime.getDnsUtil().getServerIP_ByDNSCache("http://"+serverhost);\r
+ if (null == srvIP ) {\r
+ srvIP=serverhost;\r
+ }\r
+ }\r
+ urlbuilder.append("ftp://").append(srvIP).append("/")\r
.append("ftp/log/")\r
.append(DeviceInfoUtil.getModule()).append("/")\r
.append(DeviceInfoUtil.getSWVersionDisplayName()).append("/")\r
-#Sat Feb 29 18:14:15 CST 2020\r
-VERSION_CODE=364\r
+#Mon Mar 02 00:29:11 CST 2020\r
+VERSION_CODE=365\r
*/
package com.sina.util.dnscache.net;
+import android.util.Log;
+
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Map.Entry;
+import java.util.logging.Logger;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import com.sina.util.dnscache.Tools;
+import static android.content.ContentValues.TAG;
+
/**
*
* 项目名称: DNSCache 类名称: ApacheHttpClientNetworkRequests
out.close();
int statusCode = con.getResponseCode();
+ String msg=con.getResponseMessage();
+ Log.e(TAG,msg);
if (statusCode == 200) {
result = true;
}