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 RFC2965Spec}. The instance returned by this factory can 041 * 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 RFC2965SpecProvider implements CookieSpecProvider { 051 052 private final PublicSuffixMatcher publicSuffixMatcher; 053 private final boolean oneHeader; 054 055 private volatile CookieSpec cookieSpec; 056 057 public RFC2965SpecProvider(final PublicSuffixMatcher publicSuffixMatcher, final boolean oneHeader) { 058 super(); 059 this.oneHeader = oneHeader; 060 this.publicSuffixMatcher = publicSuffixMatcher; 061 } 062 063 public RFC2965SpecProvider(final PublicSuffixMatcher publicSuffixMatcher) { 064 this(publicSuffixMatcher, false); 065 } 066 067 public RFC2965SpecProvider() { 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 RFC2965Spec(this.oneHeader, 077 new RFC2965VersionAttributeHandler(), 078 new BasicPathHandler(), 079 PublicSuffixDomainFilter.decorate( 080 new RFC2965DomainAttributeHandler(), this.publicSuffixMatcher), 081 new RFC2965PortAttributeHandler(), 082 new BasicMaxAgeHandler(), 083 new BasicSecureHandler(), 084 new BasicCommentHandler(), 085 new RFC2965CommentUrlAttributeHandler(), 086 new RFC2965DiscardAttributeHandler()); 087 } 088 } 089 } 090 return this.cookieSpec; 091 } 092 093}