mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-01-30 23:02:15 +00:00
Fix PeerAddress serialization and add a test. Patch from Noa Resare. Fixes issue 29.
This commit is contained in:
parent
d1385d50df
commit
65bb4a20f8
@ -53,7 +53,7 @@ public class PeerAddress extends Message {
|
||||
int secs = (int)(new Date().getTime() / 1000);
|
||||
uint32ToByteStreamLE(secs, stream);
|
||||
}
|
||||
uint64ToByteStreamLE(BigInteger.ZERO, stream); // nServices.
|
||||
uint64ToByteStreamLE(services, stream); // nServices.
|
||||
// Java does not provide any utility to map an IPv4 address into IPv6 space, so we have to do it by hand.
|
||||
byte[] ipBytes = addr.getAddress();
|
||||
if (ipBytes.length == 4) {
|
||||
@ -64,9 +64,9 @@ public class PeerAddress extends Message {
|
||||
ipBytes = v6addr;
|
||||
}
|
||||
stream.write(ipBytes);
|
||||
// And write out the port.
|
||||
// And write out the port. Unlike the rest of the protocol, address and port is in big endian byte order.
|
||||
stream.write((byte) (0xFF & port >> 8));
|
||||
stream.write((byte) (0xFF & port));
|
||||
stream.write((byte) (0xFF & (port >> 8)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
36
tests/com/google/bitcoin/core/PeerAddressTest.java
Normal file
36
tests/com/google/bitcoin/core/PeerAddressTest.java
Normal file
@ -0,0 +1,36 @@
|
||||
/**
|
||||
* Copyright 2011 Noa Resare
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.bitcoin.core;
|
||||
|
||||
import com.google.bitcoin.bouncycastle.util.encoders.Hex;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class PeerAddressTest
|
||||
{
|
||||
@Test
|
||||
public void testPeerAddressSerialize() throws Exception
|
||||
{
|
||||
// copied verbatim from https://en.bitcoin.it/wiki/Protocol_specification#Network_address
|
||||
String fromSpec = "010000000000000000000000000000000000ffff0a000001208d";
|
||||
PeerAddress pa = new PeerAddress(NetworkParameters.prodNet(),
|
||||
Hex.decode(fromSpec),0,0);
|
||||
String reserialized = Utils.bytesToHexString(pa.bitcoinSerialize());
|
||||
assertEquals(reserialized,fromSpec );
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user