All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fiftyone.mobile.detection.entities.ComponentV32 Maven / Gradle / Ivy

The newest version!
package fiftyone.mobile.detection.entities;

import fiftyone.mobile.detection.Dataset;
import fiftyone.mobile.detection.readers.BinaryReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/* *********************************************************************
 * This Source Code Form is copyright of 51Degrees Mobile Experts Limited. 
 * Copyright © 2014 51Degrees Mobile Experts Limited, 5 Charlotte Close,
 * Caversham, Reading, Berkshire, United Kingdom RG4 7BY
 * 
 * This Source Code Form is the subject of the following patent 
 * applications, owned by 51Degrees Mobile Experts Limited of 5 Charlotte
 * Close, Caversham, Reading, Berkshire, United Kingdom RG4 7BY: 
 * European Patent Application No. 13192291.6; and 
 * United States Patent Application Nos. 14/085,223 and 14/085,301.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0.
 * 
 * If a copy of the MPL was not distributed with this file, You can obtain
 * one at http://mozilla.org/MPL/2.0/.
 * 
 * This Source Code Form is "Incompatible With Secondary Licenses", as
 * defined by the Mozilla Public License, v. 2.0.
 * ********************************************************************* */
/**
 * Implementation of Component where HTTP Headers are provided by the data file
 * and are no longer hardcoded like V3.1.
 */
public class ComponentV32 extends Component {

    /**
     * List of HTTP headers that should be checked in order to perform a 
     * detection where more headers than User-Agent are available.
     */
    private String[] httpHeaders;
    /**
     * Offsets of the HTTP headers in the data file.
     */
    private final int[] httpHeaderOffsets;
    
    /**
     * Constructs a new instance of Component. Reads the string offsets to the 
     * HTTP Headers during the constructor.
     * @param dataSet The Dataset being created.
     * @param index Index of the component within the list.
     * @param reader Reader connected to the source data structure and 
     * positioned to start reading.
     */
    public ComponentV32(Dataset dataSet, int index, BinaryReader reader) {
        super(dataSet, index, reader);
        this.httpHeaders = null;
        this.httpHeaderOffsets = new int[reader.readUInt16()];
        for (int i = 0; i < this.httpHeaderOffsets.length; i++) {
            this.httpHeaderOffsets[i] = reader.readInt32();
        }
    }

    /**
     * List of HTTP headers that should be checked in order to perform a 
     * detection where more headers than User-Agent are available. This data 
     * is used by methods that can HTTP Header collections.
     * @return List of HTTP headers as Strings.
     */
    @Override
    public String[] getHttpheaders() {
        if (httpHeaders == null) {
            synchronized(this) {
                if (httpHeaders == null) {
                    List tempList = new ArrayList();
                    for (int element : httpHeaderOffsets) {
                        try {
                            tempList.add(dataSet.strings.get(element).toString());
                        } catch (IOException ex) {
                            Logger.getLogger(ComponentV32.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                    httpHeaders = tempList.toArray(new String[tempList.size()]);
                    tempList.clear();
                }
            }
        }
        return httpHeaders;
    }
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy