fix issue with wrong JSON-RPC income data
fix issue with not correctly formatted DATA
This commit is contained in:
parent
1a81061679
commit
8c9d49e0a8
|
@ -4,6 +4,9 @@ import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
|
||||||
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
|
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
|
||||||
import com.thetransactioncompany.jsonrpc2.server.Dispatcher;
|
import com.thetransactioncompany.jsonrpc2.server.Dispatcher;
|
||||||
|
|
||||||
|
import net.minidev.json.JSONArray;
|
||||||
|
import net.minidev.json.JSONValue;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import io.netty.channel.ChannelFuture;
|
import io.netty.channel.ChannelFuture;
|
||||||
|
@ -75,9 +78,20 @@ public class JsonRpcServerHandler extends SimpleChannelInboundHandler<HttpObject
|
||||||
postData += chunk.content().toString(0, chunk.content().capacity(), CharsetUtil.UTF_8);
|
postData += chunk.content().toString(0, chunk.content().capacity(), CharsetUtil.UTF_8);
|
||||||
|
|
||||||
if (chunk instanceof LastHttpContent) {
|
if (chunk instanceof LastHttpContent) {
|
||||||
JSONRPC2Request req = JSONRPC2Request.parse(postData);
|
Object tmpA = JSONValue.parse(postData);
|
||||||
JSONRPC2Response resp = dispatcher.process(req, null);
|
if (tmpA instanceof JSONArray) {
|
||||||
responseContent.append(resp);
|
JSONArray t = new JSONArray();
|
||||||
|
for (int i = 0; i < ((JSONArray) tmpA).size(); i++) {
|
||||||
|
JSONRPC2Request req = JSONRPC2Request.parse(((JSONArray) tmpA).get(i).toString());
|
||||||
|
JSONRPC2Response resp = dispatcher.process(req, null);
|
||||||
|
t.add(resp);
|
||||||
|
}
|
||||||
|
responseContent.append(t);
|
||||||
|
} else {
|
||||||
|
JSONRPC2Request req = JSONRPC2Request.parse(postData);
|
||||||
|
JSONRPC2Response resp = dispatcher.process(req, null);
|
||||||
|
responseContent.append(resp);
|
||||||
|
}
|
||||||
writeResponse(ctx);
|
writeResponse(ctx);
|
||||||
request = null;
|
request = null;
|
||||||
decoder.destroy();
|
decoder.destroy();
|
||||||
|
|
|
@ -72,20 +72,26 @@ public abstract class JsonRpcServerMethod implements RequestHandler {
|
||||||
return blockNumber;
|
return blockNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String clearJSString(String data) {
|
||||||
|
if (data.substring(0, 2).equals("0x"))
|
||||||
|
return data.substring(2);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
protected byte[] jsToAddress(String data) {
|
protected byte[] jsToAddress(String data) {
|
||||||
return Hex.decode(data.substring(2));
|
return Hex.decode(clearJSString(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int jsToInt(String data) {
|
protected int jsToInt(String data) {
|
||||||
return Integer.parseInt(data.substring(2), 16);
|
return Integer.parseInt(clearJSString(data), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected long jsToLong(String data) {
|
protected long jsToLong(String data) {
|
||||||
return Long.parseLong(data.substring(2), 16);
|
return Long.parseLong(clearJSString(data), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected BigInteger jsToBigInteger(String data) {
|
protected BigInteger jsToBigInteger(String data) {
|
||||||
return new BigInteger(data.substring(2), 16);
|
return new BigInteger(clearJSString(data), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Transaction jsToTransaction(JSONObject obj) throws Exception {
|
protected Transaction jsToTransaction(JSONObject obj) throws Exception {
|
||||||
|
|
|
@ -9,12 +9,9 @@ import org.ethereum.core.Transaction;
|
||||||
import org.ethereum.facade.Ethereum;
|
import org.ethereum.facade.Ethereum;
|
||||||
import org.spongycastle.util.encoders.Hex;
|
import org.spongycastle.util.encoders.Hex;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.net.URL;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import static org.ethereum.core.Denomination.SZABO;
|
|
||||||
|
|
||||||
public abstract class JsonRpcServerMethod implements RequestHandler {
|
public abstract class JsonRpcServerMethod implements RequestHandler {
|
||||||
|
|
||||||
private String name = "";
|
private String name = "";
|
||||||
|
@ -60,20 +57,26 @@ public abstract class JsonRpcServerMethod implements RequestHandler {
|
||||||
return blockNumber;
|
return blockNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String clearJSString(String data) {
|
||||||
|
if (data.substring(0, 2).equals("0x"))
|
||||||
|
return data.substring(2);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
protected byte[] jsToAddress(String data) {
|
protected byte[] jsToAddress(String data) {
|
||||||
return Hex.decode(data.substring(2));
|
return Hex.decode(clearJSString(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int jsToInt(String data) {
|
protected int jsToInt(String data) {
|
||||||
return Integer.parseInt(data.substring(2), 16);
|
return Integer.parseInt(clearJSString(data), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected long jsToLong(String data) {
|
protected long jsToLong(String data) {
|
||||||
return Long.parseLong(data.substring(2), 16);
|
return Long.parseLong(clearJSString(data), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected BigInteger jsToBigInteger(String data) {
|
protected BigInteger jsToBigInteger(String data) {
|
||||||
return new BigInteger(data.substring(2), 16);
|
return new BigInteger(clearJSString(data), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Transaction jsToTransaction(JSONObject obj) throws Exception {
|
protected Transaction jsToTransaction(JSONObject obj) throws Exception {
|
||||||
|
@ -85,6 +88,7 @@ public abstract class JsonRpcServerMethod implements RequestHandler {
|
||||||
if (obj.containsKey("from") && !((String)obj.get("from")).equals("")) {
|
if (obj.containsKey("from") && !((String)obj.get("from")).equals("")) {
|
||||||
from = jsToAddress((String) obj.get("from"));
|
from = jsToAddress((String) obj.get("from"));
|
||||||
}
|
}
|
||||||
|
|
||||||
Account acc = null;
|
Account acc = null;
|
||||||
for (Account ac : ethereum.getWallet().getAccountCollection()) {
|
for (Account ac : ethereum.getWallet().getAccountCollection()) {
|
||||||
if (Arrays.equals(ac.getAddress(), from)) {
|
if (Arrays.equals(ac.getAddress(), from)) {
|
||||||
|
|
Loading…
Reference in New Issue