# Parameters

## `default_expires` (integer)

If the processed message contains neither Expires HFs nor expires contact parameters, this value will be used for newly created usrloc records. The parameter contains number of second to expire (for example use 3600 for one hour).

Default value is 3600.

### Set `default_expires` parameter

    ...
    modparam("registrar", "default_expires", 1800)
    ...

## `min_expires` (integer)

The minimum expires value of a Contact, values lower than this minimum will be automatically set to the minimum. Value 0 disables the checking.

Default value is 60.

### Set `min_expires` parameter

    ...
    modparam("registrar", "min_expires", 60)
    ...

## `max_expires` (integer)

The maximum expires value of a Contact, values higher than this maximum will be automatically set to the maximum. Value 0 disables the checking.

Default value is 0.

### Set `max_expires` parameter

    ...
    modparam("registrar", "max_expires", 120)
    ...

## `default_q` (integer)

The parameter represents default q value for new contacts. Because ser doesn't support float parameter types, the value in the parameter is divided by 100 and stored as float. For example, if you want default_q to be 0.38, use value 38 here.

Default value is 0.

### Set `default_q` parameter

    ...
    modparam("registrar", "default_q", 100)
    ...

## `append_branches` (integer)

The parameter controls how lookup function processes multiple contacts. If there are multiple contacts for the given username in usrloc and this parameter is set to 1, Request-URI will be overwritten with the highest-q rated contact and the rest will be appended to sip_msg structure and can be later used by tm for forking. If the parameter is set to 0, only Request-URI will be overwritten with the highest-q rated contact and the rest will be left unprocessed.

Default value is 1.

### Set `append_branches` parameter

    ...
    modparam("registrar", "append_branches", 0)
    ...

## `case_sensitive` (integer)

This parameter was removed (obsolete since ser 2.0).

If set to 1 then AOR comparison will be case sensitive, if set to 0 then AOR comparison will be case insensitive--This is recommended.

Default value is 0.

### Set `case_sensitive` parameter

    ...
    modparam("registrar", "case_sensitive", 1)
    ...

## `desc_time_order` (integer)

This parameter was removed (obsolete since ser 2.0).

If set to 1 then all contacts will be ordered in descending modification time order. In this case the most recently updated/created contact will be used.

Default value is 0.

### Set `desc_time_order` parameter

    ...
    modparam("registrar", "desc_time_order", 1)
    ...

## `received_avp` (integer)

Registrar will store the value of the AVP configured by this parameter in the received column in the user location database. It will leave the column empty if the AVP is empty. The AVP should contain a SIP URI consisting of the source IP, port, and protocol of the REGISTER message being processed.

The value of this parameter should be the same as the value of corresponding parameter of nathelper module.

Default value is 42.

### Set `received_avp` parameter

    ...
    modparam("registrar", "received_avp", 43)
    ...

## `received_param` (integer)

The name of the parameter that will be appended to Contacts of 200 OK when the received URI was set by nathelper module.

Default value is "received".

### Set `received_param` parameter

    ...
    modparam("registrar", "received_param", "rcv")
    ...

## `max_contacts` (integer)

The parameter can be used to limit the number of contacts per AOR (Address of Record) in the user location database. Value 0 disables the check.

Default value is 0.

### Set `max_contacts` parameter

    ...
    # Allow no more than 10 contacts per AOR
    modparam("registrar", "max_contacts", 10)
    ...

## `retry_after` (integer)

The registrar can generate 5xx reply to REGISTER in various situations. It can, for example, happen when the `max_contacts` parameter is set and the processing of REGISTER request would exceed the limit. In this case the registrar would generate "503 Service Unavailable" response.

If you want to add the Retry-After header field in 5xx replies, set this parameter to a value grater than zero (0 means do not add the header field). See section 20.33 of RFC3261 for more details.

Default value is 0 (disabled).

### Set `retry_after` parameter

    ...
    modparam("registrar", "retry_after", 30)
    ...

## `save_nat_flag` (flagname or integer)

The contact will be marked as behind the NAT if this flag is set before calling one of registrar save*() functions.

See also `load_nat_flag`.

The default value is 4 (flag number 4).

### Set `save_nat_flag` parameter

    flags FLAG_NAT;
    ...
    modparam("registrar", "save_nat_flag", "FLAG_NAT")
    ...
    route{
    ...
    	if (nat_uac_test("19"))
    		setflag(FLAG_NAT);
    ...
    }

## `load_nat_flag` (flagname or integer)

This flag will be set by the registrar lookup*() functions if the contact was marked as behind the NAT during its registration.

See also `save_nat_flag`.

The default value is 4 (flag number 4).

