1
27
28 package org.apache.http.impl.cookie;
29
30 import org.apache.http.annotation.Contract;
31 import org.apache.http.annotation.ThreadingBehavior;
32 import org.apache.http.cookie.ClientCookie;
33 import org.apache.http.cookie.CommonCookieAttributeHandler;
34 import org.apache.http.cookie.Cookie;
35 import org.apache.http.cookie.CookieOrigin;
36 import org.apache.http.cookie.CookieRestrictionViolationException;
37 import org.apache.http.cookie.MalformedCookieException;
38 import org.apache.http.cookie.SetCookie;
39 import org.apache.http.cookie.SetCookie2;
40 import org.apache.http.util.Args;
41
42
47 @Contract(threading = ThreadingBehavior.IMMUTABLE)
48 public class RFC2965VersionAttributeHandler implements CommonCookieAttributeHandler {
49
50 public RFC2965VersionAttributeHandler() {
51 super();
52 }
53
54
57 @Override
58 public void parse(final SetCookie cookie, final String value)
59 throws MalformedCookieException {
60 Args.notNull(cookie, "Cookie");
61 if (value == null) {
62 throw new MalformedCookieException(
63 "Missing value for version attribute");
64 }
65 int version = -1;
66 try {
67 version = Integer.parseInt(value);
68 } catch (final NumberFormatException e) {
69 version = -1;
70 }
71 if (version < 0) {
72 throw new MalformedCookieException("Invalid cookie version.");
73 }
74 cookie.setVersion(version);
75 }
76
77
80 @Override
81 public void validate(final Cookie cookie, final CookieOrigin origin)
82 throws MalformedCookieException {
83 Args.notNull(cookie, "Cookie");
84 if (cookie instanceof SetCookie2) {
85 if (cookie instanceof ClientCookie
86 && !((ClientCookie) cookie).containsAttribute(ClientCookie.VERSION_ATTR)) {
87 throw new CookieRestrictionViolationException(
88 "Violates RFC 2965. Version attribute is required.");
89 }
90 }
91 }
92
93 @Override
94 public boolean match(final Cookie cookie, final CookieOrigin origin) {
95 return true;
96 }
97
98 @Override
99 public String getAttributeName() {
100 return ClientCookie.VERSION_ATTR;
101 }
102
103 }
104