Hello Everyone,
I am trying to implement music on hold with Asterisk. I know that
this has been asked before, but I have searched through the archives
and I think I am doing something a bit different...
Here is the situation:
Components:
Phone (registered to OpenSER)
Cisco GW (connects to PSTN)
OpenSER (in the middle of this mess)
Diagram Outgoing Call:
Phone -> OpenSER (Authentication, LCR, record route, NAT traversal,
yada yada) -> Cisco GW
Incoming:
Cisco GW -> OpenSER (locations lookup, record route, NAT traversal,
yada yada) -> Phone
OpenSER catches any INVITE from the phone and routes it as
necessary. The above config works perfectly except for hold/music on
hold.
As I understand it, music on hold is implemented with a re-INVITE
(from the phone) with a 0.0.0.0 address in the SDP (c=IN IP4 0.0.0.0).
I think that if I had a way to check for this I could route the
re-INVITE for hold to an Asterisk server to run music on hold instead
of routing it to the Cisco GW (which is what happens now). A few
questions:
1) Is there a better way to differentiate a re-INVITE for hold/moh
vs. just a regular INVITE?
2) Is there a way to do this in OpenSER (either using some kind of
matching based on SDPs or some other method)?
3) Is there any reason this wouldn't work?
I'm thinking that the Asterisk side would be fairly simple, with a
context like this for the incoming INVITEs to play music on hold:
exten => _NXX.,1,Answer ; (can't hurt)
exten => _NXX.,n,MusicOnHold(default)
exten => _NXX.,n,Hangup
... or something to that effect.
What do you think? Any and all comments welcome.
Thanks!
--
Kristian Kielhofner
Hi,
I'm working on a project involving a SIP trunking provider that
requires a b2bua with registration.
I noticed on the home page that openser is not a b2bua. Is there an
architectural limitation of openser that prevents it from being a b2bua?
A common setup for the b2bua will be NAT traversal. Currently, we are
using an Ingate SIParator 19 appliance but we would rather use pure
software. I haven't been able to find an open source b2bua that can
bind to multiple addresses for NAT traversal and register with the
SIP trunk provider. Asterisk is pretty heavyweight for the basic SIP
mangling I want to do. Any suggestions?
Thanks,
M
Hi,
I am setting up a testing environment with about 100 users. I would
like to see who is online/registered, conversation times, protocols,
etc. Basically I want to be able to capture all the messages for
troubleshooting purposes, durability, compatibility, reliability, etc.
Will the acc module do that for me, how do I set it up to capture the
data?
Thank you very much,
Ben
hi
I am using ser+asterisk(with a2billing),
all of users must be registerd, for accepting call,
but the unregistered users can place the calls ,with a
valid number as callerid.
as u now it is too critical bug for my system,
thanks in advance
Best
Mani
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Hi,
The get started documnt says if I type: ser D E, it will start ser in foreground.
Then if I just type in ser, it will start ser in background. Is that right? It seems like when I only type in ser, it also runs in foreground. How can I run ser in backgroung?
Thanks,
Karl
I don't debugger my module.so with kdevelop
I run openser with
fork=no
but, I can't debug a module using
kdevelop.
__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas
Hi ser specialists,
I have a problem with the installtion of the
"ser-mysql-module_0.9.6-0.1_i386.deb" module. If I want to install the
pakage with: "dpkg -i ser-mysql-module_0.9.6-0.1_i386.deb" I get the
following error:
########
ser:/home/ser# dpkg -i ser-mysql-module_0.9.6-0.1_i386.deb
Wähle vormals abgewähltes Paket ser-mysql-module.
(Lese Datenbank ... 79463 Dateien und Verzeichnisse sind derzeit
installiert.)
Entpacke ser-mysql-module (aus ser-mysql-module_0.9.6-0.1_i386.deb) ...
dpkg: Abhängigkeitsprobleme verhindern Konfiguration von ser-mysql-module:
ser-mysql-module hängt ab von libmysqlclient15; aber:
Paket libmysqlclient15 ist nicht installiert.
dpkg: Fehler beim Bearbeiten von ser-mysql-module (--install):
Abhängigkeitsprobleme - lasse es unkonfiguriert
Fehler traten auf beim Bearbeiten von:
ser-mysql-module
########
TranslationFehler traten auf beim Bearbeiten von
########
ser:/home/ser# dpkg -i ser-mysql-module_0.9.6-0.1_i386.deb
Select previously not selected pakage ser-mysql-module.
(Read Database ... 79463 Files and Directorys currently installed.)
Unpack ser-mysql-module (from ser-mysql-module_0.9.6-0.1_i386.deb) ...
dpkg: Dependency problems prevent configuration of ser-mysql-module:
ser-mysql-module depends on libmysqlclient15; but:
pakage libmysqlclient15 is not installed.
dpkg: Error while processing of ser-mysql-module (--install):
Dependency problems - leaving unconfigured
An Error occured while processing of:
ser-mysql-module
########
libmysqlclient15off and libmysqlclient15-dev are installed already.
Kind regards
Daniel
Hi,
anyone know something about this, when a twinkle UA call a eyebeam UA
(Tls or not TLS) I get theses errors :
2(9486) ERROR: tcp_blocking_connect: timeout 10 s elapsed from 10 s
2(9486) ERROR: tcpconn_connect: tcp_blocking_connect failed
2(9486) ERROR: tcp_send: connect failed
2(9486) msg_send: ERROR: tcp_send failed
2(9486) ERROR:tm:t_forward_nonack: sending request failed
9(9500) WARNING: set_timer for 3 list called on a "detached" timer --
ignoring: 0x2adbfa551ee0
2(9486) ERROR: tcp_blocking_connect: timeout 10 s elapsed from 10 s
2(9486) ERROR: tcpconn_connect: tcp_blocking_connect failed
2(9486) ERROR: tcp_send: connect failed
2(9486) msg_send: ERROR: tcp_send failed
2(9486) ERROR:tm:t_forward_nonack: sending request failed
But when eyebeam call twinkle , no errors .
thank for all.
Hello!
Thanks Vaclav, it is clear now. I modified the contacts settings in the client, but nothing changed :-(.
I received the next error messages:
3(16917) ERROR: rls_handler.c:484: XCAP query problems
3(16917) XCAP query failed
What should I see in the MySQL querry?
I can see now (in the global contact list case):
select uid,flags from uri where username='bartaj-list' AND did='10.22.1.210'
, but in the answer (Response OK) the Payload field is empty.
mysql> select uid,flags from uri where username='bartaj-list' AND did='10.22.1.210';
Empty set (0.00 sec)
In the right case (user contact list) the answer contained the username parameter:
select uid,flags from uri where username='bartaj' AND did='10.22.1.210'
Answer -> bartaj
mysql> select uid,flags from uri where username='bartaj' AND did='10.22.1.210';
-------- -------
| uid | flags |
-------- -------
| bartaj | 61 |
-------- -------
1 row in set (0.00 sec)
mysql>
Maybe is this the problem?
Do I have to add any other parameters into the MYSQL database (in the global lists cases)?
By,
Jani
-----Original Message-----
From: Vaclav Kubart [mailto:vaclav.kubart@iptel.org]
Sent: Friday, April 20, 2007 9:56 AM
To: Barta János
Cc: serusers(a)iptel.org
Subject: Re: [Serusers] global contact list
Hi,
I'm very sorry for delayed reply but... ;-)
Your config seems to be OK for first (and second) look.
I have used list subscripriptions with EyeBeam in this way:
I added the list URI in my contact list (exactly the same way like other contacts), so I had something like:
contacts:
- user1(a)somewhere.com
- user2(a)somewhere.com
- hr(a)somewhere.com
- ...
- franta-list(a)somewhere.com
Where userx@... are 'normal' users and hr@... is resource list as defined in global resource list - in your case it could be bartaj-list(a)test.intra or hr2(a)test.intra.
The franta-list@... is uri used to subscribe to user's resource list when I'm using my user with uri franta(a)somewhere.com (i.e. the resource list on XCAP is stored in user's directory as described in presence handbook).
After the subscription is created, the list in contact window was expanded and seemd something like:
- user1(a)somewhere.com
- user2(a)somewhere.com
- hr(a)somewhere.com
|
- smith(a)somewhere.com
- ...
- ...
If I tried to use "Subscribe to contact list" feature, I think I had to put franta-list(a)somewhere.com as contact-list URI (or hr(a)somewhere.com could be used too). But in this case EyeBeam was not sending the Supported:eventlist header thus it was unusable for me...
Have you seen any error messages in SER's log?
Vaclav
On Tue, Apr 17, 2007 at 05:01:24PM 0200, Barta János wrote:
> Hello!
>
> Thanks for your answer again, and I'm sorry for the delayed answer, but I was out of office.
> I attached my config file.
>
> My biggest problem is, that I don't know, what I should see :-(.
> I have an eyeBeam window, that contains the "Calls & Conntats" parameters.
>
> In this window I can see my (user) contact list, but I didn't see the global one.
> For example (the PC is my user contact list):
>
> -PC
> -105
> -12345
> -barta
>
> and it is working fine, but I can not see here (in this window) the global one:
>
> sip:~# cat /var/www/xcap-root/rls-services/global/index
> <?xml version="1.0" encoding="UTF-8"?> <rls-services>
>
> <service uri="sip:bartaj-list@test.intra"> <list name="Human
> resources"> <entry uri="sip:test1@test.intra">
> <display-name>bartaj</display-name>
> </entry>
> <entry uri="sip:test2@test.intra">
> <display-name>12345</display-name>
> </entry>
> </list>
> <packages>
> <package>presence</package>
> </packages>
> </service>
>
> <service uri="sip:hr2@test.intra">
> <list name="Human resources">
> <entry uri="sip:test1@test.intra">
> <display-name>bartaj</display-name>
> </entry>
> <entry uri="sip:test2@test.intra">
> <display-name>12345</display-name>
> </entry>
> </list>
> <packages>
> <package>presence</package>
> </packages>
> </service>
>
> </rls-services>
>
>
> I think in that case I should see the next tree:
>
> -PC
> -105
> -12345
> -barta
>
> -Human resources
> -bartaj
> -12345
>
>
>
> As You asked, I made a capture between the SER and XCAP.
>
> It was a little difficult, because I didn't see interesting traffic between the SER and XCAP, but a few minutes later I realised, that the SER for the communication (in that case) uses the loopback (lo) interface.
>
> You can see here the capture, that I made on the lo interface:
>
> 1 0.000000 127.0.0.1 -> 127.0.0.1 TCP 37512 > www [SYN] Seq=0 Len=0
> MSS=16396 TSV=3808162073 TSER=0 WS=0
> 2 0.000056 127.0.0.1 -> 127.0.0.1 TCP www > 37512 [SYN, ACK] Seq=0
> Ack=1 Win=32767 Len=0 MSS=16396 TSV=3808162073 TSER=3808162073 WS=0
> 3 0.000065 127.0.0.1 -> 127.0.0.1 TCP 37512 > www [ACK] Seq=1 Ack=1
> Win=32767 Len=0 TSV=3808162073 TSER=3808162073
> 4 0.000072 127.0.0.1 -> 127.0.0.1 HTTP GET
> /xcap/pres-rules/users/12345/presence-rules.xml HTTP/1.1
> 5 0.000079 127.0.0.1 -> 127.0.0.1 TCP www > 37512 [ACK] Seq=1 Ack=113
> Win=32767 Len=0 TSV=3808162073 TSER=3808162073
> 6 0.000545 127.0.0.1 -> 127.0.0.1 HTTP HTTP/1.1 200 OK
> 7 0.000559 127.0.0.1 -> 127.0.0.1 TCP 37512 > www [ACK] Seq=113
> Ack=262 Win=32767 Len=0 TSV=3808162074 TSER=3808162074
> 8 0.000571 127.0.0.1 -> 127.0.0.1 HTTP Continuation or non-HTTP
> traffic
> 9 0.000578 127.0.0.1 -> 127.0.0.1 TCP 37512 > www [ACK] Seq=113
> Ack=870 Win=32767 Len=0 TSV=3808162074 TSER=3808162074 10 0.005535
> 127.0.0.1 -> 127.0.0.1 TCP 37513 > www [SYN] Seq=0 Len=0 MSS=16396
> TSV=3808162079 TSER=0 WS=0
> 11 0.005556 127.0.0.1 -> 127.0.0.1 TCP www > 37513 [SYN, ACK] Seq=0
> Ack=1 Win=32767 Len=0 MSS=16396 TSV=3808162079 TSER=3808162079 WS=0
> 12 0.005565 127.0.0.1 -> 127.0.0.1 TCP 37513 > www [ACK] Seq=1 Ack=1
> Win=32767 Len=0 TSV=3808162079 TSER=3808162079
> 13 0.005616 127.0.0.1 -> 127.0.0.1 HTTP GET
> /xcap/pres-rules/users/bartaj/presence-rules.xml HTTP/1.1
> 14 0.005623 127.0.0.1 -> 127.0.0.1 TCP www > 37513 [ACK] Seq=1 Ack=114
> Win=32767 Len=0 TSV=3808162079 TSER=3808162079
> 15 0.005989 127.0.0.1 -> 127.0.0.1 HTTP HTTP/1.1 200 OK
> 16 0.006000 127.0.0.1 -> 127.0.0.1 TCP 37513 > www [ACK] Seq=114
> Ack=262 Win=32767 Len=0 TSV=3808162079 TSER=3808162079
> 17 0.006011 127.0.0.1 -> 127.0.0.1 HTTP Continuation or non-HTTP
> traffic
> 18 0.006017 127.0.0.1 -> 127.0.0.1 TCP 37513 > www [ACK] Seq=114
> Ack=870 Win=32767 Len=0 TSV=3808162079 TSER=3808162079
> 19 2.979491 127.0.0.1 -> 127.0.0.1 HTTP GET
> /xcap/rls-services/global/index HTTP/1.1 20 2.979722 127.0.0.1 ->
> 127.0.0.1 HTTP HTTP/1.1 200 OK
> 21 2.979734 127.0.0.1 -> 127.0.0.1 TCP 37512 > www [ACK] Seq=209
> Ack=1126 Win=32767 Len=0 TSV=3808165053 TSER=3808165053
> 22 2.979745 127.0.0.1 -> 127.0.0.1 HTTP Continuation or non-HTTP
> traffic
> 23 2.979751 127.0.0.1 -> 127.0.0.1 TCP 37512 > www [ACK] Seq=209
> Ack=1887 Win=32767 Len=0 TSV=3808165053 TSER=3808165053
>
>
>
> You can see, that in the message number 19 the SER downloaded the index file.
>
> This file contains correct information:
>
>
> sip:~# wget 127.0.0.1/xcap/rls-services/global/index
> --17:22:43-- http://127.0.0.1/xcap/rls-services/global/index
> => `index'
> Connecting to 127.0.0.1:80... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 761 [text/plain]
>
> 100%[====================================>] 761 --.--K/s
>
> 17:22:43 (7.26 MB/s) - `index' saved [761/761]
>
> sip:~#
> sip:~# cat index
> <?xml version="1.0" encoding="UTF-8"?> <rls-services>
>
> <service uri="sip:bartaj-list@test.intra"> <list name="Human
> resources"> <entry uri="sip:test1@test.intra">
> <display-name>bartaj</display-name>
> </entry>
> <entry uri="sip:test2@test.intra">
> <display-name>12345</display-name>
> </entry>
> </list>
> <packages>
> <package>presence</package>
> </packages>
> </service>
>
> <service uri="sip:hr2@test.intra">
> <list name="Human resources">
> <entry uri="sip:test1@test.intra">
> <display-name>bartaj</display-name>
> </entry>
> <entry uri="sip:test2@test.intra">
> <display-name>12345</display-name>
> </entry>
> </list>
> <packages>
> <package>presence</package>
> </packages>
> </service>
>
> </rls-services>
> sip:~#
>
>
>
> And at last, how can I add query_rls_services and query_resource_list log informations into the config file?
>
> Thx,
> Jani
>
>
>
> Hi,
> this part of config file is not sufficient for me, but I guess that
> RLS related things stayed as in the original config you mentioned...
> In which way it doesn't work? (For example it returns non OK
> responses?) Please could you try to capture HTTP traffic between XCAP
> server and SER? (If SER really queries the right resource list
> document.)
>
> You can add more log information around important config parts (query_rls_services and query_resource_list functions are most important here).
>
> BTW the second message you sent is not subscription to resource list or user, it is subscription to event package 'sip-profile' (content of Event header field) which is not supported by SER.
>
> It is possible to use registration status as source for presence - in this case you have to have PA module on your server handling registrations and PA module parameter 'use_callbacks' must be set to 1.
>
> Vaclav
>
>
>
> -----Original Message-----
> From: Vaclav Kubart [mailto:vaclav.kubart@iptel.org]
> Sent: Tuesday, April 03, 2007 11:18 AM
> To: Barta János
> Cc: serusers(a)iptel.org
> Subject: Re: [Serusers] global contact list
>
>
> ______________________________________________________________________
> _________ Állást keres? 3300 lehetőséget kínál a CV-Online Ne
> keressen tovább! Portálunkon Magyarország vezető vállalatainak több mint 3300 friss állásajánlatából válogathat!
>
> http://ad.adverticum.net/b/cl,1,6022,139845,209300/click.prm
> sip:/opt/etc/ser# cat ./ser_pa.cfg
> log_stderror=yes
> debug=5 # debug level (cmd line: -dddddddddd)
> check_via=no # (cmd. line: -v)
> dns=no # (cmd. line: -r)
> rev_dns=no # (cmd. line: -R)
> port=5060
> children=2
> alias="test.intra"
> #alias="ipp.test.intra"
> alias="10.22.1.210"
> mhomed=yes # usefull for multihomed hosts, small performance penalty
> #tcp_accept_aliases=yes # accepts the tcp alias via option (see NEWS)
> #tcp_poll_method="sigio_rt"
>
> # ------------------ module loading ----------------------------------
>
> loadmodule "/opt/lib/ser/modules/sl.so"
> loadmodule "/opt/lib/ser/modules/avp.so"
> loadmodule "/opt/lib/ser/modules/avpops.so"
> loadmodule "/opt/lib/ser/modules/tm.so"
> loadmodule "/opt/lib/ser/modules/rr.so"
> loadmodule "/opt/lib/ser/modules/maxfwd.so"
> loadmodule "/opt/lib/ser/modules/usrloc.so"
> loadmodule "/opt/lib/ser/modules/registrar.so"
> loadmodule "/opt/lib/ser/modules/textops.so"
> loadmodule "/opt/lib/ser/modules/mysql.so"
> loadmodule "/opt/lib/ser/modules/dialog.so"
> loadmodule "/opt/lib/ser/modules/rls.so"
> loadmodule "/opt/lib/ser/modules/pa.so"
> loadmodule "/opt/lib/ser/modules/presence_b2b.so"
> loadmodule "/opt/lib/ser/modules/uri.so"
> loadmodule "/opt/lib/ser/modules/uri_db.so"
> loadmodule "/opt/lib/ser/modules/domain.so"
> loadmodule "/opt/lib/ser/modules/fifo.so"
> loadmodule "/opt/lib/ser/modules/xmlrpc.so"
> loadmodule "/opt/lib/ser/modules/xlog.so"
> #loadmodule "/opt/lib/ser/modules/unixsock.so"
> loadmodule "/opt/lib/ser/modules/msilo.so"
>
> # Uncomment this if you want digest authentication # mysql.so must be
> loaded !
> loadmodule "/opt/lib/ser/modules/auth.so"
> #loadmodule "/opt/lib/ser/modules/auth_db.so"
>
> loadmodule "/opt/lib/ser/modules/acc_radius.so"
> loadmodule "/opt/lib/ser/modules/mediaproxy.so"
> loadmodule "/opt/lib/ser/modules/auth_radius.so"
>
> # ----------------- setting module-specific parameters ---------------
> ############################# modparam("mediaproxy",
> "mediaproxy_socket", "/var/run/mediaproxy.sock")
> modparam("auth_radius","radius_config","/etc/radiusclient-ng/radiuscli
> ent.conf")
>
> #########################
> # -- acc params -- #
> #########################
> modparam("acc_radius","radius_config","/etc/radiusclient-ng/radiusclie
> nt.conf")
> modparam("acc_radius", "log_flag", 1)
> modparam("acc_radius", "log_missed_flag", 2)
>
>
> modparam("msilo","registrar","sip:registrar@test.intra")
> modparam("msilo","use_contact",0)
> modparam("msilo","expire_time",7200)
>
> # -- usrloc params --
>
> # -- auth params --
> # Uncomment if you are using auth module # #modparam("auth_db",
> "calculate_ha1", yes) # # If you set "calculate_ha1" parameter to yes
> (which true in this config), # uncomment also the following parameter)
> # #modparam("auth_db", "password_column", "password")
>
> # -- rr params --
> # add value to ;lr param to make some broken UAs happy modparam("rr",
> "enable_full_lr", 1)
>
> modparam("rls", "min_expiration", 200) modparam("rls",
> "max_expiration", 300) modparam("rls", "default_expiration", 300)
> modparam("rls", "auth", "none") modparam("rls", "xcap_root",
> "http://localhost/xcap") modparam("rls", "reduce_xcap_needs", 1)
> modparam("rls", "db_mode", 1) modparam("rls", "db_url",
> "mysql://xxxxxxxxxxx:yyyyyyyyy@10.22.1.222/ser_pa")
>
> modparam("pa", "use_db", 1)
> # allow storing authorization requests for offline users into database
> modparam("pa", "use_offline_winfo", 1) # how often try to remove old
> stored authorization requests modparam("pa", "offline_winfo_timer",
> 600) # how long stored authorization requests live modparam("pa",
> "offline_winfo_expiration", 600) modparam("pa", "db_url",
> "mysql://xxxxxxxxxxx:yyyyyyyyy@10.22.1.222/ser_pa")
> # mode of PA authorization: none, implicit or xcap modparam("pa",
> "auth", "xcap") modparam("pa", "auth_xcap_root",
> "http://localhost/xcap") # do not authorize watcherinfo subscriptions
> modparam("pa", "winfo_auth", "none") # use only published information
> if set to 0 modparam("pa", "use_callbacks", 1) # don't accept internal
> subscriptions from RLS, ...
> modparam("pa", "accept_internal_subscriptions", 1) # maximum value of
> Expires for subscriptions modparam("pa",
> "max_subscription_expiration", 600) # maximum value of Expires for
> publications modparam("pa", "max_publish_expiration", 120) # how often
> test if something changes and send NOTIFY modparam("pa",
> "timer_interval", 10)
>
> # route for generated SUBSCRIBE requests for presence
> modparam("presence_b2b", "presence_route",
> "<sip:127.0.0.1;transport=tcp;lr>")
> # waiting time from error to new attepmt about SUBSCRIBE
> modparam("presence_b2b", "on_error_retry_time", 60) # how long wait
> for NOTIFY with Subscription-Status=terminated after unsubscribe
> modparam("presence_b2b", "wait_for_term_notify", 33) # how long before
> expiration send renewal SUBSCRIBE request modparam("presence_b2b",
> "resubscribe_delta", 30) # minimal time to send renewal SUBSCRIBE
> request from receiving previous response modparam("presence_b2b",
> "min_resubscribe_time", 60) # default expiration timeout
> modparam("presence_b2b", "default_expiration", 3600) # process
> internal subscriptions to presence events modparam("presence_b2b",
> "handle_presence_subscriptions", 1)
>
> modparam("usrloc", "db_mode", 2)
> modparam("domain", "db_mode", 1)
> #modparam("domain|uri_db|acc|auth_db|usrloc|msilo", "db_url",
> "mysql://xxxxxxxxxxx:yyyyyyyyy@10.22.1.222/ser_pa")
> modparam("domain|uri_db|auth_db|usrloc|msilo", "db_url",
> "mysql://xxxxxxxxxxx:yyyyyyyyy@10.22.1.222/ser_pa")
>
> modparam("fifo", "fifo_file", "/tmp/ser_fifo")
>
> # ------------------------- request routing logic -------------------
>
> # main routing logic
>
> route{
> # XML RPC
> if (method == "POST" || method == "GET") {
> create_via();
> dispatch_rpc();
> break;
> }
>
> # initial sanity checks -- messages with
> # max_forwards==0, or excessively long requests
> if (!mf_process_maxfwd_header("10")) {
> sl_send_reply("483","Too Many Hops");
> break;
> };
> if (msg:len >= max_len ) {
> sl_send_reply("513", "Message too big");
> break;
> };
>
> # we record-route all messages -- to make sure that
> # subsequent messages will go through our proxy; that's
> # particularly good if upstream and downstream entities
> # use different transport protocol
> if (!method=="REGISTER") record_route();
>
> if ((method=="INVITE") or (method=="BYE") or (method=="CANCEL"))
> {
> setflag(1);
> }
>
> # subsequent messages withing a dialog should take the
> # path determined by record-routing
> if (loose_route()) {
> # mark routing logic in request
> append_hf("P-hint: rr-enforced\r\n");
> route(1);
> break;
> };
>
> # if the request is for other domain use UsrLoc
> # (in case, it does not work, use the following command
> # with proper names and addresses in it)
> if (uri==myself) {
>
> if (!lookup_domain("To")) {
> xlog("L_ERR", "Unknown domain to: %tu from: %fu\n");
> route(1);
> break;
> }
>
> if (method=="SUBSCRIBE") {
> if (!t_newtran()) {
> sl_reply_error();
> break;
> };
>
> if (@to.tag=="") {
> # only for new subscriptions (with
> empty to tag)
>
> if (lookup_user("To")) {
> # existing user -> it is subscription to PA
> if (handle_subscription("registrar")) {
> if ((@msg.event=~"presence\.winfo")) {
> # new watcher info subscription
> # sends one watcher info NOTIFY message with all saved authorization requests
> xlog("L_ERR", "dumping stored winfo to %fu\n");
> dump_stored_winfo("registrar", "presence");
> }
> else {
> # new presence subscription
> if ((@msg.event=~"presence") && (%subscription_status=="pending")) {
> # if offline user and new pending subscription
> if (!target_online("registrar")) {
> #%subscription_status="waiting"; # store it as waiting subscription
> xlog("L_ERR", "storing 'pending' winfo to: %tu, from: %fu\n");
> store_winfo("registrar");
> }
> }
> }
> }
> break;
> }
>
> if ((@msg.supported=~"eventlist")) {
> # such user doesn't exist and Supported header field
> # -> probably RLS subscription
>
> if (lookup_domain("From")) {
> if (lookup_user("From")) {
> if (is_simple_rls_target("$uid-list")) {
> # log(1, "it is simple subscription!\n");
> # takes From UID and makes XCAP query for user's
> # list named "default"
> if (!query_resource_list("default")) {
> t_reply("404", "No such user list");
> break;
> }
> }
> }
> }
>
> if (!have_flat_list()) {
> # query_resource_list failed or was not called
> # do standard RLS query acording to To/AOR
> if (!query_rls_services()) {
> log(1, "XCAP query failed\n");
> t_reply("404", "No such list URI");
> break;
> }
> }
>
>
> if (!radius_www_authorize("test.intra")) {
> www_challenge("test.intra", "0");
> break;
> };
> handle_rls_subscription("1");
> }
> else {
> # not resource list subscription -> invalid user
> xlog("L_ERR", "subscription to invalid user %tu\n");
> t_reply("404", "User not found");
> }
>
> break;
> }
> else {
> # renewal subscriptions - try to handle it as RLS and if failed, handle it as PA subscription
> # FIXME: better will be test like existing_rls_subscription()
> # and existing_subscription("registrar")
> if (!handle_rls_subscription("0")) {
> handle_subscription("registrar");
> }
> break;
> }
> };
>
> # get user (common for all other messages than SUBSCRIBE)
> if (!lookup_user("To")) {
> # log(1, "Unknown user - message should be forwarded?");
> # # break;
> append_hf("P-hint: unknown user\r\n");
> route(1);
> break;
> }
>
> if (method=="PUBLISH") {
> if (!t_newtran()) {
> # log(1, "newtran error\n");
> sl_reply_error();
> break;
> };
> handle_publish("registrar");
>
> # deliver messages to online user
> # TODO: only if user goes from offline to online?
> if (target_online("registrar")) {
> # log(1, "Dumping stored messages\n");
> # dump stored messages - route it through myself (otherwise routed via DNS!)
> if (m_dump("sip:127.0.0.1")) {
> xlog("L_ERR", "MSILO: offline messages for %fu dumped\n");
> }
> }
>
> break;
> };
>
> if (method=="NOTIFY") {
> if (!t_newtran()) {
> log(1, "newtran error\n");
> sl_reply_error();
> break;
> };
> # handle notification sent in internal subscriptions (presence_b2b)
> if (!handle_notify()) {
> t_reply("481", "Unable to handle notification");
> }
> break;
> };
>
> if (method=="MESSAGE") {
>
> if
> (authorize_message("http://localhost/xcap")) {
>
> # use usrloc for delivery
> if (lookup("location")) {
>
> log(1, "Delivering MESSAGE using usrloc\n");
> t_on_failure("1");
> if (!t_relay()) {
> sl_reply_error();
> }
>
> break;
> }
> else {
> # store messages for offline user
> xlog("L_ERR", "MSILO: storing
> MESSAGE for %tu\n");
>
> if (!t_newtran()) {
> log(1, "newtran error\n");
> sl_reply_error();
> break;
> };
>
> # store only text messages NOT isComposing... !
> if (search("^(Content-Type|c):.*application/im-iscomposing\ xml.*")) {
> log(1, "it is only isComposing message - ignored\n");
> t_reply("202", "Ignored");
> break;
> }
>
> if (m_store("0", "sip:127.0.0.1")) {
> # log(1, "MSILO: offline message stored\n");
> if (!t_reply("202", "Accepted")) {
> sl_reply_error();
> };
> } else {
> log(1, "MSILO: error storing offline message\n");
> if (!t_reply("503", "Service Unavailable")) {
> sl_reply_error();
> };
> };
> break;
> }
> break;
> }
> else {
> # log(1, "unauthorized message\n");
> sl_reply("403", "Forbidden");
> }
> break;
> }
>
> if (method=="REGISTER") {
>
> if (!radius_www_authorize("test.intra")) {
> www_challenge("test.intra", "0");
> break;
> };
>
> save("location");
>
> # dump stored messages - route it through myself (otherwise routed via DNS!)
> if (m_dump("sip:127.0.0.1")) {
> xlog("L_ERR", "MSILO: offline messages for %fu dumped\n");
> }
> break;
> };
>
> # native SIP destinations are handled using our USRLOC DB
> if (!lookup("location")) {
> sl_send_reply("404", "Not Found");
> break;
> };
> };
> # append_hf("P-hint: usrloc applied\r\n");
> route(1);
> }
>
> #route[1]
> #{
> # # send it out now; use stateful forwarding as it works reliably
> # # even for UDP2TCP
> # if (!t_relay()) {
> # sl_reply_error();
> # };
> #}
>
>
> #failure_route[1] {
> # # forwarding failed -- check if the request was a MESSAGE
> # if (!method=="MESSAGE") { break; };
> # log(1, "MSILO: MESSAGE forward failed - storing it\n");
> #
> # # we have changed the R-URI with the contact address, ignore it now
> # if (m_store("0", "")) {
> # t_reply("202", "Accepted");
> # } else {
> # log(1, "MSILO: offline message NOT stored\n");
> # t_reply("503", "Service Unavailable");
> # };
> #}
>
>
>
> route[1]
> {
>
> if (method=="INVITE")
> {
> t_on_reply("1");
> t_on_failure("1");
> use_media_proxy();
> }
> else if (method=="BYE|CANCEL") {
> end_media_session();
> }
>
> # send it out now; use stateful forwarding as it works reliably
> # even for UDP2TCP
> if (!t_relay()) {
> sl_reply_error();
> };
> }
>
>
>
> onreply_route[1]
> {
> if (status=~"(183)|2[0-9][0-9]") {
> use_media_proxy();
> };
> if (status=~"[3-6]0[0-9]") {
> end_media_session();
> break;
> }
> }
> failure_route[1]
> {
> # forwarding failed -- check if the request was a MESSAGE
> if (!method=="MESSAGE") { break; };
> log(1, "MSILO: MESSAGE forward failed - storing it\n");
> # we have changed the R-URI with the contact address, ignore it now
> if (m_store("0", "")) {
> t_reply("202", "Accepted");
> } else {
> log(1, "MSILO: offline message NOT stored\n");
> t_reply("503", "Service Unavailable");
> };
> end_media_session();
> }
___________________________________________________________________________________________
Lehet, hogy ma pont az ön kedvenc kötetét kínáljuk nagy engedménnyel?
Érdemes betérni hozzánk, naponta új akcióval várjuk!
http://ad.adverticum.net/b/cl,1,6022,165977,228257/click.prm