6 Commits

Author SHA1 Message Date
8a24bf97f8 mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-25 14:22:04 +07:00
47ea505962 mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-25 14:03:09 +07:00
8853fcda9b mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-25 14:00:25 +07:00
bfaab9b1e7 mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-24 17:02:01 +07:00
92fa3bcb88 mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-23 20:11:10 +07:00
bf64ee1202 mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-22 17:24:10 +07:00
2 changed files with 46 additions and 36 deletions

View File

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

View File

@@ -1,4 +1,7 @@
{ clanLib, ... }: {
clanLib,
...
}:
{ {
_class = "clan.service"; _class = "clan.service";
manifest.name = "phonebox"; manifest.name = "phonebox";
@@ -14,10 +17,10 @@
description = "An Ethernet interface that connect to ATA box."; description = "An Ethernet interface that connect to ATA box.";
default = "enp2s0"; default = "enp2s0";
}; };
options.extraClientNumbers = lib.mkOption { options.ownerName = lib.mkOption {
type = with lib.types; listOf str; type = lib.types.str;
description = "List of client suffix number."; description = "";
default = [ ]; default = "";
}; };
}; };
perInstance = perInstance =
@@ -27,6 +30,7 @@
... ...
}: }:
{ {
nixosModule = nixosModule =
{ {
lib, lib,
@@ -39,12 +43,42 @@
propagatedNativeBuildInputs = [ pkgs.spandsp3 ]; propagatedNativeBuildInputs = [ pkgs.spandsp3 ];
}); });
machines = lib.attrNames roles.default.machines;
user = "asterisk"; user = "asterisk";
faxDir = "/run/asterisk/fax"; faxDir = "/run/asterisk/fax";
rtpPortFrom = 10000; rtpPortFrom = 10000;
rtpPortTo = 20000; rtpPortTo = 20000;
ata-interface = settings.ata-ethernet-iface; 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 = genServerSIPEndpoint =
{ hostname, address }: { hostname, address }:
'' ''
@@ -74,22 +108,6 @@
max_contacts=1 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 = genLocalExtenConf =
{ localNumber }: { localNumber }:
'' ''
@@ -123,10 +141,11 @@
throw "clanService/yggdrasil is required"; throw "clanService/yggdrasil is required";
in in
{ {
clan.core.vars.generators.phonebox = { clan.core.vars.generators.phonebox = builtins.break {
files = { files = {
server-prefix-number.secret = false; server-prefix-number.secret = false;
ata-local-number.secret = false; ata-local-number.secret = false;
owner-name.secret = false;
}; };
prompts = { prompts = {
@@ -138,11 +157,16 @@
type = "line"; type = "line";
description = "Local suffix number: indicate local number on the server [XX00]"; description = "Local suffix number: indicate local number on the server [XX00]";
}; };
owner-name = {
type = "line";
description = "The owner's name for this unit";
};
}; };
script = '' script = ''
cat $prompts/server-prefix-number > $out/server-prefix-number cat $prompts/server-prefix-number > $out/server-prefix-number
cat $prompts/ata-local-number > $out/ata-local-number cat $prompts/ata-local-number > $out/ata-local-number
cat $prompts/owner-name > $out/owner-name
''; '';
}; };
@@ -220,7 +244,6 @@
package = lib.mkDefault asterisk; package = lib.mkDefault asterisk;
confFiles = confFiles =
let let
machines = lib.attrNames roles.default.machines;
nodes = builtins.foldl' ( nodes = builtins.foldl' (
nodes: name: nodes: name:
nodes nodes
@@ -305,9 +328,6 @@
+ (genLocalExtenConf { + (genLocalExtenConf {
localNumber = config.clan.core.vars.generators.phonebox.files.ata-local-number.value; localNumber = config.clan.core.vars.generators.phonebox.files.ata-local-number.value;
}) })
+ lib.concatStringsSep "\n" (
builtins.map (number: genLocalExtenConf { localNumber = number; }) settings.extraClientNumbers
)
+ serverConf; + serverConf;
"rtp.conf" = '' "rtp.conf" = ''
@@ -339,7 +359,6 @@
[base_endpoint](!) [base_endpoint](!)
type=endpoint type=endpoint
transport=transport-udp
disallow=all disallow=all
allow=ulaw,alaw,g722,gsm allow=ulaw,alaw,g722,gsm
direct_media=no direct_media=no
@@ -362,9 +381,6 @@
+ (genLocalSIPEndpoint { + (genLocalSIPEndpoint {
localNumber = config.clan.core.vars.generators.phonebox.files.ata-local-number.value; localNumber = config.clan.core.vars.generators.phonebox.files.ata-local-number.value;
}) })
+ lib.concatStringsSep "\n" (
builtins.map (number: genLocalSIPEndpointV6 { localNumber = number; }) settings.extraClientNumbers
)
+ serverConf; + serverConf;
}; };
}; };