# Copyright (c) 2025 Broadcom Inc. and its subsidiaries. All Rights Reserved.
# LAYER 7 TECHNOLOGIES
# Defines JAVA_HOME, etc

default_java_opts="-server "

if [ ! -f "/etc/sysconfig/network" -o  "$(grep "^NETWORKING_IPV6=yes" /etc/sysconfig/network 2>/dev/null)" ]
then
  default_java_opts="$default_java_opts -Djava.net.preferIPv4Stack=false "
else
  default_java_opts="$default_java_opts -Djava.net.preferIPv4Stack=true "
fi

default_java_opts="$default_java_opts -Djava.security.policy=${SSG_HOME}/runtime/etc/ssg.policy"
default_java_opts="$default_java_opts -Djava.security.properties=${SSG_HOME}/runtime/etc/ssg.security"
default_java_opts="$default_java_opts -Djava.security.egd=file:/dev/./urandom"
default_java_opts="$default_java_opts -Dfile.encoding=UTF-8 "
default_java_opts="$default_java_opts -Djava.awt.headless=true -XX:CompileThreshold=1500 "
default_java_opts="$default_java_opts -Dcom.l7tech.server.defaultClusterHostname=$(hostname)"
default_java_opts="$default_java_opts --add-opens jdk.crypto.ec/sun.security.ec=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.security.jgss/sun.security.krb5=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.security.jgss/sun.security.krb5.internal=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.security.jgss/sun.security.krb5.internal.ktab=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.security.jgss/sun.security.jgss.krb5=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.security.jgss/sun.security.krb5.internal.crypto=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.security.jgss/sun.security.krb5.internal.util=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.base/sun.security.internal.spec=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.naming/com.sun.jndi.ldap=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.base/sun.security.provider.certpath=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.base/sun.security.ssl=ALL-UNNAMED"
default_java_opts="$default_java_opts --add-exports java.base/sun.security.util=ALL-UNNAMED"

if [ -s "/opt/SecureSpan/Gateway/node/default/etc/conf/kmp.properties" ]; then
  default_java_opts="$default_java_opts --add-exports java.security.jgss/sun.security.jgss=java.base,ALL-UNNAMED"
  default_java_opts="$default_java_opts --add-exports java.security.sasl/com.sun.security.sasl=java.base"
  default_java_opts="$default_java_opts --add-exports jdk.security.jgss/com.sun.security.sasl.gsskerb=java.base"
  default_java_opts="$default_java_opts --add-exports java.xml.crypto/org.jcp.xml.dsig.internal.dom=java.base"
  default_java_opts="$default_java_opts --add-exports java.smartcardio/sun.security.smartcardio=java.base"
  default_java_opts="$default_java_opts --add-exports java.naming/sun.security.provider.certpath.ldap=java.base"
  default_java_opts="$default_java_opts --add-exports jdk.crypto.ec/sun.security.ec=java.base"
  default_java_opts="$default_java_opts --add-exports jdk.crypto.cryptoki/sun.security.pkcs11=java.base"
else
  default_java_opts="$default_java_opts --add-exports java.security.jgss/sun.security.jgss=ALL-UNNAMED"
fi

# sun.net.inetaddr.ttl and java.util.Arrays.useLegacyMergeSort are system properties that are read during
# JVM start up and need to be specified as command line args to make sure the values are used.
# Do not move sun.net.inetaddr.ttl and java.util.Arrays.useLegacyMergeSort into the system.properties file.
default_java_opts="$default_java_opts -Dsun.net.inetaddr.ttl=30 "
default_java_opts="$default_java_opts -Djava.util.Arrays.useLegacyMergeSort=true"

GEMFIRE_ARGS="--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED --add-exports=java.management/com.sun.jmx.remote.security=ALL-UNNAMED"
default_java_opts="$default_java_opts $GEMFIRE_ARGS"

HAZELCAST_ARGS="--add-modules java.se --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.management/sun.management=ALL-UNNAMED --add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED -Dhazelcast.ignoreXxeProtectionFailures=true"
default_java_opts="$default_java_opts $HAZELCAST_ARGS"

# OpenTelemetry SDK
default_java_opts="$default_java_opts -Dotel.sdk.disabled=true"
default_java_opts="$default_java_opts -Dotel.java.global-autoconfigure.enabled=true"
# OpenTelemetry exporter
default_java_opts="$default_java_opts -Dotel.traces.exporter=otlp"
default_java_opts="$default_java_opts -Dotel.metrics.exporter=otlp"
default_java_opts="$default_java_opts -Dotel.logs.exporter=none"
#default_java_opts="$default_java_opts -Dotel.exporter.otlp.endpoint=https://your-otel-collector:4318/"
#default_java_opts="$default_java_opts -Dotel.exporter.otlp.certificate=/path/to/trusted_certs.crt"
default_java_opts="$default_java_opts -Dotel.exporter.otlp.protocol=http/protobuf"
# OpenTelemetry Resource
default_java_opts="$default_java_opts -Dotel.service.name=ssg-$(hostname)"
# OpenTelemetry Java agent instrumentation
# Enable to Java agent to collect JVM Metric.
# Java agent jar file must be copied to gateway and set with proper ownership and permission.
#default_java_opts="$default_java_opts -Dotel.javaagent.enabled=false"
#default_java_opts="$default_java_opts -javaagent:${SSG_HOME}/runtime/lib/ext/opentelemetry-javaagent-2.x.x.jar"

SSG_JAVA_OPTS="$SSG_JAVA_OPTS $default_java_opts";

unset default_java_opts

export SSG_JAVA_OPTS

if ! echo $LD_LIBRARY_PATH | /bin/egrep -s "(^|:)$SSG_HOME/runtime/lib($|:)" >/dev/null ; then
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SSG_HOME/runtime/lib
fi

export LD_LIBRARY_PATH
