001/*
002 * ====================================================================
003 * Licensed to the Apache Software Foundation (ASF) under one
004 * or more contributor license agreements.  See the NOTICE file
005 * distributed with this work for additional information
006 * regarding copyright ownership.  The ASF licenses this file
007 * to you under the Apache License, Version 2.0 (the
008 * "License"); you may not use this file except in compliance
009 * with the License.  You may obtain a copy of the License at
010 *
011 *   http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing,
014 * software distributed under the License is distributed on an
015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
016 * KIND, either express or implied.  See the License for the
017 * specific language governing permissions and limitations
018 * under the License.
019 * ====================================================================
020 *
021 * This software consists of voluntary contributions made by many
022 * individuals on behalf of the Apache Software Foundation.  For more
023 * information on the Apache Software Foundation, please see
024 * <http://www.apache.org/>.
025 *
026 */
027
028package org.apache.http.impl.cookie;
029
030import org.apache.http.annotation.Contract;
031import org.apache.http.annotation.Obsolete;
032import org.apache.http.annotation.ThreadingBehavior;
033import org.apache.http.conn.util.PublicSuffixMatcher;
034import org.apache.http.cookie.CookieSpec;
035import org.apache.http.cookie.CookieSpecProvider;
036import org.apache.http.protocol.HttpContext;
037
038/**
039 * {@link org.apache.http.cookie.CookieSpecProvider} implementation that provides an instance of
040 * {@link RFC2109Spec}. The instance returned by this factory
041 * can be shared by multiple threads.
042 * <p>
043 * Rendered obsolete by {@link org.apache.http.impl.cookie.RFC6265CookieSpecProvider}
044 *
045 * @since 4.4
046 * @see org.apache.http.impl.cookie.RFC6265CookieSpecProvider
047 */
048@Obsolete
049@Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
050public class RFC2109SpecProvider implements CookieSpecProvider {
051
052    private final PublicSuffixMatcher publicSuffixMatcher;
053    private final boolean oneHeader;
054
055    private volatile CookieSpec cookieSpec;
056
057    public RFC2109SpecProvider(final PublicSuffixMatcher publicSuffixMatcher, final boolean oneHeader) {
058        super();
059        this.oneHeader = oneHeader;
060        this.publicSuffixMatcher = publicSuffixMatcher;
061    }
062
063    public RFC2109SpecProvider(final PublicSuffixMatcher publicSuffixMatcher) {
064        this(publicSuffixMatcher, false);
065    }
066
067    public RFC2109SpecProvider() {
068        this(null, false);
069    }
070
071    @Override
072    public CookieSpec create(final HttpContext context) {
073        if (cookieSpec == null) {
074            synchronized (this) {
075                if (cookieSpec == null) {
076                    this.cookieSpec = new RFC2109Spec(this.oneHeader,
077                            new RFC2109VersionHandler(),
078                            new BasicPathHandler(),
079                            PublicSuffixDomainFilter.decorate(
080                                    new RFC2109DomainHandler(), this.publicSuffixMatcher),
081                            new BasicMaxAgeHandler(),
082                            new BasicSecureHandler(),
083                            new BasicCommentHandler());
084                }
085            }
086        }
087        return this.cookieSpec;
088    }
089
090}