Commit cd60131b authored by Yann Garcia's avatar Yann Garcia
Browse files

Merging tinyiot from STF_685_IPE branch

parent 3479c2dc
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
FROM meep-docker-registry:30001/meep-tinyiot-base:latest
FROM ubuntu:22.04

RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y \
      autoconf bison build-essential cmake curl dos2unix doxygen emacs expect flex \
      g++ gcc git gnutls-bin iputils-ping libedit2 libedit-dev libffi-dev \
      libglib2.0-dev libgcrypt-dev libjsoncpp-dev libncurses5-dev libpcap-dev \
      libssl-dev libtool-bin libtool libxml2-dev libxml2-utils libyaml-dev \
      lsof ntp pkg-config sudo sshpass tcpdump tzdata \
      libcurl4-openssl-dev libwebsockets-dev gettext jq && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

ENV SERVER_IP=""
ENV MQTT_ENABLE=""
@@ -17,12 +27,11 @@ ENV MEC_PLATFORM=""
ENV MEC_SANDBOX_ID=""

WORKDIR /usr/src/app
COPY ./data/source /usr/src/app/tinyIoT

WORKDIR /usr/src/app/tinyIoT

COPY ./data /usr/src/app/tinyIoT
# Single deterministic copy (no overlapping layers)
COPY ./data/ /usr/src/app/tinyIoT/

RUN cd / && chmod +x /usr/src/app/tinyIoT/entrypoint.sh
# Ensure entrypoint is executable
RUN chmod +x /usr/src/app/tinyIoT/entrypoint.sh

ENTRYPOINT ["/usr/src/app/tinyIoT/entrypoint.sh"]
 No newline at end of file
+121 −77
Original line number Diff line number Diff line
@@ -2,46 +2,46 @@
set -e

MQTT_ENABLE=${MQTT_ENABLE:-1}
SERVER_IP="${SERVER_IP:-192.168.0.112}"

echo "Using Helm-injected and Kubernetes auto-injected environment variables instead of API queries"
# MEEP / MEC injected variables
echo "MEEP_HOST_URL: ${MEEP_HOST_URL}"
echo "MEEP_MEP_NAME: ${MEEP_MEP_NAME}"
echo "MEEP_SANDBOX_NAME: ${MEEP_SANDBOX_NAME}"
echo "MEEP_INSTANCE_ID: ${MEEP_INSTANCE_ID}"

if [[ ! -z "${MEEP_MEP_NAME}" ]]; then
    svcPath="${MEEP_SANDBOX_NAME}/${MEEP_MEP_NAME}"
else
    svcPath="${MEEP_SANDBOX_NAME}"
fi

if [ "${MEEP_HOST_URL}" == "" ]
then
    echo "$0: MEEP_HOST_URL parameter is not set"
    MEEP_HOST_URL=mec-platform.etsi.org
fi
# Normalize host without modifying original MEEP_HOST_URL
SERVER_IP="${MEEP_HOST_URL#http://}"
SERVER_IP="${SERVER_IP#https://}"

sleep 5 # Wait for ETSI MEC Platform up and stable
MQTT_ENABLE=${MQTT_ENABLE:-1}

# MQTT Configuration
MQTT_HOST=${MQTT_HOST:-${MEP1_MEEP_MOSQUITTO_SERVICE_HOST:-${MEEP_MOSQUITTO_SERVICE_HOST:-"meep-mosquitto"}}}
MQTT_PORT=${MQTT_PORT:-1883}
SERVER_IP=${SERVER_IP:-"0.0.0.0"}
[ -z "$SERVER_IP" ] && SERVER_IP="0.0.0.0"

SERVER_IP="${SERVER_IP:-0.0.0.0}"
SERVER_PORT=${SERVER_PORT:-3002}
[ -z "$SERVER_PORT" ] && SERVER_PORT="3002"
ENABLE_COAP=${ENABLE_COAP:-0}

CSE_BASE_NAME=${CSE_BASE_NAME:-"TinyIoT"}
CSE_BASE_RI=${CSE_BASE_RI:-"tinyiot"}

