summaryrefslogtreecommitdiff
path: root/src/main/java/com/lumaserv/bgp/protocol/message/BGPOpen.java
blob: 37b791be8f4370a532bc2377927198e896cdb5c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.lumaserv.bgp.protocol.message;

import com.lumaserv.bgp.protocol.DataBuilder;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.nio.ByteBuffer;

@Getter
@Setter
@NoArgsConstructor
public class BGPOpen implements DataBuilder {

    byte version;
    int asn;
    int holdTime;
    byte[] identifier;

    public BGPOpen(ByteBuffer message) {
System.out.println("BGPOpen pos:" + message.position());
        version = message.get();
        asn = message.getShort() & 0xFFFF;
        holdTime = message.getShort() & 0xFFFF;
        identifier = new byte[4];
System.out.println("BGPOpen asn:" + asn);
        message.get(identifier);
    }

    public void build(ByteBuffer b) {
        b.put(version);
        b.put((byte) (asn >> 8));
        b.put((byte) (asn & 0xFF));
        b.put((byte) (holdTime >> 8));
        b.put((byte) (holdTime & 0xFF));
        b.put(identifier);
        b.put((byte)14); // Length (0E)
        b.put((byte)2); // Parameter Type: capability (02)
        b.put((byte)12); // Length (0C)

        b.put((byte)1); // Type: multiprotocol (01)
        b.put((byte)4); // Length (04)
        b.putShort((short)2); // IPv6 (0002)
        b.put((byte)0); // Reserved
        b.put((byte)1); // Unicast (01)

        b.put((byte)1); // Type: multiprotocol (01)
        b.put((byte)4); // Length (04)
        b.putShort((short)1); // IPv4 (0001)
        b.put((byte)0); // Reserved
        b.put((byte)1); // Unicast (01)
    }
}