upgrade doip-sdk

This commit is contained in:
CaiHQ 2022-01-04 10:43:53 +08:00
parent 5fb99f473a
commit afad80ee2b
25 changed files with 363 additions and 697 deletions

View File

@ -1,5 +1,6 @@
plugins {
id 'java'
id 'java-library'
id 'application'
}
@ -25,19 +26,19 @@ sourceSets {
}
dependencies {
implementation project(":common")
implementation project(":mockjava")
api project(":common")
api project(":mockjava")
implementation 'org.apache.commons:commons-lang3:3.0'
implementation 'com.atlassian.commonmark:commonmark:0.17.0'
implementation 'com.idealista:format-preserving-encryption:1.0.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.sun.mail:javax.mail:1.6.2'
implementation 'org.apache.commons:commons-math3:3.6.1'
implementation 'org.codehaus.groovy:groovy-all:3.0.8'
implementation 'org.jsoup:jsoup:1.14.2'
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
implementation fileTree(dir: 'lib', include: '*.jar')
implementation 'io.grpc:grpc-all:1.41.0'
implementation 'org.jsoup:jsoup:1.14.2'
implementation 'com.sun.mail:javax.mail:1.6.2'
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
api fileTree(dir: 'lib', include: '*.jar')
testImplementation 'junit:junit:4.13.2'
}

BIN
lib/doipsdk-v1.0.5.jar Normal file

Binary file not shown.

View File