SERVER_TYPE=${SERVER_TYPE:-IN_CSE}
[ -z "$SERVER_TYPE" ] && SERVER_TYPE="IN_CSE"
MQTT_USERNAME=${MQTT_USERNAME:-"tinyiot-in-cse"}
MQTT_PASSWORD=${MQTT_PASSWORD:-"mqtt"}

echo "MQTT_USERNAME: ${MQTT_USERNAME}"
echo "MQTT_PASSWORD: ${MQTT_PASSWORD}"

# ------------------------------------------------------------------
# MEC Configuration
MEC_ENABLE=${MEC_ENABLE:-0}
# Strip http:// or https:// prefix from MEEP_HOST_URL for MEC_HOST_URL
MEC_HOST_URL=$(echo "${MEEP_HOST_URL:-meep-platform.etsi.org}" | sed 's|https\?://||')
[ -z "$MEC_HOST_URL" ] && MEC_HOST_URL="meep-platform.etsi.org"
MEC_PLATFORM=${MEC_PLATFORM:-"mep1"}
# ------------------------------------------------------------------

MEC_ENABLE=${MEC_ENABLE:-1}

MEC_HOST_URL=${SERVER_IP}
MEC_PLATFORM=${MEEP_MEP_NAME:-${MEC_PLATFORM:-"mep1"}}
MEC_SANDBOX_ID=${MEEP_SANDBOX_NAME:-"meep-sandbox"}
MEC_HTTP_HOST=${MEC_HTTP_HOST:-"meep-tinyiot-in-cse"}
MEC_APP_INSTANCE_ID=${MEEP_INSTANCE_ID:-"tinyiot-in-cse-instance"}
MEC_HTTP_HOST=${MEC_HTTP_HOST:-"${MEEP_MEP_NAME:-"mep1"}-meep-tinyiot-in-cse"}

echo "ENVIRONMENT VARIABLES SET:"
echo "SERVER_IP: ${SERVER_IP}"
@@ -49,78 +49,122 @@ echo "SERVER_TYPE: ${SERVER_TYPE}"
echo "SERVER_PORT: ${SERVER_PORT}"
echo "CSE_BASE_NAME: ${CSE_BASE_NAME}"
echo "CSE_BASE_RI: ${CSE_BASE_RI}"

echo "MQTT_HOST: ${MQTT_HOST}"
echo "MQTT_ENABLE: ${MQTT_ENABLE}"
echo "MQTT_PORT: ${MQTT_PORT}"
echo "MQTT_USERNAME: ${MQTT_USERNAME}"
echo "MQTT_PASSWORD: ${MQTT_PASSWORD}"

echo "MEC_ENABLE: ${MEC_ENABLE}"
echo "MEC_HOST_URL: ${MEC_HOST_URL}"
echo "MEC_PLATFORM: ${MEC_PLATFORM}"
echo "MEC_SANDBOX_ID: ${MEC_SANDBOX_ID}"
echo "MEC_APP_INSTANCE_ID: ${MEC_APP_INSTANCE_ID}"
echo "MEC_HTTP_HOST: ${MEC_HTTP_HOST}"

# ------------------------------------------------------------------
# Export Variables
# ------------------------------------------------------------------
ALLOWED_REMOTE_CSE_ID=${ALLOWED_REMOTE_CSE_ID:-"/tinyiot,/tinyiot-mn-cse,/tinyiot-in-cse,/id-in,/id-mn"}

export MQTT_ENABLE MQTT_HOST MQTT_PORT MQTT_USERNAME MQTT_PASSWORD
export SERVER_PORT SERVER_TYPE SERVER_IP
export ENABLE_COAP CSE_BASE_NAME CSE_BASE_RI ALLOWED_REMOTE_CSE_ID
export MEC_ENABLE MEC_HOST_URL MEC_PLATFORM MEC_SANDBOX_ID MEC_APP_INSTANCE_ID MEC_HTTP_HOST

# ------------------------------------------------------------------
# Build TinyIoT
# ------------------------------------------------------------------

workdir="/usr/src/app/tinyIoT/source/server"

cd "$workdir" || {
    echo "Directory $workdir not found"
    exit 1
}

export MQTT_ENABLE
export MQTT_HOST
export MQTT_PORT
export MQTT_USERNAME
export MQTT_PASSWORD
export SERVER_PORT
export SERVER_TYPE
export SERVER_IP
export ENABLE_COAP
export CSE_BASE_NAME
export CSE_BASE_RI
export MEC_ENABLE
export MEC_HOST_URL
export MEC_PLATFORM
export MEC_SANDBOX_ID
export MEC_HTTP_HOST

workdir="/usr/src/app/tinyIoT/server"
cd "$workdir" || { echo "Directory $workdir not found"; exit 1; }
envsubst < config.h.in > config.h

make clean && make

# Start server in background
# ------------------------------------------------------------------
# Start TinyIoT Server
# ------------------------------------------------------------------

./server &
SERVER_PID=$!

# Register to MEC platform after server is ready
if [ "${MEC_ENABLE}" == "1" ]; then
# ------------------------------------------------------------------
# Register to MEC Platform
# ------------------------------------------------------------------

if [ "${MEC_ENABLE}" = "1" ]; then
    sleep 5
    echo "Registering to MEC platform..."
    curl -k -s -X POST "https://${MEC_HOST_URL}/${MEC_SANDBOX_ID}/${MEC_PLATFORM}/iots/v1/registered_iot_platforms" \

    curl -k -s -X POST \
        "http://${MEC_PLATFORM}-meep-iot/iots/v1/registered_iot_platforms" \
        -H "Content-Type: application/json" \
        -d "{
            \"iotPlatformId\": \"${CSE_BASE_RI}\",
            \"userTransportInfo\": [{
                \"id\": \"${CSE_BASE_RI}-mqtt-01\",
                \"name\": \"${CSE_BASE_RI}\",
                \"description\": \"TinyIoT CSE MQTT\",
                \"type\": \"MB_TOPIC_BASED\",
                \"protocol\": \"MQTT\",
                \"version\": \"3.1.1\",
                \"endpoint\": {\"addresses\": [{\"host\": \"meep-cloud-mosquitto\", \"port\": 1883}]},
                \"security\": {\"username\": \"${MQTT_USERNAME}\", \"password\": \"${MQTT_PASSWORD}\", \"useTLS\": false},
                \"implSpecificInfo\": {
                    \"eventTopics\": [\"/oneM2M/req/+/${CSE_BASE_RI}/#\"],
                    \"uplinkTopics\": [\"/oneM2M/resp/${CSE_BASE_RI}/+/#\"],
                    \"downlinkTopics\": [\"/oneM2M/reg_req/+/${CSE_BASE_RI}/#\", \"/oneM2M/reg_resp/${CSE_BASE_RI}/+/#\"]
        -d '{
            "iotPlatformId": "'"${CSE_BASE_RI}"'",
            "userTransportInfo": [{
                "id": "'"${CSE_BASE_RI}"'-mqtt-01",
                "name": "'"${CSE_BASE_RI}"'",
                "description": "TinyIoT CSE MQTT",
                "type": "MB_TOPIC_BASED",
                "protocol": "MQTT",
                "version": "3.1.1",
                "endpoint": {
                    "addresses": [{
                        "host": "'"${MQTT_HOST}"'",
                        "port": '"${MQTT_PORT}"'
                    }]
                },
                "security": {
                    "username": "'"${MQTT_USERNAME}"'",
                    "password": "'"${MQTT_PASSWORD}"'",
                    "useTLS": false
                },
                "implSpecificInfo": {
                    "eventTopics": [
                        "/oneM2M/req/+/'"${CSE_BASE_RI}"'/#"
                    ],
                    "uplinkTopics": [
                        "/oneM2M/resp/'"${CSE_BASE_RI}"'/+/#"
                    ],
                    "downlinkTopics": [
                        "/oneM2M/reg_req/+/'"${CSE_BASE_RI}"'/#",
                        "/oneM2M/reg_resp/'"${CSE_BASE_RI}"'/+/#"
                    ]
                }
            }],
            \"customServicesTransportInfo\": [{
                \"id\": \"${CSE_BASE_RI}-http-01\",
                \"name\": \"${CSE_BASE_RI}\",
                \"description\": \"TinyIoT CSE HTTP\",
                \"type\": \"REST_HTTP\",
                \"protocol\": \"REST_HTTP\",
                \"version\": \"1.1\",
                \"endpoint\": {\"addresses\": [{\"host\": \"${MEC_HTTP_HOST}\", \"port\": ${SERVER_PORT}}]},
                \"security\": {}
            "customServicesTransportInfo": [{
                "id": "'"${CSE_BASE_RI}"'-http-01",
                "name": "'"${CSE_BASE_NAME}"'",
                "description": "TinyIoT CSE HTTP",
                "type": "REST_HTTP",
                "protocol": "REST_HTTP",
                "version": "1.1",
                "endpoint": {
                    "uris": [
                        "'"${MEEP_HOST_URL}/${MEC_SANDBOX_ID}/${MEC_PLATFORM}/${MEC_HTTP_HOST}"'"
                    ],
                    "addresses": [{
                        "host": "'"${MEC_HTTP_HOST}"'",
                        "port": 80
                    }]
                },
                "security": {}
            }],
            \"enabled\": true
        }" && echo "MEC registration successful" || echo "MEC registration failed (non-fatal)"
            "enabled": true
        }' \
        && echo "MEC registration successful" \
        || echo "MEC registration failed (non-fatal)"
