# Introduction and Notations

## Introduction

Selects are read-only functions that can be used in the script and that always return a string value. In the script a select always starts with a '@'. In an expression context a select always evaluates to either a string or undef.

For more informations see http://sip-router.org/wiki/cookbooks/selects/devel.

This document lists all the selects implemented by each module.

## Notations

The following notations are used:

1. @ - all selects always start with '@'.

2. "string" - string type.

3. integer - integer type.

4. [] - Parameter markers. Can be either [integer] or ["string"]. Note that instead of ["string"] one could write .string, e.g.: @foo.bar["string"] is equivalent to @foo.bar.string.

5. {} - denotes an optional parameter. E.g.: @ruri.params{["string"]} means you could use @ruri.params by itself or you could specify an extra parameter: @ruri.params["trasnport"] or @ruri.params.transport.

6. <string> - means the next member is not fixed and can take any string value (it is a string parameter). It is equivalent with ["string"], e.g.: @msg.header.<string> is the same as @msg.header["string"]. It is used only to expose an internal implementation detail (SEL_PARAM_* vs. CONSUME_NEXT_*), but from the script writer point of view it is the same thing.

7. .* - means the select can be followed by a variable number of string parameters. E.g.: @cfg_get.* means that @cfg_get.core.version is a valid usage.

8. * (without a '.' in front) - it means the last member might be a class that might expand further (but the "expansion" is not defined in the same module). E.g. @foo.nameaddr* means that nameaddr is most likely a class that expands further (for example into @foo.nameaddr.uri a.s.o).