当前位置: 首页 > news >正文

makailio-alias_db模块详解

ALIAS_DB 模块

作者
Daniel-Constantin Mierla
miconda@gmail.com
Elena-Ramona Modroiu
ramona@asipto.com

编辑
Daniel-Constantin Mierla
miconda@gmail.com

版权
© 2005 Voice Sistem SRL
© 2008 asipto.com


目录

  1. 管理员指南
    1. 概述
    2. 依赖
      2.1 Kamailio 模块
      2.2 外部库或应用程序
    3. 参数
      3.1 db_url(字符串)
      3.2 user_column(字符串)
      3.3 domain_column(字符串)
      3.4 alias_user_column(字符串)
      3.5 alias_domain_column(字符串)
      3.6 use_domain(整数)
      3.7 domain_prefix(字符串)
      3.8 append_branches(整数)
    4. 函数
      4.1 alias_db_lookup(table_name[, flags])
      4.2 alias_db_find(table_name, input, output[, flags])

1. 概述

ALIAS_DB 模块可以作为用户别名的一种替代方案,与 usrloc 模块不同。其主要特点是它不会像用户位置数据那样存储所有相关数据,而是始终使用数据库进行查找(无内存缓存)。常见的用例是提供额外的用户别名,即补充位置数据库中的注册信息。这样,用户可以通过多个请求 URI 在代理服务器上被访问。

由于该模块不使用内存缓存,查找速度稍慢,但数据配置更简单。对于像 MySQL 这样的快速数据库,速度损失可以降低。此外,查找可以在同一脚本中的不同表上执行。


2. 依赖

2.1 Kamailio 模块

以下模块必须在此模块之前加载:

  • 数据库模块(如 mysql、dbtext 等)。
2.2 外部库或应用程序

无。


3. 参数

3.1 db_url(字符串)

数据库 URL。
默认值为 mysql://kamailioro:kamailioro@localhost/kamailio

示例 1.1. 设置 db_url 参数

modparam("alias_db", "db_url", "dbdriver://username:password@dbhost/dbname")

3.2 user_column(字符串)

存储用户名的列名。
默认值为 username

示例 1.2. 设置 user_column 参数

modparam("alias_db", "user_column", "susername")

3.3 domain_column(字符串)

存储用户域的列名。
默认值为 domain

示例 1.3. 设置 domain_column 参数

modparam("alias_db", "domain_column", "sdomain")

3.4 alias_user_column(字符串)

存储别名用户名的列名。
默认值为 alias_username

示例 1.4. 设置 alias_user_column 参数

modparam("alias_db", "alias_user_column", "auser")

3.5 alias_domain_column(字符串)

存储别名域的列名。
默认值为 alias_domain

示例 1.5. 设置 alias_domain_column 参数

modparam("alias_db", "alias_domain_column", "adomain")

3.6 use_domain(整数)

指定在查找别名时是否使用 R-URI 中的域。如果设置为 0,则不使用 R-URI 中的域;如果设置为 1,则使用 R-URI 中的域。
默认值为 0

示例 1.6. 设置 use_domain 参数

modparam("alias_db", "use_domain", 1)

3.7 domain_prefix(字符串)

指定在查找之前从 R-URI 的域中剥离的前缀。
默认值为 NULL

示例 1.7. 设置 domain_prefix 参数

modparam("alias_db", "domain_prefix", "sip.")

3.8 append_branches(整数)

如果别名解析为多个 SIP ID,第一个替换 R-URI,其余的作为分支添加。
默认值为 0(0 - 不添加分支;1 - 添加分支)。

示例 1.8. 设置 append_branches 参数

modparam("alias_db", "append_branches", 1)

4. 函数

4.1 alias_db_lookup(table_name[, flags])

该函数获取 R-URI 并检查它是否是别名。如果是本地用户的别名,则将 R-URI 替换为用户的 SIP URI。

返回值
如果 R-URI 是别名且已替换为用户的 SIP URI,则返回 TRUE

参数说明

  • table_name:要查找别名的表名。可以包含伪变量。
  • flags(可选):用于控制别名查找过程的标志(基于字符的标志):
    • d:在别名查找查询中不使用域部分(仅使用基于用户名的查找)。默认情况下,同时使用用户名和域。
    • r:执行反向别名查找——查找当前 URI 映射的别名(URI 到别名转换);通常,函数查找别名映射的 URI(别名到 URI 转换)。
    • u:在别名查找查询中使用域部分。默认取决于模块参数 use_domain

