// Path: dragonite-sdk/src/main/java/com/vecsight/dragonite/sdk/cryptor/PacketCryptor.java
// public interface PacketCryptor {
// 
//     /**
//      * Encrypt the message and return the ciphertext.
//      * This function may be called by multiple threads at the same time.
//      *
//      * @param rawData Content to be encrypted
//      * @return Encrypted content
//      */
//     byte[] encrypt(final byte[] rawData);
// 
//     /**
//      * Decrypt the ciphertext and return the message.
//      * This function may be called by multiple threads at the same time.
//      *
//      * @param encryptedData Content to be decrypted
//      * @return Decrypted content
//      */
//     byte[] decrypt(final byte[] encryptedData);
// 
//     /**
//      * Many encryption methods need to add additional bytes to the original message.
//      * Please specify the maximum length of additional bytes that the encryption might cause.
//      *
//      * @return Length of additional bytes
//      */
//     int getMaxAdditionalBytesLength();
// 
// }
// 
// Path: dragonite-sdk/src/main/java/com/vecsight/dragonite/sdk/misc/DragoniteGlobalConstants.java
// public final class DragoniteGlobalConstants {
// 
//     public static final String LIBRARY_VERSION = DragoniteBuildConfig.VERSION;
// 
//     public static final byte PROTOCOL_VERSION = 2;
// 
//     public static final int MIN_SEND_WINDOW_SIZE = 20;
// 
//     public static final int ACK_INTERVAL_MS = 10;
// 
//     public static final int MAX_FAST_RESEND_COUNT = 3;
// 
//     public static final int MAX_SLOW_RESEND_MULT = 4;
// 
//     public static final int INIT_RTT_MS = 200, RTT_MAX_VARIATION_MS = 200, RTT_UPDATE_INTERVAL_MS = 100, RTT_RESEND_CORRECTION_INTERVAL_MS = 2000;
// 
//     public static final int DEV_RTT_MULT = 4;
// 
//     public static final float RTT_RESENDED_REFRESH_MAX_MULT = 1.5f;
// 
//     public static final int MIN_CLOSE_WAIT_MS = 100, CLOSE_WAIT_RTT_MULT = 4;
// 
//     public static final int WEB_PANEL_PORT = 8000;
// 
// }
// 
// Path: dragonite-utils/src/main/java/com/vecsight/dragonite/utils/flow/Preconditions.java
// public static void checkArgument(final boolean ok, final String message) {
//     if (!ok) throw new IllegalArgumentException(message);
// }
// 
// Path: dragonite-utils/src/main/java/com/vecsight/dragonite/utils/flow/Preconditions.java
// public static boolean inTrafficClassRange(final int trafficClass) {
//     return trafficClass >= 0 && trafficClass <= 255;
// }


import com.vecsight.dragonite.sdk.cryptor.PacketCryptor;
import com.vecsight.dragonite.sdk.misc.DragoniteGlobalConstants;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import static com.vecsight.dragonite.utils.flow.Preconditions.checkArgument;
import static com.vecsight.dragonite.utils.flow.Preconditions.inTrafficClassRange;
/*
 * The Dragonite Project
 * -------------------------
 * See the LICENSE file in the root directory for license information.
 */


package com.vecsight.dragonite.sdk.config;




public class DragoniteSocketParameters {

    private int packetSize = 1300;

    private boolean autoSplit = true;

    private int maxPacketBufferSize = 0;

    private int windowMultiplier = 4;

    private int resendMinDelayMS = 50;

    private int heartbeatIntervalSec = 5;

    private int receiveTimeoutSec = 10;

    private boolean enableWebPanel = false;

// Path: dragonite-sdk/src/main/java/com/vecsight/dragonite/sdk/cryptor/PacketCryptor.java
// public interface PacketCryptor {
// 
//     /**
//      * Encrypt the message and return the ciphertext.
//      * This function may be called by multiple threads at the same time.
//      *
//      * @param rawData Content to be encrypted
//      * @return Encrypted content
//      */
//     byte[] encrypt(final byte[] rawData);
// 
//     /**
//      * Decrypt the ciphertext and return the message.
//      * This function may be called by multiple threads at the same time.
//      *
//      * @param encryptedData Content to be decrypted
//      * @return Decrypted content
//      */
//     byte[] decrypt(final byte[] encryptedData);
// 
//     /**
//      * Many encryption methods need to add additional bytes to the original message.
//      * Please specify the maximum length of additional bytes that the encryption might cause.
//      *
//      * @return Length of additional bytes
//      */
//     int getMaxAdditionalBytesLength();
// 
// }
// 
// Path: dragonite-sdk/src/main/java/com/vecsight/dragonite/sdk/misc/DragoniteGlobalConstants.java
// public final class DragoniteGlobalConstants {
// 
//     public static final String LIBRARY_VERSION = DragoniteBuildConfig.VERSION;
// 
//     public static final byte PROTOCOL_VERSION = 2;
// 
//     public static final int MIN_SEND_WINDOW_SIZE = 20;
// 
//     public static final int ACK_INTERVAL_MS = 10;
// 
//     public static final int MAX_FAST_RESEND_COUNT = 3;
// 
//     public static final int MAX_SLOW_RESEND_MULT = 4;
// 
//     public static final int INIT_RTT_MS = 200, RTT_MAX_VARIATION_MS = 200, RTT_UPDATE_INTERVAL_MS = 100, RTT_RESEND_CORRECTION_INTERVAL_MS = 2000;
// 
//     public static final int DEV_RTT_MULT = 4;
// 
//     public static final float RTT_RESENDED_REFRESH_MAX_MULT = 1.5f;
// 
//     public static final int MIN_CLOSE_WAIT_MS = 100, CLOSE_WAIT_RTT_MULT = 4;
// 
//     public static final int WEB_PANEL_PORT = 8000;
// 
// }
// 
// Path: dragonite-utils/src/main/java/com/vecsight/dragonite/utils/flow/Preconditions.java
// public static void checkArgument(final boolean ok, final String message) {
//     if (!ok) throw new IllegalArgumentException(message);
// }
// 
// Path: dragonite-utils/src/main/java/com/vecsight/dragonite/utils/flow/Preconditions.java
// public static boolean inTrafficClassRange(final int trafficClass) {
//     return trafficClass >= 0 && trafficClass <= 255;
// }


// Path: dragonite-sdk/src/main/java/com/vecsight/dragonite/sdk/config/DragoniteSocketParameters.java
import com.vecsight.dragonite.sdk.cryptor.PacketCryptor;
import com.vecsight.dragonite.sdk.misc.DragoniteGlobalConstants;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import static com.vecsight.dragonite.utils.flow.Preconditions.checkArgument;
import static com.vecsight.dragonite.utils.flow.Preconditions.inTrafficClassRange;

/*
 * The Dragonite Project
 * -------------------------
 * See the LICENSE file in the root directory for license information.
 */


package com.vecsight.dragonite.sdk.config;




public class DragoniteSocketParameters {

    private int packetSize = 1300;

    private boolean autoSplit = true;

    private int maxPacketBufferSize = 0;

    private int windowMultiplier = 4;

    private int resendMinDelayMS = 50;

    private int heartbeatIntervalSec = 5;

    private int receiveTimeoutSec = 10;

    private boolean enableWebPanel = false;

    private InetSocketAddress webPanelBindAddress = new InetSocketAddress(InetAddress.getLoopbackAddress(), DragoniteGlobalConstants.WEB_PANEL_PORT);