|
|
|
@ -1,7 +1,11 @@
|
|
|
|
|
package org.qortal.network.message; |
|
|
|
|
|
|
|
|
|
import com.google.common.primitives.Ints; |
|
|
|
|
import org.qortal.data.network.PeerData; |
|
|
|
|
import org.qortal.transaction.DeployAtTransaction; |
|
|
|
|
import org.qortal.transform.TransformationException; |
|
|
|
|
import org.qortal.transform.Transformer; |
|
|
|
|
import org.qortal.utils.Serialization; |
|
|
|
|
|
|
|
|
|
import java.io.ByteArrayOutputStream; |
|
|
|
|
import java.io.IOException; |
|
|
|
@ -14,36 +18,44 @@ public class ArbitrarySignaturesMessage extends Message {
|
|
|
|
|
|
|
|
|
|
private static final int SIGNATURE_LENGTH = Transformer.SIGNATURE_LENGTH; |
|
|
|
|
|
|
|
|
|
private String peerAddress; |
|
|
|
|
private List<byte[]> signatures; |
|
|
|
|
|
|
|
|
|
public ArbitrarySignaturesMessage(List<byte[]> signatures) { |
|
|
|
|
this(-1, signatures); |
|
|
|
|
public ArbitrarySignaturesMessage(String peerAddress, List<byte[]> signatures) { |
|
|
|
|
this(-1, peerAddress, signatures); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private ArbitrarySignaturesMessage(int id, List<byte[]> signatures) { |
|
|
|
|
private ArbitrarySignaturesMessage(int id, String peerAddress, List<byte[]> signatures) { |
|
|
|
|
super(id, MessageType.ARBITRARY_SIGNATURES); |
|
|
|
|
|
|
|
|
|
this.peerAddress = peerAddress; |
|
|
|
|
this.signatures = signatures; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public String getPeerAddress() { |
|
|
|
|
return this.peerAddress; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<byte[]> getSignatures() { |
|
|
|
|
return this.signatures; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static Message fromByteBuffer(int id, ByteBuffer bytes) throws UnsupportedEncodingException { |
|
|
|
|
int count = bytes.getInt(); |
|
|
|
|
public static Message fromByteBuffer(int id, ByteBuffer bytes) throws UnsupportedEncodingException, TransformationException { |
|
|
|
|
String peerAddress = Serialization.deserializeSizedString(bytes, PeerData.MAX_PEER_ADDRESS_SIZE); |
|
|
|
|
|
|
|
|
|
if (bytes.remaining() != count * SIGNATURE_LENGTH) |
|
|
|
|
int signatureCount = bytes.getInt(); |
|
|
|
|
|
|
|
|
|
if (bytes.remaining() != signatureCount * SIGNATURE_LENGTH) |
|
|
|
|
return null; |
|
|
|
|
|
|
|
|
|
List<byte[]> signatures = new ArrayList<>(); |
|
|
|
|
for (int i = 0; i < count; ++i) { |
|
|
|
|
for (int i = 0; i < signatureCount; ++i) { |
|
|
|
|
byte[] signature = new byte[SIGNATURE_LENGTH]; |
|
|
|
|
bytes.get(signature); |
|
|
|
|
signatures.add(signature); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return new ArbitrarySignaturesMessage(id, signatures); |
|
|
|
|
return new ArbitrarySignaturesMessage(id, peerAddress, signatures); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@ -51,6 +63,8 @@ public class ArbitrarySignaturesMessage extends Message {
|
|
|
|
|
try { |
|
|
|
|
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); |
|
|
|
|
|
|
|
|
|
Serialization.serializeSizedString(bytes, this.peerAddress); |
|
|
|
|
|
|
|
|
|
bytes.write(Ints.toByteArray(this.signatures.size())); |
|
|
|
|
|
|
|
|
|
for (byte[] signature : this.signatures) |
|
|
|
|