使用范围
可以在 REQUEST_ROUTEFAILURE_ROUTE 中使用。

示例 1.9. alias_db_lookup() 使用示例

alias_db_lookup("dbaliases", "rd");
alias_db_lookup("dba_$(rU{s.substr,0,1})");

4.2 alias_db_find(table_name, input, output[, flags])

该函数与 alias_db_lookup() 非常相似,但它能够从伪变量中获取输入的 SIP URI,并将结果放回伪变量中,而不是使用固定的输入(RURI)和输出(RURI)。

该函数很有用,因为别名查找不会影响请求本身(不会更改 RURI),可以在回复上下文中使用(因为它不仅适用于 RURI),并且可以用于其他 URI(如 To URI、From URI、自定义 URI)。

返回值
如果找到并返回了任何别名映射,则返回 TRUE

参数说明

  • table_name:任何伪变量(字符串或伪变量或混合),表示要查找别名的表名。
  • input:任何伪变量(字符串或伪变量或混合),表示需要查找的 SIP URI。
  • output:伪变量(AVP 或脚本变量),用于存储别名查找结果的 SIP URI。
  • flags(可选):用于控制别名查找过程的标志(基于字符的标志):
    • d:在别名查找查询中不使用域部分(仅使用基于用户名的查找)。默认取决于模块参数 use_domain
    • r:执行反向别名查找——查找当前 URI 映射的别名(URI 到别名转换);通常,函数查找别名映射的 URI(别名到 URI 转换)。
    • u:在别名查找查询中使用域部分。默认取决于模块参数 use_domain

使用范围
可以在 REQUEST_ROUTEBRANCH_ROUTELOCAL_ROUTESTARTUP_ROUTEFAILURE_ROUTEONREPLY_ROUTE 中使用。

示例 1.10. alias_db_find() 使用示例

# 执行反向别名查找并查找 FROM URI 的别名
alias_db_find("dbaliases", "$fu", "$avp(from_alias)", "r");

总结

ALIAS_DB 模块提供了一种基于数据库的用户别名管理方式,适用于需要通过多个 URI 访问用户的场景。通过灵活的配置和函数,可以实现高效的别名查找和替换功能。

相关文章:

makailio-alias_db模块详解

ALIAS_DB 模块 作者 Daniel-Constantin Mierla micondagmail.com Elena-Ramona Modroiu ramonaasipto.com 编辑 Daniel-Constantin Mierla micondagmail.com 版权 © 2005 Voice Sistem SRL © 2008 asipto.com 目录 管理员指南 概述依赖 2.1 Kamailio 模块 2.2 外…...

文字显示省略号

多行文本溢出显示省略号...

[LeetCode] 字符串完整版 — 双指针法 | KMP

字符串 基础知识双指针法344# 反转字符串541# 反转字符串II54K 替换数字151# 反转字符串中的单词55K 右旋字符串 KMP 字符串匹配算法28# 找出字符串中第一个匹配项的下标#459 重复的子字符串 基础知识 字符串的结尾:空终止字符00 char* name "hello"; …...

从零开始部署Dify:后端与前端服务完整指南

从零开始部署Dify:后端与前端服务完整指南 一、环境准备1. 系统要求2. 项目结构 二、后端服务部署1. 中间件启动(Docker Compose)2. 后端环境配置3. 依赖安装与数据库迁移4. 服务启动 三、前端界面搭建1. 环境配置2. 服务启动 四、常见问题排…...

springboot中路径默认配置与重定向/转发所存在的域对象

Spring Boot 是一种简化 Spring 应用开发的框架,它提供了多种默认配置和方便的开发特性。在 Web 开发中,路径配置和请求的重定向/转发是常见操作。本文将详细介绍 Spring Boot 中的路径默认配置,并解释重定向和转发过程中存在的域对象。 一、…...

二叉树——429,515,116

今天继续做关于二叉树层序遍历的相关题目,一共有三道题,思路都借鉴于最基础的二叉树的层序遍历。 LeetCode429.N叉树的层序遍历 这道题不再是二叉树了,变成了N叉树,也就是该树每一个节点的子节点数量不确定,可能为2&a…...

Leetcode 3444. Minimum Increments for Target Multiples in an Array

