Home PC Games Linux Windows Database Network Programming Server Mobile  
           
  Home \ Server \ OpenSIPS offline messaging feature set     - Using Linux command line and execute PHP code (Programming)

- Java Cookie Comments (Programming)

- Linux system - The understanding cpu load (Linux)

- HTML5 Application Cache (Programming)

- How to install Virtualbox 4.3.20 in Ubuntu 14.04 (Linux)

- Configuring Eclipse Note Templates (Linux)

- The difference between Objective-C language nil, Nil, NULL, NSNull (Programming)

- NaSC using simple mathematical operations on Ubuntu and Elementary OS (Linux)

- To configure Samba to share files with Windows under CentOS (Linux)

- Let Markdown code syntax highlighting and support Django1.6 (Linux)

- How common Linux automation tasks (Server)

- Ubuntu Control Panel to resolve network-manager icon display issue (Linux)

- Install Mac OS X 10.9 systems VMware10 (Linux)

- Docker + Nginx + Tomcat7 simple load balancing configuration (Server)

- Using VMware vSphere Client Linux virtual machine installation CentOS6.4 system (Linux)

- How do I upgrade to Ubuntu 15.04 (Beta) (Linux)

- ORA-12545: Connection failed because the target host or object does not exist (Database)

- Oracle 11g 10g induced into error (Database)

- Linux to achieve a simple cp command (Linux)

- Parameters of the extra port MySQL 5.6 (Database)

 
         
  OpenSIPS offline messaging feature set
     
  Add Date : 2017-03-08      
         
         
         
  In accordance with the requirements of the project, you need OpenSIPS offline feature, the configuration process will now be recorded for later use.