fi

# Wait for server process
# ------------------------------------------------------------------
# Wait for Server Process
# ------------------------------------------------------------------

wait $SERVER_PID
 No newline at end of file
+96 −50
Original line number Diff line number Diff line
FROM meep-docker-registry:30001/meep-tinyiot-base:latest
FROM ubuntu:22.04

RUN DEBIAN_FRONTEND=noninteractive apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    autoconf \
    bison \
    build-essential \
    cmake \
    curl \
    dos2unix \
    doxygen \
    emacs \
    expect \
    flex \
    g++ \
    gcc \
    git \
    gnutls-bin \
    iputils-ping \
    libedit2 \
    libedit-dev \
    libffi-dev \
    libglib2.0-dev \
    libgcrypt-dev \
    libjsoncpp-dev \
    libncurses5-dev \
    libpcap-dev \
    libssl-dev \
    libtool-bin \
    libtool \
    libxml2-dev \
    libxml2-utils \
    libyaml-dev \
    lsof \
    ntp \
    pkg-config \
    sudo \
    sshpass \
    tcpdump \
    tzdata \
    libcurl4-openssl-dev \
    libwebsockets-dev \
    gettext \
    jq \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*


ENV SERVER_IP=""
ENV MQTT_ENABLE=""
+155 −108
Original line number Diff line number Diff line
@@ -2,42 +2,19 @@
set -e

MQTT_ENABLE=${MQTT_ENABLE:-1}
# Process MEEP_HOST_URL
#SERVER_IP="${MEEP_HOST_URL#http://}"; MEEP_HOST_URL="${MEEP_HOST_URL#https://}"
SERVER_IP="${SERVER_IP:-192.168.0.112}"

# ========== KUBERNETES API QUERIES COMMENTED OUT ==========
# These queries return null in this environment.
# Instead, use Kubernetes auto-injected environment variables or Helm-injected values.

# # MEEP_SANDBOX_NAME
# SERVICE_NAME="meep-tinyiot-in-cse"
# # Get the namespace from the service account
# NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
# # Get the token from the service account
# TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
# # Query the Kubernetes API to get the NodePort for the service
# NODE_PORT_IN_CSE=$(curl -sSk \
#   -H "Authorization: Bearer $TOKEN" \
#   https://kubernetes.default.svc/api/v1/namespaces/$NAMESPACE/services/$SERVICE_NAME \
#   | jq -r '.spec.ports[0].nodePort')
# echo "External NodePort exposed for service [$SERVICE_NAME] in namespace [$NAMESPACE] is: $NODE_PORT_IN_CSE"

