3 Commits

Author SHA1 Message Date
34e9774aa7 mob next [ci-skip] [ci skip] [skip ci]
lastFile:modules/clan/phonebox/default.nix
2025-12-18 15:47:08 +07:00
ec4c3897e2 clanService:phonebox: fax echo feature 2025-12-16 10:28:16 +07:00
39bfcd0080 nix fmt 2025-12-12 18:27:30 +07:00
3 changed files with 163 additions and 412 deletions

View File

@@ -109,6 +109,12 @@
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 = {

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,11 @@
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 {
type = with lib.types; listOf str;
description = "List of client suffix number.";
default = [ ];
};
}; };
perInstance = perInstance =
{ {
@@ -30,7 +35,12 @@
... ...
}: }:
let let
asterisk = pkgs.asterisk.overrideAttrs (old: {
propagatedNativeBuildInputs = [ pkgs.spandsp3 ];
});
user = "asterisk"; user = "asterisk";
faxDir = "/run/asterisk/fax";
rtpPortFrom = 10000; rtpPortFrom = 10000;
rtpPortTo = 20000; rtpPortTo = 20000;
ata-interface = settings.ata-ethernet-iface; ata-interface = settings.ata-ethernet-iface;
@@ -191,6 +201,7 @@
services.asterisk = { services.asterisk = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
package = lib.mkDefault asterisk;
confFiles = confFiles =
let let
machines = lib.attrNames roles.default.machines; machines = lib.attrNames roles.default.machines;
@@ -240,6 +251,13 @@
syslog.local0 => notice,warning,error syslog.local0 => notice,warning,error
''; '';
"modules.conf" = ''
[modules]
autoload=yes
load => res_fax_spandsp.so
'';
# Dial plan config # Dial plan config
"extensions.conf" = "extensions.conf" =
let let
@@ -257,10 +275,23 @@
same => n,Playback(hello-world) same => n,Playback(hello-world)
same => n,Hangup() same => n,Hangup()
exten => 000,1,Answer()
same => n,ReceiveFAX(${faxDir}/echo-''${UNIQUEID}.tiff)
same => n,Set(FAXFILE=${faxDir}/echo-''${UNIQUEID}.tiff)
same => n,Set(FAXECHO=true)
exten => h,1,GotoIf($[''${FAXECHO}]?sendfax)
same => n,Hangup()
same => n(sendfax),Originate(PJSIP/00,app,SendFAX,${faxDir}/echo-''${UNIQUEID}.tiff)
same => n,Set(FAXECHO=false)
'' ''
+ (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" = ''
@@ -314,10 +345,17 @@
+ (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: genLocalSIPEndpoint { localNumber = number; }) settings.extraClientNumbers
)
+ serverConf; + serverConf;
}; };
}; };
systemd.tmpfiles.rules = [
"d ${faxDir} 0755 ${user} ${user} - -"
];
systemd.services.asterisk-watcher = { systemd.services.asterisk-watcher = {
enable = true; enable = true;
description = "Asterisk Configuration files watcher"; description = "Asterisk Configuration files watcher";