...
loadmodule "evapi.so"
modparam("evapi", "netstring_format", 1)
modparam("evapi", "bind_addr", "0.0.0.0:9000")
...
event_route[evapi:connection-new] {
xlog("new connection from $evapi(srcaddr):$evapi(srcport)\n");
}
event_route[evapi:message-received] {
xlog("received [$evapi(msg)] from $evapi(srcaddr):$evapi(srcport)\n");
}
启动 kamailio
运行下面的命令:
echo '13:Hello, 世界,' | nc 127.0.0.1 9000 -w 1
kamailio 日志为:
<script>: new connection from 127.0.0.1:55392
<script>: received [Hello, 世界] from 127.0.0.1:55392
evapi [evapi_dispatch.c:510]: evapi_recv_client(): client closing connection - pos [0] addr [127.0.0.1:55392]
netstring 的拼接规则是 {字节长度}:{原字符串},
其中字符串 "Hello, 世界" 前7个是英文字符,每个英文字符占一个字节
后2个是中文UTF8,每个中文占3个字节,一共是6字节
7+6=13
netstring 最后的结果就是 '13:Hello, 世界,'
下面是 c# 代码:
string text = "Hello, 世界";
byte[] data = Encoding.UTF8.GetBytes(text);
string netstring = $"{data.Length}:{text},";
需要留意的是,string 处理成了 byte 数组, 而不是 char 数组
你 get 到了吗?
全文完