Android Open Source - SanDisk-HQME-SDK Playback Tokens






From Project

Back to project page SanDisk-HQME-SDK.

License

The source code is released under:

Apache License

If you think the Android project SanDisk-HQME-SDK listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/** 
* This reference code is an implementation of the IEEE P2200 standard.  It is not
* a contribution to the IEEE P2200 standard.
* //from   w  w w. j a v a2s. c  om
* Copyright (c) 2011 SanDisk Corporation.  All rights reserved.
* 
* Licensed 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 com.hqme.cm.cache;

import java.util.Date;
import java.util.HashMap;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;

public class PlaybackTokens
{
    //==================================================================================================================================
    //static const char * uriFormatUtf = "http://localhost:%d/playback.jsp?token=%s";
    
    private static final long maxPlaybackTokenLifetime = 1 * 60 * 60 * 1000; // one hour in milliseconds

    /**
     * This class maintains the private meta-data for streaming media server
     * playback tokens contained within a playback Uri.
     * Playback tokens are used to protect the application session ID and file
     * path information from exposure via the Uri or playback channel. Tokens
     * have a maximum lifetime set by the static property
     * maxPlaybackTokenLifetime, and may be requested for playback no more than
     * maxPlaybackTokenRequests number of times.
     */
    static final class PlaybackToken
    {
        private static final ConcurrentHashMap<String, PlaybackToken> tokens = new ConcurrentHashMap<String, PlaybackToken>();
        private static final Random random = new Random(new Date().getTime());

        private long createdTime;
        private String tokenKey;
        UntenCacheService.UntenCacheObject object;
        
        public PlaybackToken(UntenCacheService.UntenCacheObject object) {
            this.object = object;
            
            do {
                this.tokenKey = Long.toHexString(random.nextLong()) + Long.toHexString(random.nextLong());
            } while (tokens.get(this.tokenKey) != null);

            this.createdTime = new Date().getTime();
        }
    }

    private static boolean isPlaybackTokenValid(PlaybackToken token) {
        return token != null && new Date().getTime() - token.createdTime <= maxPlaybackTokenLifetime;
    }

    /**
     * Invoked from ContentObject function getStreamingUri() to
     * construct and track a temporal Token object for the object.
     * If a token was previously constructed, that token is returned, 
     * otherwise a new token is created.
     * 
     * @param object The IContentObject object.
     * @returns The playback token key for the now-tracked PlaybackToken.
     */
    static String newPlaybackToken(UntenCacheService.UntenCacheObject object) {
        PlaybackToken token;
        for (String tokenKey : PlaybackToken.tokens.keySet()) {
            token = PlaybackToken.tokens.get(tokenKey);
            if (!isPlaybackTokenValid(token)) {
                PlaybackToken.tokens.remove(tokenKey);
            } else if (token.object.equals(object)) { 
                return token.tokenKey;
            }
        }
        token = new PlaybackToken(object);
        PlaybackToken.tokens.put(token.tokenKey, token);
        return token.tokenKey;
    }

    /**
     * Invoked from streaming server when processing a playback request.
     * 
     * @param tokenKey The playback token key previously obtained via IContentObject.getStreamingUri().
     * @return The playback token object for the specified key, or null if the
     *         key has expired or was requested too many times.
     */
    static PlaybackToken getPlaybackToken(String tokenKey)
    {
        PlaybackToken token = PlaybackToken.tokens.get(tokenKey);
        if (!isPlaybackTokenValid(token)) {
            PlaybackToken.tokens.remove(tokenKey);
            token = null;
        }
        return token;
    }
}




Java Source Code List

com.hqme.cm.Account.java
com.hqme.cm.EventsNotify.java
com.hqme.cm.HqmeError.java
com.hqme.cm.OriginACL.java
com.hqme.cm.Permission.java
com.hqme.cm.Property.java
com.hqme.cm.QueueRequestState.java
com.hqme.cm.ReqEvents.java
com.hqme.cm.VSDEvent.java
com.hqme.cm.VSDFunctionGroups.java
com.hqme.cm.VSDProperties.java
com.hqme.cm.cache.PlaybackTokens.java
com.hqme.cm.cache.StreamingServer.java
com.hqme.cm.cache.UntenCacheService.java
com.hqme.cm.cache.UntenMedia.java
com.hqme.cm.core.CmApplication.java
com.hqme.cm.core.DeviceDescription.java
com.hqme.cm.core.HQMEProvider.java
com.hqme.cm.core.HQME.java
com.hqme.cm.core.Package.java
com.hqme.cm.core.Policy.java
com.hqme.cm.core.ProtocolException.java
com.hqme.cm.core.ProtocolHandlerInputStream.java
com.hqme.cm.core.ProtocolHandler.java
com.hqme.cm.core.ProtocolManager.java
com.hqme.cm.core.ProtocolPluginHttp.java
com.hqme.cm.core.ProtocolPlugin.java
com.hqme.cm.core.QueueRequestObject.java
com.hqme.cm.core.QueueRequestProperties.java
com.hqme.cm.core.RULE_AVAILABLE_SPACE.java
com.hqme.cm.core.RULE_BANDWIDTH_LIMIT.java
com.hqme.cm.core.RULE_CHARGING_STATE.java
com.hqme.cm.core.RULE_CONNECTION_TYPE.java
com.hqme.cm.core.RULE_DOWNLOAD_LIMIT.java
com.hqme.cm.core.RULE_EXPIRE.java
com.hqme.cm.core.RULE_FREE_SPACE.java
com.hqme.cm.core.RULE_FUNCTIONGROUPS.java
com.hqme.cm.core.RULE_MANDATORY_TIME.java
com.hqme.cm.core.RULE_MAX_SIZE.java
com.hqme.cm.core.RULE_POWER_LEVEL.java
com.hqme.cm.core.RULE_PRIORITY.java
com.hqme.cm.core.RULE_ROAMING.java
com.hqme.cm.core.RULE_SCHEDULE.java
com.hqme.cm.core.RULE_TIME.java
com.hqme.cm.core.Record.java
com.hqme.cm.core.RuleBase.java
com.hqme.cm.core.RuleCollection.java
com.hqme.cm.core.Rule.java
com.hqme.cm.core.StorageManager.java
com.hqme.cm.core.WorkOrderManager.java
com.hqme.cm.core.WorkOrder.java
com.hqme.cm.core.policyParser.Expression.java
com.hqme.cm.core.policyParser.HqmePolicyException.java
com.hqme.cm.core.policyParser.LogicalExpression.java
com.hqme.cm.core.policyParser.NegateExpression.java
com.hqme.cm.core.policyParser.Operator.java
com.hqme.cm.core.policyParser.PolicyElementParser.java
com.hqme.cm.core.policyParser.PolicyExpression.java
com.hqme.cm.core.policyParser.Precedence.java
com.hqme.cm.core.policyParser.Token.java
com.hqme.cm.core.policyParser.Tokenizer.java
com.hqme.cm.sample.HqmeClientActivity.java
com.hqme.cm.sample.HqmeClientReceiver.java
com.hqme.cm.util.CmClientUtil.java
com.hqme.cm.util.CmDate.java
com.hqme.cm.util.CmNumber.java
com.hqme.cm.util.CmProperties.java
com.hqme.cm.util.CmUri.java