### Set `load_nat_flag` parameter

    flags FLAG_NAT;
    ...
    modparam("registrar", "load_nat_flag", "FLAG_NAT")
    ...
    route{
    ...
    	if (lookup_contacts("location")) {
    		if (isflagset(FLAG_NAT)){
    			log(1, "natted contact");
    			# use rtpproxy a.s.o
    		}
    ...
    	}
    ...
    }

## `trust_received_flag` (flagname or integer)

If this flag is set, the received information added to the REGISTER contacts on another machine (e.g. upstream proxy or replication peer) by the `fix_nated_register()` function from the nathelper module (ser version, under modules_s/) is trusted. If it is not set, it will be ignored.

It is especially useful in REGISTER replication scenarios of registrars behind a transparent load balancer (one IP) or a proxy / load balancer that can make use of the original received information (in this case combined with `received_to_uri`).

A contact with received information looks like: <sip:foo@10.0.0.3:5060>;received="sip:1.2.3.4:3412;transport=TCP;dstip=4.5.6.7;dstport=5060".

Besides the normal flags values (flag names or positive integers), there are 2 special integer values: -1 and -2. If `trust_received_flag` is set to -1 it is equivalent with disabling it globally (no contact "received" parameter will be trusted, they will be all ignored). If set to -2 all the contact "received" parameters will be trusted.

See also `fix_nated_register()` in ser nathelper version (modules_s/nathelper).

The default value is -2 (always trust received), due to config compatibility reasons with older ser versions.

### Set `trust_received_flag` parameter

    flags FLAG_REPLICATED;
    ...
    modparam("registrar", "trust_received_flag", "FLAG_REPLICATED")
    ...
    route{
    ...
    	if (dst_ip==224.0.1.75 && method == "REGISTER") {
    		# REGISTER replicated on multicast (trusted)
    		setflag(FLAG_REPLICATED);
    		save_mem_nr("location");
    ...
    	}
    ...
    }

## `received_to_uri` (boolean)

If set the lookup*() functions will add a contact received information to the uri, instead of using the contact received information as a destination for the message.

The resulting message uri will look like: <sip:contact>;received="sip:src_ip:src_port;transport=proto;dstip=iface_ip;dstport=iface_port".

Is is useful when the registrar is behind some other proxy (e.g. load balancer) and using Path is not desired. In this case the outer proxy would have to look at the message uri, remove the "received" parameter from the uri and use it as destination for the message.

The default value is 0 (off).

### Set `received_to_uri` parameter

    ...
    modparam("registrar", "received_to_uri", 1)
    # example uri for a message received on 1.2.3.4:5060 from 192.168.1.1:5060:
    # <sip:foo@10.0.0.3>;received="sip:192.168.1.1:5060;dstip=1.2.3.4;dstport=5060"

## `reply_code_attr` (avp name)

If one of the save*() functions that do not send a reply is used (`save_contacts_no_reply()`, `save_noreply()` or `save_mem_nr()`), an AVP with the given name will be set to the code of the reply that should be send by other means.

See also `reply_reason_attr` and `contact_attr`.

The default value is "$code".

### Set `reply_code_attr`, `reply_reason_attr` parameters and `contact_attr`

    modparam("registrar", "reply_code_attr", "$repl_code")
    modparam("registrar", "reply_reason_attr", "$repl_reason")
    modparam("registrar", "contact_attr", "$contact")
    ...
    route{
    ...
    	if (!save_noreply("location")) {
    		append_to_reply("$contact");
    		sl_send_reply($reply_code, $repl_reason);
    	}
    ...
    }

## `reply_reason_attr` (avp name)

See `reply_code_attr` above.

The default value is "$reason".

## `contact_attr` (avp name)

See `reply_code_attr` above.

The default value is "$contact".

## `aor_attr` (avp name)

If set to an AVP name, the AOR will be taken from this AVP, instead of the message "To:" header (when using one of the save*() functions).

The default value is "$aor".

### Set `aor_attr`

    modparam("registrar", "aor_attr", "$my_aor")
    ...
    route{
    ...
    	if (src_ip==1.2.3.4)
    		$my_aor=@msg.header["From"];
    	save("location");
    ...
    }

## `server_id_attr` (avp name)

If set to an AVP name, the server ID associated to the contact will be set to the AVP value. If not set or the AVP is not found, the server ID will be set to the `server_id` of the current server.

The default value is "$server_id".

See also `server_id` (core parameter).

### Set `server_id_attr`

    ...
    modparam("registrar", "server_id_attr", "$remote_server_id")
    ...
    route{
    ...
    	if (dst_ip==224.0.1.75 && method == "REGISTER") {
    		# REGISTER replicated on multicast, use the originator server_id
    		# (saved in the custom SER-Server-ID header)
    		$remote_server_id = @msg.header["SER-Server-ID"];
    		setflag(FLAG_REPLICATED);
    		save_mem_nr("location");
    ...
    	}
    ...
    }