diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h index 67d2227fa..b8f01a2bd 100644 --- a/include/asterisk/pbx.h +++ b/include/asterisk/pbx.h @@ -50,10 +50,11 @@ extern "C" { #define PRIORITY_HINT -1 /*!< Special Priority for a hint */ -/*! \brief Extension states - \note States can be combined - - \ref AstExtState -*/ +/*! + * \brief Extension states + * \note States can be combined + * \ref AstExtState + */ enum ast_extension_states { AST_EXTENSION_REMOVED = -2, /*!< Extension removed */ AST_EXTENSION_DEACTIVATED = -1, /*!< Extension hint removed */ @@ -67,7 +68,7 @@ enum ast_extension_states { struct ast_context; -struct ast_exten; +struct ast_exten; struct ast_include; struct ast_ignorepat; struct ast_sw; @@ -113,7 +114,7 @@ struct ast_switch { AST_LIST_ENTRY(ast_switch) list; const char *name; /*!< Name of the switch */ const char *description; /*!< Description of the switch */ - + ast_switch_f *exists; ast_switch_f *canmatch; ast_switch_f *exec; @@ -129,20 +130,23 @@ struct ast_timing { char *timezone; /*!< NULL, or zoneinfo style timezone */ }; -/*!\brief Construct a timing bitmap, for use in time-based conditionals. +/*! + * \brief Construct a timing bitmap, for use in time-based conditionals. * \param i Pointer to an ast_timing structure. * \param info Standard string containing a timerange, weekday range, monthday range, and month range, as well as an optional timezone. * \retval Returns 1 on success or 0 on failure. */ int ast_build_timing(struct ast_timing *i, const char *info); -/*!\brief Evaluate a pre-constructed bitmap as to whether the current time falls within the range specified. +/*! + * \brief Evaluate a pre-constructed bitmap as to whether the current time falls within the range specified. * \param i Pointer to an ast_timing structure. * \retval Returns 1, if the time matches or 0, if the current time falls outside of the specified range. */ int ast_check_timing(const struct ast_timing *i); -/*!\brief Deallocates memory structures associated with a timing bitmap. +/*! + * \brief Deallocates memory structures associated with a timing bitmap. * \param i Pointer to an ast_timing structure. * \retval 0 success * \retval non-zero failure (number suitable to pass to \see strerror) @@ -172,7 +176,7 @@ int ast_register_switch(struct ast_switch *sw); * \brief Unregister an alternative switch * * \param sw switch to unregister - * + * * Unregisters a switch from asterisk. * * \return nothing @@ -229,13 +233,13 @@ int pbx_exec(struct ast_channel *c, struct ast_app *app, const char *data); struct ast_context *ast_context_find_or_create(struct ast_context **extcontexts, struct ast_hashtab *exttable, const char *name, const char *registrar); /*! - * \brief Merge the temporary contexts into a global contexts list and delete from the + * \brief Merge the temporary contexts into a global contexts list and delete from the * global list the ones that are being added * * \param extcontexts pointer to the ast_context structure * \param exttable pointer to the ast_hashtab structure that contains all the elements in extcontexts - * \param registrar of the context; if it's set the routine will delete all contexts - * that belong to that registrar; if NULL only the contexts that are specified + * \param registrar of the context; if it's set the routine will delete all contexts + * that belong to that registrar; if NULL only the contexts that are specified * in extcontexts */ void ast_merge_contexts_and_delete(struct ast_context **extcontexts, struct ast_hashtab *exttable, const char *registrar); @@ -264,8 +268,10 @@ void ast_context_destroy(struct ast_context *con, const char *registrar); */ struct ast_context *ast_context_find(const char *name); -/*! \brief The result codes when starting the PBX on a channel with \see ast_pbx_start. - AST_PBX_CALL_LIMIT refers to the maxcalls call limit in asterisk.conf +/*! + * \brief The result codes when starting the PBX on a channel with ast_pbx_start. + * \note AST_PBX_CALL_LIMIT refers to the maxcalls call limit in asterisk.conf + * \see ast_pbx_start */ enum ast_pbx_result { AST_PBX_SUCCESS = 0, @@ -295,7 +301,7 @@ enum ast_pbx_result ast_pbx_start(struct ast_channel *c); * PBX structure for the channel, and provides all PBX functionality. * See ast_pbx_start for an asynchronous function to run the PBX in a * new thread as opposed to the current one. - * + * * \retval Zero on success * \retval non-zero on failure */ @@ -326,15 +332,15 @@ struct ast_pbx_args { * PBX structure for the channel, and provides all PBX functionality. * See ast_pbx_start for an asynchronous function to run the PBX in a * new thread as opposed to the current one. - * + * * \retval Zero on success * \retval non-zero on failure */ enum ast_pbx_result ast_pbx_run_args(struct ast_channel *c, struct ast_pbx_args *args); -/*! - * \brief Add and extension to an extension context. - * +/*! + * \brief Add and extension to an extension context. + * * \param context context to add the extension to * \param replace * \param extension extension to add @@ -346,20 +352,20 @@ enum ast_pbx_result ast_pbx_run_args(struct ast_channel *c, struct ast_pbx_args * \param datad * \param registrar who registered the extension * - * \retval 0 success + * \retval 0 success * \retval -1 failure */ -int ast_add_extension(const char *context, int replace, const char *extension, +int ast_add_extension(const char *context, int replace, const char *extension, int priority, const char *label, const char *callerid, const char *application, void *data, void (*datad)(void *), const char *registrar); -/*! +/*! * \brief Add an extension to an extension context, this time with an ast_context *. * * \note For details about the arguments, check ast_add_extension() */ int ast_add_extension2(struct ast_context *con, int replace, const char *extension, - int priority, const char *label, const char *callerid, + int priority, const char *label, const char *callerid, const char *application, void *data, void (*datad)(void *), const char *registrar); /*! @@ -371,7 +377,7 @@ int ast_add_extension2(struct ast_context *con, int replace, const char *extensi */ enum ast_extension_states ast_devstate_to_extenstate(enum ast_device_state devstate); -/*! +/*! * \brief Uses hint and devicestate callback to get the state of an extension * * \param c this is not important @@ -382,9 +388,9 @@ enum ast_extension_states ast_devstate_to_extenstate(enum ast_device_state devst */ int ast_extension_state(struct ast_channel *c, const char *context, const char *exten); -/*! +/*! * \brief Return string representation of the state of an extension - * + * * \param extension_state is the numerical state delivered by ast_extension_state * * \return the state of an extension as string @@ -393,7 +399,7 @@ const char *ast_extension_state2str(int extension_state); /*! * \brief Registers a state change callback - * + * * \param context which context to look in * \param exten which extension to get state * \param callback callback to call if state changed @@ -403,26 +409,26 @@ const char *ast_extension_state2str(int extension_state); * * \retval -1 on failure * \retval ID on success - */ -int ast_extension_state_add(const char *context, const char *exten, + */ +int ast_extension_state_add(const char *context, const char *exten, ast_state_cb_type callback, void *data); -/*! +/*! * \brief Deletes a registered state change callback by ID - * + * * \param id of the callback to delete * \param callback callback * * Removes the callback from list of callbacks * - * \retval 0 success + * \retval 0 success * \retval -1 failure */ int ast_extension_state_del(int id, ast_state_cb_type callback); -/*! +/*! * \brief If an extension hint exists, return non-zero - * + * * \param hint buffer for hint * \param hintsize size of hint buffer, in bytes * \param name buffer for name portion of hint @@ -438,9 +444,9 @@ int ast_extension_state_del(int id, ast_state_cb_type callback); int ast_get_hint(char *hint, int hintsize, char *name, int namesize, struct ast_channel *c, const char *context, const char *exten); -/*! +/*! * \brief If an extension hint exists, return non-zero - * + * * \param hint buffer for hint * \param hintsize Maximum size of hint buffer (<0 to prevent growth, >0 to limit growth to that number of bytes, or 0 for unlimited growth) * \param name buffer for name portion of hint @@ -469,15 +475,15 @@ int ast_str_get_hint(struct ast_str **hint, ssize_t hintsize, struct ast_str **n * function call, it is important that c is not locked prior to calling this. Otherwise * a deadlock may occur * - * \return If an extension within the given context(or callerid) with the given priority + * \return If an extension within the given context(or callerid) with the given priority * is found a non zero value will be returned. Otherwise, 0 is returned. */ -int ast_exists_extension(struct ast_channel *c, const char *context, const char *exten, +int ast_exists_extension(struct ast_channel *c, const char *context, const char *exten, int priority, const char *callerid); -/*! +/*! * \brief Find the priority of an extension that has the specified label - * + * * \param c this is not important * \param context which context to look in * \param exten which extension to search for @@ -491,7 +497,7 @@ int ast_exists_extension(struct ast_channel *c, const char *context, const char * \retval the priority which matches the given label in the extension * \retval -1 if not found. */ -int ast_findlabel_extension(struct ast_channel *c, const char *context, +int ast_findlabel_extension(struct ast_channel *c, const char *context, const char *exten, const char *label, const char *callerid); /*! @@ -505,12 +511,12 @@ int ast_findlabel_extension(struct ast_channel *c, const char *context, * a pointer to an ast_context structure to specify the context instead of the * name of the context. Otherwise, the functions behave the same. */ -int ast_findlabel_extension2(struct ast_channel *c, struct ast_context *con, +int ast_findlabel_extension2(struct ast_channel *c, struct ast_context *con, const char *exten, const char *label, const char *callerid); -/*! +/*! * \brief Looks for a valid matching extension - * + * * \param c not really important * \param context context to serach within * \param exten extension to check @@ -525,10 +531,10 @@ int ast_findlabel_extension2(struct ast_channel *c, struct ast_context *con, * some more digits, return non-zero. Basically, when this returns 0, no matter * what you add to exten, it's not going to be a valid extension anymore */ -int ast_canmatch_extension(struct ast_channel *c, const char *context, +int ast_canmatch_extension(struct ast_channel *c, const char *context, const char *exten, int priority, const char *callerid); -/*! +/*! * \brief Looks to see if adding anything to this extension might match something. (exists ^ canmatch) * * \param c not really important XXX @@ -546,12 +552,12 @@ int ast_canmatch_extension(struct ast_channel *c, const char *context, * an exact-match only. Basically, when this returns 0, no matter * what you add to exten, it's not going to be a valid extension anymore */ -int ast_matchmore_extension(struct ast_channel *c, const char *context, +int ast_matchmore_extension(struct ast_channel *c, const char *context, const char *exten, int priority, const char *callerid); -/*! +/*! * \brief Determine if a given extension matches a given pattern (in NXX format) - * + * * \param pattern pattern to match * \param extension extension to check against the pattern. * @@ -564,9 +570,9 @@ int ast_extension_match(const char *pattern, const char *extension); int ast_extension_close(const char *pattern, const char *data, int needmore); -/*! +/*! * \brief Determine if one extension should match before another - * + * * \param a extension to compare with b * \param b extension to compare with a * @@ -578,16 +584,16 @@ int ast_extension_close(const char *pattern, const char *data, int needmore); */ int ast_extension_cmp(const char *a, const char *b); -/*! +/*! * \brief Launch a new extension (i.e. new stack) - * + * * \param c not important * \param context which context to generate the extension within * \param exten new extension to add * \param priority priority of new extension * \param callerid callerid of extension * \param found - * \param combined_find_spawn + * \param combined_find_spawn * * This adds a new extension to the asterisk extension list. * @@ -595,13 +601,13 @@ int ast_extension_cmp(const char *a, const char *b); * function call, it is important that c is not locked prior to calling this. Otherwise * a deadlock may occur * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure. */ -int ast_spawn_extension(struct ast_channel *c, const char *context, +int ast_spawn_extension(struct ast_channel *c, const char *context, const char *exten, int priority, const char *callerid, int *found, int combined_find_spawn); -/*! +/*! * \brief Add a context include * * \param context context to add include to @@ -610,62 +616,62 @@ int ast_spawn_extension(struct ast_channel *c, const char *context, * * Adds an include taking a char * string as the context parameter * - * \retval 0 on success + * \retval 0 on success * \retval -1 on error */ -int ast_context_add_include(const char *context, const char *include, +int ast_context_add_include(const char *context, const char *include, const char *registrar); -/*! +/*! * \brief Add a context include - * + * * \param con context to add the include to * \param include include to add * \param registrar who registered the context * * Adds an include taking a struct ast_context as the first parameter * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure */ -int ast_context_add_include2(struct ast_context *con, const char *include, +int ast_context_add_include2(struct ast_context *con, const char *include, const char *registrar); -/*! +/*! * \brief Remove a context include - * + * * \note See ast_context_add_include for information on arguments * * \retval 0 on success * \retval -1 on failure */ -int ast_context_remove_include(const char *context, const char *include, +int ast_context_remove_include(const char *context, const char *include, const char *registrar); -/*! - * \brief Removes an include by an ast_context structure - * +/*! + * \brief Removes an include by an ast_context structure + * * \note See ast_context_add_include2 for information on arguments * * \retval 0 on success * \retval -1 on success */ -int ast_context_remove_include2(struct ast_context *con, const char *include, +int ast_context_remove_include2(struct ast_context *con, const char *include, const char *registrar); -/*! +/*! * \brief Verifies includes in an ast_contect structure - * + * * \param con context in which to verify the includes * - * \retval 0 if no problems found + * \retval 0 if no problems found * \retval -1 if there were any missing context */ int ast_context_verify_includes(struct ast_context *con); - -/*! + +/*! * \brief Add a switch - * + * * \param context context to which to add the switch * \param sw switch to add * \param data data to pass to switch @@ -674,39 +680,39 @@ int ast_context_verify_includes(struct ast_context *con); * * This function registers a switch with the asterisk switch architecture * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure */ -int ast_context_add_switch(const char *context, const char *sw, const char *data, +int ast_context_add_switch(const char *context, const char *sw, const char *data, int eval, const char *registrar); -/*! +/*! * \brief Adds a switch (first param is a ast_context) - * + * * \note See ast_context_add_switch() for argument information, with the exception of * the first argument. In this case, it's a pointer to an ast_context structure * as opposed to the name. */ -int ast_context_add_switch2(struct ast_context *con, const char *sw, const char *data, +int ast_context_add_switch2(struct ast_context *con, const char *sw, const char *data, int eval, const char *registrar); -/*! +/*! * \brief Remove a switch - * + * * Removes a switch with the given parameters * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure */ -int ast_context_remove_switch(const char *context, const char *sw, +int ast_context_remove_switch(const char *context, const char *sw, const char *data, const char *registrar); -int ast_context_remove_switch2(struct ast_context *con, const char *sw, +int ast_context_remove_switch2(struct ast_context *con, const char *sw, const char *data, const char *registrar); -/*! +/*! * \brief Simply remove extension from context - * + * * \param context context to remove extension from * \param extension which extension to remove * \param priority priority of extension to remove (0 to remove all) @@ -716,7 +722,7 @@ int ast_context_remove_switch2(struct ast_context *con, const char *sw, * * This function removes an extension from a given context. * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure * * @{ @@ -735,57 +741,57 @@ int ast_context_remove_extension_callerid2(struct ast_context *con, const char * int already_locked); /*! @} */ -/*! +/*! * \brief Add an ignorepat - * + * * \param context which context to add the ignorpattern to * \param ignorepat ignorepattern to set up for the extension * \param registrar registrar of the ignore pattern * * Adds an ignore pattern to a particular context. * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure */ int ast_context_add_ignorepat(const char *context, const char *ignorepat, const char *registrar); int ast_context_add_ignorepat2(struct ast_context *con, const char *ignorepat, const char *registrar); -/* +/* * \brief Remove an ignorepat - * + * * \param context context from which to remove the pattern * \param ignorepat the pattern to remove * \param registrar the registrar of the ignore pattern * * This removes the given ignorepattern * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure */ int ast_context_remove_ignorepat(const char *context, const char *ignorepat, const char *registrar); int ast_context_remove_ignorepat2(struct ast_context *con, const char *ignorepat, const char *registrar); -/*! +/*! * \brief Checks to see if a number should be ignored - * + * * \param context context to search within * \param pattern to check whether it should be ignored or not * * Check if a number should be ignored with respect to dialtone cancellation. * - * \retval 0 if the pattern should not be ignored - * \retval non-zero if the pattern should be ignored + * \retval 0 if the pattern should not be ignored + * \retval non-zero if the pattern should be ignored */ int ast_ignore_pattern(const char *context, const char *pattern); /* Locking functions for outer modules, especially for completion functions */ -/*! +/*! * \brief Write locks the context list * - * \retval 0 on success + * \retval 0 on success * \retval -1 on error */ int ast_wrlock_contexts(void); @@ -798,20 +804,20 @@ int ast_wrlock_contexts(void); */ int ast_rdlock_contexts(void); -/*! +/*! * \brief Unlocks contexts - * - * \retval 0 on success + * + * \retval 0 on success * \retval -1 on failure */ int ast_unlock_contexts(void); -/*! +/*! * \brief Write locks a given context - * + * * \param con context to lock * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure */ int ast_wrlock_context(struct ast_context *con); @@ -826,17 +832,17 @@ int ast_wrlock_context(struct ast_context *con); */ int ast_rdlock_context(struct ast_context *con); -/*! +/*! * \retval Unlocks the given context - * + * * \param con context to unlock * - * \retval 0 on success + * \retval 0 on success * \retval -1 on failure */ int ast_unlock_context(struct ast_context *con); -/*! +/*! * \brief locks the macrolock in the given given context * * \param macrocontext name of the macro-context to lock @@ -860,12 +866,14 @@ int ast_context_lockmacro(const char *macrocontext); */ int ast_context_unlockmacro(const char *macrocontext); -/*!\brief Set the channel to next execute the specified dialplan location. +/*! + * \brief Set the channel to next execute the specified dialplan location. * \see ast_async_parseable_goto, ast_async_goto_if_exists */ int ast_async_goto(struct ast_channel *chan, const char *context, const char *exten, int priority); -/*!\brief Set the channel to next execute the specified dialplan location. +/*! + * \brief Set the channel to next execute the specified dialplan location. */ int ast_async_goto_by_name(const char *chan, const char *context, const char *exten, int priority); @@ -887,7 +895,7 @@ int ast_pbx_outgoing_app(const char *type, int format, void *data, int timeout, */ int pbx_checkcondition(const char *condition); -/*! @name +/*! @name * Functions for returning values from structures */ /*! @{ */ const char *ast_get_context_name(struct ast_context *con); @@ -898,7 +906,7 @@ const char *ast_get_ignorepat_name(struct ast_ignorepat *ip); const char *ast_get_switch_name(struct ast_sw *sw); const char *ast_get_switch_data(struct ast_sw *sw); int ast_get_switch_eval(struct ast_sw *sw); - + /*! @} */ /*! @name Other Extension stuff */ @@ -934,14 +942,17 @@ struct ast_ignorepat *ast_walk_context_ignorepats(struct ast_context *con, struct ast_sw *ast_walk_context_switches(struct ast_context *con, struct ast_sw *sw); /*! @} */ -/*!\brief Create a human-readable string, specifying all variables and their corresponding values. +/*! + * \brief Create a human-readable string, specifying all variables and their corresponding values. * \param chan Channel from which to read variables - * \param buf Dynamic string in which to place the result (should be allocated with \see ast_str_create). + * \param buf Dynamic string in which to place the result (should be allocated with ast_str_create). + * \see ast_str_create * \note Will lock the channel. */ int pbx_builtin_serialize_variables(struct ast_channel *chan, struct ast_str **buf); -/*!\brief Return a pointer to the value of the corresponding channel variable. +/*! + * \brief Return a pointer to the value of the corresponding channel variable. * \note Will lock the channel. * * \note This function will return a pointer to the buffer inside the channel @@ -960,29 +971,34 @@ int pbx_builtin_serialize_variables(struct ast_channel *chan, struct ast_str **b */ const char *pbx_builtin_getvar_helper(struct ast_channel *chan, const char *name); -/*!\brief Add a variable to the channel variable stack, without removing any previously set value. +/*! + * \brief Add a variable to the channel variable stack, without removing any previously set value. * \note Will lock the channel. */ void pbx_builtin_pushvar_helper(struct ast_channel *chan, const char *name, const char *value); -/*!\brief Add a variable to the channel variable stack, removing the most recently set value for the same name. +/*! + * \brief Add a variable to the channel variable stack, removing the most recently set value for the same name. * \note Will lock the channel. May also be used to set a channel dialplan function to a particular value. * \see ast_func_write */ void pbx_builtin_setvar_helper(struct ast_channel *chan, const char *name, const char *value); -/*!\brief Retrieve the value of a builtin variable or variable from the channel variable stack. +/*! + * \brief Retrieve the value of a builtin variable or variable from the channel variable stack. * \note Will lock the channel. */ void pbx_retrieve_variable(struct ast_channel *c, const char *var, char **ret, char *workspace, int workspacelen, struct varshead *headp); void pbx_builtin_clear_globals(void); -/*!\brief Parse and set a single channel variable, where the name and value are separated with an '=' character. +/*! + * \brief Parse and set a single channel variable, where the name and value are separated with an '=' character. * \note Will lock the channel. */ int pbx_builtin_setvar(struct ast_channel *chan, const char *data); -/*!\brief Parse and set multiple channel variables, where the pairs are separated by the ',' character, and name and value are separated with an '=' character. +/*! + * \brief Parse and set multiple channel variables, where the pairs are separated by the ',' character, and name and value are separated with an '=' character. * \note Will lock the channel. */ int pbx_builtin_setvar_multiple(struct ast_channel *chan, const char *data); @@ -1051,7 +1067,7 @@ int pbx_set_extenpatternmatchnew(int newval); * will be tried directly through the named switch prior to any other * matching within that context. * \since 1.6.1 - */ + */ void pbx_set_overrideswitch(const char *newval); /*! @@ -1096,22 +1112,22 @@ int ast_custom_function_unregister(struct ast_custom_function *acf); */ int __ast_custom_function_register(struct ast_custom_function *acf, struct ast_module *mod); -/*! +/*! * \brief Retrieve the number of active calls */ int ast_active_calls(void); -/*! +/*! * \brief Retrieve the total number of calls processed through the PBX since last restart */ int ast_processed_calls(void); - + /*! - * \brief executes a read operation on a function + * \brief executes a read operation on a function * * \param chan Channel to execute on * \param function Data containing the function call string (will be modified) - * \param workspace A pointer to safe memory to use for a return value + * \param workspace A pointer to safe memory to use for a return value * \param len the number of bytes in workspace * * This application executes a function in read mode on a given channel. @@ -1122,7 +1138,7 @@ int ast_processed_calls(void); int ast_func_read(struct ast_channel *chan, const char *function, char *workspace, size_t len); /*! - * \brief executes a read operation on a function + * \brief executes a read operation on a function * * \param chan Channel to execute on * \param function Data containing the function call string (will be modified) @@ -1151,12 +1167,13 @@ int ast_func_read2(struct ast_channel *chan, const char *function, struct ast_st int ast_func_write(struct ast_channel *chan, const char *function, const char *value); /*! + * \details * When looking up extensions, we can have different requests * identified by the 'action' argument, as follows. - * Note that the coding is such that the low 4 bits are the + * + * \note that the coding is such that the low 4 bits are the * third argument to extension_match_core. */ - enum ext_match_t { E_MATCHMORE = 0x00, /* extension can match but only with more 'digits' */ E_CANMATCH = 0x01, /* extension can match with or without more 'digits' */ @@ -1170,7 +1187,7 @@ enum ext_match_t { #define STATUS_NO_EXTENSION 2 #define STATUS_NO_PRIORITY 3 #define STATUS_NO_LABEL 4 -#define STATUS_SUCCESS 5 +#define STATUS_SUCCESS 5 #define AST_PBX_MAX_STACK 128 /* request and result for pbx_find_extension */ @@ -1188,7 +1205,7 @@ struct pbx_find_info { const char *data; /* set on return */ const char *foundcontext; /* set on return */ }; - + struct ast_exten *pbx_find_extension(struct ast_channel *chan, struct ast_context *bypass, struct pbx_find_info *q, const char *context, const char *exten, int priority, @@ -1200,9 +1217,9 @@ struct ast_exten *pbx_find_extension(struct ast_channel *chan, following func */ int ast_wrlock_contexts_version(void); - -/*!\brief hashtable functions for contexts */ + +/*! \brief hashtable functions for contexts */ /*! @{ */ int ast_hashtab_compare_contexts(const void *ah_a, const void *ah_b); unsigned int ast_hashtab_hash_contexts(const void *obj);