@ -32,9 +32,10 @@ public class DebugMain {
ContractProcess.instance.handler.setDBInfo(wrap("", config.dbPath), printCallback);
ContractProcess.instance.handler.registerMangerPort(wrap("", Integer.valueOf(config.cPort)), printCallback);
ContractProcess.instance.handler.setContractBundle(wrap("", config.contract), printCallback);
String urlFormat = ("http://%s/SCIDE/SCManager?action=reconnectAll&owner=%s");
String urlFormat = ("http://%s/SCIDE/SCManager?action=reconnectPort&owner=%s&port=%d");
String url = String.format(urlFormat, config.agentHttpAddr, config.pubKey);
String url = String.format(urlFormat, config.agentHttpAddr,
config.pubKey, ContractProcess.instance.server.mainPort.get());
Map<String, Object> resp = HttpUtil.httpGet(url);
String data = (String) resp.get("response");
LOGGER.info(JsonUtil.toPrettyJson(JsonUtil.parseStringAsJsonObject(data)));

View File

@ -22,7 +22,6 @@ import org.bdware.sc.ContractResult.Status;
import org.bdware.sc.bean.*;
import org.bdware.sc.boundry.JavaScriptEntry;
import org.bdware.sc.boundry.Resources;
import org.bdware.sc.boundry.utils.FileUtil;
import org.bdware.sc.boundry.utils.RocksDBUtil;
import org.bdware.sc.boundry.utils.UtilRegistry;
import org.bdware.sc.compiler.YJSCompiler;
@ -35,6 +34,7 @@ import org.bdware.sc.handler.ContractHandler;
import org.bdware.sc.index.TimeSerialIndex;
import org.bdware.sc.node.*;
import org.bdware.sc.trace.ProgramPointCounter;
import org.bdware.sc.util.FileUtil;
import org.bdware.sc.util.HashUtil;
import org.bdware.sc.util.JsonUtil;
import org.objectweb.asm.ClassReader;
@ -522,7 +522,7 @@ public class ContractProcess {
LOGGER.debug("result: " + retStr);
return retStr;
} else {
contract.setScript(FileUtil.getContent(zipPath));
contract.setScript(FileUtil.getFileContent(zipPath));
return setContract(contract);
}

View File

@ -1,5 +0,0 @@
package org.bdware.sc.blockdb;
public class Constants {
public static final int ELASTIC_DB = 0;
}

View File

@ -1,13 +0,0 @@
package org.bdware.sc.blockdb;
import org.bdware.sc.commParser.BDLedger.Transaction;
import java.util.Map;
public interface DBRepository {
public String Get(Map<String, Object> condition);//get hash of transaction
public boolean Put(Transaction trans);//put transaction into databases
public boolean Delete(String hash);//delete transaction
public boolean Create_DB();//createDB
public boolean Open_DB(); //OpenDB
}

View File

@ -1,12 +0,0 @@
package org.bdware.sc.blockdb;
public class DBUtil {
private static DBRepository instance = null;
public static DBRepository getInstance(int type) {
if (null == instance && type == Constants.ELASTIC_DB) {
instance = new ElasticDBUtil();
}
return instance;
}
}

View File

@ -1,106 +0,0 @@
package org.bdware.sc.blockdb;
import okhttp3.*;
import org.bdware.sc.commParser.BDLedger.Transaction;
import org.bdware.sc.util.JsonUtil;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ElasticDBUtil implements DBRepository {
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
public OkHttpClient client = new OkHttpClient();
public List<Transaction> transactions = new ArrayList<>();
public int bulk = 10000;
@Override
public String Get(Map<String, Object> condition) {
// TODO Auto-generated method stub
Map<String, Object> map = new HashMap<>();
Map<String, Object> map1 = new HashMap<>();
Map<String, String> map2 = new HashMap<>();
map2.put("data", condition.get("data") + "*");
map1.put("wildcard", map2);
map.put("query", map1);
String json = JsonUtil.toJson(map);
RequestBody requestbody = FormBody.create(json, JSON);
Request request = new Request.Builder().url("http://127.0.0.1:9200/transaction/_doc/_search").post(requestbody).build();
try {
Response resp = client.newCall(request).execute();
System.out.print(resp.body().string());
resp.body().close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
@Override
public boolean Put(Transaction trans) {
// TODO Auto-generated method stub
transactions.add(trans);
if (transactions.size() == bulk) {
StringBuilder sb = new StringBuilder();
try {
for (int i = 0; i < bulk; i++) {
sb
.append("{\"index\":{}}\n{\"data\":\"")
.append(new String(transactions.get(i).data, StandardCharsets.UTF_8))
.append("\",")
.append("\"hash\":")
.append("\"")
.append(new String(transactions.get(i).hash, StandardCharsets.UTF_8))
.append("\"")
.append("}")
.append("\n");
}
//System.out.println(sb.toString());
RequestBody requestbody = FormBody.create(sb.toString(), JSON);
Request request = new Request.Builder().url("http://127.0.0.1:9200/transaction/_doc/_bulk").post(requestbody).build();
Response res1 = client.newCall(request).execute();
boolean res = res1.isSuccessful();
res1.body().close();
System.out.println(res);
transactions.clear();
return res;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
@Override
public boolean Delete(String hash) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Create_DB() {
// TODO Auto-generated method stub
RequestBody body = RequestBody.create("", JSON);
Request request = new Request.Builder().url("http://127.0.0.1:9200/transaction/").put(body).build();
try {
Response response = client.newCall(request).execute();
boolean res = response.isSuccessful();
response.body().close();
return res;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
@Override
public boolean Open_DB() {
// TODO Auto-generated method stub
return false;
}
}

View File

@ -1,36 +0,0 @@
package org.bdware.sc.blockdb;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class MongoDBUtil {
public static Object connect(String url, int port, String dbName, String usrName, String pwd) {
try {
Class serverAddr = Class.forName("com.mongodb.ServerAddress");
Constructor cons = serverAddr.getConstructor(String.class, Integer.TYPE);
Object serverAddress = cons.newInstance(url, port);
List addrs = new ArrayList<>();
addrs.add(serverAddress);
Method createeScramSha1 =
Class.forName("com.mongodb.MongoCredential")
.getDeclaredMethod(
"createScramSha1Credential",
String.class,
String.class,
char[].class);
Object credential = createeScramSha1.invoke(null, usrName, dbName, pwd.toCharArray());
List credentials = new ArrayList<>();
credentials.add(credential);
Constructor mongoClient =
Class.forName("com.mongodb.MongoClient").getConstructor(List.class, List.class);
Object client = mongoClient.newInstance(addrs, credentials);
// 通过连接认证获取MongoDB连接
return client;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}

View File

@ -1,72 +0,0 @@
package org.bdware.sc.blockdb;
import org.bdware.sc.commParser.BDLedger.Transaction;
import org.rocksdb.Options;
import org.rocksdb.RocksDB;
import org.rocksdb.RocksDBException;
import java.io.File;
import java.util.Map;
public class RocksDBUtil implements DBRepository{
private static RocksDB rocksdb;
static {
RocksDB.loadLibrary();
}
public static RocksDB loadDB(String path, String readOnly) {
try {
Options options = new Options();
options.setCreateIfMissing(true);
RocksDB rocksDB;
File lockFile = new File(path,"LOCK");
lockFile.delete();
if (readOnly != null && readOnly.equals("true")) {
rocksDB = RocksDB.openReadOnly(options, path);
} else
rocksDB = RocksDB.open(options, path);
rocksdb = rocksDB;
return rocksDB;
} catch (RocksDBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
public String Get(Map<String, Object> condition) {
// TODO Auto-generated method stub
if(condition.containsKey("start")&&condition.containsKey("end")) {
int start = (int)condition.get("start");
int end = (int)condition.get("end");
}
return null;
}
@Override
public boolean Put(Transaction trans) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Delete(String hash) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Create_DB() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Open_DB() {
// TODO Auto-generated method stub
return false;
}
}

View File

@ -1,117 +0,0 @@
package org.bdware.sc.blockdb;
import org.bdware.sc.commParser.BDLedger.Block;
import org.bdware.sc.commParser.BDLedger.BlockBody;
import org.bdware.sc.commParser.BDLedger.BlockHeader;
import org.bdware.sc.util.HashUtil;
import java.io.File;
import java.sql.*;
public class SqliteDBUtil {
private Connection conn;
public static SqliteDBUtil connect(String url) {
try {
String name = "org.sqlite.JDBC";
SqliteDBUtil util = new SqliteDBUtil();
String path = "jdbc:sqlite:";
File file = new File(url);
path = path + file.getAbsolutePath();
System.out.println("[SqliteDBUtil] connect:" + path);
Class.forName(name);
util.conn = DriverManager.getConnection(path);
return util;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public BlockBody getBlockBody(String headerHash, String bodyHash) {
try {
Statement stmt = conn.createStatement();
// ResultSet result = stmt.executeQuery("select * from BlockHeader where hash =
// " + headerHash);
String sql = "select * from BlockBody where ID = ?";
PreparedStatement pre = conn.prepareStatement(sql);
pre.setBytes(1, HashUtil.str16ToBytes(bodyHash));
ResultSet result = pre.executeQuery();
// Assert we get only one!!!!
while (result.next()) {
System.out.println(result.getBytes("ID"));
return BlockBody.fromBytes(result.getBytes("Data"));
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public Block getBlock(String headerHash, String bodyHash) {
try {
BlockHeader header = new BlockHeader();
BlockBody body = new BlockBody();
Statement stmt = conn.createStatement();
String sql = "select * from BlockBody where ID = ?";
PreparedStatement pre = conn.prepareStatement(sql);
pre.setBytes(1, HashUtil.str16ToBytes(bodyHash));
ResultSet result = pre.executeQuery();
while (result.next()) {
body = BlockBody.fromBytes(result.getBytes("Data"));
}
String sql1 = "select * from BlockHeader where Hash = ?";
pre = conn.prepareStatement(sql1);
pre.setBytes(1, HashUtil.str16ToBytes(headerHash));
result = pre.executeQuery();
while (result.next()) {
header.index = result.getInt(1);
header.hash = result.getBytes(2);
header.version = result.getInt(3);
header.timestamp = result.getInt(4);
header.prevblockID = result.getBytes(5);
header.merkleroot = result.getBytes(6);
header.creatorID = result.getBytes(7);
Block block = new Block(header,body);
return block;
//return Block.fromBytes(result.getBytes("Data"));
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public byte[] bodyselectall() {
try {
Statement stmt = conn.createStatement();
// ResultSet result = stmt.executeQuery("select * from BlockHeader where hash =
// " + headerHash);
String sql = "select * from BlockBody limit 1,1";
PreparedStatement pre = conn.prepareStatement(sql);
ResultSet result = pre.executeQuery();
// Assert we get only one!!!!
while (result.next()) {
return result.getBytes(1);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public byte[] headerselectall() {
try {
Statement stmt = conn.createStatement();
// ResultSet result = stmt.executeQuery("select * from BlockHeader where hash =
// " + headerHash);
String sql = "select * from BlockHeader limit 1,1";
PreparedStatement pre = conn.prepareStatement(sql);
ResultSet result = pre.executeQuery();
// Assert we get only one!!!!
while (result.next()) {
return result.getBytes(2);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

View File

@ -1,39 +0,0 @@
package org.bdware.sc.blockdb;
import org.bdware.sc.commParser.BDLedger.Transaction;
import java.util.Map;
public class TimeDBUtil implements DBRepository{
@Override
public String Get(Map<String, Object> condition) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean Put(Transaction trans) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Delete(String hash) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Create_DB() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Open_DB() {
// TODO Auto-generated method stub
return false;
}
}

View File

@ -1,12 +1,10 @@
package org.bdware.sc.boundry;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bdware.sc.ContractProcess;
import org.bdware.sc.bean.ContractRequest;
import org.bdware.sc.boundry.utils.SQLUtil;
import org.bdware.sc.conn.ResultCallback;
import org.bdware.sc.conn.SocketGet;
import org.bdware.sc.engine.DesktopEngine;
@ -25,9 +23,6 @@ import wrp.jdk.nashorn.internal.runtime.ScriptFunction;
import wrp.jdk.nashorn.internal.runtime.ScriptObject;
import wrp.jdk.nashorn.internal.scripts.JO;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@ -35,11 +30,13 @@ import java.io.PrintStream;
import java.math.BigInteger;
import java.net.URL;
import java.net.URLConnection;
import java.security.Security;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@ -84,25 +81,6 @@ public class JavaScriptEntry {
return HashUtil.hashByteArray(hash);
}
public static Connection getMysqlConnection(String url, String usrName, String pwd) {
return SQLUtil.getConnection("jdbc:mysql://" + url, usrName, pwd);
}
public static String example(String arg) {
LOGGER.debug("called: " + arg);
return arg + 1;
}
// public static MongoClient connectMongoDb(String url, int port, String dbName, String usrName,
// String pwd) {
// return getMongoDBConnection(url, port, dbName, usrName, pwd);
// }
//
// public static MongoClient getMongoDBConnection(String url, int port, String dbName, String
// usrName, String pwd) {
// return MongoDBUtil.connect(url, port, dbName, usrName, pwd);
// }
public static String bytes2Str(byte[] bytes) {
return new String(bytes);
}
@ -153,44 +131,6 @@ public class JavaScriptEntry {
return bo.toByteArray();
}
// private static String list2Str(List<String> reservedList) {
// return JsonUtil.toJson(reservedList);
// }
//
// private static String map2Str(Map<String, Object> map) {
// return JsonUtil.toJson(map);
// }
// private static CloseableHttpClient getHttpClient(String url) {
// try {
// SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
//
// @Override
// public boolean isTrusted(java.security.cert.X509Certificate[] arg0, String arg1)
// throws java.security.cert.CertificateException {
// return true;
// }
// }).build();
//
// SSLConnectionSocketFactory sslSf = new SSLConnectionSocketFactory(sslcontext, null, null,
// new NoopHostnameVerifier());
// int tle = 10;
// if (url.contains("data.tj.gov.cn"))
// tle = 3;
// return HttpClients.custom().setSSLSocketFactory(sslSf)
// .setKeepAliveStrategy(new ConnectionKeepAliveStrategy() {
// @Override
// public long getKeepAliveDuration(HttpResponse arg0, HttpContext arg1) {
// return 0;
// }
// }).setConnectionTimeToLive(tle, TimeUnit.SECONDS).build();
//
// } catch (Exception e) {
// e.printStackTrace();
// }
// return null;
// }
public static InputStream httpAsInputStream(String url) {
try {
URL realUrl = new URL(url);
@ -202,51 +142,6 @@ public class JavaScriptEntry {
}
}
// public static String httpPost(String str) {
// System.out.println("JavaSScriptEntry httpPost:" + str);
// PostRequest req = new PostRequest();
// req = JsonUtil.fromJson(str, PostRequest.class);
// // System.out.println("url========>" + req.url);
// // System.out.println("data=======>" + req.data);
//
// Result r = new Result();
// try {
// URL url = new URL(req.url);//
// HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// connection.setDoOutput(true);
// connection.setDoInput(true);
// connection.setUseCaches(false);
// connection.setInstanceFollowRedirects(true);
// connection.setRequestMethod("POST"); // 璁剧疆璇锋眰鏂瑰紡
// connection.setRequestProperty("Accept", "application/json"); // 璁剧疆鎺ユ敹鏁版嵁鐨勬牸寮<EFBFBD>
// connection.setRequestProperty("Content-Type", "application/json"); // 璁剧疆鍙戦<EFBFBD>佹暟鎹殑鏍煎紡
// connection.connect();
// OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); //
// utf-8缂栫爜
// out.append(req.data);
// out.flush();
// out.close();
//
// r.resposeCode = connection.getResponseCode();
// InputStream input = connection.getInputStream();
//
// Scanner sc = new Scanner(input);
// StringBuilder sb = new StringBuilder();
// for (; sc.hasNextLine();) {
// sb.append(sc.nextLine()).append("\n");
// }
// sc.close();
// r.response = sb.toString();
// return JsonUtil.toJson(r);
// } catch (Throwable e) {
// r.resposeCode = 505;
// // ByteArrayOutputStream bo = new ByteArrayOutputStream();
// // e.printStackTrace(new PrintStream(bo));
// r.response = e.getMessage();
// return JsonUtil.toJson(r);
// }
// }
public static void executeFunction(ScriptFunction callback, Object arg) {
DesktopEngine.applyWithGlobal(callback, currentEngine.getNashornGlobal(), arg);
}
@ -404,123 +299,6 @@ public class JavaScriptEntry {
}
}
/*public static String executeContract(String contractID, String action, String arg) {
//redo,use record data
if(currentSyncUtil.transRecoverUtil != null && currentSyncUtil.transRecoverUtil.recovering){
String k = TransRecordUtil.produceExecuteIdentifier(contractID,action,arg);
return currentSyncUtil.transRecoverUtil.curRecoverRecord.getExecuteResult(k);
}
try {
ContractRequest app = new ContractRequest();
app.setContractID(contractID).setAction(action).setArg(arg);
//app.doSignature(keyPair.getPrivateKey().toString(16));
app.doSignature(keyPair);
String result = get.syncGet("dd", "executeContract", JsonUtil.toJson(app));
if(currentSyncUtil.startFlag && currentSyncUtil.currType == SyncType.Trans){
String k = currentSyncUtil.transRecordUtil.produceExecuteIdentifier(contractID,action,arg);
currentSyncUtil.transRecordUtil.recordExecutes(k,result);
}
return result;
} catch (Exception e) {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(bo));
String result = bo.toString();
if(currentSyncUtil.startFlag && currentSyncUtil.currType == SyncType.Trans){
String k = TransRecordUtil.produceExecuteIdentifier(contractID,action,arg);
currentSyncUtil.transRecordUtil.recordExecutes(k,result);
}
return result;
}
}*/
// public static String queryContractIdByDOI(String contractDOI) throws Exception {
// DigitalObject contractDO;
// DoipClient doipClient =
// DoipClient.createByRepoUrlAndMsgFmt(
// DOIPMainServer.repoUrl, DoipMessageFormat.PACKET.getName());
// DoMessage response = doipClient.retrieve(contractDOI, null, null);
// if (response.parameters.response == DoResponse.Success) {
// contractDO = DigitalObject.parse(response.body);
// } else {
// response = DOAClient.getGlobalInstance().retrieve(contractDOI, null, null);
// contractDO = DigitalObject.parse(response.body);
// }
// ContractInstanceDO contractInstanceDO =
// (ContractInstanceDO)
// ContractManager.toObject(contractDO.elements.get(0).getData());
// return contractInstanceDO.id;
// }
// public static String executeContractByDOI(String contractDOI, String action, String arg) {
// try {
// String contractID = queryContractIdByDOI(contractDOI);
// return executeContract(contractID, action, arg);
// } catch (Exception e) {
// ByteArrayOutputStream bo = new ByteArrayOutputStream();
// e.printStackTrace(new PrintStream(bo));
// return bo.toString();
// }
// }
//
// public static String getAuthInfo() {
// try {
// DigitalObject contractDO;
// DoipClient doipClient =
// DoipClient.createByRepoUrlAndMsgFmt(
// DOIPMainServer.repoUrl, DoipMessageFormat.PACKET.getName());
// DoMessage response = doipClient.retrieve(authInfoPersistDOI, null, null);
// if (response.parameters.response != DoResponse.Success) {
// response = DOAClient.getGlobalInstance().retrieve(authInfoPersistDOI, null,
// null);
// }
// contractDO = DigitalObject.parse(response.body);
// return new String(contractDO.elements.get(0).getData());
// } catch (Exception e) {
// ByteArrayOutputStream bo = new ByteArrayOutputStream();
// e.printStackTrace(new PrintStream(bo));
// return "Failed: " + bo.toString();
// }
// }
//
// public static String setAuthInfo(String authInfo) {
// try {
//
// DigitalObject contractDO = new DigitalObject(authInfoPersistDOI, DoType.Json);
// Element e = new Element("authInfo", "JsonString");
// e.setData(authInfo.getBytes());
// contractDO.addElements(e);
//
// DoipClient doipClient =
// DoipClient.createByRepoUrlAndMsgFmt(
// DOIPMainServer.repoUrl, DoipMessageFormat.PACKET.getName());
// DoMessage response = doipClient.update(contractDO);
// if (response.parameters.response != DoResponse.Success) {
// DoHandleRecord dohr =
// DOAClient.getGlobalInstance().resolveDO(authInfoPersistDOI);
// if (dohr == null) {
// return "Failed: Can not resolve authInfoPersistDOI: " +
// authInfoPersistDOI;
// }
// ServiceHandleRecord repoHandleRecord =
// DOAClient.getGlobalInstance().resolveDOIPService(dohr.repository);
// doipClient =
// DoipClient.createByRepoUrlAndMsgFmt(
// repoHandleRecord.getListenerInfos().get(0).url,
// DoipMessageFormat.PACKET.getName());
// response = doipClient.update(contractDO);
// if (response.parameters.response != DoResponse.Success) {
// return "Failed: Can not update authInfoPersistDOI: " + authInfoPersistDOI;
// }
// }
// return "Succeeded";
// } catch (Exception e) {
// ByteArrayOutputStream bo = new ByteArrayOutputStream();
// e.printStackTrace(new PrintStream(bo));
// return "Failed: " + bo.toString();
// }
// }
public static String executeContractAsync(
String contractID, String action, String arg, final ScriptFunction cb) {
try {
@ -696,46 +474,6 @@ public class JavaScriptEntry {
// TODO
}
public static String sendEmail(String json) {
try {
final JsonObject jo = JsonParser.parseString(json).getAsJsonObject();
Properties props = new Properties();
props.setProperty("mail.debug", "false");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.host", jo.get("host").getAsString());
props.setProperty("mail.smtp.port", jo.get("port").getAsString());
props.setProperty("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", jo.get("port").getAsString());
Session session =
Session.getDefaultInstance(
props,
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
jo.get("from").getAsString(),
jo.get("pwd").getAsString()); // 发件人邮件用户名密码
}
});
// 创建邮件对象
Message msg = new MimeMessage(session);
msg.setSubject(jo.get("subject").getAsString());
msg.setText(jo.get("content").getAsString());
msg.setFrom(new InternetAddress(jo.get("from").getAsString()));
msg.addRecipient(
Message.RecipientType.TO, new InternetAddress(jo.get("to").getAsString()));
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
return "failed";
}
return "success";
}
public static ScriptObject getCaller(int i) {
JO ret = new JO(PropertyMap.newMap());
@ -752,8 +490,4 @@ public class JavaScriptEntry {
public String response;
}
static class PostRequest {
String url;
String data;
}
}

View File

@ -0,0 +1,142 @@
package org.bdware.sc.boundry.utils;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bdware.doip.codec.digitalObject.DigitalObject;
import org.bdware.doip.codec.digitalObject.Element;
import org.bdware.doip.codec.doipMessage.DoipMessage;
import org.bdware.doip.codec.doipMessage.DoipMessageFactory;
import org.bdware.doip.codec.operations.BasicOperations;
import org.bdware.doip.endpoint.doipClient.DoipClientImpl;
import org.bdware.doip.endpoint.doipClient.DoipMessageCallback;
import org.bdware.sc.compiler.PermissionStub;
import org.bdware.sc.node.Permission;
import org.bdware.sc.util.JsonUtil;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@PermissionStub(permission = Permission.DOIP)
public class DOIPUtil {
private static final Logger LOGGER = LogManager.getLogger(DOIPUtil.class);
private final String url;
private final DoipClientImpl doipClient;
private DOIPUtil(String url) {
this.url = url;
this.doipClient = new DoipClientImpl();
doipClient.connect(url);
}
public static DOIPUtil createClient(String url) {
return new DOIPUtil(url);
}
public String test(String doi) {
return "create DOClient And hello " + doi + " World";
}
public boolean reconnect() {
try {
if (doipClient != null)
doipClient.reconnect();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
private DoipMessage syncGetMessage(DoipMessage message) {
List<DoipMessage> ret = new ArrayList<>();
DoipMessage msg = null;
try {
doipClient.sendMessage(message, new DoipMessageCallback() {
@Override
public void onResult(DoipMessage doipMessage) {
ret.add(doipMessage);
synchronized (ret) {
ret.notify();
}
}
});
synchronized (ret) {
ret.wait(5000);
}
if (ret.size() > 0)
msg = ret.get(0);
if (msg != null) {
return msg;
} else return DoipMessageFactory.createTimeoutResponse(message.requestID);
} catch (Exception ie) {
ie.printStackTrace();
return DoipMessageFactory.createConnectFailedResponse(message.requestID);
}
}
private static String convertDoipMsgToString(DoipMessage ret) {
try {
LOGGER.info(new String(ret.body.encodedData));
DigitalObject respDO = ret.body.getDataAsDigitalObject();
return respDO.toString();
} catch (Exception ie) {
ie.printStackTrace();
return "send doip message error: " + ie.getMessage();
}
}
public String hello(String repoID) {
DoipMessage msg = (new DoipMessageFactory.DoipMessageBuilder()).createRequest(repoID, BasicOperations.Hello.getName()).create();
return convertDoipMsgToString(syncGetMessage(msg));
}
public String retrieve(String doi, String args) {
DoipMessage msg = (new DoipMessageFactory.DoipMessageBuilder()).createRequest(doi, BasicOperations.Retrieve.getName())
.setBody(args.getBytes(StandardCharsets.UTF_8)).create();
return convertDoipMsgToString(syncGetMessage(msg));
}
public String call(String doi, String action, String args) {
JsonObject jo = new JsonObject();
jo.addProperty("action", action);
jo.addProperty("args", args);
DoipMessage msg = (new DoipMessageFactory.DoipMessageBuilder())
.createRequest(doi, BasicOperations.Retrieve.getName())
.setBody(jo.toString().getBytes(StandardCharsets.UTF_8)).create();
return convertDoipMsgToString(syncGetMessage(msg));
}
public String create(String repoID, String doString) {
DigitalObject digitalObject = JsonUtil.fromJson(doString, DigitalObject.class);
for (Element e : digitalObject.elements) {
if (null != e.dataString) {
e.setData(e.dataString.getBytes());
}
e.dataString = null;
}
DoipMessage msg =
new DoipMessageFactory.DoipMessageBuilder()
.createRequest(repoID, BasicOperations.Create.getName())
.setBody(digitalObject)
.create();
return convertDoipMsgToString(syncGetMessage(msg));
}
public String delete(String doID) {
DoipMessage msg =
new DoipMessageFactory.DoipMessageBuilder()
.createRequest(doID, BasicOperations.Delete.getName())
.create();
return convertDoipMsgToString(syncGetMessage(msg));
}
public String listOperation(String doID) {
DoipMessage msg =
new DoipMessageFactory.DoipMessageBuilder()
.createRequest(doID, BasicOperations.ListOps.getName())
.create();
return convertDoipMsgToString(syncGetMessage(msg));
}
}

View File

@ -0,0 +1,53 @@
package org.bdware.sc.boundry.utils;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.Security;
import java.util.Properties;
public class EmailUtil {
public static String sendEmail(String json) {
try {
final JsonObject jo = JsonParser.parseString(json).getAsJsonObject();
Properties props = new Properties();
props.setProperty("mail.debug", "false");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.host", jo.get("host").getAsString());
props.setProperty("mail.smtp.port", jo.get("port").getAsString());
props.setProperty("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", jo.get("port").getAsString());
Session session =
Session.getDefaultInstance(
props,
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
jo.get("from").getAsString(),
jo.get("pwd").getAsString()); // 发件人邮件用户名密码
}
});
// 创建邮件对象
Message msg = new MimeMessage(session);
msg.setSubject(jo.get("subject").getAsString());
msg.setText(jo.get("content").getAsString());
msg.setFrom(new InternetAddress(jo.get("from").getAsString()));
msg.addRecipient(
Message.RecipientType.TO, new InternetAddress(jo.get("to").getAsString()));
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
return "failed";
}
return "success";
}
}

View File

@ -12,7 +12,7 @@ import java.io.PrintStream;
public class FileUtil extends org.bdware.sc.util.FileUtil {
private static String getInternalFile(String path) {
File parent = new File("./ContractDB/" + ContractProcess.instance.getContractName());
if (path.contains("..")) {
if (path.contains("")) {
return null;
}
File f = new File(parent, path);

View File

@ -3,6 +3,38 @@ package org.bdware.sc.boundry.utils;
import org.bdware.sc.compiler.PermissionStub;
import org.bdware.sc.node.Permission;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@PermissionStub(permission = Permission.MongoDB)
public class MongoDBUtil extends org.bdware.sc.blockdb.MongoDBUtil {
public class MongoDBUtil {
public static Object connect(String url, int port, String dbName, String usrName, String pwd) {
try {
Class serverAddr = Class.forName("com.mongodb.ServerAddress");
Constructor cons = serverAddr.getConstructor(String.class, Integer.TYPE);
Object serverAddress = cons.newInstance(url, port);
List addrs = new ArrayList<>();
addrs.add(serverAddress);
Method createeScramSha1 =
Class.forName("com.mongodb.MongoCredential")
.getDeclaredMethod(
"createScramSha1Credential",
String.class,
String.class,
char[].class);
Object credential = createeScramSha1.invoke(null, usrName, dbName, pwd.toCharArray());
List credentials = new ArrayList<>();
credentials.add(credential);
Constructor mongoClient =
Class.forName("com.mongodb.MongoClient").getConstructor(List.class, List.class);
Object client = mongoClient.newInstance(addrs, credentials);
// 通过连接认证获取MongoDB连接
return client;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}

View File

@ -35,10 +35,8 @@ public class RocksDBUtil {
this.path = path;
Options options = new Options();
options.setCreateIfMissing(true);
File parent = new File("./ContractDB/" + ContractProcess.getContractDir());
File dir = new File(parent, path);
System.out.println("[EEEEEEEEEERO]");
LOGGER.info("init RocksDB in " + dir.getAbsolutePath());
if (!dir.exists()) {
LOGGER.trace("create directory " + dir.getAbsolutePath() + ": " + dir.mkdirs());

View File

@ -17,7 +17,6 @@ public class UtilRegistry {
public static Map<String, String> stubClzNameMap = new HashMap<>();
public static List<Class<?>> getUtilClasses() {
List<String> allName = Permission.allName();
List<Class<?>> ret = new ArrayList<>();
try {

View File

@ -0,0 +1,15 @@
package org.bdware.sc.compiler;
import org.bdware.sc.node.Permission;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface PermissionStub {
Permission permission();
}

View File

@ -0,0 +1,81 @@
package org.bdware.sc.compiler;
import org.objectweb.asm.*;
import java.io.IOException;
import java.io.InputStream;
public class PermissionStubGenerator extends ClassVisitor implements Opcodes {
private final String p;
public PermissionStubGenerator(int api, ClassVisitor cn, String permission) {
super(api, cn);
this.p = permission;
}
public static byte[] generateStub(Class<?> clz, String permission) {
PermissionStub stub = clz.getAnnotation(PermissionStub.class);
if (stub == null)
return null;
try {
String resource = clz.getCanonicalName().replaceAll("\\.", "/") + ".class";
InputStream input = clz.getClassLoader().getResourceAsStream(resource);
ClassReader cr;
cr = new ClassReader(input);
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
PermissionStubGenerator generator = new PermissionStubGenerator(ASM4, cw, permission);
cr.accept(generator, 0);
return cw.toByteArray();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
if (cv != null) {
cv.visit(version, access, name + "Stub", null, "java/lang/Object", null);
}
MethodVisitor mv = cv.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
mv.visitInsn(RETURN);
Label l1 = new Label();
mv.visitLabel(l1);
// mv.visitLocalVariable("this", "Lcom/yancloud/sc/boundry/utils/FileUtilStub;",
// null, l0, l1, 0);
mv.visitMaxs(1, 1);
mv.visitEnd();
}
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
if (cv != null) {
if (name.equals("<clinit>"))
return null;
if (name.equals("<init>")) {
return null;
}
MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
new String[]{"javax/script/ScriptException"});
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitTypeInsn(NEW, "javax/script/ScriptException");
mv.visitInsn(DUP);
mv.visitLdcInsn("Do not have " + p + " Permission");
mv.visitMethodInsn(INVOKESPECIAL, "javax/script/ScriptException", "<init>", "(Ljava/lang/String;)V");
mv.visitInsn(ATHROW);
mv.visitMaxs(5, 20);
mv.visitEnd();
return null;
}
return null;
}
}

View File

@ -2,18 +2,14 @@ package org.bdware.sc.trace;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.sun.mail.iap.ByteArray;
import org.bdware.analysis.CFGraph;
import org.bdware.sc.ContractProcess;
import wrp.jdk.nashorn.internal.runtime.ScriptObject;
import wrp.jdk.nashorn.internal.runtime.ScriptRuntime;
import wrp.jdk.nashorn.internal.runtime.TraceMethod;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
public class ProgramPointCounter extends ContractProcess.Logger implements TraceMethod {

View File

@ -0,0 +1,17 @@
package org.bdware.sc.boundry.utils.test;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.bdware.sc.boundry.utils.DOIPUtil;
import org.junit.Test;
public class DOIPUtilTest {
static Logger LOGGER = LogManager.getLogger(DOIPUtilTest.class);
@Test
public void testRetrieve() {
DOIPUtil util = DOIPUtil.createClient("tcp://127.0.0.1:21032");
LOGGER.info(util.retrieve("AnnotationExample", "{\"operation\":\"main\",\"arg\":\"\"}"));
}
}

View File

@ -1,14 +1,11 @@
package org.bdware.sc.test.synctest;
import org.bdware.sc.conn.ByteUtil;
import com.google.gson.JsonPrimitive;
import org.bdware.sc.redo.TransRecord;
import java.io.*;
import java.util.zip.GZIPInputStream;
public class TransRecordTest {
static TransRecord currentTransRecord = new TransRecord("myFun","myArg");
static TransRecord currentTransRecord = new TransRecord("myFun", new JsonPrimitive("myArg"));
public static void main(String[] args) {
// currentTransRecord.executes.put("k1","v1");