1 /*! 2 * \file sccp_cli_table.h 3 * \brief SCCP CLI Table Macro Header 4 * \author Diederik de Groot <ddegroot [at] users.sf.net> 5 * \note This program is free software and may be modified and distributed under the terms of the GNU Public License. 6 * See the LICENSE file at the top of the source tree. 7 * 8 */ 9 #ifndef DOXYGEN_SHOULD_SKIP_THIS 10 11 #ifndef _CLI_AMI_TABLE_INCLUDE 12 #define _CLI_AMI_TABLE_INCLUDE 13 14 #define _CLI_AMI_TABLE_LIST_LOCK(...) CLI_AMI_TABLE_LIST_LOCK(__VA_ARGS__) 15 #define _CLI_AMI_TABLE_LIST_ITERATOR(...) CLI_AMI_TABLE_LIST_ITERATOR(__VA_ARGS__) 16 #define _CLI_AMI_TABLE_LIST_UNLOCK(...) CLI_AMI_TABLE_LIST_UNLOCK(__VA_ARGS__) 17 18 #define MERGE2_(_a,_b) _a##_b 19 #define UNIQUE_VAR(_a,_b) MERGE2_(_a,_b) 20 21 # define AMI_OUTPUT_PARAM(param, width, fmt, ...) \ 22 { \ 23 char camelParam[width + 1]; \ 24 CLI_AMI_CAMEL_PARAM (param, camelParam); \ 25 astman_append (s, "%s: " fmt "\r\n", camelParam, __VA_ARGS__); \ 26 local_line_total++; \ 27 } 28 #endif 29 // =========== Code To be generated by include file =============== 30 pbx_cli(fd, "\n"); 31 #ifdef CLI_AMI_TABLE_LIST_ITER_TYPE 32 CLI_AMI_TABLE_LIST_ITER_TYPE *CLI_AMI_TABLE_LIST_ITER_VAR = NULL; 33 #endif 34 35 #ifndef CLI_AMI_TABLE_BEFORE_ITERATION 36 #define CLI_AMI_TABLE_BEFORE_ITERATION 37 #endif 38 #ifndef CLI_AMI_TABLE_AFTER_ITERATION 39 #define CLI_AMI_TABLE_AFTER_ITERATION 40 #endif 41 42 /* print headers */ 43 int UNIQUE_VAR(table_width_, CLI_AMI_TABLE_NAME) = 0; 44 int UNIQUE_VAR(table_entries_, CLI_AMI_TABLE_NAME) = 0; 45 const char *UNIQUE_VAR(id, CLI_AMI_TABLE_NAME); 46 char UNIQUE_VAR(idtext, CLI_AMI_TABLE_NAME)[256] = ""; 47 48 #define CLI_AMI_TABLE_FIELD(_a,_b,_c,_d,_e) UNIQUE_VAR(table_width_,CLI_AMI_TABLE_NAME)=UNIQUE_VAR(table_width_,CLI_AMI_TABLE_NAME) + _d+ 1; 49 #define CLI_AMI_TABLE_UTF8_FIELD CLI_AMI_TABLE_FIELD 50 CLI_AMI_TABLE_FIELDS 51 #undef CLI_AMI_TABLE_FIELD 52 if (!s) 53 { 54 pbx_cli(fd, "+--- %s %.*s+\n", STRINGIFY(CLI_AMI_TABLE_NAME), UNIQUE_VAR(table_width_, CLI_AMI_TABLE_NAME) - (int) strlen(STRINGIFY(CLI_AMI_TABLE_NAME)) - 4, "------------------------------------------------------------------------------------------------------------------------------------------------------------------"); 55 56 pbx_cli(fd, "| "); 57 #define CLI_AMI_TABLE_FIELD(_a,_b,_c,_d,_e) pbx_cli(fd,"%*s ",-_d,#_a); 58 CLI_AMI_TABLE_FIELDS 59 #undef CLI_AMI_TABLE_FIELD 60 pbx_cli(fd, "|\n"); 61 62 pbx_cli(fd, "+ "); 63 #define CLI_AMI_TABLE_FIELD(_a,_b,_c,_d,_e) pbx_cli(fd,"%." STRINGIFY(_d) "s ", "=================================================================================================================================================================="); 64 CLI_AMI_TABLE_FIELDS 65 #undef CLI_AMI_TABLE_FIELD 66 pbx_cli(fd, "+\n"); 67 } else { 68 astman_append(s, "Event: TableStart\r\n"); 69 local_line_total++; 70 astman_append(s, "TableName: %s\r\n", STRINGIFY(CLI_AMI_TABLE_NAME)); 71 local_line_total++; 72 73 UNIQUE_VAR(id, CLI_AMI_TABLE_NAME) = astman_get_header(m, "ActionID"); 74 if (!pbx_strlen_zero(UNIQUE_VAR(id, CLI_AMI_TABLE_NAME))) { 75 snprintf(UNIQUE_VAR(idtext, CLI_AMI_TABLE_NAME), sizeof(UNIQUE_VAR(idtext, CLI_AMI_TABLE_NAME)), "ActionID: %s\r\n", UNIQUE_VAR(id, CLI_AMI_TABLE_NAME)); 76 astman_append(s, "%s\r\n", UNIQUE_VAR(idtext, CLI_AMI_TABLE_NAME)); 77 local_line_total++; 78 } else { 79 astman_append(s, "\r\n"); 80 } 81 } 82 83 /* iterator through list */ 84 if (!s) { 85 #define CLI_AMI_TABLE_FIELD(_a,_b,_c,_d,_e) pbx_cli(fd,"%" _b #_c " ",_e); 86 #undef CLI_AMI_TABLE_UTF8_FIELD 87 #define CLI_AMI_TABLE_UTF8_FIELD(_a,_b,_c,_d,_e) pbx_cli(fd,"%-*" #_c " ", sccp_utf8_columnwidth(_d,_e), _e); 88 #ifdef CLI_AMI_TABLE_LIST_ITERATOR 89 _CLI_AMI_TABLE_LIST_LOCK(CLI_AMI_TABLE_LIST_ITER_HEAD); _CLI_AMI_TABLE_LIST_ITERATOR(CLI_AMI_TABLE_LIST_ITER_HEAD,CLI_AMI_TABLE_LIST_ITER_VAR,list)90 _CLI_AMI_TABLE_LIST_ITERATOR(CLI_AMI_TABLE_LIST_ITER_HEAD, CLI_AMI_TABLE_LIST_ITER_VAR, list) { 91 #else 92 CLI_AMI_TABLE_ITERATOR { 93 #endif 94 CLI_AMI_TABLE_BEFORE_ITERATION pbx_cli(fd, "| "); 95 CLI_AMI_TABLE_FIELDS pbx_cli(fd, "|\n"); 96 CLI_AMI_TABLE_AFTER_ITERATION} 97 #ifdef CLI_AMI_TABLE_LIST_ITERATOR 98 _CLI_AMI_TABLE_LIST_UNLOCK(CLI_AMI_TABLE_LIST_ITER_HEAD); 99 #endif 100 #undef CLI_AMI_TABLE_FIELD 101 #undef CLI_AMI_TABLE_UTF8_FIELD 102 #define CLI_AMI_TABLE_UTF8_FIELD CLI_AMI_TABLE_FIELD 103 } else { 104 #define CLI_AMI_TABLE_FIELD(_a,_b,_c,_d,_e) AMI_OUTPUT_PARAM(#_a, 0, "%" #_c, _e); 105 #ifdef CLI_AMI_TABLE_LIST_ITERATOR 106 _CLI_AMI_TABLE_LIST_LOCK(CLI_AMI_TABLE_LIST_ITER_HEAD); _CLI_AMI_TABLE_LIST_ITERATOR(CLI_AMI_TABLE_LIST_ITER_HEAD,CLI_AMI_TABLE_LIST_ITER_VAR,list)107 _CLI_AMI_TABLE_LIST_ITERATOR(CLI_AMI_TABLE_LIST_ITER_HEAD, CLI_AMI_TABLE_LIST_ITER_VAR, list) { 108 #else 109 CLI_AMI_TABLE_ITERATOR { 110 #endif 111 CLI_AMI_TABLE_BEFORE_ITERATION astman_append(s, "Event: SCCP%sEntry\r\n", STRINGIFY(CLI_AMI_TABLE_PER_ENTRY_NAME)); 112 UNIQUE_VAR(table_entries_, CLI_AMI_TABLE_NAME)++; 113 114 local_line_total++; 115 astman_append(s, "ChannelType: SCCP\r\n"); 116 local_line_total++; 117 astman_append(s, "ChannelObjectType: %s\r\n", STRINGIFY(CLI_AMI_TABLE_PER_ENTRY_NAME)); 118 local_line_total++; 119 if (!pbx_strlen_zero(UNIQUE_VAR(id, CLI_AMI_TABLE_NAME))) { 120 astman_append(s, "%s", UNIQUE_VAR(idtext, CLI_AMI_TABLE_NAME)); 121 } 122 CLI_AMI_TABLE_FIELDS 123 astman_append(s, "\r\n"); 124 local_line_total++; 125 CLI_AMI_TABLE_AFTER_ITERATION} 126 #ifdef CLI_AMI_TABLE_LIST_ITERATOR 127 _CLI_AMI_TABLE_LIST_UNLOCK(CLI_AMI_TABLE_LIST_ITER_HEAD); 128 #endif 129 #undef CLI_AMI_TABLE_FIELD 130 } 131 132 /* print footer */ 133 if (!s) { 134 pbx_cli(fd, "+%.*s+\n", UNIQUE_VAR(table_width_, CLI_AMI_TABLE_NAME) + 1, "------------------------------------------------------------------------------------------------------------------------------------------------------------------"); 135 136 } else { 137 astman_append(s, "Event: TableEnd\r\n"); 138 local_line_total++; 139 astman_append(s, "TableName: %s\r\n", STRINGIFY(CLI_AMI_TABLE_NAME)); 140 local_line_total++; 141 astman_append(s, "TableEntries: %d\r\n", UNIQUE_VAR(table_entries_, CLI_AMI_TABLE_NAME)); 142 local_line_total++; 143 if (!pbx_strlen_zero(UNIQUE_VAR(id, CLI_AMI_TABLE_NAME))) { 144 astman_append(s, "%s\r\n", UNIQUE_VAR(idtext, CLI_AMI_TABLE_NAME)); 145 local_line_total++; 146 } else { 147 astman_append(s, "\r\n"); 148 } 149 local_line_total++; 150 } 151 152 #ifdef CLI_AMI_TABLE_NAME 153 #undef CLI_AMI_TABLE_NAME 154 #endif 155 156 #ifdef CLI_AMI_TABLE_PER_ENTRY_NAME 157 #undef CLI_AMI_TABLE_PER_ENTRY_NAME 158 #endif 159 160 #ifdef CLI_AMI_TABLE_LIST_ITER_TYPE 161 #undef CLI_AMI_TABLE_LIST_ITER_TYPE 162 #endif 163 164 #ifdef CLI_AMI_TABLE_LIST_ITER_VAR 165 #undef CLI_AMI_TABLE_LIST_ITER_VAR 166 #endif 167 168 #ifdef CLI_AMI_TABLE_LIST_ITER_HEAD 169 #undef CLI_AMI_TABLE_LIST_ITER_HEAD 170 #endif 171 172 #ifdef CLI_AMI_TABLE_LIST_LOCK 173 #undef CLI_AMI_TABLE_LIST_LOCK 174 #endif 175 176 #ifdef CLI_AMI_TABLE_LIST_ITERATOR 177 #undef CLI_AMI_TABLE_LIST_ITERATOR 178 #endif 179 180 #ifdef CLI_AMI_TABLE_ITERATOR 181 #undef CLI_AMI_TABLE_ITERATOR 182 #endif 183 184 #ifdef CLI_AMI_TABLE_BEFORE_ITERATION 185 #undef CLI_AMI_TABLE_BEFORE_ITERATION 186 #endif 187 188 #ifdef CLI_AMI_TABLE_AFTER_ITERATION 189 #undef CLI_AMI_TABLE_AFTER_ITERATION 190 #endif 191 192 #ifdef CLI_AMI_TABLE_LIST_UNLOCK 193 #undef CLI_AMI_TABLE_LIST_UNLOCK 194 #endif 195 196 #ifdef CLI_AMI_TABLE_FIELDS 197 #undef CLI_AMI_TABLE_FIELDS 198 #endif 199 // =========== End of Code To be generated by include file ============ 200 #endif /* DOXYGEN_SHOULD_SKIP_THIS */ 201 // kate: indent-width 8; replace-tabs off; indent-mode cstyle; auto-insert-doxygen on; line-numbers on; tab-indents on; keep-extra-spaces off; auto-brackets off; 202