# SERVICE_NAME="meep-mosquitto"
# NODE_PORT_MEEP_MOSQUITTO=$(curl -sSk \
#   -H "Authorization: Bearer $TOKEN" \
#   https://kubernetes.default.svc/api/v1/namespaces/$NAMESPACE/services/$SERVICE_NAME \
#   | jq -r '.spec.ports[0].nodePort')
# echo "External NodePort exposed for service [$SERVICE_NAME] in namespace [$NAMESPACE] is: $NODE_PORT_MEEP_MOSQUITTO"

# ------------------------------------------------------------------
# MEEP / MEC injected variables
# ------------------------------------------------------------------
echo "Using Helm-injected and Kubernetes auto-injected environment variables instead of API queries"
echo "MEEP_HOST_URL: ${MEEP_HOST_URL}"
echo "MEEP_MEP_NAME: ${MEEP_MEP_NAME}"
echo "MEEP_SANDBOX_NAME: ${MEEP_SANDBOX_NAME}"
echo "MEEP_INSTANCE_ID: ${MEEP_INSTANCE_ID}"



# REMOTE_CSE_HOST=$(curl -sSk \
#   -H "Authorization: Bearer $TOKEN" \
#   https://kubernetes.default.svc/api/v1/namespaces/$NAMESPACE/services/$SERVICE_NAME \
#   | jq -r '.spec.clusterIP')
# Normalize host without modifying original MEEP_HOST_URL
SERVER_IP="${MEEP_HOST_URL#http://}"
SERVER_IP="${SERVER_IP#https://}"

if [[ ! -z "${MEEP_MEP_NAME}" ]]; then
    svcPath="${MEEP_SANDBOX_NAME}/${MEEP_MEP_NAME}"
@@ -45,43 +22,80 @@ else
    svcPath="${MEEP_SANDBOX_NAME}"
fi

if [ "${MEEP_HOST_URL}" == "" ]
then
if [ -z "${MEEP_HOST_URL}" ]; then
    echo "$0: MEEP_HOST_URL parameter is not set"
    MEEP_HOST_URL=mec-platform.etsi.org
    MEEP_HOST_URL="mec-platform.etsi.org"
fi

sleep 30 # Wait for ETSI MEC Platform and IN-CSE to be up and stable
MQTT_ENABLE=${MQTT_ENABLE:-1}
# Use Helm-injected values or Kubernetes auto-injected variables

# ------------------------------------------------------------------
# MQTT Configuration
# ------------------------------------------------------------------
MQTT_HOST=${MQTT_HOST:-${MEP1_MEEP_MOSQUITTO_SERVICE_HOST:-${MEEP_MOSQUITTO_SERVICE_HOST:-"meep-mosquitto"}}}
MQTT_PORT=${MQTT_PORT:-1883}
SERVER_IP=${SERVER_IP:-"0.0.0.0"}
[ -z "$SERVER_IP" ] && SERVER_IP="0.0.0.0"

SERVER_IP="${SERVER_IP:-0.0.0.0}"
SERVER_PORT=${SERVER_PORT:-3005}
[ -z "$SERVER_PORT" ] && SERVER_PORT="3005"
ENABLE_COAP=${ENABLE_COAP:-0}

CSE_BASE_NAME=${CSE_BASE_NAME:-"id-mn"}
CSE_BASE_RI=${CSE_BASE_RI:-"id-mn"}
SERVER_TYPE=${SERVER_TYPE:- MN_CSE}
[ -z "$SERVER_TYPE" ] && SERVER_TYPE="MN_CSE"
SERVER_TYPE=${SERVER_TYPE:-"MN_CSE"}

