summaryrefslogtreecommitdiff
path: root/stacks/web/share/reverse-proxy/docroot/max25-websocket/config.php
blob: 7a7f8cfc407a20bab4d1fef837262cc716c9ae13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
/**
 * Browser terminal defaults — merged from web-terminal.ini and max25d.ini.
 */
declare(strict_types=1);

function max25_web_ini_path(): string
{
    $p = getenv('MAX25_WEB_TERMINAL_INI');
    if ($p !== false && $p !== '') {
        return $p;
    }
    if (is_readable('/etc/max25/web-terminal.ini')) {
        return '/etc/max25/web-terminal.ini';
    }
    return __DIR__ . '/../../../web-terminal.ini.example';
}

function max25_web_parse_bool(string $v, bool $default): bool
{
    $v = strtolower(trim($v));
    if ($v === '') {
        return $default;
    }
    return in_array($v, ['1', 'yes', 'true', 'on'], true);
}

/** @return array{device:string,callerid:string,callid:string,ax25_ui:bool,connect_on_start:bool} */
function max25_web_session_defaults(): array
{
    $defaults = [
        'device' => '',
        'callerid' => '',
        'callid' => '',
        'ax25_ui' => true,
        'connect_on_start' => true,
    ];

    $web_ini = max25_web_ini_path();
    $web = @parse_ini_file($web_ini, true, INI_SCANNER_RAW);
    $sec = [];
    if (is_array($web)) {
        $sec = $web['session'] ?? [];
        if (isset($sec['device'])) {
            $defaults['device'] = trim((string)$sec['device']);
        }
        if (isset($sec['callerid']) && trim((string)$sec['callerid']) !== '') {
            $defaults['callerid'] = strtoupper(trim((string)$sec['callerid']));
        }
        if (isset($sec['callid']) && trim((string)$sec['callid']) !== '') {
            $defaults['callid'] = strtoupper(trim((string)$sec['callid']));
        }
        if (isset($sec['ax25_ui'])) {
            $defaults['ax25_ui'] = max25_web_parse_bool((string)$sec['ax25_ui'], true);
        }
        if (isset($sec['connect_on_start'])) {
            $defaults['connect_on_start'] = max25_web_parse_bool((string)$sec['connect_on_start'], true);
        }
        $max25d_ini = trim((string)($web['max25-web-terminal']['max25d_ini'] ?? ''));
    } else {
        $max25d_ini = '';
    }

    if ($max25d_ini === '') {
        $env = getenv('MAX25D_INI');
        $max25d_ini = ($env !== false && $env !== '') ? $env : '/etc/max25/max25d.ini';
    }
    if (!is_readable($max25d_ini)) {
        return $defaults;
    }

    $md = @parse_ini_file($max25d_ini, true, INI_SCANNER_RAW);
    if (!is_array($md)) {
        return $defaults;
    }

    $modem = $md['modem'] ?? [];
    $devices = $md['devices'] ?? [];

    if ($defaults['device'] === '') {
        if (isset($devices['default'])) {
            $defaults['device'] = trim((string)$devices['default']);
        } elseif (isset($md['daemon']['device'])) {
            $defaults['device'] = trim((string)$md['daemon']['device']);
        }
    }
    if ($defaults['callerid'] === '' && isset($modem['callerid'])) {
        $defaults['callerid'] = strtoupper(trim((string)$modem['callerid']));
    }
    if ($defaults['callid'] === '' && isset($modem['callid'])) {
        $defaults['callid'] = strtoupper(trim((string)$modem['callid']));
    }
    if (!isset($sec['ax25_ui']) && isset($modem['ax25_ui'])) {
        $defaults['ax25_ui'] = max25_web_parse_bool((string)$modem['ax25_ui'], true);
    }

    return $defaults;
}
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com