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