MQTT_USERNAME=${MQTT_USERNAME:-"tinyiot-mn-cse"}
MQTT_PASSWORD=${MQTT_PASSWORD:-"mqtt"}
# Use Helm-injected values or Kubernetes auto-injected variables
REMOTE_CSE_HOST=${REMOTE_CSE_HOST:-${MEEP_TINYIOT_IN_CSE_SERVICE_HOST:-"meep-tinyiot-in-cse"}}
REMOTE_CSE_PORT=${REMOTE_CSE_PORT:-${MEEP_TINY_IN_CSE_SERVICE_PORT:-3002}}
REMOTE_CSE_ID=${REMOTE_CSE_ID:-"TinyIoT"}
REMOTE_CSE_NAME=${REMOTE_CSE_NAME:-"tinyiot"}

echo "MQTT_USERNAME: ${MQTT_USERNAME}"
echo "MQTT_PASSWORD: ${MQTT_PASSWORD}"

# ------------------------------------------------------------------
if [ -z "${REMOTE_CSE_HOST}" ]; then
    # Try different potential hostnames for IN-CSE
    for host in "monaco-telecom-meep-tinyiot-in-cse" "${MEEP_MEP_NAME}-meep-tinyiot-in-cse" "mep1-meep-tinyiot-in-cse" "mep2-meep-tinyiot-in-cse" "meep-tinyiot-in-cse"; do
        if [ ! -z "${host}" ]; then
            echo "Checking resolution for: ${host}"
            if getent hosts "${host}" >/dev/null 2>&1; then
                REMOTE_CSE_HOST="${host}"
                echo "Found resolvable remote CSE host: ${REMOTE_CSE_HOST}"
                break
            fi
        fi
    done
    # Fallback to default if none resolved
    REMOTE_CSE_HOST=${REMOTE_CSE_HOST:-"${MEEP_MEP_NAME:-"mep1"}-meep-tinyiot-in-cse"}
fi
REMOTE_CSE_PORT=${REMOTE_CSE_PORT:-80}
REMOTE_CSE_ID=${REMOTE_CSE_ID:-"tinyiot"}
REMOTE_CSE_NAME=${REMOTE_CSE_NAME:-"TinyIoT-IN"}

