Mudanças entre as edições de "Funções Core"
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada) | |||
Linha 87: | Linha 87: | ||
cache_store("redis:cluster1","passwd_$tu","$var(x)"); | cache_store("redis:cluster1","passwd_$tu","$var(x)"); | ||
− | Exemplos mais complexos podem ser encontrados em | + | Exemplos mais complexos podem ser encontrados em [http://www.opensips.org/Documentation/Tutorials-KeyValueInterface] |
Linha 103: | Linha 103: | ||
cache_remove("redis:cluster1","my_attr"); | cache_remove("redis:cluster1","my_attr"); | ||
− | Exemplos mais complexos podem ser encontrados em | + | Exemplos mais complexos podem ser encontrados em [http://www.opensips.org/Documentation/Tutorials-KeyValueInterface] |
Linha 121: | Linha 121: | ||
− | Exemplos mais complexos podem ser encontrados em | + | Exemplos mais complexos podem ser encontrados em [http://www.opensips.org/Documentation/Tutorials-KeyValueInterface] |
==cache_counter_fetch( storage_id, counter_attribute_name, result_avp)== | ==cache_counter_fetch( storage_id, counter_attribute_name, result_avp)== | ||
Linha 152: | Linha 152: | ||
Exemplos mais complexos podem ser encontrados em [[http://www.opensips.org/Documentation/Tutorials-KeyValueInterface]]. | Exemplos mais complexos podem ser encontrados em [[http://www.opensips.org/Documentation/Tutorials-KeyValueInterface]]. | ||
− | + | ==cache_sub( storage_id, attribute_name,increment_value,expire)== | |
Esta função decrementa um atributo em um memory-cache-like-storage (armazenamento em memória) que suporte esta operação, o atributo pode conter uma pseudo variavel, se o valor de expire for maior que 0 a chave irá expirar no tempo especificado (em segundos) | Esta função decrementa um atributo em um memory-cache-like-storage (armazenamento em memória) que suporte esta operação, o atributo pode conter uma pseudo variavel, se o valor de expire for maior que 0 a chave irá expirar no tempo especificado (em segundos) | ||
Linha 164: | Linha 164: | ||
− | Exemplos mais complexos podem ser encontrados em | + | Exemplos mais complexos podem ser encontrados em [http://www.opensips.org/Documentation/Tutorials-KeyValueInterface] |
==cache_raw_query( storage_id, raw_query,result_avp)== | ==cache_raw_query( storage_id, raw_query,result_avp)== | ||
Linha 178: | Linha 178: | ||
− | Exemplos mais complexos podem ser encontrados em | + | Exemplos mais complexos podem ser encontrados em [http://www.opensips.org/Documentation/Tutorials-KeyValueInterface] |
==break()== | ==break()== | ||
Linha 308: | Linha 308: | ||
− | Para saber mais veja a | + | Para saber mais veja a [Scripting_Flags| Documentação de Flag] |
Exemplo de uso: | Exemplo de uso: |
Edição atual tal como às 19h27min de 19 de outubro de 2013
Esta sessão lista as funções exportadas pelo core do OpenSIPS para utilização no script (para ser utilizado no opensips.cfg)
Índice
- 1 add_local_rport()
- 2 append_branch()
- 3 cache_store( storage_id, attribute_name, attribute_name [,timeout])
- 4 cache_remove( storage_id, attribute_name)
- 5 cache_fetch( storage_id, attribute_name, result_pvar)
- 6 cache_counter_fetch( storage_id, counter_attribute_name, result_avp)
- 7 cache_add( storage_id, attribute_name,increment_value,expire)
- 8 cache_sub( storage_id, attribute_name,increment_value,expire)
- 9 cache_raw_query( storage_id, raw_query,result_avp)
- 10 break()
- 11 construct_uri(proto,user,domain,port,extra,result_avp)
- 12 drop()
- 13 exit()
- 14 force_rport()
- 15 force_send_socket([proto:]address[:port])
- 16 force_tcp_alias()
- 17 forward(destination)
- 18 get_timestamp(sec_avp,usec_avp)
- 19 isdsturiset()
- 20 isflagset(int)
- 21 isbflagset([branch_idx,] flag_idx)
- 22 issflagset(flag_idx)
- 23 log([level,] string)
- 24 next_branches()
- 25 prefix(string)
- 26 pv_printf(pv, string)
- 27 raise_event(string[, avp[, avp]])
- 28 remove_branch(pv|int)
- 29 return(int)
- 30 resetdsturi()
- 31 resetflag(int)
- 32 resetbflag([branch_idx,] flag_idx)
- 33 resetsflag(flag_idx)
- 34 revert_uri()
- 35 rewritehost() / sethost()
- 36 rewritehostport() / sethostport()
- 37 rewriteuser(string) / setuser(string)
- 38 rewriteuserpass() / setuserpass()
- 39 rewriteport() / setport()
- 40 rewriteuri(str) / seturi(str)
- 41 route(name [, param1 [, param2 [, ...] ] ] )
- 42 script_trace( log_level, pv_format_string[, info_string])
- 43 send(destination [, headers])
- 44 serialize_branches(clear)
- 45 set_advertised_address(ip|string)
- 46 set_advertised_port(int)
- 47 setdebug([level])
- 48 setdsturi(string)
- 49 setflag(int)
- 50 setbflag([branch_idx,] flag_idx)
- 51 setsflag(flag_idx)
- 52 strip(int)
- 53 strip_tail(int)
- 54 subscribe_event(string, string [, int])
- 55 use_blacklist(string)
add_local_rport()
Adiciona o parametro 'rport' no cabeçalho VIA gerado pelo servidor (confira a RFC3581 para entender o significado disso). Esta função afeta apenas a requisição atualmente processada.
Exemplo de uso:
add_local_rport()
append_branch()
Similar ao t_fork_to, esta função extende o destino definindo uma nova entrada, a diferença é que a URI atual é pega como uma nova entrada
Sem um parametro a função copia a URI atual em uma nova branch, desta forma deixando a branch principal (a URI) para manipulação futura.
Se for definido um parametro a função copia a URI na nova branch, assim a URI atual não é manipulada.
Veja que não é possivel adicionar uma nova branch em um bloco "on_failure_route" se uma resposta 6XX foi recebida previamente ( isso iria contra a RFC 3261 )
Exemplo de uso:
# if someone calls B, the call should be forwarded to C too. # if (method=="INVITE" && uri=~"sip:B@xx.xxx.xx ") { # copy the current branch (branches[0]) into # a new branch (branches[1]) append_branch(); # all URI manipulation functions work on branches[0] # thus, URI manipulation does not touch the # appended branch (branches[1]) seturi("sip:C@domain"); # now: branch 0 = C@domain # branch 1 = B@xx.xx.xx.xx # and if you need a third destination ... # copy the current branch (branches[0]) into # a new branch (branches[2]) append_branch(); # all URI manipulation functions work on branches[0] # thus, URI manipulation does not touch the # appended branch (branches[1-2]) seturi("sip:D@domain"); # now: branch 0 = D@domain # branch 1 = B@xx.xx.xx.xx # branch 2 = C@domain t_relay(); exit; }; # You could also use append_branch("sip:C@domain") which adds a branch with the new URI: if(method=="INVITE" && uri=~"sip:B@xx.xxx.xx ") { # append a new branch with the second destination append_branch("sip:user@domain"); # now: branch 0 = B@xx.xx.xx.xx # now: branch 1 = C@domain t_relay(); exit; }
cache_store( storage_id, attribute_name, attribute_name [,timeout])
Esta função define em um memory-cache-like-storage (armazenamento em memória) um novo valor para um atributo, tanto o nome do atributo quanto o valor deve conter pseudo-variaveis, se o atributo não existe ainda no memcache ele será inserido com os valores informados, se ele está presente o seu valor será substituido pelo valor informado, a função opcionalmente pode receber parametros , um valor de timeout (ou lifetime) para o atributo, após o tempo definido ser excedido o atributo é removido da memória.
A função retorna true se o novo atributo foi inserido com sucesso.
cache_store("local","my_attr","$avp(i:55)",1200);
OU
modparam("cachedb_redis","cachedb_url","redis:cluster1://192.168.2.134:6379/") ... cache_store("redis:cluster1","passwd_$tu","$var(x)");
Exemplos mais complexos podem ser encontrados em [1]
cache_remove( storage_id, attribute_name)
Esta função remove um atributo de um memory-cache-like-storage (armazenamento em memória), o atributo poder conter uma pseudo-variavel. A função retorna false apenas se o storage_id for inválido.
cache_remove("local","my_attr");
OU
modparam("cachedb_redis","cachedb_url","redis:cluster1://192.168.2.134:6379/") ... cache_remove("redis:cluster1","my_attr");
Exemplos mais complexos podem ser encontrados em [2]
cache_fetch( storage_id, attribute_name, result_pvar)
Esta função traz de um memory-cache-like-storage (armazenamento em memória) o valor de um atributo, o nome do atributo pode conter uma pseudo-variavel, o resultado (se algum) será armazenado na pseudo-variavel especificada por result_pvar .
A função retorna true se o atributo for encontrado e seu valor retornado.
cache_fetch("local","my_attr", $avp(i:11) );
OU
modparam("cachedb_redis","cachedb_url","redis:cluster1://192.168.2.134:6379/") ... cache_fetch("redis:cluster1","my_attr",$avp(i:11));
Exemplos mais complexos podem ser encontrados em [3]
cache_counter_fetch( storage_id, counter_attribute_name, result_avp)
Esta função pega de um memory-cache-like-storage (armazenamento em memória) o valor de um contador, o atributo pode contar pseudo-variaveis. O resultado (se algum) será armazenado na pseudo-variavel especificado por result_pvar.
A função retorna true se o atributo foi encontrado e o valor retornado.
cache_counter_fetch("local","my_counter", $avp(counter_val) );
OU
modparam("cachedb_redis","cachedb_url","redis:cluster1://192.168.2.134:6379/") ... cache_fetch("redis:cluster1","my_counter",$avp(redis_counter_val));
cache_add( storage_id, attribute_name,increment_value,expire)
Esta função incrementa um atributo em um memory-cache-like-storage (armazenamento em memória) que suporte esta opração ,o atributo pode conter uma pseudo-variavel, se o atributo não existe ele será criado com o valor do incremento, se o valor de expire for maior que 0 a chave irá expirar no tempo especificado (em segundos)
A função retorna false se o incremento falhar
modparam("cachedb_redis","cachedb_url","redis:cluster1://192.168.2.134:6379/") ... cache_add("redis:cluster1",5);
Exemplos mais complexos podem ser encontrados em [[4]].
cache_sub( storage_id, attribute_name,increment_value,expire)
Esta função decrementa um atributo em um memory-cache-like-storage (armazenamento em memória) que suporte esta operação, o atributo pode conter uma pseudo variavel, se o valor de expire for maior que 0 a chave irá expirar no tempo especificado (em segundos)
A função retorna false se o decremento falhar
modparam("cachedb_redis","cachedb_url","redis:cluster1://192.168.2.134:6379/") ... cache_sub("redis:cluster1",5);
Exemplos mais complexos podem ser encontrados em [5]
cache_raw_query( storage_id, raw_query,result_avp)
Esta função executa a query ( dependendo da linguagem do back-end informado ) e retorna o resultado (se algum) na AVP informada, a result_avp pode nao existir se não houver resultados.
A função retorna false se a query falhar
... cache_raw_query("mongodb","{ \"op\" : \"count\",\"query\": { \"username\" : $rU} }","$avp(mongo_count_result)"); ...
Exemplos mais complexos podem ser encontrados em [6]
break()
Apartir da versão 0.10.0-dev3 a função 'break' não pode mais ser utilizada para parar a execução de uma rota, o único lugar que a mesma pode ser utilizada é para finalizar um bloco 'case' em um statement 'switch', para a função de parar o roteamento deve ser utilizado 'return' invés de 'break'
as funções 'return' e 'break' tem agora um significado similar a linguagem c ou shell
construct_uri(proto,user,domain,port,extra,result_avp)
Esta função constrói um uri sip valida baseada nos argumentos recebidos, o resultado (se algum) será armazenado na result_avp informada, pode ser utilizado argumento como texto puro assim como $var(nome) ou $avp(nome), se você quiser omitir parte da sip uri basta utilizar o parametro respectivo em branco.
Exemplo de uso:
construct_uri("$var(proto)", "vlad", "$var(domain)", "", "$var(params)",$avp(s:newuri)); xlog("Constructed URI is <$avp(s:newuri)> \n");
drop()
Para a execução de um script e altera a ação implícita feita na sequência.
Se a função é chamada em uma 'branch_route' então esta perna é descartada (ação implicita em um 'branch_route' é encaminhar a requisição)
Se a função é chamada em um 'onreply_route' então qualquer reply será descartado ( a ação implicita em uma 'onreply_route' é enviar o reply de acordo com o cabeçalho via)
Exemplo de uso:
onreply_route { if(status=="183") { drop(); } }
exit()
Para a execução do script, tem o mesmo propósito de return(0), esta função não afeta a ação implicita após a execução do script
route { if (route(2)) { xlog("L_NOTICE","method $rm is INVITE\n"); } else { xlog("L_NOTICE","method is $rm\n"); }; }
route[2] { if (is_method("INVITE")) { return(1); } else if (is_method("REGISTER")) { return(-1); } else if (is_method("MESSAGE")) { sl_send_reply("403","IM not allowed"); exit; }; }
force_rport()
A função force_rport() adiciona o parametro rport no primeiro cabeçalho Via, assim o OpenSIPS irá adicionar a porta para o cebaçalho mais alto da mensagem SIP mesmo se o cliente não indicar suporte a isso, desta forma as mensagens subsequentes para retornarem o valor correto de porta em uma transação posterior
O parametro rport é definido pela RFC 3581
Exemplo de uso
force_rport();
force_send_socket([proto:]address[:port])
Esta função força o OpenSIPS para enviar a mensagem apartir do socket especificado ( _DEVE_ ser um dos endereços (sockets) que o OpenSIPS está executando (escutando)) , se o protocolo não corresponder (ex: mensagem udp forçando para tcp) o socket mais proximo para o protocolo especificado será utilizado.
Exemplo de uso:
force_send_socket(10.10.10.10:5060);
force_tcp_alias()
force_tcp_alias(port)
Esta função adiciona uma porta alias para a conexão atual (se tcp), esta função é útil se você quer enviar todo o seu trafego pela port_alias através da mesma conexão que a requisição foi recebida [ isso pode ajudar com firewall ou nat traversal ].
Se nenhum parametro for adicionado para a porta então a porta onde a mensagem foi recebida será adicionada como alias. Quando a conexão for fechada todas as portas em alias serão removidas (ex: conexão idle por muito tempo)
forward(destination)
Encaminha a requisição SIP para o endereço informado em modo stateless, o formato deve ser [proto:]host[:port], o host pode ser um IP ou um hostname, os protocolos uportados são UDP, TCP e TLS (para TLS você precisar ter o suporte a TLS no core). Se proto ou port não forem especificados então serão utilizadas consultas NAPTR e SRV para determinar (se possivel).
Se o destino não for informado o encaminhamento será feito baseado na RURI.
Exemplo de uso
forward("10.0.0.10:5060");
ou
forward();
get_timestamp(sec_avp,usec_avp)
Esta função retorna o timestamp atual, segundos e microsegundos do segundo atual apartir de uma unica chamada
Exemplo de uso:
get_timestamp($avp(sec),$avp(usec));
isdsturiset()
Testa se o campo dst_uri (endereço de next hop) está definido
Exemplo de uso
if(isdsturiset()) { log("dst_uri is set\n"); };
isflagset(int)
Testa se uma determinada flag está definida no processamento atual (se o valor da flag é 1), o valor do parametro pode ser em um range de 0 a 31
Para saber mais veja a [Scripting_Flags| Documentação de Flag]
Exemplo de uso:
if(isflagset(3)) { log("flag 3 is set\n"); };
isbflagset([branch_idx,] flag_idx)
Testa se uma flag está definida na perna (branch) especifica (se o valor é 1), o valor para 'flag_idx' pode ser um range de 0 a 31, a 'branch_idx' identifica a perna para qual a flag será testada , deve ser um número positivo, Branch index 0 referencia a RURI da perna, se o parametro não for especificado 0 será definido como padrão.
Para saber mais veja a Documentação de Flag
Exemplo de uso:
if(isbflagset(1,3)) { log("flag 3 is set in branch 1\n"); };
issflagset(flag_idx)
Teste se um flag de script está definida (se o valor da flag é 1) o valor de flag_idx pode ser um range de 0 até 31
Para saber mais veja a Documentação de Flag
Exemplo de uso:
if(issflagset(2)) { log("script flag 2 is set\n"); };
log([level,] string)
Escreve uma mensagem para a saída de erro padrão ou para o syslog, você pode especificar o log level como primeiro parametro.
Exemplo de uso:
log("just some text message\n");
next_branches()
NOTA: nao entendi bem esta definição então a tradução pode não corresponder exatamente, desculpem por isso
Adiciona a requisição um novo destino que inclui todos os contatos altos (baseado em valor 'q') da branch serializada (veja função serialize_branches() para mais detalhes), se a função for chamada de um bloco de roteamento então irá re-escrever a uri da requisição com o primeiro contato e adicionar os demais como branches paralelas. Se chamada em uma rota de falha (failure route) adicionará todos os contatos em branches paralelas. Todos os contatos são removidos das branches serializadas.
Retorna true se pelo menos um contato for adicionado para a requisição - retorna 1 se outras branches continuam pendentes, e retorna 2 se nenhuma branch ficou de fora para processamento posterior , resumindo, 2 -> esta é a ultima branch, 1-> outra branch ainda seguira.
Falso será retornado se nada for feito (não existir mais branches para serializar)
Exemplo de uso:
next_branches();
prefix(string)
Adiciona o parametro na frente do username na R-URI
Exemplo de uso:
prefix("00");
pv_printf(pv, string)
Faz um print da string formatada no AVP , o parametro 'string' pode incluir qualquer pseudo-variavel definida no OpenSIPS, the pv pode ser qualquer pseu-variavel que possa ser escrita ( ex: AVPs, VARs, $ru, $rU, $rd, $du, $br, $fs)
Esta função foi extendida da função avp_printf(...) das versões anteriores do módulo avpops, iniciando na versão 1.3.0 o avp_printf(...) é apenas um alias para pv_printf(....)
Exemplo de uso:
pv_printf("$var(x)", "r-uri: $ru"); pv_printf("$avp(i:3)", "from uri: $fu");
raise_event(string[, avp[, avp]])
Cria apartir do script um evento na interface de eventos do OpenSIPS, o primeiro parametro é uma string que indica que o evento deve ser criado, os dois outros parametros devem ser AVP's e eles são opcionais, se apenas um estiver presente este deve conter os valores que serão atrelados ao evento, se os dois valores forem especificados o primeiro deve conter o nome dos atributos e o segundo os valores que serão atrelados ao evento.
Esta função ativa um evento para todos os assinantes daquele evento dependendo do método de transporte usado.
Exemplo de uso (criar um evento sem atributos)
raise_event("E_NO_PARAM");
Exemplo de uso (cria um evento com dois atributos)
$avp(attr-name) = "param1"; $avp(attr-name) = "param2"; $avp(attr-val) = 1; $avp(attr-val) = "2" raise_event("E_TWO_PARAMS", $avp(attr-name), $avp(attr-val));
remove_branch(pv|int)
Remove a perna (branch) informada, a perna que será removida pode ser informada por um inteiro ou uma pseudo-variavel, no momento que a perna é removida todas as pernas subsequentes serão deslocadas (ex: se a perna n é removida, então a anterior n+1 será a nova perna, a anterior n+2 passará a ser a n+1 e assim por diante)
Exemplo de uso (remove todas as branches que contenham na URI o hostname '127.0.0.1')
$var(i) = 0; while ($(branch(uri)[$var(i)]) != null) { xlog("L_INFO","$$(branch(uri)[$var(i)])=[$(branch(uri)[$var(i)])]\n"); if ($(branch(uri)[$var(i)]{uri.host}) == "127.0.0.1") { xlog("L_INFO","removing branch $var(i) with URI=[$(branch(uri)[$var(i)])]\n"); remove_branch($var(i)); } else { $var(i) = $var(i) + 1; } }
return(int)
A função return() permite que você retorne um valor inteiro de um bloco de roteamento, você pode testar o valor retornado usando a variavel $retcode.
return(0) é o mesmo que exit()
Expressão booleana:
* Negativo e ZERO é FALSE * Positivo é TRUE
Exemplo de uso:
route { if (route(2)) { xlog("L_NOTICE","method $rm is INVITE\n"); } else { xlog("L_NOTICE","method $rm is REGISTER\n"); }; } route[2] { if (is_method("INVITE")) { return(1); } else if (is_method("REGISTER")) { return(-1); } else { return(0); }; }
resetdsturi()
Define o valor do campo dst_uri para NULL, o campo dst_uri normalmente é definido após loose_route() ou lookup("location") se o endereço de contato está atrás de NAT
Exemplo de uso:
resetdsturi();
resetflag(int)
Reseta o valor de uma flag para o processamento atual (define o valor para 0), o valor para o parametro poder ser um número de 0 até 31.
Para saber mais veja a Documentação de Flag
Exemplo de uso
resetflag(3);
resetbflag([branch_idx,] flag_idx)
Reseta a flag para uma perna especifica (define o valor para 0), o valor de flag_idx pode ser um número de 0 até 31, branch_idx identifica a perna para qual a flag será resetada, deve ser um numero positivo, a branch index 0 refere-se a RUR da branch em questão, se o parametro for omitido 0 será definido como padrão.
Para saber mais veja a Documentação de Flag
Exemplo de uso
resetbflag(1,3); # or resetbflag(3); # same with resetbflag(0,3)
resetsflag(flag_idx)
Reseta uma flag de script (define o valor para 0), o valor the flag_idx pode ser um número de 0 até 31
Para saber mais veja a Documentação de Flag
Exemplo de uso
resetsflag(2);
revert_uri()
Define a R-URI para o valor original de quando a mesma chegou no servidor (desfaz todas as alterações)
Exemplo de uso:
revert_uri();
rewritehost() / sethost()
re-escreve o dominio da R-URI com o valor especificado no parametro da função, outras partes da R-URI como username , porta e os parametros URI permancem inalterados.
Exemplos de uso:
rewritehost("1.2.3.4");
rewritehostport() / sethostport()
Re-escreve o dominio e porta da R-URI com o valor especificado no parametro da função, outras partes da R-URI como username e parametros de URI não são alterados
Rewrite the domain part and port of the R-URI with the value of function's parameter. Other parts of the R-URI like username and URI parameters remain unchanged.
Exemplo de uso:
rewritehostport("1.2.3.4:5080");
rewriteuser(string) / setuser(string)
Re-escreve o username na R-URI com o valor do parametro.
Exemplo de uso:
rewriteuser("newuser");
rewriteuserpass() / setuserpass()
Re-escreve a parte referente ao password da R-URI com o valor definido no parametro.
Exemplo de uso:
rewriteuserpass("my_secret_passwd");
rewriteport() / setport()
Re-escreve/define a parte referente a porta da R-URI com o valor definido no parametro.
Exemplo de uso:
rewriteport("5070");
rewriteuri(str) / seturi(str)
Re-escreve a URI recebida
Exemplo de uso:
rewriteuri("sip:test@opensips.org");
route(name [, param1 [, param2 [, ...] ] ] )
Esta função é utiliza para chamar uma rota declarada no script, opcionalmente ela pode receber diversos parametros (até 7) que podem ser recuperados depois com a pseudo-variavel $param(idx).
O nome da rota deve ser um identificador, os parametros podem ser o mesmo ou inteiro, string ou mesmo pseudo-variaveis
Exemplo de uso:
route(HANDLE_SEQUENTIALS); route(HANDLE_SEQUENTIALS, 1, "param", $var(param));
script_trace( log_level, pv_format_string[, info_string])
Esta função inicia um tracing no script , isso ajuda a melhor entender o fluxo de execução do script do OpenSIPS, como que função é executada, que linha é e etc.., no mais você também pode traçar os valores das pseudo-variaveis como o progresso da execução do script.
O bloco do script onde o tracing é ativado irá exibir uma linha para cada ação individual que é realizada (ex: atribuições, testes condicionais, funções de módulos, funções de core etc...), multiplas pseudo-variaveis podem ser monitoradas especificando no formato pv_format_string (ex: "$ru---$avp(var1)" ).
O log produzido por multiplas/diferentes regiões com tracert ativo podem ser diferenciadas (taggeadas) especificando uma string adicional (info_string) como terceiro parametro.
Para desativar o tracert do script apenas chama script_trace() , em todo caso o tracer será parado no fim da execução do script
Exemplo de uso:
script_trace( 1, "$rm from $si, ruri=$ru", "me");
irá gerar a seguinte saída:
[line 578][me][module consume_credentials] -> (INVITE from 127.0.0.1 , ruri=sip:111111@opensips.org) [line 581][me][core setsflag] -> (INVITE from 127.0.0.1 , ruri=sip:111111@opensips.org) [line 583][me][assign equal] -> (INVITE from 127.0.0.1 , ruri=sip:111111@opensips.org) [line 592][me][core if] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org) [line 585][me][module is_avp_set] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org) [line 589][me][core if] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org) [line 586][me][module is_method] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org) [line 587][me][module trace_dialog] -> (INVITE 127.0.0.1 , ruri=sip:tester@opensips.org) [line 590][me][core setflag] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org)
send(destination [, headers])
Envia a mensagem SIP original para um destino especifico em modo stateless, o destino deve ser especificado no formato [proto:]host[:port] , nenhuma alteração é realizada na mensagem, não é adicionado cabeçalho VIA a menos que você especifique, o host pode ser um IP ou hostname, os protocolos suportados são UDP, TCP e TLS (para TLS o suporte deve estar ativo no core), se proto ou port não forem especificados requisições de NAPTR e SRV serão realizadas (se possivel) para tentar identificar os dados. O parametro header deve terminar com '\r\n' e pode aceitar tanto texto puro quanto pseudo-variaveis.
O parametro é obrigatório e possue um formato de string.
Exemplo de uso:
send("udp:10.10.10.10:5070"); send("udp:10.10.10.10:5070", "Server: opensips\r\n");
serialize_branches(clear)
NOTA: não entendi muito bem o conceito e não achei a melhor forma pra traduzir, então pesço desculpas se estiver confuso
Coloca todas as pernas em um processamento paralelo (com append_branch() e incluindo a RURI atual) e prepara as mesmas para processamento isolado, a ordenação é feita aumentando a ordenação "q" , as pernas serializadas são internamente armazenadas em AVPs, você poderá receber os valores através da função next_branch()
NOTA: De acordo com a RFC3261, as pernas com o mesmo valor 'q' permanecerão separadas durante alguns processos da separação serial, isso irá resultar em uma combinação de separação serial e paralela).
NOTA: Esta função não ltera a RURI da mensagem, ela apenas converte de paralelo para serial
Se clear é definido para non-zero , todos os resultados de outras 'serialize_branches' (branches serializadas que ainda não foram utilizadas) serão deletadas antes de definir novas serialized branches.
Exemplo de uso:
serialize_branches(1);
set_advertised_address(ip|string)
Mesmo que 'advertised_address' mas afeta apenas a mensagem atual, esta tem prioridade se a 'advertised_address' também está definida.
Exemplo de uso:
set_advertised_address("opensips.org");
set_advertised_port(int)
Mesmo que 'advertised_port' mas tem efeito apenas a mensagme atual, possui prioridade sobre 'advertised_port'
Exemplo de uso:
set_advertised_port(5080);
setdebug([level])
Altera o valor de debug do processo atual do script, se chamado sem parametro então o level de debug do processo será resetado para o level global, se for definido o parametro então o nivel será alterado no processo e então a alteração do debug geral (utilizando a MI por exemplo) não terá efeito sobre o mesmo, então tenha cuidado e tenha certeza de resetar o processo queando você terminar, esta função é muito útil se você estiver tracándo e debugando apenas uma parte especifica do código.
Exemplo de uso:
debug= -1 # errors only ..... { ...... setdebug(4); # set the debug level of the current process to DBG uac_replace_from(....); setdebug(); # reset the debug level of the current process to the global level ....... }
setdsturi(string)
Definie explicitamente o valor do campo dst_uri para o valor do parametro especificado, o parametro deve ser uma URI SIP valida.
Exemplo de uso
setdsturi("sip:10.10.10.10:5090");
setflag(int)
Define uma flag para o processamento da mensagem atual, o valor do parametro pode ser um numero de 0 a 31, as flags são utilizadas para marcar a mensagem para processamento especifico (como accounting) ou para manter alguns statos (como mensagens autenticadas)
Example of usage:Exemplo de uso.
setflag(3);
setbflag([branch_idx,] flag_idx)
Define uma flag para um branch especifica (define o valor para 1) , o valor de flag_idx pode ser um numero de 0 a 31, a branch_idx identifica a branch para qual a flag será aplicada, deve ser um numero positivo, index 0 refere-se a RURI da branch atual, se o parametro não for especificado o index 0 será utilizado.
Para saber mais veja a Documentação de Flag
Exemplo de uso
setbflag(1,3);
ou
setbflag(3); # same with setbflag(0,3)
setsflag(flag_idx)
Define uma flag de script (define para 0), o valor de falg_idx pode ser um numero de 0 a 31
Para saber mais veja a Documentação de Flag
Exemplo de uso
setsflag(2);
strip(int)
Remove os primeiros N caracteres do campo username da R-URI (N é o valor do parametro)
Exemplo de uso:
strip(3);
strip_tail(int)
Remove os ultimos N caracteres do campo username da R-URI (N é o valor do parametro)
Exemplo de uso:
strip_tail(3);
subscribe_event(string, string [, int])
Assina (subscribe) uma aplicação externa para um certo evento para a interface de eventos do OpenSIPS, esta opção é utilizada para protocolos de transportes que não podem assinar (subscribe) por si mesmos (ex: event_rabbitmq) , esta função deve ser chamada apenas uma vez na startup_route se a assinatura (susbcription) não expira, ou em uma timer route se a assinatura deve ser renovado em algum momento.
O primeiro parametro é a sting que representa o nome do evento que uma aplicação externa deve ser notificada, o segundo parametro é a string que especifica o socket para a aplicação externa. veja que o socket deve seguir a syntax de um módulo de transporte carregado para interface de eventos (ex: event_datagram, event_rabbitmq), o último parametro é opcional e especifica o tempo de expiração da assinatura , se não está presente então a subscrição não irá expirar.
Exemplo de uso (assinante que nunca espira, notificado pelo módulo rabbitmq)
startup_route { subscribe_event("E_PIKE_BLOCKED", "rabbitmq:127.0.0.1/pike"); }
Exemplo de uso (assinante expira em 5 segundos, notificado via udp)
timer_route[event_subscribe, 4] { subscribe_event("E_PIKE_BLOCKED", "udp:127.0.0.1:5051", 5); }
use_blacklist(string)
Ativa a blacklist de dns para o nome recebido no parametro, o proposito primario é prevenir enviar request para IP criticos (como gateways) devido ao DNS ou prevenir enviar chamadas para destinos que estão (temporario ou permanentemente) indisponiveis.
use_blacklist("pstn-gws");