/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package io.netty.handler.codec.http; final class CookieEncoderUtil { static final ThreadLocal<StringBuilder> buffer = new ThreadLocal<StringBuilder>() { @Override public StringBuilder get() { StringBuilder buf = super.get(); buf.setLength(0); return buf; } @Override protected StringBuilder initialValue() { return new StringBuilder(512); } }; static String stripTrailingSeparator(StringBuilder buf) { if (buf.length() > 0) { buf.setLength(buf.length() - 2); } return buf.toString(); } static void add(StringBuilder sb, String name, String val) { if (val == null) { addQuoted(sb, name, ""); return; } for (int i = 0; i < val.length(); i ++) { char c = val.charAt(i); switch (c) { case '\t': case ' ': case '"': case '(': case ')': case ',': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case '[': case '\\': case ']': case '{': case '}': addQuoted(sb, name, val); return; } } addUnquoted(sb, name, val); } static void addUnquoted(StringBuilder sb, String name, String val) { sb.append(name); sb.append((char) HttpConstants.EQUALS); sb.append(val); sb.append((char) HttpConstants.SEMICOLON); sb.append((char) HttpConstants.SP); } static void addQuoted(StringBuilder sb, String name, String val) { if (val == null) { val = ""; } sb.append(name); sb.append((char) HttpConstants.EQUALS); sb.append((char) HttpConstants.DOUBLE_QUOTE); sb.append(val.replace("\\", "\\\\").replace("\"", "\\\"")); sb.append((char) HttpConstants.DOUBLE_QUOTE); sb.append((char) HttpConstants.SEMICOLON); sb.append((char) HttpConstants.SP); } static void add(StringBuilder sb, String name, long val) { sb.append(name); sb.append((char) HttpConstants.EQUALS); sb.append(val); sb.append((char) HttpConstants.SEMICOLON); sb.append((char) HttpConstants.SP); } private CookieEncoderUtil() { // Unused } }