# Resolve REMOTE_CSE_HOST to IP address since TinyIoT HTTP client doesn't support DNS resolution
if [[ ! "$REMOTE_CSE_HOST" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
    echo "Resolving REMOTE_CSE_HOST hostname to IP: ${REMOTE_CSE_HOST}"
    RESOLVED_IP=$(getent hosts "${REMOTE_CSE_HOST}" | awk '{print $1}')
    if [ ! -z "${RESOLVED_IP}" ]; then
        REMOTE_CSE_HOST="${RESOLVED_IP}"
        echo "Resolved to IP: ${REMOTE_CSE_HOST}"
    else
        echo "Warning: Could not resolve hostname ${REMOTE_CSE_HOST} to IP"
    fi
fi

# ------------------------------------------------------------------
# MEC Configuration
MEC_ENABLE=${MEC_ENABLE:-0}
# Strip http:// or https:// prefix from MEEP_HOST_URL for MEC_HOST_URL
MEC_HOST_URL=$(echo "${MEEP_HOST_URL:-meep-platform.etsi.org}" | sed 's|https\?://||')
[ -z "$MEC_HOST_URL" ] && MEC_HOST_URL="meep-platform.etsi.org"
MEC_PLATFORM=${MEC_PLATFORM:-"mep1"}
# ------------------------------------------------------------------
MEC_ENABLE=${MEC_ENABLE:-1}
MEC_HOST_URL=${SERVER_IP}
[ -z "$MEC_HOST_URL" ] && MEC_HOST_URL="mec-platform.etsi.org"

MEC_PLATFORM=${MEEP_MEP_NAME:-${MEC_PLATFORM:-"mep1"}}
MEC_SANDBOX_ID=${MEEP_SANDBOX_NAME:-"meep-sandbox"}
MEC_HTTP_HOST=${MEC_HTTP_HOST:-"meep-tinyiot-mn-cse-1"}
MEC_APP_INSTANCE_ID=${MEEP_INSTANCE_ID:-"tinyiot-mn-cse-instance"}
MEC_HTTP_HOST=${MEC_HTTP_HOST:-"${MEEP_MEP_NAME:-"mep1"}-meep-tinyiot-mn-cse"}

# ------------------------------------------------------------------
# Environment Dump
# ------------------------------------------------------------------
echo "ENVIRONMENT VARIABLES SET:"
echo "SERVER_IP: ${SERVER_IP}"
echo "SERVER_TYPE: ${SERVER_TYPE}"
@@ -101,73 +115,106 @@ echo "MEC_ENABLE: ${MEC_ENABLE}"
echo "MEC_HOST_URL: ${MEC_HOST_URL}"
echo "MEC_PLATFORM: ${MEC_PLATFORM}"
echo "MEC_SANDBOX_ID: ${MEC_SANDBOX_ID}"
echo "MEC_APP_INSTANCE_ID: ${MEC_APP_INSTANCE_ID}"
echo "MEC_HTTP_HOST: ${MEC_HTTP_HOST}"

# ------------------------------------------------------------------
# Export Variables
# ------------------------------------------------------------------
ALLOWED_REMOTE_CSE_ID=${ALLOWED_REMOTE_CSE_ID:-"/tinyiot,/tinyiot-mn-cse,/tinyiot-in-cse,/id-in,/id-mn"}

export MQTT_ENABLE MQTT_HOST MQTT_PORT MQTT_USERNAME MQTT_PASSWORD
export SERVER_PORT SERVER_TYPE SERVER_IP
export ENABLE_COAP CSE_BASE_NAME CSE_BASE_RI ALLOWED_REMOTE_CSE_ID
export REMOTE_CSE_ID REMOTE_CSE_NAME REMOTE_CSE_HOST REMOTE_CSE_PORT
export MEC_ENABLE MEC_HOST_URL MEC_PLATFORM MEC_SANDBOX_ID MEC_APP_INSTANCE_ID MEC_HTTP_HOST

# ------------------------------------------------------------------
# Build TinyIoT
# ------------------------------------------------------------------
workdir="/usr/src/app/tinyIoT/source/server"
cd "$workdir" || {
    echo "Directory $workdir not found"
    exit 1
}

export MQTT_ENABLE
export MQTT_HOST
export MQTT_PORT
export MQTT_USERNAME
export MQTT_PASSWORD
export SERVER_PORT
export SERVER_TYPE
export SERVER_IP
export ENABLE_COAP
export CSE_BASE_NAME
export CSE_BASE_RI
export REMOTE_CSE_ID
export REMOTE_CSE_NAME
export REMOTE_CSE_HOST
export REMOTE_CSE_PORT
export MEC_ENABLE
export MEC_HOST_URL
export MEC_PLATFORM
export MEC_SANDBOX_ID
export MEC_HTTP_HOST

workdir="/usr/src/app/tinyIoT/server"
cd "$workdir" || { echo "Directory $workdir not found"; exit 1; }
envsubst < config.h.in > config.h
make clean && make

# Start server in background
# ------------------------------------------------------------------
# Start TinyIoT Server
# ------------------------------------------------------------------
./server &
SERVER_PID=$!

# Register to MEC platform after server is ready
if [ "${MEC_ENABLE}" == "1" ]; then
# ------------------------------------------------------------------
# Register to MEC Platform
# ------------------------------------------------------------------
if [ "${MEC_ENABLE}" = "1" ]; then
    sleep 5
    echo "Registering to MEC platform..."
    curl -k -s -X POST "https://${MEC_HOST_URL}/${MEC_SANDBOX_ID}/${MEC_PLATFORM}/iots/v1/registered_iot_platforms" \

    curl -s -X POST \
        "http://${MEC_PLATFORM}-meep-iot/iots/v1/registered_iot_platforms" \
        -H "Content-Type: application/json" \
        -d "{
            \"iotPlatformId\": \"${CSE_BASE_RI}\",
            \"userTransportInfo\": [{
                \"id\": \"${CSE_BASE_RI}-mqtt-01\",
                \"name\": \"${CSE_BASE_RI}\",
                \"description\": \"TinyIoT CSE MQTT\",
                \"type\": \"MB_TOPIC_BASED\",
                \"protocol\": \"MQTT\",
                \"version\": \"3.1.1\",
                \"endpoint\": {\"addresses\": [{\"host\": \"meep-cloud-mosquitto\", \"port\": 1883}]},
                \"security\": {\"username\": \"${MQTT_USERNAME}\", \"password\": \"${MQTT_PASSWORD}\", \"useTLS\": false},
                \"implSpecificInfo\": {
                    \"eventTopics\": [\"/oneM2M/req/+/${CSE_BASE_RI}/#\"],
                    \"uplinkTopics\": [\"/oneM2M/resp/${CSE_BASE_RI}/+/#\"],
                    \"downlinkTopics\": [\"/oneM2M/reg_req/+/${CSE_BASE_RI}/#\", \"/oneM2M/reg_resp/${CSE_BASE_RI}/+/#\"]
        -d '{
            "iotPlatformId": "'"${CSE_BASE_RI}"'",
            "userTransportInfo": [{
                "id": "'"${CSE_BASE_RI}"'-mqtt-01",
                "name": "'"${CSE_BASE_RI}"'",
                "description": "TinyIoT CSE MQTT",
                "type": "MB_TOPIC_BASED",
                "protocol": "MQTT",
                "version": "3.1.1",
                "endpoint": {
                    "addresses": [{
                        "host": "'"${MQTT_HOST}"'",
                        "port": '"${MQTT_PORT}"'
                    }]
                },
                "security": {
                    "username": "'"${MQTT_USERNAME}"'",
                    "password": "'"${MQTT_PASSWORD}"'",
                    "useTLS": false
                },
                "implSpecificInfo": {
                    "eventTopics": [
                        "/oneM2M/req/+/'"${CSE_BASE_RI}"'/#"
                    ],
                    "uplinkTopics": [
                        "/oneM2M/resp/'"${CSE_BASE_RI}"'/+/#"
                    ],
                    "downlinkTopics": [
                        "/oneM2M/reg_req/+/'"${CSE_BASE_RI}"'/#",
                        "/oneM2M/reg_resp/'"${CSE_BASE_RI}"'/+/#"
                    ]
                }
            }],
            \"customServicesTransportInfo\": [{
                \"id\": \"${CSE_BASE_RI}-http-01\",
                \"name\": \"${CSE_BASE_RI}\",
                \"description\": \"TinyIoT CSE HTTP\",
                \"type\": \"REST_HTTP\",
                \"protocol\": \"REST_HTTP\",
                \"version\": \"1.1\",
                \"endpoint\": {\"addresses\": [{\"host\": \"${MEC_HTTP_HOST}\", \"port\": ${SERVER_PORT}}]},
                \"security\": {}
            "customServicesTransportInfo": [{
                "id": "'"${CSE_BASE_RI}"'-http-01",
                "name": "'"${CSE_BASE_NAME}"'",
                "description": "TinyIoT CSE HTTP",
                "type": "REST_HTTP",
                "protocol": "REST_HTTP",
                "version": "1.1",
                "endpoint": {
                    "uris": [
                        "'"${MEEP_HOST_URL}/${MEC_SANDBOX_ID}/${MEC_PLATFORM}/${MEC_HTTP_HOST}"'"
                    ],
                    "addresses": [{
                        "host": "'"${MEC_HTTP_HOST}"'",
                        "port": 80
                    }]
                },
                "security": {}
            }],
            \"enabled\": true
        }" && echo "MEC registration successful" || echo "MEC registration failed (non-fatal)"
            "enabled": true
        }' \
        && echo "MEC registration successful" \
        || echo "MEC registration failed (non-fatal)"
fi

# Wait for server process
# ------------------------------------------------------------------
# Wait for Server Process
# ------------------------------------------------------------------
wait $SERVER_PID
 No newline at end of file