- return fromNullable(SimpleXML.fromDocument(document));
- } catch (NullPointerException npe1) {
- /* for some reason, invalid XML can cause NPEs. */
+ sone.setTime(Long.parseLong(soneTime));
+ } catch (NumberFormatException nfe1) {
+ /* TODO - mark Sone as bad. */
+ logger.log(Level.WARNING, String.format("Downloaded Sone %s with invalid time: %s", sone, soneTime));
+ throw new MalformedTime();
+ }
+ }
+
+ private void verifyProtocolVersion(SimpleXML soneXml) {
+ Optional<Integer> protocolVersion = parseProtocolVersion(soneXml);
+ if (protocolVersion.isPresent()) {
+ if (protocolVersion.get() < 0) {
+ logger.log(Level.WARNING, String.format("Invalid protocol version: %d! Not parsing Sone.", protocolVersion.get()));
+ throw new InvalidProtocolVersion();
+ }
+ if (protocolVersion.get() > MAX_PROTOCOL_VERSION) {
+ logger.log(Level.WARNING, String.format("Unknown protocol version: %d! Not parsing Sone.", protocolVersion.get()));
+ throw new SoneTooNew();
+ }
+ }
+ }
+
+ private Optional<Integer> parseProtocolVersion(SimpleXML soneXml) {
+ String soneProtocolVersion = soneXml.getValue("protocol-version", null);
+ if (soneProtocolVersion == null) {
+ logger.log(Level.INFO, "No protocol version found, assuming 0.");