Hoe To URL Encode Webget request

Discuss any topic about Brekeke SIP Server.

Moderator: Brekeke Support Team

Post Reply
skb007
Posts: 152
Joined: Mon Oct 05, 2015 10:22 pm
Location: USA

Hoe To URL Encode Webget request

Post by skb007 »

1. Brekeke Product Name and Version: Adv Ed 3.5.8

2. Java version:1.8

3. OS type and the version:RHEL7

4. UA (phone), gateway or other hardware/software involved:NA

5. Your problem:
How to URLEncode the webget request?
Niloc
Posts: 70
Joined: Tue Sep 19, 2017 9:49 pm
Location: NL

Post by Niloc »

skb007
Posts: 152
Joined: Mon Oct 05, 2015 10:22 pm
Location: USA

Post by skb007 »

Here is what I am trying:

Matching Patterns
$request = ^INVITE
$addr = ^192.168.2.10$
To = sip:(.+)@
Call-ID = (.+)
$url.encode($webget("http://192.168.2.11/log.php?num=%1&callid=%2")) = (.+)

Deploy Patterns
&my.logid = %3


%1 = +8005551212

But it shows up in the log.php as following:
GET[num] = ' 8005551212'

The plus sign is replaced with the empty space. I get the same value weather I use url.encode or not.

As a separate note, I also want to know the following 2 things:
1. shall I use $web.webget or $webget, is there any difference between them?
2. If there are multiple requests, does the webget keeps the socket open or it uses the new socket for each request?
3. If I have to send the request to a non standard port 8080, can I use like
$url.encode($webget("http://192.168.2.11:8080/log.php?num=%1&callid=%2")) = (.+)
james
Posts: 501
Joined: Mon Dec 10, 2007 12:56 pm

Post by james »

Try like this.

Code: Select all

$request = ^INVITE
$addr = ^192.168.2.10$
$url.encode($getSIPuser(To)) = (.+)
$url.encode(Call-ID) = (.+)
$webget("http://192.168.2.11/log.php?num=%1&callid=%2") = (.+)
> 1. shall I use $web.webget or $webget, is there any difference between them?

They are same. They call the same internal routine.


> 2. If there are multiple requests, does the webget keeps the socket open or it uses the new socket for each request?

It depends on situations, sockets are reused.

Set the [Multiple Dispatcher]=Yes at [Configuration]->[SIP] page.
It can execute $webget method concurrently.


> 3. If I have to send the request to a non standard port 8080, can I use like
> $webget("http://192.168.2.11:8080/log.php?num=%1&callid=%2")

Yes.
Also you can specify https if the web server supports it.



Is it for logging purpose?
If so, the CDR function might be an easier solution
https://docs.brekeke.com/sip/call-detai ... r-settings
https://docs.brekeke.com/sip/variables-for-cdr

Called number and Call-ID can be written to a file or DB if you specify the format as the following.
%{dstnamein},%{callidin}
skb007
Posts: 152
Joined: Mon Oct 05, 2015 10:22 pm
Location: USA

Post by skb007 »

I turned on the dispatcher with 8 dispatcher under
Configuration-->SIP-->Performance Optimization

I restarted the BSS after the change. I ran the test again, I saw that there were some missing transaction on webserver (log.php). For each missing entry in the webserver log, I found one entry in the BSS sv log "In-Error-List", see one example below. Please explain what is the meaning of "In-Error-List".



webget: 04/30/19 19:51:23.087,http://192.168.2.11:8105/log.php?dnis=8 ... Error-List
james
Posts: 501
Joined: Mon Dec 10, 2007 12:56 pm

Post by james »

Can log.php handle multiple request concurrently?

If there is an error such as Timeout or Unknownhost with the specified URL, $webget method suspends the access to the same URL for a while.

During the suspending period, the method writes "In-Error-List" in the log if the same URL is requested.

It is 10sec (=10000ms) in the default.
You can tune the value with the variable "net.webget.timeout.retryafer".

For example, if you want to tune it to 500ms, set the line below at the [Configuration]->[Advanced] page.

Code: Select all

  net.webget.timeout.retryafer = 500
FYI: the list of suspended URL will be shown by executing weberrorlist command at [Tools]-[Command] page.
https://docs.brekeke.com/sip/weberrorlist
skb007
Posts: 152
Joined: Mon Oct 05, 2015 10:22 pm
Location: USA

Post by skb007 »

Awesome, it was very helpful.
It would be nice if BSS dumps the error in the sv log as soon as it puts in the error list so we know what was the error.
What would be more helpful if it triggers an email on such errors.
james
Posts: 501
Joined: Mon Dec 10, 2007 12:56 pm

Post by james »

> It would be nice if BSS dumps the error in the sv log as soon as it puts in the error list

I think it will be logged immediately as "Timeout" or "UnknownHost".

> What would be more helpful if it triggers an email on such errors.

You can write such a DialPlan rule with "$alert.message".
https://docs.brekeke.com/sip/alert-message
james
Posts: 501
Joined: Mon Dec 10, 2007 12:56 pm

Post by james »

For example...

Rule-1: Access to log.php
[Matching Patterns]
$request = ^INVITE
$addr = ^192.168.2.10$
$url.encode($getSIPuser(To)) = (.+)
$url.encode(Call-ID) = (.+)
$webget("http://192.168.2.11/log.php?num=%1&callid=%2") = (.+)

[Deploy Patterns]
&my.logid = %3

Rule-2: Send Alert to Admin
[Matching Patterns]
$isNull("&my.logid") = ^true

[Deploy Patterns]
$alert.message = Can not access to log.php

If &my.logid is not set yet, the rule-2 sends an alert e-mail.

Note: you need to set the e-mail account at the [Email]->[Settings] beforehand.
skb007
Posts: 152
Joined: Mon Oct 05, 2015 10:22 pm
Location: USA

Post by skb007 »

That is an awesome solution, thanks.
Post Reply