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/radiusclient.conf")
>
> #########################
> # -- acc params -- #
> #########################
> modparam("acc_radius","radius_config","/etc/radiusclient-ng/radiusclient.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();
> }
Hi Sumin,
Thanx for replying my mail.
I failed to compile ivr module.
btw I'm using sems.0.10.0-rc2 as media server. Below is the error log:
python2.2 py_comp -l py &&\
cp py/*.pyc ../../core/lib
Listing py ...
make[1]: Entering directory `/usr/local/src/sems-0.10.0-rc2/apps/ivr'
g++ -MM IvrAudio.cpp -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing > IvrAudio.d
g++ -MM Ivr.cpp -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing > Ivr.d
g++ -MM IvrDialogBase.cpp -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing > IvrDialogBase.d
g++ -MM IvrSipDialog.cpp -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing > IvrSipDialog.d
g++ -MM IvrSipReply.cpp -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing > IvrSipReply.d
g++ -MM IvrSipRequest.cpp -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing > IvrSipRequest.d
g++ -MM IvrUAC.cpp -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing > IvrUAC.d
make[1]: Leaving directory `/usr/local/src/sems-0.10.0-rc2/apps/ivr'
make[1]: Entering directory `/usr/local/src/sems-0.10.0-rc2/apps/ivr'
g++ -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing -c IvrAudio.cpp -o IvrAudio.o
g++ -I ../../core -Wall -Wno-reorder -fPIC -g -O2 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -DVERSION='"0.10.0-rc2"' -DARCH='"i386"' -DOS='"linux"' -I/usr/include/python2.2 -fno-strict-aliasing -c Ivr.cpp -o Ivr.o
Ivr.cpp:54: 'PyGILState_STATE' is used as a type, but is not defined as a type.
Ivr.cpp: In constructor `PythonGIL::PythonGIL()':
Ivr.cpp:56: `gst' undeclared (first use this function)
Ivr.cpp:56: (Each undeclared identifier is reported only once for each function
it appears in.)
Ivr.cpp:56: `PyGILState_Ensure' undeclared (first use this function)
Ivr.cpp: In destructor `PythonGIL::~PythonGIL()':
Ivr.cpp:57: `PyGILState_Release' undeclared (first use this function)
Ivr.cpp: In member function `bool IvrFactory::loadScript(const std::string&)':
Ivr.cpp:363: invalid conversion from `const char*' to `char*'
Ivr.cpp: In member function `bool IvrDialog::callPyEventHandler(char*, char*,
...)':
Ivr.cpp:640: `PyBool_Check' undeclared (first use this function)
make[1]: *** [Ivr.o] Error 1
make[1]: Leaving directory `/usr/local/src/sems-0.10.0-rc2/apps/ivr'
make: [all] Error 2 (ignored)
echo "Installing Python object files..."
Installing Python object files...
for f in log.pyc ; do \
if [ -n "py/$f" ]; then \
touch /usr/local/lib/sems/plug-in//$f; \
install -m 755 py/$f /usr/local/lib/sems/plug-in//$f; \
fi ; \
done
mkdir -p /usr/local/lib/sems/plug-in/
touch /usr/local/lib/sems/plug-in//ivr.so ; \
install -m 755 ivr.so /usr/local/lib/sems/plug-in/
install: cannot stat `ivr.so': No such file or directory
make: *** [install] Error 1
I used "make install" to compile the module.
I'd like to ask another question too...Where does SEMS voicemail usually store voice message? And what is the type of the message store (wav or text file)?
Thanx before
Regards,
Meidiana
seo <giganti71(a)gmail.com> wrote:
Hi Meidiana,
Do you mean that you failed to compile ivr module OR you failed to load ivr plug-in for mailbox application?
If you failed to compile ivr module, could you send compile error log?
If you didn't see any compile error , I think you have to check if there is ivr.so file on your system and then check if ivr.so file is in the plug-in path which is defined in sems.conf file.
If you still have an issue even though all plug-in files are in the plug-in path, could you attach sems logs?
Thanks.
Sumin
On 4/17/07, Meidiana Ten <gotcha_em(a)yahoo.com> wrote: Hi there,
Thanx before for my past questions.
Now, I want to add mailbox application on my server but I cannot find IVR plugin
Then, I read some tutorial that I must make the plugin itself
I've followed the step but it failed.
What should I do then?
Please advise
Thanx
Regards,
Meidiana
---------------------------------
Ahhh...imagining that irresistible "new car" smell?
Check out new cars at Yahoo! Autos.
_______________________________________________
Sems mailing list
Sems(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/sems
---------------------------------
Ahhh...imagining that irresistible "new car" smell?
Check outnew cars at Yahoo! Autos.
Hi there,
I have some questions to ask about voicemail.
I'm using SEMS voicemail to store voice message with SER v.0.9.6 and SEMS 0.10.0
I have my server running voicemail successfully.
But I'm still confuse where voicemail store the message and in what form (text or wav file)
I trace my voicemail storage and found out that it store the message in /var/spool/mail/ in text form. Is it true? So how to hear the voice message while it is in text file?
And the other problem is, my voicemail server can only store message for root@localhost only. The script is like below:
if (uri =~ "sip:115.*@") {
# load email avp with some email address
avp_write("root@localhost","$email");
# use voicemail_headers append to pass it to sems
if (!t_write_unix("/tmp/sems_sock","voicemail")){
log("could not contact voicemail\n");
t_reply("500","could not contact media server");
break;
}
break;
}
}
How to change this script so it can forward to user email address in SER database?
Thanx before
Regards
Meidiana
---------------------------------
Ahhh...imagining that irresistible "new car" smell?
Check outnew cars at Yahoo! Autos.
Hello,
I'm using SER from cvs checked out today:
cvs co -r rel_2_0_0 sip_routerMy Cisco 7940G phone is trying to register and is failing. I think because SER is replying to a the port (50650) that the REGISTER request came from, but the phone is not listening on port 50650. The phone never adds Digest Auth stuff into the REGISTER message, so I think its not getting the 401 Unauthorized message.
The REGISTER message is explicit that the Contact should be at port 5060.
I have a production installation of SER 0.8.14 that is replying to port 5060 on the phones with the 401 Unauthorized, so I know the phones work in that scenario.
I'm using the default ser.cfg version 1.4 as posted on iptel.org in the Optomizing RTP Proxy page.
See below. What to do?
Thanks,
Mahatma
U 10.10.100.103:50650 -> 10.10.10.41:5060
REGISTER sip:velocity11.com SIP/2.0.
Via: SIP/2.0/UDP 10.10.100.103:5060;branch=z9hG4bK5407bc35.
From: <sip:gnoah@velocity11.com>;tag=0008e31b74c7001e396ea85f-3fa5879c.
To: <sip:gnoah@velocity11.com>.
Call-ID: 0008e31b-74c70006-2eef1c02-22c70ede(a)10.10.100.103.
Max-Forwards: 70.
Date: Thu, 19 Apr 2007 22:44:23 GMT.
CSeq: 116 REGISTER.
User-Agent: Cisco-CP7940G/8.0.
Contact: <sip:gnoah@10.10.100.103:5060;transport=udp>;+sip.instance="<urn:uuid:00000000-0000-0000-0000-0008e31b74c7>";+u.sip!model.ccm.cisco.com="8".
Content-Length: 0.
Expires: 3600.
.
U 10.10.10.41:5060 -> 10.10.100.103:50650
SIP/2.0 401 Unauthorized.
Via: SIP/2.0/UDP 10.10.100.103:5060;branch=z9hG4bK5407bc35;rport=50650.
From: <sip:gnoah@velocity11.com>;tag=0008e31b74c7001e396ea85f-3fa5879c.
To: <sip:gnoah@velocity11.com>;tag=b27e1a1d33761e85846fc98f5f3a7e58.ad42.
Call-ID: 0008e31b-74c70006-2eef1c02-22c70ede(a)10.10.100.103.
CSeq: 116 REGISTER.
WWW-Authenticate: Digest realm="velocity11.com", nonce="4627f1f527fd2a950a45686789ff5babccb80014", qop="auth".
Server: Sip EXpress router (2.0.0-rc1 (i386/linux)).
Content-Length: 0.
Warning: 392 10.10.10.41:5060 "Noisy feedback tells: pid=7729 req_src_ip=10.10.100.103 req_src_port=50650 in_uri=sip:velocity11.comout_uri=sip:velocity11.com via_cnt==1".
.
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Dear Openser,
After some investigation, I discovered that the radius accounting behavior is different between openser-1.2.0-tls, and openser-1.1.1-tls. Specifically, when running the basic UAS/UAC scenario in SIPp, I observe the following:
1) Openser-1.1.1-tls - generates 2 accounting start packets, 1 accounting stop. User-Name, CalledStationId, CallingStationId attributes are present.
2) Openser-1.2.0-tls - generates 1 accounting start packet, 1 accounting stop. User-Name, CalledStationdId, CallingStationId attributes are missing.
Can anyone: 1) confirm this behaviour? 2) tell me which one is correct? Thank you for your assistance in this matter.
Hi!
In our organization there are many subnets with public-ip-adresses that
are behind stateful-firewalls that prevent incoming connections from
outside. If the clients are in two different protected subnets, they
won't be able to communicate without an rtpproxy.
Unfortunately since there is no NAT involved, the nat_uac_test() won't
be useful. Is there any other way for the server to detect that an
rtpproxy has to be used? Is there a way for the clients to detect it and
report it to the server?
Thanks in advance,
--leo
--
-----------------------------------------------------------------------
Alexander.Bergolth (at) wu-wien.ac.at Fax: +43-1-31336-906050
Zentrum fuer Informatikdienste - Wirtschaftsuniversitaet Wien - Austria
I need to block calls that they start with number 0.
i did this, but it`s not OK:
if (uri=~"^sip:[1-9]*@.*") {
rewritehost("10.0.0.10");
log("access ok");
route(1);
break;
};
if (uri=~"^sip:0[1-9]*@.*") {
log("access deny");
break;
};
How can i do this?
Hi,
I have configured two SIP domains using OpenSER v 1.1.1 with authentication
(digest authentication) and TLS support. Each domain has clients (UAC)
running minisip (3220) with TLS and certificates configured. When there is a
call between a user from one domain to a user in the other domain, the SIP
communications between minisip clients and their corresponding OpenSER
proxies is done via TLS (port 5061/TCP), however, the SIP communication
between the two OpenSER proxies is still done via UDP (port 5060/UDP).
The TLS configuration in both servers is as follows:
disable_tls = 0
listen = tls:192.168.1.10:5061
tls_verify_server = 1
tls_verify_client = 1
tls_require_client_certificate = 1
tls_method = TLSv1
tls_certificate = "/etc/openser/tls/sipdA/sipdA-cert.pem"
tls_private_key = "/etc/openser/tls/sipdA/sipdA-privkey.pem"
tls_ca_list = "/etc/openser/tls/sipdA/sipdA-calist.pem"
Any ideas or suggestions regarding how to enable SIPS (TLS) between OpenSER
SIP proxies?
Thanks.
JB74
_________________________________________________________________
Live Search, for accurate results! http://www.live.nl