3 Commits

Author SHA1 Message Date
f54cf1c60a mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-19 16:15:39 +07:00
1fa7da00c2 mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-19 09:21:24 +07:00
34e9774aa7 mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-18 15:47:08 +07:00
3 changed files with 38 additions and 59 deletions

View File

@@ -109,6 +109,12 @@
roles.default.machines."adhil".settings = {
ata-ethernet-iface = "end0";
};
roles.default.machines."rigel".settings = {
extraClientNumbers = [
"01"
"02"
];
};
};
pocket-id = {

View File

@@ -1,7 +1,4 @@
{
clanLib,
...
}:
{ clanLib, ... }:
{
_class = "clan.service";
manifest.name = "phonebox";
@@ -17,10 +14,10 @@
description = "An Ethernet interface that connect to ATA box.";
default = "enp2s0";
};
options.ownerName = lib.mkOption {
type = lib.types.str;
description = "";
default = "";
options.extraClientNumbers = lib.mkOption {
type = with lib.types; listOf str;
description = "List of client suffix number.";
default = [ ];
};
};
perInstance =
@@ -30,7 +27,6 @@
...
}:
{
nixosModule =
{
lib,
@@ -43,41 +39,12 @@
propagatedNativeBuildInputs = [ pkgs.spandsp3 ];
});
machines = lib.attrNames roles.default.machines;
user = "asterisk";
faxDir = "/run/asterisk/fax";
rtpPortFrom = 10000;
rtpPortTo = 20000;
ata-interface = settings.ata-ethernet-iface;
contactList = builtins.map (machineName: {
name = "${clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = machineName;
generator = "phonebox";
file = "owner-name";
default = null;
}}";
number = "${
clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = machineName;
generator = "phonebox";
file = "server-prefix-number";
default = null;
}
}${
clanLib.getPublicValue {
flake = config.clan.core.settings.directory;
machine = machineName;
generator = "phonebox";
file = "ata-local-number";
default = null;
}
}";
}) machines;
genServerSIPEndpoint =
{ hostname, address }:
''
@@ -107,6 +74,22 @@
max_contacts=1
'';
genLocalSIPEndpointV6 =
{ localNumber }:
''
[${localNumber}](internal_endpoint)
transport=transport-udp6
aors=${localNumber}
auth=${localNumber}
[${localNumber}](userpass_auth)
username=${localNumber}
password=${localNumber}
[${localNumber}](dynamiic_aor)
max_contacts=1
'';
genLocalExtenConf =
{ localNumber }:
''
@@ -140,11 +123,10 @@
throw "clanService/yggdrasil is required";
in
{
clan.core.vars.generators.phonebox = builtins.break {
clan.core.vars.generators.phonebox = {
files = {
server-prefix-number.secret = false;
ata-local-number.secret = false;
owner-name.secret = false;
};
prompts = {
@@ -156,27 +138,11 @@
type = "line";
description = "Local suffix number: indicate local number on the server [XX00]";
};
owner-name = {
type = "line";
description = "The owner's name for this unit";
};
};
script = ''
prompt_server_prefix=$(cat "$prompts"/server-prefix-number)
if [[ -n "''${prompt_server_prefix-}" ]]; then
echo $prompt_server_prefix | tr -d "\n" > "$out"/server-prefix-number
fi
prompt_ata_local=$(cat "$prompts"/ata-local-number)
if [[ -n "''${prompt_ata_local-}" ]]; then
echo $prompt_ata_local | tr -d "\n" > "$out"/ata-local-number
fi
prompt_owner_name=$(cat "$prompts"/owner-name)
if [[ -n "''${prompt_owner_name-}" ]]; then
echo $prompt_owner_name | tr -d "\n" > "$out"/owner-name
fi
cat $prompts/server-prefix-number > $out/server-prefix-number
cat $prompts/ata-local-number > $out/ata-local-number
'';
};
@@ -254,6 +220,7 @@
package = lib.mkDefault asterisk;
confFiles =
let
machines = lib.attrNames roles.default.machines;
nodes = builtins.foldl' (
nodes: name:
nodes
@@ -338,6 +305,9 @@
+ (genLocalExtenConf {
localNumber = config.clan.core.vars.generators.phonebox.files.ata-local-number.value;
})
+ lib.concatStringsSep "\n" (
builtins.map (number: genLocalExtenConf { localNumber = number; }) settings.extraClientNumbers
)
+ serverConf;
"rtp.conf" = ''
@@ -369,6 +339,7 @@
[base_endpoint](!)
type=endpoint
transport=transport-udp
disallow=all
allow=ulaw,alaw,g722,gsm
direct_media=no
@@ -391,6 +362,9 @@
+ (genLocalSIPEndpoint {
localNumber = config.clan.core.vars.generators.phonebox.files.ata-local-number.value;
})
+ lib.concatStringsSep "\n" (
builtins.map (number: genLocalSIPEndpointV6 { localNumber = number; }) settings.extraClientNumbers
)
+ serverConf;
};
};

View File

@@ -1 +0,0 @@
w-office