Home / Class/ CookieBuilder Class — netty Architecture

CookieBuilder Class — netty Architecture

Architecture documentation for the CookieBuilder class in ClientCookieDecoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38["CookieBuilder"]
  e327414f_4b94_95f7_3704_b6b4e2d85cc3["ClientCookieDecoder.java"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|defined in| e327414f_4b94_95f7_3704_b6b4e2d85cc3
  55d2cd63_4655_a8ee_58d0_4380da9e0f03["CookieBuilder()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 55d2cd63_4655_a8ee_58d0_4380da9e0f03
  3f3bd44b_862c_a0eb_b428_e8e9c9b48ed2["mergeMaxAgeAndExpires()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 3f3bd44b_862c_a0eb_b428_e8e9c9b48ed2
  66120cdd_a67a_b08a_d8e5_c2309de2d4f0["Cookie()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 66120cdd_a67a_b08a_d8e5_c2309de2d4f0
  d60cac5a_e112_2a4d_8085_70466b0f5c5d["appendAttribute()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| d60cac5a_e112_2a4d_8085_70466b0f5c5d
  05264edb_e391_eba3_d21a_8a0eb5a58278["parse4()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 05264edb_e391_eba3_d21a_8a0eb5a58278
  2066cc48_c168_cea4_1cfc_ca4a656a72e1["parse6()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 2066cc48_c168_cea4_1cfc_ca4a656a72e1
  cc792028_f6b1_4c04_665b_b56d6212caf2["setMaxAge()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| cc792028_f6b1_4c04_665b_b56d6212caf2
  6fc36097_3cca_2532_5c82_f456eade1d6a["parse7()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 6fc36097_3cca_2532_5c82_f456eade1d6a
  7ffca827_8c4a_b9bd_a2cd_c6ba8c71a58a["parse8()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 7ffca827_8c4a_b9bd_a2cd_c6ba8c71a58a
  9f201525_1fd3_adec_3295_7d9a7c65022a["parse11()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 9f201525_1fd3_adec_3295_7d9a7c65022a
  f00aedfd_6b04_0e36_2056_786e4a7e36f9["isValueDefined()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| f00aedfd_6b04_0e36_2056_786e4a7e36f9
  469247ba_e9cd_9c8f_1eab_b696c845c511["String()"]
  5bdbdd2f_66bb_a2b0_d381_9110e8d7de38 -->|method| 469247ba_e9cd_9c8f_1eab_b696c845c511

Relationship Graph

Source Code

codec-http/src/main/java/io/netty/handler/codec/http/cookie/ClientCookieDecoder.java lines 147–272

    private static class CookieBuilder {

        private final String header;
        private final DefaultCookie cookie;
        private String domain;
        private String path;
        private long maxAge = Long.MIN_VALUE;
        private int expiresStart;
        private int expiresEnd;
        private boolean secure;
        private boolean httpOnly;
        private SameSite sameSite;
        private boolean partitioned;

        CookieBuilder(DefaultCookie cookie, String header) {
            this.cookie = cookie;
            this.header = header;
        }

        private long mergeMaxAgeAndExpires() {
            // max age has precedence over expires
            if (maxAge != Long.MIN_VALUE) {
                return maxAge;
            } else if (isValueDefined(expiresStart, expiresEnd)) {
                Date expiresDate = DateFormatter.parseHttpDate(header, expiresStart, expiresEnd);
                if (expiresDate != null) {
                    long maxAgeMillis = expiresDate.getTime() - System.currentTimeMillis();
                    return maxAgeMillis / 1000 + (maxAgeMillis % 1000 != 0 ? 1 : 0);
                }
            }
            return Long.MIN_VALUE;
        }

        Cookie cookie() {
            cookie.setDomain(domain);
            cookie.setPath(path);
            cookie.setMaxAge(mergeMaxAgeAndExpires());
            cookie.setSecure(secure);
            cookie.setHttpOnly(httpOnly);
            cookie.setSameSite(sameSite);
            cookie.setPartitioned(partitioned);
            return cookie;
        }

        /**
         * Parse and store a key-value pair. First one is considered to be the
         * cookie name/value. Unknown attribute names are silently discarded.
         *
         * @param keyStart
         *            where the key starts in the header
         * @param keyEnd
         *            where the key ends in the header
         * @param valueStart
         *            where the value starts in the header
         * @param valueEnd
         *            where the value ends in the header
         */
        void appendAttribute(int keyStart, int keyEnd, int valueStart, int valueEnd) {
            int length = keyEnd - keyStart;

            if (length == 4) {
                parse4(keyStart, valueStart, valueEnd);
            } else if (length == 6) {
                parse6(keyStart, valueStart, valueEnd);
            } else if (length == 7) {
                parse7(keyStart, valueStart, valueEnd);
            } else if (length == 8) {
                parse8(keyStart, valueStart, valueEnd);
            } else if (length == 11) {
                parse11(keyStart);
            }
        }

        private void parse4(int nameStart, int valueStart, int valueEnd) {
            if (header.regionMatches(true, nameStart, CookieHeaderNames.PATH, 0, 4)) {
                path = computeValue(valueStart, valueEnd);
            }
        }

        private void parse6(int nameStart, int valueStart, int valueEnd) {
            if (header.regionMatches(true, nameStart, CookieHeaderNames.DOMAIN, 0, 5)) {

Frequently Asked Questions

What is the CookieBuilder class?
CookieBuilder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/cookie/ClientCookieDecoder.java.
Where is CookieBuilder defined?
CookieBuilder is defined in codec-http/src/main/java/io/netty/handler/codec/http/cookie/ClientCookieDecoder.java at line 147.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free