/*
 * Copyright (c) 1997, 2001, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

import java.io.PrintStream;
import java.security.SecureRandom;

//
// This holds all the configuration data that's shared between
// threads that are associated with passive and active SSL sockets.
//
// Passive sockets are SSLServer sockets, which produce active ones
// (SSLSockets) that inherit attributes specified here.
//
// Active sockets are associated with a client or server side handler.
// Those are almost identical from the application perspective.
//
class TestThread extends Thread
{
    protected String            basicCipherSuites [];
    protected SecureRandom      prng;
    protected int               iterations = -1;

    // basic test flags
    protected boolean           doRenegotiate;
    protected boolean           initiateHandshake;
    protected boolean           listenHandshake;
    protected boolean           reverseRole;

    // how much output to have, where
    protected int               verbosity = 0;
    protected PrintStream       out = System.out;

    TestThread (String s)
        { super (s); }


    //
    // Defines the cipher suites that'll be used in initial
    // handshaking
    //
    public void setBasicCipherSuites (String suites [])
        { basicCipherSuites = suites; }

    //
    // Says whether to register a callback on handshake
    // completeion.
    //
    public void setListenHandshake (boolean flag)
        { listenHandshake = flag; }

    //
    // Says whether to renegotiate after sending some
    // initial data.
    //
    public void setDoRenegotiate (boolean flag)
        { doRenegotiate = flag; }

    //
    // Says whether to try initiating handshaking.  It's
    // fine of both client and server do this, or if neither
    // does it; sending data triggers it regardless.
    //
    public void setInitiateHandshake (boolean flag)
        { initiateHandshake = flag; }

    //
    // For half-duplex tests, who sends data first?
    //
    public void setReverseRole (boolean flag)
        { reverseRole = flag; }

    //
    // Where does the diagnostic output go?
    //
    public void setOutput (PrintStream out)
        { this.out = out; }


    //
    // How much output is desired?  2 == noisy-typical, lower is less
    //
    public void setVerbosity (int level)
        { verbosity = level; }

    //
    // How many loops of random data should a given "client" start?
    //
    public void setIterations (int level)
        { iterations = level; }

    //
    // Provide some randomness for use with random data I/O.
    // By default, the "random" data is fully predictable (the
    // data is generated with a fixed seed).  However, both the
    // client and server could agree to use truly random data.
    //
    void setPRNG (SecureRandom prng)
        { this.prng = prng; }
}