func_version.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. * Asterisk -- An open source telephony toolkit.
  3. *
  4. * Copyright (C) 2006, Digium, Inc.
  5. *
  6. * See http://www.asterisk.org for more information about
  7. * the Asterisk project. Please do not directly contact
  8. * any of the maintainers of this project for assistance;
  9. * the project provides a web site, mailing lists and IRC
  10. * channels for your use.
  11. *
  12. * This program is free software, distributed under the terms of
  13. * the GNU General Public License Version 2. See the LICENSE file
  14. * at the top of the source tree.
  15. */
  16. /*! \file
  17. *
  18. * \brief Return the current Version strings
  19. *
  20. * \author Steve Murphy (murf@digium.com)
  21. * \ingroup functions
  22. */
  23. /*** MODULEINFO
  24. <support_level>core</support_level>
  25. ***/
  26. #include "asterisk.h"
  27. ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
  28. #include "asterisk/module.h"
  29. #include "asterisk/channel.h"
  30. #include "asterisk/pbx.h"
  31. #include "asterisk/utils.h"
  32. #include "asterisk/app.h"
  33. #include "asterisk/ast_version.h"
  34. #include "asterisk/build.h"
  35. /*** DOCUMENTATION
  36. <function name="VERSION" language="en_US">
  37. <synopsis>
  38. Return the Version info for this Asterisk.
  39. </synopsis>
  40. <syntax>
  41. <parameter name="info">
  42. <para>The possible values are:</para>
  43. <enumlist>
  44. <enum name="ASTERISK_VERSION_NUM">
  45. <para>A string of digits is returned, e.g. 10602 for 1.6.2 or 100300 for 10.3.0,
  46. or 999999 when using an SVN build.</para>
  47. </enum>
  48. <enum name="BUILD_USER">
  49. <para>The string representing the user's name whose account
  50. was used to configure Asterisk, is returned.</para>
  51. </enum>
  52. <enum name="BUILD_HOSTNAME">
  53. <para>The string representing the name of the host on which Asterisk was configured, is returned.</para>
  54. </enum>
  55. <enum name="BUILD_MACHINE">
  56. <para>The string representing the type of machine on which Asterisk was configured, is returned.</para>
  57. </enum>
  58. <enum name="BUILD_OS">
  59. <para>The string representing the OS of the machine on which Asterisk was configured, is returned.</para>
  60. </enum>
  61. <enum name="BUILD_DATE">
  62. <para>The string representing the date on which Asterisk was configured, is returned.</para>
  63. </enum>
  64. <enum name="BUILD_KERNEL">
  65. <para>The string representing the kernel version of the machine on which Asterisk
  66. was configured, is returned.</para>
  67. </enum>
  68. </enumlist>
  69. </parameter>
  70. </syntax>
  71. <description>
  72. <para>If there are no arguments, return the version of Asterisk in this format: SVN-branch-1.4-r44830M</para>
  73. <para>Example: Set(junky=${VERSION()};</para>
  74. <para>Sets junky to the string <literal>SVN-branch-1.6-r74830M</literal>, or possibly, <literal>SVN-trunk-r45126M</literal>.</para>
  75. </description>
  76. </function>
  77. ***/
  78. static int acf_version_exec(struct ast_channel *chan, const char *cmd,
  79. char *parse, char *buffer, size_t buflen)
  80. {
  81. const char *response_char = ast_get_version();
  82. AST_DECLARE_APP_ARGS(args,
  83. AST_APP_ARG(info);
  84. );
  85. AST_STANDARD_APP_ARGS(args, parse);
  86. if (!ast_strlen_zero(args.info) ) {
  87. if (!strcasecmp(args.info,"ASTERISK_VERSION_NUM"))
  88. response_char = ast_get_version_num();
  89. else if (!strcasecmp(args.info,"BUILD_USER"))
  90. response_char = BUILD_USER;
  91. else if (!strcasecmp(args.info,"BUILD_HOSTNAME"))
  92. response_char = BUILD_HOSTNAME;
  93. else if (!strcasecmp(args.info,"BUILD_MACHINE"))
  94. response_char = BUILD_MACHINE;
  95. else if (!strcasecmp(args.info,"BUILD_KERNEL"))
  96. response_char = BUILD_KERNEL;
  97. else if (!strcasecmp(args.info,"BUILD_OS"))
  98. response_char = BUILD_OS;
  99. else if (!strcasecmp(args.info,"BUILD_DATE"))
  100. response_char = BUILD_DATE;
  101. }
  102. ast_debug(1, "VERSION returns %s result, given %s argument\n", response_char, args.info);
  103. ast_copy_string(buffer, response_char, buflen);
  104. return 0;
  105. }
  106. static struct ast_custom_function acf_version = {
  107. .name = "VERSION",
  108. .read = acf_version_exec,
  109. };
  110. static int unload_module(void)
  111. {
  112. ast_custom_function_unregister(&acf_version);
  113. return 0;
  114. }
  115. static int load_module(void)
  116. {
  117. return ast_custom_function_register(&acf_version);
  118. }
  119. AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Get Asterisk Version/Build Info");