A phone profile is basically a list of files that a particular group of phones needs to function. For most phone types there are files that are identical for all phones (firmware, for instance) as well as a configuration file that is specific to individual phones. res_phoneprov breaks these two groups of files into static files and dynamic files, respectively. A sample profile:
[polycom] staticdir => configs/ mime_type => text/xml setvar => CUSTOM_CONFIG=/var/lib/asterisk/phoneprov/configs/custom.cfg static_file => bootrom.ld,application/octet-stream static_file => bootrom.ver,plain/text static_file => sip.ld,application/octet-stream static_file => sip.ver,plain/text static_file => sip.cfg static_file => custom.cfg ${TOLOWER(${MAC})}.cfg => 000000000000.cfg ${TOLOWER(${MAC})}-phone.cfg => 000000000000-phone.cfg config/${TOLOWER(${MAC})} => polycom.xml ${TOLOWER(${MAC})}-directory.xml => 000000000000-directory.xml
A static_file is set by specifying the file name, relative to AST_DATA_DIR/phoneprov. The mime-type of the file can optionally be specified after a comma. If staticdir is set, all static files will be relative to the subdirectory of AST_DATA_DIR/phoneprov specified.
Since phone-specific config files generally have file names based on phone-specifc data,
dynamic filenames in res_phoneprov can be defined with Asterisk dialplan function and
variable substitution. In the above example, ${TOLOWER(${MAC})}.cfg
000000000000.cfg would define a relative URI to be served that matches the format of
MACADDRESS.cfg, all lower case. A request for that file would then point to the template
found at AST_DATA_DIR/phoneprov/000000000000.cfg. The template can be followed by a
comma and mime-type. Notice that the dynamic filename (URI) can contain contain
directories. Since these files are dynamically generated, the config file itself does not
reside on the filesystem-only the template. To view the generated config file, open it
in a web browser. If the config file is XML, Firefox should display it. Some browsers
will require viewing the source of the page requested.
A default mime-type for the profile can be defined by setting mime-type. If a custom variable is required for a template, it can be specified with setvar. Variable substitution on this value is done while building the route list, so ${USERNAME} would expand to the username of the users.conf user that registers the dynamic filename.
NOTE: Any dialplan function that is used for generation of dynamic file names MUST be
loaded before res_phoneprov. Add "preload modulename.so" to
modules.conf for required functions. In the example above, "preload
func_strings.so" would be required.