mirror of
https://github.com/AsamK/signal-cli
synced 2025-08-29 18:40:39 +00:00
Add workaround for jsonrpc clients that send null params
This commit is contained in:
parent
9a72733c4f
commit
f9ecaa8ad6
2 changed files with 10 additions and 5 deletions
|
@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.node.ContainerNode;
|
import com.fasterxml.jackson.databind.node.ContainerNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import com.fasterxml.jackson.databind.node.ValueNode;
|
import com.fasterxml.jackson.databind.node.ValueNode;
|
||||||
|
|
||||||
import org.asamk.signal.util.Util;
|
import org.asamk.signal.util.Util;
|
||||||
|
@ -39,7 +40,7 @@ public class JsonRpcReader {
|
||||||
if (message == null) break;
|
if (message == null) break;
|
||||||
|
|
||||||
if (message instanceof final JsonRpcRequest jsonRpcRequest) {
|
if (message instanceof final JsonRpcRequest jsonRpcRequest) {
|
||||||
logger.debug("Received json rpc request, method: " + jsonRpcRequest.method);
|
logger.debug("Received json rpc request, method: " + jsonRpcRequest.getMethod());
|
||||||
final var response = handleRequest(requestHandler, jsonRpcRequest);
|
final var response = handleRequest(requestHandler, jsonRpcRequest);
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
jsonRpcSender.sendResponse(response);
|
jsonRpcSender.sendResponse(response);
|
||||||
|
@ -153,6 +154,10 @@ public class JsonRpcReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
private JsonRpcRequest parseJsonRpcRequest(final JsonNode input) throws JsonRpcException {
|
private JsonRpcRequest parseJsonRpcRequest(final JsonNode input) throws JsonRpcException {
|
||||||
|
if (input instanceof ObjectNode i && input.has("params") && input.get("params").isNull()) {
|
||||||
|
// Workaround for clients that send a null params field instead of omitting it
|
||||||
|
i.remove("params");
|
||||||
|
}
|
||||||
JsonRpcRequest request;
|
JsonRpcRequest request;
|
||||||
try {
|
try {
|
||||||
request = objectMapper.treeToValue(input, JsonRpcRequest.class);
|
request = objectMapper.treeToValue(input, JsonRpcRequest.class);
|
||||||
|
|
|
@ -13,21 +13,21 @@ public final class JsonRpcRequest extends JsonRpcMessage {
|
||||||
/**
|
/**
|
||||||
* A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".
|
* A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".
|
||||||
*/
|
*/
|
||||||
String jsonrpc;
|
private String jsonrpc;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A String containing the name of the method to be invoked.
|
* A String containing the name of the method to be invoked.
|
||||||
* Method names that begin with the word rpc followed by a period character (U+002E or ASCII 46)
|
* Method names that begin with the word rpc followed by a period character (U+002E or ASCII 46)
|
||||||
* are reserved for rpc-internal methods and extensions and MUST NOT be used for anything else.
|
* are reserved for rpc-internal methods and extensions and MUST NOT be used for anything else.
|
||||||
*/
|
*/
|
||||||
String method;
|
private String method;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Structured value that holds the parameter values to be used during the invocation of the method.
|
* A Structured value that holds the parameter values to be used during the invocation of the method.
|
||||||
* This member MAY be omitted.
|
* This member MAY be omitted.
|
||||||
*/
|
*/
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
ContainerNode<?> params;
|
private ContainerNode<?> params;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An identifier established by the Client that MUST contain a String, Number, or NULL value if included.
|
* An identifier established by the Client that MUST contain a String, Number, or NULL value if included.
|
||||||
|
@ -35,7 +35,7 @@ public final class JsonRpcRequest extends JsonRpcMessage {
|
||||||
* The value SHOULD normally not be Null and Numbers SHOULD NOT contain fractional parts
|
* The value SHOULD normally not be Null and Numbers SHOULD NOT contain fractional parts
|
||||||
*/
|
*/
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
ValueNode id;
|
private ValueNode id;
|
||||||
|
|
||||||
public static JsonRpcRequest forNotification(
|
public static JsonRpcRequest forNotification(
|
||||||
final String method, final ContainerNode<?> params, final ValueNode id
|
final String method, final ContainerNode<?> params, final ValueNode id
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue