Full long value for port numbers. Fix port number serializer.
Change-Id: I106ce3d39533e22f5a9a0e6972b91f669068198b
Showing
2 changed files
with
28 additions
and
4 deletions
... | @@ -49,16 +49,19 @@ public final class PortNumber { | ... | @@ -49,16 +49,19 @@ public final class PortNumber { |
49 | 49 | ||
50 | private final long number; | 50 | private final long number; |
51 | private final String name; | 51 | private final String name; |
52 | + private final boolean hasName; | ||
52 | 53 | ||
53 | // Public creation is prohibited | 54 | // Public creation is prohibited |
54 | private PortNumber(long number) { | 55 | private PortNumber(long number) { |
55 | this.number = number; | 56 | this.number = number; |
56 | this.name = UnsignedLongs.toString(number); | 57 | this.name = UnsignedLongs.toString(number); |
58 | + this.hasName = false; | ||
57 | } | 59 | } |
58 | 60 | ||
59 | private PortNumber(long number, String name) { | 61 | private PortNumber(long number, String name) { |
60 | this.number = number; | 62 | this.number = number; |
61 | this.name = name; | 63 | this.name = name; |
64 | + this.hasName = true; | ||
62 | } | 65 | } |
63 | 66 | ||
64 | /** | 67 | /** |
... | @@ -99,7 +102,11 @@ public final class PortNumber { | ... | @@ -99,7 +102,11 @@ public final class PortNumber { |
99 | * @return true if logical port number | 102 | * @return true if logical port number |
100 | */ | 103 | */ |
101 | public boolean isLogical() { | 104 | public boolean isLogical() { |
102 | - return number < 0 || number > MAX_NUMBER; | 105 | + if (hasName) { |
106 | + return false; | ||
107 | + } else { | ||
108 | + return (number < 0 || number > MAX_NUMBER); | ||
109 | + } | ||
103 | } | 110 | } |
104 | 111 | ||
105 | /** | 112 | /** |
... | @@ -120,6 +127,16 @@ public final class PortNumber { | ... | @@ -120,6 +127,16 @@ public final class PortNumber { |
120 | return name; | 127 | return name; |
121 | } | 128 | } |
122 | 129 | ||
130 | + /** | ||
131 | + * Indicates whether this port number was created with a port name, | ||
132 | + * or only with a number. | ||
133 | + * | ||
134 | + * @return true if port was created with name | ||
135 | + */ | ||
136 | + public boolean hasName() { | ||
137 | + return hasName; | ||
138 | + } | ||
139 | + | ||
123 | private String decodeLogicalPort() { | 140 | private String decodeLogicalPort() { |
124 | if (number == CONTROLLER_NUMBER) { | 141 | if (number == CONTROLLER_NUMBER) { |
125 | return "CONTROLLER"; | 142 | return "CONTROLLER"; | ... | ... |
... | @@ -38,12 +38,19 @@ public final class PortNumberSerializer extends | ... | @@ -38,12 +38,19 @@ public final class PortNumberSerializer extends |
38 | 38 | ||
39 | @Override | 39 | @Override |
40 | public void write(Kryo kryo, Output output, PortNumber object) { | 40 | public void write(Kryo kryo, Output output, PortNumber object) { |
41 | + output.writeBoolean(object.hasName()); | ||
41 | output.writeLong(object.toLong()); | 42 | output.writeLong(object.toLong()); |
43 | + if (object.hasName()) { | ||
44 | + output.writeString(object.name()); | ||
45 | + } | ||
42 | } | 46 | } |
43 | 47 | ||
44 | @Override | 48 | @Override |
45 | - public PortNumber read(Kryo kryo, Input input, | 49 | + public PortNumber read(Kryo kryo, Input input, Class<PortNumber> type) { |
46 | - Class<PortNumber> type) { | 50 | + if (input.readBoolean()) { |
47 | - return PortNumber.portNumber(input.readLong()); | 51 | + return PortNumber.portNumber(input.readLong(), input.readString()); |
52 | + } else { | ||
53 | + return PortNumber.portNumber(input.readLong()); | ||
54 | + } | ||
48 | } | 55 | } |
49 | } | 56 | } | ... | ... |
-
Please register or login to post a comment