Leetcode 3444. Minimum Increments for Target Multiples in an Array 1. 解题思路2. 代码实现 题目链接:3444. Minimum Increments for Target Multiples in an Array 1. 解题思路 这一题我的思路上就是一个深度优先遍历,考察target数组当中的每一个…...

分享半导体Fab 缺陷查看系统,平替klarity defect系统

分享半导体Fab 缺陷查看系统,平替klarity defect系统;开发了半年有余。 查看Defect Map,Defect image,分析Defect size,defect count trend. 不用再采用klarity defect系统(license 太贵) 也可以…...

Java基础——分层解耦——IOC和DI入门

目录 三层架构 Controller Service Dao ​编辑 调用过程 面向接口编程 分层解耦 耦合 内聚 软件设计原则 控制反转 依赖注入 Bean对象 如何将类产生的对象交给IOC容器管理? 容器怎样才能提供依赖的bean对象呢? 三层架构 Controller 控制…...

DeepSeek-R1 本地部署教程(超简版)

文章目录 一、DeepSeek相关网站二、DeepSeek-R1硬件要求三、本地部署DeepSeek-R11. 安装Ollama1.1 Windows1.2 Linux1.3 macOS 2. 下载和运行DeepSeek模型3. 列出本地已下载的模型 四、Ollama命令大全五、常见问题解决附:DeepSeek模型资源 一、DeepSeek相关网站 官…...

Vue3学习笔记-模板语法和属性绑定-2

一、文本插值 使用{ {val}}放入变量&#xff0c;在JS代码中可以设置变量的值 <template><p>{{msg}}</p> </template> <script> export default {data(){return {msg: 文本插值}} } </script> 文本值可以是字符串&#xff0c;可以是布尔…...

csapp笔记3.6节——控制(1)

本节解决了x86-64如何实现条件语句、循环语句和分支语句的问题 条件码 除了整数寄存器外&#xff0c;cpu还维护着一组单个位的条件码寄存器&#xff0c;用来描述最近的算数和逻辑运算的某些属性。可检测这些寄存器来执行条件分支指令。 CF&#xff08;Carry Flag&#xff09…...

PYH与MAC的桥梁MII/MIIM

在学习车载互联网时&#xff0c;看到了一句话&#xff0c;Processor通过DMA直接存储访问与MAC之间进行数据的交互&#xff0c;MAC通过MII介质无关接口与PHY之间进行数据的交互。常见的以太网硬件结构是&#xff0c;将MAC集成进Processor芯片&#xff0c;将PHY留在Processor片外…...

国内flutter环境部署(记录篇)

设置系统环境变量 export PUB_HOSTED_URLhttps://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn使用以下命令下载flutter镜像 git clone -b stable https://mirror.ghproxy.com/https://github.com/<github仓库地址>#例如flutter仓…...

选择排序_75. 颜色分类

