001package com.nimbusds.jose.util;
002
003
004import net.jcip.annotations.ThreadSafe;
005
006
007/**
008 * Abstract retrieval of resources by URL with HTTP timeout and entity size
009 * restrictions.
010 */
011@ThreadSafe
012public abstract class AbstractRestrictedResourceRetriever implements RestrictedResourceRetriever {
013        
014
015        /**
016         * The HTTP connect timeout, in milliseconds.
017         */
018        private int connectTimeout;
019
020
021        /**
022         * The HTTP read timeout, in milliseconds.
023         */
024        private int readTimeout;
025
026
027        /**
028         * The HTTP entity size limit, in bytes.
029         */
030        private int sizeLimit;
031
032
033        /**
034         * Creates a new abstract restricted resource retriever.
035         *
036         * @param connectTimeout The HTTP connects timeout, in milliseconds,
037         *                       zero for infinite. Must not be negative.
038         * @param readTimeout    The HTTP read timeout, in milliseconds, zero
039         *                       for infinite. Must not be negative.
040         * @param sizeLimit      The HTTP entity size limit, in bytes, zero for
041         *                       infinite. Must not be negative.
042         */
043        public AbstractRestrictedResourceRetriever(int connectTimeout, int readTimeout, int sizeLimit) {
044                setConnectTimeout(connectTimeout);
045                setReadTimeout(readTimeout);
046                setSizeLimit(sizeLimit);
047        }
048
049
050        @Override
051        public int getConnectTimeout() {
052
053                return connectTimeout;
054        }
055
056
057        @Override
058        public void setConnectTimeout(final int connectTimeoutMs) {
059
060                if (connectTimeoutMs < 0) {
061                        throw new IllegalArgumentException("The connect timeout must not be negative");
062                }
063
064                this.connectTimeout = connectTimeoutMs;
065        }
066
067
068        @Override
069        public int getReadTimeout() {
070
071                return readTimeout;
072        }
073
074
075        @Override
076        public void setReadTimeout(final int readTimeoutMs) {
077
078                if (readTimeoutMs < 0) {
079                        throw new IllegalArgumentException("The read timeout must not be negative");
080                }
081
082                this.readTimeout = readTimeoutMs;
083        }
084
085
086        @Override
087        public int getSizeLimit() {
088
089                return sizeLimit;
090        }
091
092
093        @Override
094        public void setSizeLimit(int sizeLimitBytes) {
095
096                if (sizeLimitBytes < 0) {
097                        throw new IllegalArgumentException("The size limit must not be negative");
098                }
099
100                this.sizeLimit = sizeLimitBytes;
101        }
102}