"Fossies" - the Fresh Open Source Software Archive

Member "opensips-3.0.1/modules/carrierroute/README" (1 Oct 2019, 44908 Bytes) of package /linux/misc/opensips-3.0.1.tar.gz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "README": 3.0.0_vs_3.0.1.

    1 carrierroute
    2      __________________________________________________________
    3 
    4    Table of Contents
    5 
    6    1. Admin Guide
    7 
    8         1.1. Overview
    9         1.2. Dependencies
   10 
   11               1.2.1. OpenSIPS Modules
   12               1.2.2. External Libraries or Applications
   13 
   14         1.3. Exported Parameters
   15 
   16               1.3.1. db_url (string)
   17               1.3.2. db_table (string)
   18               1.3.3. id_column (string)
   19               1.3.4. carrier_column (string)
   20               1.3.5. scan_prefix_column (string)
   21               1.3.6. domain_column (string)
   22               1.3.7. flags_column (string)
   23               1.3.8. mask_column (string)
   24               1.3.9. prob_column (string)
   25               1.3.10. rewrite_host_column (string)
   26               1.3.11. strip_column (string)
   27               1.3.12. comment_column (string)
   28               1.3.13. carrier_table (string)
   29               1.3.14. rewrite_prefix_column (string)
   30               1.3.15. rewrite_suffix_column (string)
   31               1.3.16. carrier_id_col (string)
   32               1.3.17. carrier_name_col (string)
   33               1.3.18. subscriber_table (string)
   34               1.3.19. subscriber_user_col (string)
   35               1.3.20. subscriber_domain_col (string)
   36               1.3.21. subscriber_carrier_col (string)
   37               1.3.22. config_source (string)
   38               1.3.23. config_file (string)
   39               1.3.24. default_tree (string)
   40               1.3.25. use_domain (int)
   41               1.3.26. fallback_default (int)
   42               1.3.27. db_failure_table (string)
   43               1.3.28. failure_id_column (string)
   44               1.3.29. failure_carrier_column (string)
   45               1.3.30. failure_scan_prefix_column (string)
   46               1.3.31. failure_domain_column (string)
   47               1.3.32. failure_host_name_column (string)
   48               1.3.33. failure_reply_code_column (string)
   49               1.3.34. failure_flags_column (string)
   50               1.3.35. failure_mask_column (string)
   51               1.3.36. failure_next_domain_column (string)
   52               1.3.37. failure_comment_column (string)
   53 
   54         1.4. Exported Functions
   55 
   56               1.4.1. cr_user_carrier(user, domain, dstavp)
   57               1.4.2. cr_route(carrier, domain, prefix_matching,
   58                       rewrite_user, hash_source, dstavp)
   59 
   60               1.4.3. cr_prime_route(carrier, domain,
   61                       prefix_matching, rewrite_user, hash_source,
   62                       dstavp)
   63 
   64               1.4.4. cr_next_domain(carrier, domain,
   65                       prefix_matching, host, reply_code, dstavp)
   66 
   67         1.5. Exported MI Functions
   68 
   69               1.5.1. cr_reload_routes
   70               1.5.2. cr_dump_routes
   71               1.5.3. cr_replace_host
   72               1.5.4. cr_deactivate_host
   73               1.5.5. cr_activate_host
   74               1.5.6. cr_add_host
   75               1.5.7. cr_delete_host
   76 
   77         1.6. Examples
   78         1.7. Installation and Running
   79 
   80               1.7.1. Database setup
   81 
   82    2. Contributors
   83 
   84         2.1. By Commit Statistics
   85         2.2. By Commit Activity
   86 
   87    3. Documentation
   88 
   89         3.1. Contributors
   90 
   91    List of Tables
   92 
   93    2.1. Top contributors by DevScore^(1), authored commits^(2) and
   94           lines added/removed^(3)
   95 
   96    2.2. Most recently active contributors^(1) to this module
   97 
   98    List of Examples
   99 
  100    1.1. Set db_url parameter
  101    1.2. Set db_table parameter
  102    1.3. Set id_column parameter
  103    1.4. Set carrier_column parameter
  104    1.5. Set scan_prefix_column parameter
  105    1.6. Set domain_column parameter
  106    1.7. Set flags_column parameter
  107    1.8. Set mask_column parameter
  108    1.9. Set prob_column parameter
  109    1.10. Set rewrite_host_column parameter
  110    1.11. Set strip_column parameter
  111    1.12. Set comment_column parameter
  112    1.13. Set carrier_table parameter
  113    1.14. Set rewrite_prefix_column parameter
  114    1.15. Set rewrite_suffix_column parameter
  115    1.16. Set id_col parameter
  116    1.17. Set carrier_name_col parameter
  117    1.18. Set subscriber_table parameter
  118    1.19. Set subscriber_user_col parameter
  119    1.20. Set subscriber_domain_col parameter
  120    1.21. Set subscriber_carrier_col parameter
  121    1.22. Set config_source parameter
  122    1.23. Set config_file parameter
  123    1.24. Set default_tree parameter
  124    1.25. Set use_domain parameter
  125    1.26. Set fallback_default parameter
  126    1.27. Set db_failure_table parameter
  127    1.28. Set failure_id_column parameter
  128    1.29. Set failure_carrier_column parameter
  129    1.30. Set failure_scan_prefix_column parameter
  130    1.31. Set failure_domain_column parameter
  131    1.32. Set failure_host_name_column parameter
  132    1.33. Set failure_reply_code_column parameter
  133    1.34. Set failure_flags_column parameter
  134    1.35. Set failure_mask_column parameter
  135    1.36. Set failure_next_domain_column parameter
  136    1.37. Set failure_comment_column parameter
  137    1.38. cr_replace_host usage
  138    1.39. cr_deactivate_host usage
  139    1.40. cr_activate_host usage
  140    1.41. cr_add_host usage
  141    1.42. cr_delete_host usage
  142    1.43. Configuration example - Routing to default tree
  143    1.44. Configuration example - Routing to user tree
  144    1.45. Configuration example - module configuration
  145    1.46. Example database content - carrierroute table
  146    1.47. Example database content - simple carrierfailureroute
  147           table
  148 
  149    1.48. Example database content - more complex
  150           carrierfailureroute table
  151 
  152    1.49. Example database content - route_tree table
  153    1.50. Necessary extensions for the user table
  154 
  155 Chapter 1. Admin Guide
  156 
  157 1.1. Overview
  158 
  159    A module which provides routing, balancing and blacklisting
  160    capabilities.
  161 
  162    The module provides routing, balancing and blacklisting
  163    capabilities. It reads routing entries from a database source
  164    or from a config file at OpenSIPS startup. It can uses one
  165    routing tree (for one carrier), or if needed for every user a
  166    different routing tree (unique for each carrier) for number
  167    prefix based routing. It supports several route tree domains,
  168    e.g. for failback routes or different routing rules for VoIP
  169    and PSTN targets.
  170 
  171    Based on the tree, the module decides which number prefixes are
  172    forwarded to which gateway. It can also distribute the traffic
  173    by ratio parameters. Furthermore, the requests can be
  174    distributed by a hash funcion to predictable destinations. The
  175    hash source is configurable, two different hash functions are
  176    available.
  177 
  178    This modules scales up to more than a few million users, and is
  179    able to handle more than several hundred thousand routing table
  180    entries. It should be able to handle more, but this is not that
  181    much tested at the moment. In load balancing scenarios the
  182    usage of the config file mode is recommended, to avoid the
  183    additional complexity that the database driven routing creates.
  184 
  185    Routing tables can be reloaded and edited (in config file mode)
  186    with the MI interface, the config file is updated according the
  187    changes. This is not implemented for the db interface, because
  188    its easier to do the changes directly on the db. But the reload
  189    and dump functions works of course here too.
  190 
  191    Some module functionality is not fully available in the config
  192    file mode, as it is not possible to specify all information
  193    that can be stored in the database tables in the config file.
  194    Further information about these limitations is given in later
  195    sections. For user based routing or LCR you should use the
  196    database mode.
  197 
  198    Basically this module could be used as an replacement for the
  199    lcr and the dispatcher module, if you have certain performance,
  200    flexibility and/or integration requirements that these modules
  201    don't handle properly. But for small installations it probably
  202    make more sense to use the lcr and dispatcher module.
  203 
  204    If you want to use this module in failure routes, then you need
  205    to call “append_branch()” after rewriting the request URI in
  206    order to relay the message to the new target. Its also
  207    supportes the usage of database derived failure routing
  208    descisions with the carrierfailureroute table.
  209 
  210 1.2. Dependencies
  211 
  212 1.2.1. OpenSIPS Modules
  213 
  214    The following module must be loaded before this module:
  215      * a database module, when a database is used as configuration
  216        data source. Only SQL based databases are supported, as
  217        this module needs the capability to issue raw queries. Its
  218        not possible to use the dbtext or db_berkeley module at the
  219        moment.
  220      * The tm module, when you want to use the $T_reply_code
  221        pseudo-variable in the “cr_next_domain” function.
  222 
  223 1.2.2. External Libraries or Applications
  224 
  225    The following libraries or applications must be installed
  226    before running OpenSIPS with this module loaded:
  227      * libconfuse, a configuration file parser library. (
  228        http://www.nongnu.org/confuse/ )
  229 
  230 1.3. Exported Parameters
  231 
  232 1.3.1. db_url (string)
  233 
  234    Url to the database containing the routing data.
  235 
  236    Default value is
  237    “mysql://opensipsro:opensipsro@localhost/opensips”.
  238 
  239    Example 1.1. Set db_url parameter
  240 ...
  241 modparam("carrierroute", "db_url", "dbdriver://username:password@dbhost/
  242 dbname")
  243 ...
  244 
  245 1.3.2. db_table (string)
  246 
  247    Name of the table where the routing data is stored.
  248 
  249    Default value is “carrierroute”.
  250 
  251    Example 1.2. Set db_table parameter
  252 ...
  253 modparam("carrierroute", "db_table", "carrierroute")
  254 ...
  255 
  256 1.3.3. id_column (string)
  257 
  258    Name of the column containing the id identifier.
  259 
  260    Default value is “id”.
  261 
  262    Example 1.3. Set id_column parameter
  263 ...
  264 modparam("carrierroute", "id_column", "id")
  265 ...
  266 
  267 1.3.4. carrier_column (string)
  268 
  269    Name of the column containing the carrier id.
  270 
  271    Default value is “carrier”.
  272 
  273    Example 1.4. Set carrier_column parameter
  274 ...
  275 modparam("carrierroute", "carrier_column", "carrier")
  276 ...
  277 
  278 1.3.5. scan_prefix_column (string)
  279 
  280    Name of column containing the scan prefixes. Scan prefixes
  281    define the matching portion of a phone number, e.g. when we
  282    have the scan prefixes 49721 and 49, the called number is
  283    49721913740, it matches 49721, because the longest match is
  284    taken. If no prefix matches, the number is not routed. To
  285    prevent this, an empty prefix value of “” could be added.
  286 
  287    Default value is “scan_prefix”.
  288 
  289    Example 1.5. Set scan_prefix_column parameter
  290 ...
  291 modparam("carrierroute", "scan_prefix_column", "scan_prefix")
  292 ...
  293 
  294 1.3.6. domain_column (string)
  295 
  296    Name of column containing the rule domain. You can define
  297    several routing domains to have different routing rules. Maybe
  298    you use domain 0 for normal routing and domain 1 if domain 0
  299    failed.
  300 
  301    Default value is “domain”.
  302 
  303    Example 1.6. Set domain_column parameter
  304 ...
  305 modparam("carrierroute", "domain_column", "domain")
  306 ...
  307 
  308 1.3.7. flags_column (string)
  309 
  310    Name of the column containing the flags.
  311 
  312    Default value is “flags”.
  313 
  314    Example 1.7. Set flags_column parameter
  315 ...
  316 modparam("carrierroute", "flags_column", "flags")
  317 ...
  318 
  319 1.3.8. mask_column (string)
  320 
  321    Name of the column containing the flags mask.
  322 
  323    Default value is “mask”.
  324 
  325    Example 1.8. Set mask_column parameter
  326 ...
  327 modparam("carrierroute", "mask_column", "mask")
  328 ...
  329 
  330 1.3.9. prob_column (string)
  331 
  332    Name of column containing probability. The probability value is
  333    used to distribute the traffic between several gateways. Let's
  334    say 70 % of the traffic shall be routed to gateway A, the other
  335    30 % shall be routed to gateway B, we define a rule for gateway
  336    A with a prob value of 0.7 and a rule for gateway B with a prob
  337    value of 0.3.
  338 
  339    If all probabilities for a given prefix, tree and domain don't
  340    add to 100%, the prefix values will be adjusted according the
  341    given prob values. E.g. if three hosts with prob values of 0.5,
  342    0.5 and 0.4 are defined, the resulting probabilities are
  343    35.714, 35.714 and 28.571%. But its better to choose meaningful
  344    values in the first place because of clarity.
  345 
  346    Default value is “prob”.
  347 
  348    Example 1.9. Set prob_column parameter
  349 ...
  350 modparam("carrierroute", "prob_column", "prob")
  351 ...
  352 
  353 1.3.10. rewrite_host_column (string)
  354 
  355    Name of column containing rewrite host value. An empty field
  356    represents a blacklist entry, anything else is put as domain
  357    part into the Request URI of the SIP message.
  358 
  359    Default value is “rewrite_host”.
  360 
  361    Example 1.10. Set rewrite_host_column parameter
  362 ...
  363 modparam("carrierroute", "rewrite_host_column", "rewrite_host")
  364 ...
  365 
  366 1.3.11. strip_column (string)
  367 
  368    Name of the column containing the number of digits to be
  369    stripped of the userpart of an URI before prepending
  370    rewrite_prefix.
  371 
  372    Default value is “strip”.
  373 
  374    Example 1.11. Set strip_column parameter
  375 ...
  376 modparam("carrierroute", "strip_column", "strip")
  377 ...
  378 
  379 1.3.12. comment_column (string)
  380 
  381    Name of the column containing an optional comment (useful in
  382    large routing tables) The comment is also displayed by the fifo
  383    cmd "cr_dump_routes".
  384 
  385    Default value is “description”.
  386 
  387    Example 1.12. Set comment_column parameter
  388 ...
  389 modparam("carrierroute", "comment_column", "description")
  390 ...
  391 
  392 1.3.13. carrier_table (string)
  393 
  394    The name of the table containing the existing carriers,
  395    consisting of the ids and corresponding names.
  396 
  397    Default value is “route_tree”.
  398 
  399    Example 1.13. Set carrier_table parameter
  400 ...
  401 modparam("carrierroute", "carrier_table", "route_tree")
  402 ...
  403 
  404 1.3.14. rewrite_prefix_column (string)
  405 
  406    Name of column containing rewrite prefixes. Here you can define
  407    a rewrite prefix for the localpart of the SIP URI.
  408 
  409    Default value is “rewrite_prefix”.
  410 
  411    Example 1.14. Set rewrite_prefix_column parameter
  412 ...
  413 modparam("carrierroute", "rewrite_prefix_column", "rewrite_prefix")
  414 ...
  415 
  416 1.3.15. rewrite_suffix_column (string)
  417 
  418    Name of column containing rewrite suffixes. Here you can define
  419    a rewrite suffix for the localpart of the SIP URI.
  420 
  421    Default value is “rewrite_suffix”.
  422 
  423    Example 1.15. Set rewrite_suffix_column parameter
  424                             ...
  425 modparam("carrierroute", "rewrite_suffix_column", "rewrite_suffix")
  426                             ...
  427 
  428 1.3.16. carrier_id_col (string)
  429 
  430    The name of the column in the carrier table containing the
  431    carrier id.
  432 
  433    Default value is “id”.
  434 
  435    Example 1.16. Set id_col parameter
  436 ...
  437 modparam("carrierroute", "carrier_id_col", "id")
  438 ...
  439 
  440 1.3.17. carrier_name_col (string)
  441 
  442    The name of the column in the carrier table containing the
  443    carrier name.
  444 
  445    Default value is “carrier”.
  446 
  447    Example 1.17. Set carrier_name_col parameter
  448 ...
  449 modparam("carrierroute", "carrier_name_col", "carrier")
  450 ...
  451 
  452 1.3.18. subscriber_table (string)
  453 
  454    The name of the table containing the subscribers
  455 
  456    Default value is “subscriber”.
  457 
  458    Example 1.18. Set subscriber_table parameter
  459 ...
  460 modparam("carrierroute", "subscriber_table", "subscriber")
  461 ...
  462 
  463 1.3.19. subscriber_user_col (string)
  464 
  465    The name of the column in the subscriber table containing the
  466    usernames.
  467 
  468    Default value is “username”.
  469 
  470    Example 1.19. Set subscriber_user_col parameter
  471 ...
  472 modparam("carrierroute", "subscriber_user_col", "username")
  473 ...
  474 
  475 1.3.20. subscriber_domain_col (string)
  476 
  477    The name of the column in the subscriber table containing the
  478    domain of the subscriber.
  479 
  480    Default value is “domain”.
  481 
  482    Example 1.20. Set subscriber_domain_col parameter
  483 ...
  484 modparam("carrierroute", "subscriber_domain_col", "domain")
  485 ...
  486 
  487 1.3.21. subscriber_carrier_col (string)
  488 
  489    The name of the column in the subscriber table containing the
  490    carrier id of the subscriber.
  491 
  492    Default value is “cr_preferred_carrier”.
  493 
  494    Example 1.21. Set subscriber_carrier_col parameter
  495 ...
  496 modparam("carrierroute", "subscriber_carrier_col", "cr_preferred_carrier
  497 ")
  498 ...
  499 
  500 1.3.22. config_source (string)
  501 
  502    Specifies whether the module loads its config data from a file
  503    or from a database. Possible values are file or db.
  504 
  505    Default value is “file”.
  506 
  507    Example 1.22. Set config_source parameter
  508 ...
  509 modparam("carrierroute", "config_source", "file")
  510 ...
  511 
  512 1.3.23. config_file (string)
  513 
  514    Specifies the path to the config file.
  515 
  516    Default value is “/etc/opensips/carrierroute.conf”.
  517 
  518    Example 1.23. Set config_file parameter
  519 ...
  520 modparam("carrierroute", "config_file", "/etc/opensips/carrierroute.conf
  521 ")
  522 ...
  523 
  524 1.3.24. default_tree (string)
  525 
  526    The name of the carrier tree used per default (if the current
  527    subscriber has no preferred tree)
  528 
  529    Default value is “default”.
  530 
  531    Example 1.24. Set default_tree parameter
  532 ...
  533 modparam("carrierroute", "default_tree", "default")
  534 ...
  535 
  536 1.3.25. use_domain (int)
  537 
  538    When using tree lookup per user, this parameter specifies
  539    whether to use the domain part for user matching or not.
  540 
  541    Default value is “0”.
  542 
  543    Example 1.25. Set use_domain parameter
  544 ...
  545 modparam("carrierroute", "use_domain", 0)
  546 ...
  547 
  548 1.3.26. fallback_default (int)
  549 
  550    This parameter defines the behaviour when using user-based tree
  551    lookup. If the user has a non-existing tree set and
  552    fallback_default is set to 1, the default tree is used.
  553    Otherwise, cr_user_rewrite_uri returns an error.
  554 
  555    Default value is “1”.
  556 
  557    Example 1.26. Set fallback_default parameter
  558 ...
  559 modparam("carrierroute", "fallback_default", 1)
  560 ...
  561 
  562 1.3.27. db_failure_table (string)
  563 
  564    Name of the table where the failure routing data is stored.
  565 
  566    Default value is “carrierfailureroute”.
  567 
  568    Example 1.27. Set db_failure_table parameter
  569 ...
  570 modparam("carrierroute", "db_failure_table", "carrierfailureroute")
  571 ...
  572 
  573 1.3.28. failure_id_column (string)
  574 
  575    Name of the column containing the id identifier.
  576 
  577    Default value is “id”.
  578 
  579    Example 1.28. Set failure_id_column parameter
  580 ...
  581 modparam("carrierroute", "failure_id_column", "id")
  582 ...
  583 
  584 1.3.29. failure_carrier_column (string)
  585 
  586    Name of the column containing the carrier id.
  587 
  588    Default value is “carrier”.
  589 
  590    Example 1.29. Set failure_carrier_column parameter
  591 ...
  592 modparam("carrierroute", "failure_carrier_column", "carrier")
  593 ...
  594 
  595 1.3.30. failure_scan_prefix_column (string)
  596 
  597    Name of column containing the scan prefixes. Scan prexies
  598    define the matching portion of a phone number, e.g. we have the
  599    scan prefixes 49721 and 49, the called number is 49721913740,
  600    it matches 49721, because the longest match is taken. If no
  601    prefix matches, the number is not failure routed. To prevent
  602    this, an empty prefix value of “” could be added.
  603 
  604    Default value is “scan_prefix”.
  605 
  606    Example 1.30. Set failure_scan_prefix_column parameter
  607 ...
  608 modparam("carrierroute", "failure_scan_prefix_column", "scan_prefix")
  609 ...
  610 
  611 1.3.31. failure_domain_column (string)
  612 
  613    Name of column containing the rule domain. You can define
  614    several routing domains to have different routing rules. Maybe
  615    you use domain 0 for normal routing and domain 1 if domain 0
  616    failed.
  617 
  618    Default value is “domain”.
  619 
  620    Example 1.31. Set failure_domain_column parameter
  621 ...
  622 modparam("carrierroute", "failure_domain_column", "domain")
  623 ...
  624 
  625 1.3.32. failure_host_name_column (string)
  626 
  627    Name of the column containing the host name of the last routing
  628    destination.
  629 
  630    Default value is “host_name”.
  631 
  632    Example 1.32. Set failure_host_name_column parameter
  633 ...
  634 modparam("carrierroute", "failure_host_name_column", "host_name")
  635 ...
  636 
  637 1.3.33. failure_reply_code_column (string)
  638 
  639    Name of the column containing the reply code.
  640 
  641    Default value is “reply_code”.
  642 
  643    Example 1.33. Set failure_reply_code_column parameter
  644 ...
  645 modparam("carrierroute", "failure_reply_code_column", "reply_code")
  646 ...
  647 
  648 1.3.34. failure_flags_column (string)
  649 
  650    Name of the column containing the flags.
  651 
  652    Default value is “flags”.
  653 
  654    Example 1.34. Set failure_flags_column parameter
  655 ...
  656 modparam("carrierroute", "failure_flags_column", "flags")
  657 ...
  658 
  659 1.3.35. failure_mask_column (string)
  660 
  661    Name of the column containing the flags mask.
  662 
  663    Default value is “mask”.
  664 
  665    Example 1.35. Set failure_mask_column parameter
  666 ...
  667 modparam("carrierroute", "failure_mask_column", "mask")
  668 ...
  669 
  670 1.3.36. failure_next_domain_column (string)
  671 
  672    Name of the column containing the next routing domain.
  673 
  674    Default value is “next_domain”.
  675 
  676    Example 1.36. Set failure_next_domain_column parameter
  677 ...
  678 modparam("carrierroute", "failure_next_domain_column", "next_domain")
  679 ...
  680 
  681 1.3.37. failure_comment_column (string)
  682 
  683    Name of the column containing an optional comment.
  684 
  685    Default value is “description”.
  686 
  687    Example 1.37. Set failure_comment_column parameter
  688 ...
  689 modparam("carrierroute", "failure_comment_column", "description")
  690 ...
  691 
  692 1.4. Exported Functions
  693 
  694    Previous versions of carrierroute had some more function. All
  695    the old semantics can be achieved by using the few new
  696    functions like this:
  697 cr_rewrite_uri(domain, hash_source)
  698 -> cr_route("default", domain, "$rU", "$rU", hash_source)
  699 
  700 cr_prime_balance_uri(domain, hash_source)
  701 -> cr_prime_route("default", domain, "$rU", "$rU", hash_source)
  702 
  703 cr_rewrite_by_to(domain, hash_source)
  704 -> cr_route("default", domain, "$tU", "$rU", hash_source)
  705 
  706 cr_prime_balance_by_to(domain, hash_source)
  707 -> cr_prime_route("default", domain, "$tU", "$rU", hash_source)
  708 
  709 cr_rewrite_by_from(domain, hash_source)
  710 -> cr_route("default", domain, "$fU", "$rU", hash_source)
  711 
  712 cr_prime_balance_by_from(domain, hash_source)
  713 -> cr_prime_route("default", domain, "$fU", "$rU", hash_source)
  714 
  715 cr_user_rewrite_uri(uri, domain)
  716 -> cr_user_carrier(user, domain, "$avp(tree_avp)")
  717 -> cr_route("$avp(tree_avp)", domain, "$rU", "$rU", "call_id")
  718 
  719 cr_tree_rewrite_uri(tree, domain)
  720 -> cr_route(tree, domain, "$rU", "$rU", "call_id")
  721 
  722 1.4.1.  cr_user_carrier(user, domain, dstavp)
  723 
  724    This function loads the carrier and stores it in an AVP. It
  725    cannot be used in the config file mode, as it needs a mapping
  726    of the given user to a certain carrier. The is derived from a
  727    database entry belonging to the user parameter. This mapping
  728    must be available in the table that is specified in the
  729    “subscriber_table” variable. This data is not cached in memory,
  730    that means for every execution of this function a database
  731    query will be done.
  732 
  733    Meaning of the parameters is as follows:
  734      * user - Name of the user for the carrier tree lookup.
  735        Additional to a string any pseudo-variable could be used as
  736        input.
  737      * domain - Name of the routing domain to be used. Additional
  738        to a string any pseudo-variable could be used as input.
  739      * dstavp - Name of the AVP where to store the carrier id.
  740 
  741 1.4.2.  cr_route(carrier, domain, prefix_matching, rewrite_user,
  742 hash_source, dstavp)
  743 
  744    This function searches for the longest match for the user given
  745    in prefix_matching at the given domain in the given carrier
  746    tree. The Request URI is rewritten using rewrite_user and the
  747    given hash source and algorithm. Returns -1 if there is no data
  748    found or an empty rewrite host on the longest match is found.
  749    Otherwise the rewritten host is stored in the given AVP (if
  750    obmitted, the host is not stored in an AVP). This function is
  751    only usable with rewrite_user and prefix_matching containing a
  752    valid numerical only string. It uses the standard crc32
  753    algorithm to calculate the hash values.
  754 
  755    Meaning of the parameters is as follows:
  756      * carrier - The routing tree to be used. Additional to a
  757        string any pseudo-variable could be used as input.
  758      * domain - Name of the routing domain to be used. Additional
  759        to a string any pseudo-variable could be used as input.
  760      * prefix_matching - User name to be used for prefix matching
  761        in the routing tree. Additional to a string any
  762        pseudo-variable could be used as input.
  763      * rewrite_user - The user name to be used for applying the
  764        rewriting rule. Usually this is the user part of the
  765        request URI. Additional to a string any pseudo-variable
  766        could be used as input.
  767      * hash_source - The hash values of the destination set must
  768        be a contiguous range starting at 1, limited by the
  769        configuration parameter max_targets. Possible values for
  770        hash_source are: call_id, from_uri, from_user, to_uri and
  771        to_user.
  772      * dstavp - Name of the AVP where to store the rewritten host.
  773        This parameter is optional.
  774 
  775 1.4.3.  cr_prime_route(carrier, domain, prefix_matching,
  776 rewrite_user, hash_source, dstavp)
  777 
  778    This function searches for the longest match for the user given
  779    in prefix_matching at the given domain in the given carrier
  780    tree. The Request URI is rewritten using rewrite_user and the
  781    given hash source and algorithm. Returns -1 if there is no data
  782    found or an empty rewrite host on the longest match is found.
  783    Otherwise the rewritten host is stored in the given AVP (if
  784    obmitted, the host is not stored in an AVP). This function is
  785    only usable with rewrite_user and prefix_matching containing a
  786    valid numerical only string. It uses the prime hash algorithm
  787    to calculate the hash values.
  788 
  789    Meaning of the parameters is as follows:
  790      * carrier - The routing tree to be used. Additional to a
  791        string any pseudo-variable could be used as input.
  792      * domain - Name of the routing domain to be used. Additional
  793        to a string any pseudo-variable could be used as input.
  794      * prefix_matching - User name to be used for prefix matching
  795        in the routing tree. Additional to a string any
  796        pseudo-variable could be used as input.
  797      * rewrite_user - The user name to be used for applying the
  798        rewriting rule. Usually this is the user part of the
  799        request URI. Additional to a string any pseudo-variable
  800        could be used as input.
  801      * hash_source - The hash values of the destination set must
  802        be a contiguous range starting at 1, limited by the
  803        configuration parameter max_targets. Possible values for
  804        hash_source are: call_id, from_uri, from_user, to_uri and
  805        to_user.
  806      * dstavp - Name of the AVP where to store the rewritten host.
  807        This parameter is optional.
  808 
  809 1.4.4.  cr_next_domain(carrier, domain, prefix_matching, host,
  810 reply_code, dstavp)
  811 
  812    This function searches for the longest match for the user given
  813    in prefix_matching at the given domain in the given carrier
  814    failure tree. It tries to find a next domain matching the given
  815    host, reply_code and the message flags. The matching is done in
  816    this order: host, reply_code and then flags. The more wildcards
  817    in reply_code and the more bits used in flags, the lower the
  818    priority. Returns -1 if there is no data found or an empty
  819    next_domain on the longest match is found. Otherwise the next
  820    domain is stored in the given AVP. This function is only usable
  821    with prefix_matching containing a valid numerical only string.
  822 
  823    Meaning of the parameters is as follows:
  824      * carrier - The routing tree to be used. Additional to a
  825        string any pseudo-variable could be used as input.
  826      * domain - Name of the routing domain to be used. Additional
  827        to a string any pseudo-variable could be used as input.
  828      * prefix_matching - User name to be used for prefix matching
  829        in the routing tree. Additional to a string any
  830        pseudo-variable could be used as input.
  831      * host - The host name to be used for failure route rule
  832        matching. Usually this is the last tried routing
  833        destination stored in an avp by cr_route. Additional to a
  834        string any pseudo-variable could be used as input.
  835      * reply_code - The reply code to be used for failure route
  836        rule matching. Additional to a string any pseudo-variable
  837        could be used as input.
  838      * dstavp - Name of the AVP where to store the next routing
  839        domain.
  840 
  841 1.5. Exported MI Functions
  842 
  843    All commands understand the "-?" parameter to print a short
  844    help message. The options have to be quoted as one string to be
  845    passed to MI interface. Each option except host and new host
  846    can be wildcarded by * (but only * and not things like "-d
  847    prox*").
  848 
  849 1.5.1. cr_reload_routes
  850 
  851    This command reloads the routing data from the data source.
  852 
  853    Important: When new domains have been added, a restart of the
  854    server must be done, because the mapping of the ids used in the
  855    config script cannot be updated at runtime at the moment. So a
  856    reload could result in a wrong routing behaviour, because the
  857    ids used in the script could differ from the one used
  858    internally from the server. Modifying of already existing
  859    domains is no problem.
  860 
  861 1.5.2. cr_dump_routes
  862 
  863    This command prints the route rules on the command line.
  864 
  865 1.5.3. cr_replace_host
  866 
  867    This command can replace the rewrite_host of a route rule, it
  868    is only usable in file mode. Following options are possible:
  869      * -d - the domain containing the host
  870      * -p - the prefix containing the host
  871      * -h - the host to be replaced
  872      * -t - the new host
  873 
  874    Use the "null" prefix to specify an empty prefix.
  875 
  876    Example 1.38. cr_replace_host usage
  877 ...
  878 opensips-cli -x mi cr_replace_host "-d proxy -p 49 -h proxy1 -t proxy2"
  879 ...
  880 
  881 1.5.4. cr_deactivate_host
  882 
  883    This command deactivates the specified host, i.e. it sets its
  884    status to 0. It is only usable in file mode. Following options
  885    are possible:
  886      * -d - the domain containing the host
  887      * -p - the prefix containing the host
  888      * -h - the host to be deactivated
  889      * -t - the new host used as backup
  890 
  891    When -t (new_host) is specified, the portion of traffic for the
  892    deactivated host is routed to the host given by -t. This is
  893    indicated in the output of dump_routes. The backup route is
  894    deactivated if the host is activated again.
  895 
  896    Use the "null" prefix to specify an empty prefix.
  897 
  898    Example 1.39. cr_deactivate_host usage
  899 ...
  900 opensips-cli -x mi cr_deactivate_host "-d proxy -p 49 -h proxy1"
  901 ...
  902 
  903 1.5.5. cr_activate_host
  904 
  905    This command activates the specified host, i.e. it sets its
  906    status to 1. It is only usable in file mode. Following options
  907    are possible:
  908      * -d - the domain containing the host
  909      * -p - the prefix containing the host
  910      * -h - the host to be activated
  911 
  912    Use the "null" prefix to specify an empty prefix.
  913 
  914    Example 1.40. cr_activate_host usage
  915 ...
  916 opensips-cli -x mi cr_activate_host "-d proxy -p 49 -h proxy1"
  917 ...
  918 
  919 1.5.6. cr_add_host
  920 
  921    This command adds a route rule, it is only usable in file mode.
  922    Following options are possible:
  923      * -d - the domain containing the host
  924      * -p - the prefix containing the host
  925      * -h - the host to be added
  926      * -w - the weight of the rule
  927      * -P - an optional rewrite prefix
  928      * -S - an optional rewrite suffix
  929      * -i - an optional hash index
  930      * -s - an optional strip value
  931 
  932    Use the "null" prefix to specify an empty prefix.
  933 
  934    Example 1.41. cr_add_host usage
  935 ...
  936 opensips-cli -x mi cr_add_host "-d proxy -p 49 -h proxy1 -w 0.25"
  937 ...
  938 
  939 1.5.7. cr_delete_host
  940 
  941    This command delete the specified hosts or rules, i.e. remove
  942    them from the route tree. It is only usable in file mode.
  943    Following options are possible:
  944      * -d - the domain containing the host
  945      * -p - the prefix containing the host
  946      * -h - the host to be added
  947      * -w - the weight of the rule
  948      * -P - an optional rewrite prefix
  949      * -S - an optional rewrite suffix
  950      * -i - an optional hash index
  951      * -s - an optional strip value
  952 
  953    Use the "null" prefix to specify an empty prefix.
  954 
  955    Example 1.42. cr_delete_host usage
  956 ...
  957 opensips-cli -x mi cr_delete_host "-d proxy -p 49 -h proxy1 -w 0.25"
  958 ...
  959 
  960 1.6. Examples
  961 
  962    Example 1.43. Configuration example - Routing to default tree
  963 ...
  964 route {
  965         # route calls based on hash over callid
  966         # choose route domain 0 of the default carrier
  967 
  968         if(!cr_route("default", "0", "$rU", "$rU", "call_id", "crc32")){
  969                 sl_send_reply("403", "Not allowed");
  970         } else {
  971                 # In case of failure, re-route the request
  972                 t_on_failure("1");
  973                 # Relay the request to the gateway
  974                 t_relay();
  975         }
  976 }
  977 
  978 failure_route[1] {
  979         # In case of failure, send it to an alternative route:
  980         if (t_check_status("408|5[0-9][0-9]")) {
  981                 #choose route domain 1 of the default carrier
  982         if(!cr_route("default", "1", "$rU", "$rU", "call_id", "crc32")){
  983                         t_reply("403", "Not allowed");
  984                 } else {
  985                         t_on_failure("2");
  986                         t_relay();
  987                 }
  988         }
  989 }
  990 
  991 failure_route[2] {
  992         # further processing
  993 }
  994 
  995 
  996    Example 1.44. Configuration example - Routing to user tree
  997 ...
  998 route[1] {
  999         cr_user_carrier("$fU", "$fd", "$avp(carrier)");
 1000 
 1001         # just an example domain
 1002         $avp(domain)="start";
 1003         if (!cr_route("$avp(carrier)", "$avp(domain)", "$rU", "$rU",
 1004                         "call_id", "$avp(host)")) {
 1005                 xlog("L_ERR", "cr_route failed\n");
 1006                 exit;
 1007         }
 1008         t_on_failure("1");
 1009                 if (!t_relay()) {
 1010                         sl_reply_error();
 1011         };
 1012 }
 1013 
 1014 failure_route[1] {
 1015         revert_uri();
 1016         if (!cr_next_domain("$avp(carrier)", "$avp(domain)", "$rU",
 1017                         "$avp(host)", "$T_reply_code", "$avp(domain)"))
 1018 {
 1019                 xlog("L_ERR", "cr_next_domain failed\n");
 1020                 exit;
 1021         }
 1022         if (!cr_route("$avp(carrier)", "$avp(domain)", "$rU", "$rU",
 1023                         "call_id", "$avp(host)")) {
 1024                 xlog("L_ERR", "cr_route failed\n");
 1025                 exit;
 1026         }
 1027         t_on_failure("1");
 1028         append_branch();
 1029         if (!t_relay()) {
 1030                 xlog("L_ERR", "t_relay failed\n");
 1031                 exit;
 1032         };
 1033 }
 1034 ...
 1035 
 1036    Example 1.45. Configuration example - module configuration
 1037 
 1038    The following config file specifies within the default carrier
 1039    two domains, each with an prefix that contains two hosts. It is
 1040    not possible to specify another carrier if you use the config
 1041    file as data source.
 1042 
 1043    All traffic will be equally distributed between the hosts, both
 1044    are active. The hash algorithm will working over the [1,2] set,
 1045    messages hashed to one will go to the first host, the other to
 1046    the second one. Don't use a hash index value of zero. If you
 1047    ommit the hash completly, the module gives them a autogenerated
 1048    value, starting from one.
 1049 
 1050    Use the “NULL” prefix to specify an empty prefix in the config
 1051    file. Please note that the prefix is matched against the
 1052    request URI (or to URI), if they did not contain a valid
 1053    numerical URI, no match is possible. So for loadbalancing
 1054    purposes e.g. for your registrars, you should use an empty
 1055    prefix.
 1056 ...
 1057 domain proxy {
 1058    prefix 49 {
 1059      max_targets = 2
 1060       target proxy1.localdomain {
 1061          prob = 0.500000
 1062          hash_index = 1
 1063          status = 1
 1064          comment = "test target 1"
 1065       }
 1066       target proxy2.localdomain {
 1067          prob = 0.500000
 1068          hash_index = 2
 1069          status = 1
 1070          comment = "test target 2"
 1071       }
 1072    }
 1073 }
 1074 
 1075 domain register {
 1076    prefix NULL {
 1077      max_targets = 2
 1078       target register1.localdomain {
 1079          prob = 0.500000
 1080          hash_index = 1
 1081          status = 1
 1082          comment = "test target 1"
 1083       }
 1084       target register2.localdomain {
 1085          prob = 0.500000
 1086          hash_index = 2
 1087          status = 1
 1088          comment = "test target 2"
 1089       }
 1090    }
 1091 }
 1092 ...
 1093 
 1094 1.7. Installation and Running
 1095 
 1096 1.7.1. Database setup
 1097 
 1098    Before running OpenSIPS with carrierroute, you have to setup
 1099    the database table where the module will store the routing
 1100    data. For that, if the table was not created by the
 1101    installation script or you choose to install everything by
 1102    yourself you can use the carrierroute-create.sql SQL script in
 1103    the database directories in the opensips/scripts folder as
 1104    template. Database and table name can be set with module
 1105    parameters so they can be changed, but the name of the columns
 1106    must be as they are in the SQL script. You can also find the
 1107    complete database documentation on the project webpage,
 1108    http://www.opensips.org/html/docs/db/db-schema-devel.html. The
 1109    flags and mask columns have the same function as in the
 1110    carrierfailureroute table. A zero value in the flags and mask
 1111    column means that any message flags will match this rule.
 1112 
 1113    For a minimal configuration either use the config file given
 1114    above, or insert some data into the tables of the module.
 1115 
 1116    Example 1.46. Example database content - carrierroute table
 1117 ...
 1118 +----+---------+--------+-------------+-------+------+---------------+
 1119 | id | carrier | domain | scan_prefix | flags | prob | rewrite_host  |
 1120 +----+---------+--------+-------------+-------+------+---------------+
 1121 | 1  |       1 |      0 | 49          |     0 |  0.5 | de-1.carrier1 |
 1122 | 2  |       1 |      0 | 49          |     0 |  0.5 | de-2.carrier1 |
 1123 | 3  |       1 |      0 | 49          |    16 |    1 | de-3.carrier1 |
 1124 | 4  |       1 |      0 |             |     0 |    1 | gw.carrier1-1 |
 1125 | 5  |       1 |      1 | 49          |     0 |    1 | gw.carrier1-1 |
 1126 | 6  |       1 |      2 |             |     0 |    1 | gw.carrier1-2 |
 1127 | 7  |       1 |      3 |             |     0 |    1 | gw.carrier1-3 |
 1128 | 8  |       2 |      0 | 49          |     0 |  0.5 | de-1.carrier2 |
 1129 | 9  |       2 |      0 | 49          |     0 |  0.5 | de-2.carrier2 |
 1130 | 10 |       2 |      0 |             |     0 |    1 | gw.carrier2   |
 1131 | 11 |       2 |      1 | 49          |     0 |    1 | gw.carrier2   |
 1132 | 12 |       3 |  start | 49          |     0 |    1 | de-gw.default |
 1133 | 13 |       3 |  start |             |     0 |    1 | gw.default    |
 1134 +----+---------+--------+-------------+-------+------+---------------+
 1135 ...
 1136 
 1137    This table contains three routes to two gateways for the “49”
 1138    prefix, and a default route for other prefixes over carrier 2
 1139    and carrier 1. The gateways for the default carrier will be
 1140    used for functions that don't support the user specific carrier
 1141    lookup. The routing rules for carrier 1 and carrier 2 for the
 1142    “49” prefix contains a additional rule with the domain 1, that
 1143    can be used for example as fallback if the gateways in domain 0
 1144    are not reachable. Two more fallback rules (domain 2 and 3) for
 1145    carrier 1 are also supplied to support the functionality of the
 1146    carrierfailureroute table example that is provided in the next
 1147    section. The usage of strings for the domains is also possible,
 1148    for example at carrier 3.
 1149 
 1150    This table provides also a “carrier1” routing rule for the “49”
 1151    prefix, that is only choosen if some message flags are set. If
 1152    this flags are not set, the other two rules are used. The
 1153    “strip”, “mask” and “comment” colums are omitted for brevity.
 1154 
 1155    Example 1.47. Example database content - simple
 1156    carrierfailureroute table
 1157 ...
 1158 +----+---------+--------+---------------+------------+-------------+
 1159 | id | carrier | domain | host_name     | reply_code | next_domain |
 1160 +----+---------+--------+---------------+------------+-------------+
 1161 |  1 |       1 | 0      | gw.carrier1-2 | ...        | 3           |
 1162 |  2 |       1 | 0      | gw.carrier1-3 | ...        | 2           |
 1163 +----+---------+--------+---------------+------------+-------------+
 1164 ...
 1165 
 1166    This table contains two failure routes for the “gw.carrier1-1”
 1167    and “-2” gateways. For any (failure) reply code the respective
 1168    next domain is choosen. After that no more failure routes are
 1169    available, an error will be returned from the “cr_next_domain”
 1170    function. Not all table colums are show here for brevity.
 1171 
 1172    For each failure route domain and carrier that is added to the
 1173    carrierfailureroute table there must be at least one
 1174    corresponding entry in the carrierroute table, otherwise the
 1175    module will not load the routing data.
 1176 
 1177    Example 1.48. Example database content - more complex
 1178    carrierfailureroute table
 1179 ...
 1180 +----+---------+-----------+------------+--------+-----+-------------+
 1181 | id | domain  | host_name | reply_code | flags | mask | next_domain |
 1182 +----+---------+-----------+------------+-------+------+-------------+
 1183 |  1 |      99 |           | 408        |    16 |   16 |             |
 1184 |  2 |      99 | gw1       | 404        |     0 |    0 | 100         |
 1185 |  3 |      99 | gw2       | 50.        |     0 |    0 | 100         |
 1186 |  4 |      99 |           | 404        |  2048 | 2112 | asterisk-1  |
 1187 +----+---------+-----------+------------+-------+------+-------------+
 1188 ...
 1189 
 1190    This table contains four failure routes that shows the usage of
 1191    more advanced features. The first route matches to a 408, and
 1192    to some flag for example that indicates that ringing has
 1193    happened. If this flag is set, there will be no further
 1194    forwarding, because next_domain is empty. In the second and
 1195    third routes are certain gateway errors matched, if this errors
 1196    have occurred, then the next domain will be chosen. The last
 1197    route does forwarding according some flags, e.g. the customer
 1198    came from a certain carrier, and has call-forwarding
 1199    deactivated. In order to use the routing that is specified
 1200    above, a matching carrierroute table must be provided, that
 1201    holds domain entries for this routing rules. Not all table
 1202    colums are show here for brevity.
 1203 
 1204    Example 1.49. Example database content - route_tree table
 1205 ...
 1206 +----+----------+
 1207 | id | carrier  |
 1208 +----+----------+
 1209 |  1 | carrier1 |
 1210 |  2 | carrier2 |
 1211 |  3 | default  |
 1212 +----+----------+
 1213 ...
 1214 
 1215    This table contains the mapping of the carrier id to actual
 1216    names.
 1217 
 1218    For a functional routing the “cr_preferred_carrier” column must
 1219    be added to the subscriber table (or to the table and column
 1220    that you specified as modul parameter) to choose the actual
 1221    carrier for the users.
 1222 
 1223    Example 1.50. Necessary extensions for the user table
 1224 
 1225    Suggested changes:
 1226 ...
 1227 ALTER TABLE subscriber ADD cr_preferred_carrier int(10) default NULL;
 1228 ...
 1229 
 1230 Chapter 2. Contributors
 1231 
 1232 2.1. By Commit Statistics
 1233 
 1234    Table 2.1. Top contributors by DevScore^(1), authored
 1235    commits^(2) and lines added/removed^(3)
 1236      Name DevScore Commits Lines ++ Lines --
 1237    1. Henning Westerholt (@henningw) 126 80 2085 1607
 1238    2. Hardy Kahl 50 3 2713 1360
 1239    3. Jonas Appel 50 1 6240 0
 1240    4. Bogdan-Andrei Iancu (@bogdan-iancu) 29 24 131 154
 1241    5. Vlad Patrascu (@rvlad-patrascu) 21 4 379 753
 1242    6. Razvan Crainea (@razvancrainea) 20 17 95 103
 1243    7. Liviu Chircu (@liviuchircu) 14 10 73 133
 1244    8. Daniel-Constantin Mierla (@miconda) 9 7 34 30
 1245    9. Carsten Bock 3 1 64 15
 1246    10. Bob Atkins 3 1 29 1
 1247 
 1248    All remaining contributors: Julián Moreno Patiño, Ovidiu Sas
 1249    (@ovidiusas), Sergio Gutierrez, Iouri Kharon, UnixDev, Peter
 1250    Lemenkov (@lemenkov), Walter Doekes (@wdoekes), Edson Gellert
 1251    Schubert.
 1252 
 1253    (1) DevScore = author_commits + author_lines_added /
 1254    (project_lines_added / project_commits) + author_lines_deleted
 1255    / (project_lines_deleted / project_commits)
 1256 
 1257    (2) including any documentation-related commits, excluding
 1258    merge commits. Regarding imported patches/code, we do our best
 1259    to count the work on behalf of the proper owner, as per the
 1260    "fix_authors" and "mod_renames" arrays in
 1261    opensips/doc/build-contrib.sh. If you identify any
 1262    patches/commits which do not get properly attributed to you,
 1263    please submit a pull request which extends "fix_authors" and/or
 1264    "mod_renames".
 1265 
 1266    (3) ignoring whitespace edits, renamed files and auto-generated
 1267    files
 1268 
 1269 2.2. By Commit Activity
 1270 
 1271    Table 2.2. Most recently active contributors^(1) to this module
 1272                       Name                   Commit Activity
 1273    1.  Razvan Crainea (@razvancrainea)     Jun 2011 - Sep 2019
 1274    2.  Vlad Patrascu (@rvlad-patrascu)     May 2017 - Apr 2019
 1275    3.  Bogdan-Andrei Iancu (@bogdan-iancu) Dec 2007 - Apr 2019
 1276    4.  Peter Lemenkov (@lemenkov)          Jun 2018 - Jun 2018
 1277    5.  Liviu Chircu (@liviuchircu)         Mar 2014 - Jun 2018
 1278    6.  Julián Moreno Patiño                Feb 2016 - Feb 2016
 1279    7.  Walter Doekes (@wdoekes)            May 2014 - May 2014
 1280    8.  Ovidiu Sas (@ovidiusas)             Jan 2013 - Jan 2013
 1281    9.  UnixDev                             Feb 2009 - Feb 2009
 1282    10. Henning Westerholt (@henningw)      Aug 2007 - Dec 2008
 1283 
 1284    All remaining contributors: Sergio Gutierrez, Iouri Kharon,
 1285    Hardy Kahl, Daniel-Constantin Mierla (@miconda), Edson Gellert
 1286    Schubert, Bob Atkins, Carsten Bock, Jonas Appel.
 1287 
 1288    (1) including any documentation-related commits, excluding
 1289    merge commits
 1290 
 1291 Chapter 3. Documentation
 1292 
 1293 3.1. Contributors
 1294 
 1295    Last edited by: Razvan Crainea (@razvancrainea), Peter Lemenkov
 1296    (@lemenkov), Liviu Chircu (@liviuchircu), Julián Moreno Patiño,
 1297    Bogdan-Andrei Iancu (@bogdan-iancu), Henning Westerholt
 1298    (@henningw), Iouri Kharon, Hardy Kahl, Daniel-Constantin Mierla
 1299    (@miconda), Edson Gellert Schubert, Carsten Bock, Jonas Appel.
 1300 
 1301    Documentation Copyrights:
 1302 
 1303    Copyright © 2007 1&1 Internet AG