OpenSIPS offline message feature relies on msilo module (http://www.opensips.org/html/docs/modules/1.11.x/msilo.html)

Modify the configuration file opensips.cfg add OpenSIPS

loadmodule "msilo.so"
# Load module msilo
modparam ( "msilo", "db_table", "silo")
# Configure offline message storage table silo
modparam ( "msilo", "db_url", "mysql: // opensips: opensipsrw @ localhost / opensips")
# Metabase Path
modparam ( "msilo", "add_date", 1)
# Configure whether to display [offline message + Time]
modparam ( "msilo", "content_type_hdr", "Content-Type: text / plain \ r \ n")
# Configure storage type

# Note the following period:
/ * If (! (Is_method ( "REGISTER"))) {
                if (from_uri == myself)
                {
                        # Authenticate if from local subscriber
                        # Authenticate all initial non-REGISTER request that pretend to be
                        # Generated by local subscriber (domain from FROM URI is local)
                        if (! proxy_authorize ( "", "subscriber")) {
                                proxy_challenge ( "", "0");
                                exit;
                        }
                        if (! db_check_from ()) {
                                sl_send_reply ( "403", "Forbidden auth ID");
                                exit;
                        }
                        consume_credentials ();
                        # Caller authenticated
                } Else {
                        # If caller is not local, then called number must be local
                        if (! uri == myself) {
                                send_reply ( "403", "Rely forbidden");
                                exit;
                        }
                }
        }
* /
  
# Modify this
        if (is_method ( "REGISTER"))
        {
  
                # Authenticate the REGISTER requests
                if (! www_authorize ( "", "subscriber"))
                {
                        www_challenge ( "", "0");
                        exit;
                }
  
                if (! db_check_to ())
                {
                        sl_send_reply ( "403", "Forbidden auth ID");
                        exit;
                }
  
                if (0) setflag (TCP_PERSISTENT);
  
                if (! save ( "location"))
                        sl_reply_error ();
                # Increased portion --start
                if (m_dump ()) {
                        log ( "MSILO: offline message dumped \ n");
                } Else {
                        log ( "MSILO: no offline message dumped \ n");
                }
                # Increased portion --end
                exit;
        }
  
  
 This modification #
        if (! lookup ( "location", "m")) {
                if (! db_does_uri_exist ()) {
                        send_reply ( "420", "Bad Extension");
                        exit;
                }
  
                # Start editing here
                if (! t_newtran ()) {
                        sl_reply_error ();
                        exit;
                }
                # The following is a partial increase
                if (! method == "MESSAGE")
                {
                        if (! t_reply ( "404", "Not found"))
                        {
                                sl_reply_error ();
                        };
                        exit;
                };
                log ( "MSILO: Message received -> storing using MSILO \ n");
                if (m_store ( "$ ru")) {
                        log ( "MSILO: offline message stored \ n");
                        if (! t_reply ( "202", "Accepted")) {
                                sl_reply_error ();
                        };
                } Else {
                        log ( "MSILO: offline message NOT stroed \ n");
                        if (! t_reply ( "503", "Service Unavailable")) {
                                sl_reply_error ();
                        };
                };
                exit;
        }
        t_on_failure ( "1"); # sentence increased
        if (isbflagset (NAT)) setflag (NAT);
        
# In the last increase in the configuration file:
failure_route [1] {
    # Forwarding failed - check if the request was a MESSAGE
    if (! method == "MESSAGE")
    {
        exit;
    };
  
    log (1, "MSILO: the downstream UA does not support MESSAGEs \ n");
    # We have changed the R-URI with the contact address, ignore it now
    if (m_store ( "$ ou"))
    {
        log ( "MSILO: offline message stored \ n");
        t_reply ( "202", "Accepted");
    } Else {
        log ( "MSILO: offline message NOT stored \ n");
        t_reply ( "503", "Service Unavailable");
    };
}

#
# OpenSIPS residential configuration script
# By OpenSIPS Solutions < team@opensips-solutions.com>
#
# This script was generated via "make menuconfig", from
# The "Residential" scenario.
# You can enable / disable more features / functionalities by
# Re-generating the scenario with different options. #
#
# Please refer to the Core CookBook at:
# Http://www.opensips.org/Resources/DocsCookbooks
# For a explanation of possible statements, functions and parameters.
#

####### Global Parameters #########

debug = 3
log_stderror = no
log_facility = LOG_LOCAL0

fork = yes
children = 4

/ * Uncomment the following lines to enable debugging * /
# Debug = 6
# Fork = no
# Log_stderror = yes

/ * Uncomment the next line to enable the auto temporary blacklisting of
  not available destinations (default disabled) * /
# Disable_dns_blacklist = no

/ * Uncomment the next line to enable IPv6 lookup after IPv4 dns
  lookup failures (default disabled) * /
# Dns_try_ipv6 = yes

/ * Comment the next line to enable the auto discovery of local aliases
  based on revers DNS on IPs * /
auto_aliases = no

listen = udp: eth0: 5060 # CUSTOMIZE ME

# Disable_tcp = yes

# Disable_tls = yes

####### Modules Section ########

#set module path
mpath = "/ data / opensips1.11.4 / lib64 / opensips / modules /"

#### SIGNALING module
loadmodule "signaling.so"

#### StateLess module
loadmodule "sl.so"

#### Transaction Module
loadmodule "tm.so"
modparam ( "tm", "fr_timeout", 5)
modparam ( "tm", "fr_inv_timeout", 30)
modparam ( "tm", "restart_fr_on_each_reply", 0)
modparam ( "tm", "onreply_avp_mode", 1)

#### Record Route Module
loadmodule "rr.so"
/ * Do not append from tag to the RR (no need for this script) * /
modparam ( "rr", "append_fromtag", 0)

#### MAX ForWarD module
loadmodule "maxfwd.so"

#### SIP MSG OPerationS module
loadmodule "sipmsgops.so"

#### FIFO Management Interface
loadmodule "mi_fifo.so"
modparam ( "mi_fifo", "fifo_name", "/ tmp / opensips_fifo")
modparam ( "mi_fifo", "fifo_mode", 0666)

#### URI module
loadmodule "uri.so"
modparam ( "uri", "use_uri_table", 0)
modparam ( "uri", "db_url", "mysql: // opensips: opensipsrw @ localhost / opensips")

loadmodule "msilo.so"
modparam ( "msilo", "db_table", "silo")
modparam ( "msilo", "db_url", "mysql: // opensips: opensipsrw @ localhost / opensips")
modparam ( "msilo", "add_date", 1)
modparam ( "msilo", "content_type_hdr", "Content-Type: text / plain \ r \ n")

#### MYSQL module
loadmodule "db_mysql.so"

#### USeR LOCation module
loadmodule "usrloc.so"
modparam ( "usrloc", "nat_bflag", "NAT")
modparam ( "usrloc", "db_mode", 2)
modparam ( "usrloc", "db_url",
    "Mysql: // opensips: opensipsrw @ localhost / opensips") # CUSTOMIZE ME

#### REGISTRAR module
loadmodule "registrar.so"
modparam ( "registrar", "tcp_persistent_flag", "TCP_PERSISTENT")
modparam ( "registrar", "received_avp", "$ avp (received_nh)")
/ * Uncomment the next line not to allow more than 10 contacts per AOR * /
#modparam ( "registrar", "max_contacts", 10)

#### ACCounting module
loadmodule "acc.so"
/ * What special events should be accounted? * /
modparam ( "acc", "early_media", 0)
modparam ( "acc", "report_cancels", 0)
/ * By default we do not adjust the direct of the sequential requests.
  if you enable this parameter, be sure the enable "append_fromtag"
  in "rr" module * /
modparam ( "acc", "detect_direction", 0)
modparam ( "acc", "failed_transaction_flag", "ACC_FAILED")
/ * Account triggers (flags) * /
modparam ( "acc", "db_flag", "ACC_DO")
modparam ( "acc", "db_missed_flag", "ACC_MISSED")
modparam ( "acc", "db_url",
    "Mysql: // opensips: opensipsrw @ localhost / opensips") # CUSTOMIZE ME

#### AUTHentication modules
loadmodule "auth.so"
loadmodule "auth_db.so"
modparam ( "auth_db", "calculate_ha1", no)
modparam ( "auth_db", "password_column", "ha1")
modparam ( "auth_db", "db_url",
    "Mysql: // opensips: opensipsrw @ localhost / opensips") # CUSTOMIZE ME
modparam ( "auth_db", "load_credentials", "")

#### ALIAS module
loadmodule "alias_db.so"
modparam ( "alias_db", "db_url",
    "Mysql: // opensips: opensipsrw @ localhost / opensips") # CUSTOMIZE ME

#### DIALOG module
loadmodule "dialog.so"
modparam ( "dialog", "dlg_match_mode", 1)
modparam ( "dialog", "default_timeout", 21600) # 6 hours timeout
modparam ( "dialog", "db_mode", 2)
modparam ( "dialog", "db_url",
    "Mysql: // opensips: opensipsrw @ localhost / opensips") # CUSTOMIZE ME

#### NAT modules
loadmodule "nathelper.so"
modparam ( "nathelper", "natping_interval", 10)
modparam ( "nathelper", "ping_nated_only", 1)
modparam ( "nathelper", "received_avp", "$ avp (received_nh)")

loadmodule "rtpproxy.so"
modparam ( "rtpproxy", "rtpproxy_sock", "udp: localhost: 12221") # CUSTOMIZE ME

####### Routing Logic ########

# Main request routing logic

route {
    force_rport ();
    if (nat_uac_test ( "23")) {
        if (is_method ( "REGISTER")) {
            fix_nated_register ();
            setbflag (NAT);
        } Else {
            fix_nated_contact ();
            setflag (NAT);
        }
    }
   
    if (! mf_process_maxfwd_header ( "10")) {
        sl_send_reply ( "483", "Too Many Hops");
        exit;
    }

    if (has_totag ()) {
        # Sequential request withing a dialog should
        # Take the path determined by record-routing
        if (loose_route ()) {
            
            # Validate the sequential request against dialog
            if ($ DLG_status! = NULL &&! validate_dialog ()) {
                xlog ( "In-Dialog $ rm from $ si (callid = $ ci) is not valid according to dialog \ n");
                ## Exit;
            }
            
            if (is_method ( "BYE")) {
                setflag (ACC_DO); # do accounting ...
                setflag (ACC_FAILED); # ... even if the transaction fails
            } Else if (is_method ( "INVITE")) {
                # Even if in most of the cases is useless, do RR for
                # Re-INVITEs alos, as some buggy clients do change route set
                # During the dialog.
                record_route ();
            }

            if (check_route_param ( "nat = yes"))
                setflag (NAT);

            # Route it out to whatever destination was set by loose_route ()
            # In $ du (destination URI).
            route (relay);
        } Else {
            
            if (is_method ( "ACK")) {
                if (t_check_trans ()) {
                    # Non loose-route, but stateful ACK; must be an ACK after
                    # A 487 or e.g. 404 from upstream server
                    t_relay ();
                    exit;
                } Else {
                    # ACK without matching transaction ->
                    # Ignore and discard
                    exit;
                }
            }
            sl_send_reply ( "404", "Not here");
        }
        exit;
    }

    # CANCEL processing
    if (is_method ( "CANCEL"))
    {
        if (t_check_trans ())
            t_relay ();
        exit;
    }

    t_check_trans ();

/ * If (! (Is_method ( "REGISTER"))) {
        
        if (from_uri == myself)
        
        {
            
            # Authenticate if from local subscriber
            # Authenticate all initial non-REGISTER request that pretend to be
            # Generated by local subscriber (domain from FROM URI is local)
            if (! proxy_authorize ( "", "subscriber")) {
                proxy_challenge ( "", "0");
                exit;
            }
            if (! db_check_from ()) {
                sl_send_reply ( "403", "Forbidden auth ID");
                exit;
            }
        
            consume_credentials ();
            # Caller authenticated

        } Else {
            # If caller is not local, then called number must be local
            
            if (! uri == myself) {
                send_reply ( "403", "Rely forbidden");
                exit;
            }
        }

    }

* /

    # Preloaded route checking
    if (loose_route ()) {
        xlog ( "L_ERR",
        "Attempt to route with preloaded Route's [$ fu / $ tu / $ ru / $ ci]");
        if (! is_method ( "ACK"))
            sl_send_reply ( "403", "Preload Route denied");
        exit;
    }

    # Record routing
    if (is_method (! "REGISTER | MESSAGE"))
        record_route ();

    # Account only INVITEs
    if (is_method ( "INVITE")) {
        
        # Create dialog with timeout
        if (! create_dialog ( "B")) {
            send_reply ( "500", "Internal Server Error");
            exit;
        }
        
        setflag (ACC_DO); # do accounting
    }

    
    if (! uri == myself) {
        append_hf ( "P-hint: outbound \ r \ n");
        
        route (relay);
    }

    # Requests for my domain
    
    if (is_method ( "PUBLISH | SUBSCRIBE"))
    {
        sl_send_reply ( "503", "Service Unavailable");
        exit;
    }

    if (is_method ( "REGISTER"))
    {
        
        # Authenticate the REGISTER requests
        if (! www_authorize ( "", "subscriber"))
        {
            www_challenge ( "", "0");
            exit;
        }
        
        if (! db_check_to ())
        {
            sl_send_reply ( "403", "Forbidden auth ID");
            exit;
        }

        if (0) setflag (TCP_PERSISTENT);

        if (! save ( "location"))
            sl_reply_error ();

                if (m_dump ()) {
                        log ( "MSILO: offline message dumped \ n");
                } Else {
                        log ( "MSILO: no offline message dumped \ n");
                }

      exit;
    }

    if ($ rU == NULL) {
        # Request with no Username in RURI
        sl_send_reply ( "484", "Address Incomplete");
        exit;
    }

    # Apply DB based aliases
    alias_db_lookup ( "dbaliases");

 
    # Do lookup with method filtering
    if (! lookup ( "location", "m")) {
        if (! db_does_uri_exist ()) {
            send_reply ( "420", "Bad Extension");
            exit;
        }

      if (! t_newtran ()) {
            sl_reply_error ();
            exit;
        }
        if (! method == "MESSAGE")
        {
                    if (! t_reply ( "404", "Not found"))
                    {
                            sl_reply_error ();
                      };
                    exit;
                };
        log ( "MSILO: Message received -> storing using MSILO \ n");
        if (m_store ( "$ ru")) {
            log ( "MSILO: offline message stored \ n");
            if (! t_reply ( "202", "Accepted")) {
                sl_reply_error ();
            };
        } Else {
            log ( "MSILO: offline message NOT stroed \ n");
            if (! t_reply ( "503", "Service Unavailable")) {
                sl_reply_error ();
            };
        };
        exit;
    }
    t_on_failure ( "1");

  if (isbflagset (NAT)) setflag (NAT);

    # When routing via usrloc, log the missed calls also
    setflag (ACC_MISSED);
    route (relay);
}

route [relay] {
    # For INVITEs enable some additional helper routes
    if (is_method ( "INVITE")) {
        
        if (isflagset (NAT)) {
            rtpproxy_offer ( "ro");
        }

        t_on_branch ( "per_branch_ops");
        t_on_reply ( "handle_nat");
        t_on_failure ( "missed_call");
    }

    if (isflagset (NAT)) {
        add_rr_param ( "; nat = yes");
        }

    if (! t_relay ()) {
        send_reply ( "500", "Internal Error");
    };
    exit;
}

branch_route [per_branch_ops] {
    xlog ( "new branch at $ ru \ n");
}

onreply_route [handle_nat] {
    if (nat_uac_test ( "1"))
        fix_nated_contact ();
    if (isflagset (NAT))
        rtpproxy_answer ( "ro");
    xlog ( "incoming reply \ n");
}

failure_route [missed_call] {
    if (t_was_cancelled ()) {
        exit;
    }

    # Uncomment the following lines if you want to block client
    # Redirect based on 3xx replies.
    ## If (t_check_status ( "3 [0-9] [0-9]")) {
    ## T_reply ( "404", "Not found");
    ## Exit;
    ##}

}

local_route {
    if (is_method ( "BYE") && $ DLG_dir == "UPSTREAM") {
        
        acc_db_request ( "200 Dialog Timeout", "acc");
        
    }
}

failure_route [1] {
    # Forwarding failed - check if the request was a MESSAGE
    if (! method == "MESSAGE")
    {
        exit;
    };
    
    log (1, "MSILO: the downstream UA does not support MESSAGEs \ n");
    # We have changed the R-URI with the contact address, ignore it now
    if (m_store ( "$ ou"))
    {
        log ( "MSILO: offline message stored \ n");
        t_reply ( "202", "Accepted");
    } Else {
        log ( "MSILO: offline message NOT stored \ n");
        t_reply ( "503", "Service Unavailable");
    };
}
     
         
         
         
  More:      
 
- Use UDEV SCSI Rules configured ASM on Oracle Linux 5 and 6 (Database)
- Docker Build a Java compiler environment (Linux)
- To install Docker under CentOS7 (Linux)
- Git and GitHub use of Eclipse and Android Studio (Programming)
- How to set up HTTPS policies for older browsers (Server)
- Linux directory structure (Linux)
- Using IE can also be easily remotely control the computer (Linux)
- Build Python3.4 + PyQt5.5.1 + Eric6.1.1 development platform under Mac OS X 10.11.1 (Server)
- CentOS ClamAV antivirus package updates (Linux)
- Linux rights management (Linux)
- Ubuntu install Wireshark (Linux)
- Security: set limits on password (Linux)
- Installation CD audio file extraction tool Flacon (Linux)
- Use Epoll develop high-performance application server on Linux (Server)
- Linux firewall anti-hacker disguise malicious attacks (Linux)
- Use the Find command to help you find those files that need to be cleaned (Linux)
- C language programming entry - Common operators (Programming)
- Nginx concerning the location and rewrite applications proxy_pass (Server)
- MongoDB uses aggregate, group, match mysql achieve in having (count (1)> 1) features (Database)
- BusyBox build root file system (Linux)
     
           
     
  CopyRight 2002-2020 newfreesoft.com, All Rights Reserved.