75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 题目不追求稳定 可以选择选择排序 这是我没看教程代码之前写的 有点复杂了 我还把元素后移了 class Solution { public:void sortColors(vector<int>& nums) {int min_num_index -1;int min_num 3;for(int i…...

C++ Primer 标准库vector

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

C# 数组和列表的基本知识及 LINQ 查询

数组和列表的基本知识及 LINQ 查询 一、基本知识二、引用命名空间声明三、数组3.1、一维数组3.2、二维数组3.3、不规则数组 Jagged Array 四、列表 List4.1、一维列表4.2、二维列表 五、数组和列表使用 LINQ的操作和运算5.1、一维 LIST 删除所有含 double.NaN 的行5.2、一维 LI…...

大厂面试题备份20250201

20250201 面试策略 如果三面往后遇到传说中让人忍受不了的业余面试官&#xff0c;就舔着苟过去&#xff0c;入职大概率见不着他&#xff0c;但一二面遇到&#xff0c;反问环节就主动说不够match&#xff0c;让释放流程。 机器/深度学习 百面机器学习 5.4 通用CS 计算机网…...

w191教师工作量管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...

Git 版本控制:基础介绍与常用操作

目录 Git 的基本概念 Git 安装与配置 Git 常用命令与操作 1. 初始化本地仓库 2. 版本控制工作流程 3. 分支管理 4. 解决冲突 5. 回退和撤销 6. 查看提交日志 前言 在软件开发过程中&#xff0c;开发者常常需要在现有程序的基础上进行修改和扩展。但如果不加以管理&am…...

Kali Linux 新手速成:Docker 部署实战与靶场环境一键构建

1. Kali Linux与Docker的黄金组合 刚接触网络安全的朋友们&#xff0c;肯定对Kali Linux不陌生。这个专为安全测试设计的操作系统&#xff0c;就像是一把瑞士军刀&#xff0c;集成了各种强大的工具。但今天我要分享的是一个更高效的玩法——用Docker来部署漏洞靶场。 为什么说这…...

基于LLM的dbt智能体:自动化数据建模与项目管理的工程实践

1. 项目概述&#xff1a;当数据建模遇上大语言模型 最近在数据工程圈里&#xff0c;一个叫 pragunbhutani/dbt-llm-agent 的项目引起了我的注意。简单来说&#xff0c;它试图用大语言模型&#xff08;LLM&#xff09;来辅助甚至自动化我们日常的 dbt 数据建模工作。作为一个和…...

为什么你的v8出图突然“高级感崩塌”?3分钟定位色彩语义锚点失效+实时修复模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的v8出图突然“高级感崩塌”&#xff1f; V8 引擎本身并不直接“出图”——这一表述实为开发者对前端渲染链路中某环节异常的戏谑指代。真正崩塌的&#xff0c;往往是基于 V8 驱动的 Canvas/We…...

ElevenLabs多角色对话生成性能压测报告:单实例并发超86路时语音错位率飙升至41.7%,我们找到了唯一稳定解

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs多角色对话生成性能压测报告&#xff1a;单实例并发超86路时语音错位率飙升至41.7%&#xff0c;我们找到了唯一稳定解 在真实业务场景中&#xff0c;ElevenLabs API 被广泛用于构建多角色交互…...

现代Web全栈开发实战:基于React、Node.js与Prisma的足球赛事应用架构解析

1. 项目概述与核心价值最近在整理个人技术栈时&#xff0c;翻到了一个之前参与过的很有意思的Web项目——一个基于“NLW”&#xff08;Next Level Week&#xff09;活动构建的足球赛事Web应用。这个项目虽然源于一个线上编程活动&#xff0c;但其架构设计和实现思路&#xff0c…...

全志T113-S3 SPI屏幕驱动踩坑实录:内核5.4下适配ILI9341的完整流程与代码修改

全志T113-S3 SPI屏幕驱动深度解析&#xff1a;内核5.4适配ILI9341的实战指南 在嵌入式开发领域&#xff0c;显示设备的驱动适配一直是工程师面临的核心挑战之一。全志T113-S3作为一款性价比突出的处理器&#xff0c;广泛应用于各类嵌入式场景&#xff0c;而ILI9341驱动的SPI屏幕…...

Odrive多线程架构实战:如何为你的无刷电机项目定制启动流程与状态机

Odrive多线程架构实战&#xff1a;如何为你的无刷电机项目定制启动流程与状态机 在无刷电机控制领域&#xff0c;Odrive凭借其开源特性和强大的性能表现&#xff0c;已成为众多硬件开发者的首选平台。但当你需要将这套系统集成到自己的机器人关节、CNC主轴或无人机推进系统中时…...

AWE Designer生成的awb文件到底是什么?一份给嵌入式音频开发者的二进制文件解析与烧录避坑指南

AWB文件深度解析&#xff1a;嵌入式音频开发者的二进制文件操作指南 在嵌入式音频开发领域&#xff0c;AWE Designer工具链生成的AWB文件常常让开发者感到神秘又困惑。这个看似普通的二进制文件&#xff0c;实际上承载着音频算法实现的核心逻辑。许多开发者在烧录AWB文件到Flas…...

LetsFG:基于Function与Group的去中心化协作平台设计与实战

1. 项目概述&#xff1a;一个面向未来的开源协作平台最近在开源社区里&#xff0c;一个名为“LetsFG/LetsFG”的项目引起了我的注意。乍一看这个标题&#xff0c;可能会觉得有些抽象&#xff0c;但当你深入其代码仓库和设计理念后&#xff0c;会发现它指向了一个非常具体且极具…...

【Transformer系列】从One-Hot到Embedding:构建AI语言理解的基石

1. 从One-Hot编码说起&#xff1a;AI的第一堂语言课 想象你正在教一个外星人认识汉字。你拿出一本字典说&#xff1a;"这里有10万个字&#xff0c;每个字对应一个编号&#xff0c;猫是第12345号&#xff0c;狗是第67890号。"这就是最原始的One-Hot编码思想——用一串…...