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}