提交 e744bf03 authored 作者: Nathan Neulinger's avatar Nathan Neulinger

improvements to skinny logging, table based message text ids

上级 a38ea77f
......@@ -142,7 +142,6 @@
<ItemGroup>
<ClInclude Include="mod_skinny.h" />
<ClInclude Include="skinny_api.h" />
<ClInclude Include="skinny_labels.h" />
<ClInclude Include="skinny_protocol.h" />
<ClInclude Include="skinny_server.h" />
<ClInclude Include="skinny_tables.h" />
......
......@@ -34,7 +34,6 @@
#include "skinny_protocol.h"
#include "skinny_server.h"
#include "skinny_tables.h"
#include "skinny_labels.h"
#include "skinny_api.h"
SWITCH_MODULE_LOAD_FUNCTION(mod_skinny_load);
......@@ -399,9 +398,10 @@ void skinny_line_perform_set_state(const char *file, const char *func, int line,
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Skinny-Call-State", "%d", call_state);
switch_event_fire(&event);
send_call_state(listener, call_state, line_instance, call_id);
switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_DEBUG,
"Device %s:%d, Line %d, Call %d Change State to %s (%d)\n",
listener->device_name, listener->device_instance, line_instance, call_id,
skinny_log_l_ffl(listener, file, func, line, SWITCH_LOG_DEBUG,
"Line %d, Call %d Change State to %s (%d)\n",
line_instance, call_id,
skinny_call_state2str(call_state), call_state);
}
......@@ -620,6 +620,7 @@ int channel_on_routing_callback(void *pArg, int argc, char **argv, char **column
{
struct channel_on_routing_helper *helper = pArg;
listener_t *listener = NULL;
char *label;
char *device_name = argv[0];
uint32_t device_instance = atoi(argv[1]);
......@@ -654,8 +655,11 @@ int channel_on_routing_callback(void *pArg, int argc, char **argv, char **column
send_set_lamp(listener, SKINNY_BUTTON_LINE, line_instance, SKINNY_LAMP_ON);
skinny_line_set_state(listener, line_instance, helper->tech_pvt->call_id, SKINNY_IN_USE_REMOTELY);
send_select_soft_keys(listener, line_instance, helper->tech_pvt->call_id, SKINNY_KEY_SET_IN_USE_HINT, 0xffff);
send_display_prompt_status(listener, 0, SKINNY_DISP_IN_USE_REMOTE,
line_instance, helper->tech_pvt->call_id);
label = skinny_textid2raw(SKINNY_TEXTID_IN_USE_REMOTE);
send_display_prompt_status(listener, 0, label, line_instance, helper->tech_pvt->call_id);
switch_safe_free(label);
skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance);
}
}
......@@ -751,6 +755,7 @@ int channel_on_hangup_callback(void *pArg, int argc, char **argv, char **columnN
{
struct channel_on_hangup_helper *helper = pArg;
listener_t *listener = NULL;
char *label;
char *device_name = argv[0];
uint32_t device_instance = atoi(argv[1]);
......@@ -782,11 +787,15 @@ int channel_on_hangup_callback(void *pArg, int argc, char **argv, char **columnN
case SWITCH_CAUSE_UNALLOCATED_NUMBER:
send_start_tone(listener, SKINNY_TONE_REORDER, 0, line_instance, call_id);
skinny_session_send_call_info(helper->tech_pvt->session, listener, line_instance);
send_display_prompt_status(listener, 0, SKINNY_DISP_UNKNOWN_NUMBER, line_instance, call_id);
label = skinny_textid2raw(SKINNY_TEXTID_UNKNOWN_NUMBER);
send_display_prompt_status(listener, 0, label, line_instance, call_id);
switch_safe_free(label);
break;
case SWITCH_CAUSE_USER_BUSY:
send_start_tone(listener, SKINNY_TONE_BUSYTONE, 0, line_instance, call_id);
send_display_prompt_status(listener, 0, SKINNY_DISP_BUSY, line_instance, call_id);
label = skinny_textid2raw(SKINNY_TEXTID_BUSY);
send_display_prompt_status(listener, 0, label, line_instance, call_id);
switch_safe_free(label);
break;
case SWITCH_CAUSE_NORMAL_CLEARING:
send_clear_prompt_status(listener, line_instance, call_id);
......@@ -1431,11 +1440,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj)
switch_socket_timeout_set(listener->sock, 5000000);
#endif
if (listener->profile->debug > 0) {
if (zstr(listener->remote_ip)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Connection Open\n");
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Connection Open from %s:%d\n", listener->remote_ip, listener->remote_port);
}
skinny_log_l(listener, SWITCH_LOG_DEBUG, "Connection Open\n", NULL);
}
switch_set_flag_locked(listener, LFLAG_RUNNING);
......@@ -1449,8 +1454,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj)
if (status != SWITCH_STATUS_SUCCESS) {
switch(status) {
case SWITCH_STATUS_TIMEOUT:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Communication Time Out with %s:%d.\n",
listener->remote_ip, listener->remote_port);
skinny_log_l(listener, SWITCH_LOG_DEBUG, "Communication Time Out\n", NULL);
if(listener->expire_time < switch_epoch_time_now(NULL)) {
switch_event_t *event = NULL;
......@@ -1460,8 +1464,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj)
}
break;
default:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Communication Error with %s:%d.\n",
listener->remote_ip, listener->remote_port);
skinny_log_l(listener, SWITCH_LOG_DEBUG, "Communication Error\n", NULL);
}
switch_clear_flag_locked(listener, LFLAG_RUNNING);
break;
......@@ -1484,8 +1487,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj)
remove_listener(listener);
if (listener->profile->debug > 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Communication Complete with %s:%d.\n",
listener->remote_ip, listener->remote_port);
skinny_log_l(listener, SWITCH_LOG_DEBUG, "Communication Complete\n", NULL);
}
switch_thread_rwlock_wrlock(listener->rwlock);
......@@ -1498,8 +1500,7 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj)
switch_thread_rwlock_unlock(listener->rwlock);
if (listener->profile->debug > 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Communication Closed with %s:%d.\n",
listener->remote_ip, listener->remote_port);
skinny_log_l(listener, SWITCH_LOG_DEBUG, "Communication Closed\n", NULL);
}
if(destroy_pool == 0) {
......@@ -2009,8 +2010,7 @@ static void skinny_user_to_device_event_handler(switch_event_t *event)
data);
break;
default:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
"Incorrect message type %s (%d).\n", skinny_message_type2str(message_type), message_type);
skinny_log_l(listener, SWITCH_LOG_WARNING, "Incorrect message type %s (%d).\n", skinny_message_type2str(message_type), message_type);
}
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING,
......@@ -2102,8 +2102,13 @@ int skinny_message_waiting_event_handler_callback(void *pArg, int argc, char **a
if (listener) {
if (helper->yn == SWITCH_TRUE) {
char buffer[32];
char *label;
send_set_lamp(listener, SKINNY_BUTTON_VOICEMAIL, 0, SKINNY_LAMP_ON);
sprintf(buffer, "%s: (%d/%d urgents)", SKINNY_DISP_YOU_HAVE_VOICEMAIL, helper->total_new_messages, helper->total_new_urgent_messages);
label = skinny_textid2raw(SKINNY_TEXTID_YOU_HAVE_VOICEMAIL);
sprintf(buffer, "%s: (%d/%d urgents)", label, helper->total_new_messages, helper->total_new_urgent_messages);
switch_safe_free(label);
send_display_pri_notify(listener, 5, 10, buffer);
} else {
send_set_lamp(listener, SKINNY_BUTTON_VOICEMAIL, 0, SKINNY_LAMP_OFF);
......@@ -2206,6 +2211,7 @@ static void skinny_trap_event_handler(switch_event_t *event)
}
}
/*****************************************************************************/
SWITCH_MODULE_LOAD_FUNCTION(mod_skinny_load)
{
......
......@@ -35,6 +35,24 @@
#include <switch.h>
/*****************************************************************************/
/* LOGGING FUNCTIONS */
/*****************************************************************************/
#define skinny_undef_str(x) (zstr(x) ? "_undef_" : x)
#define skinny_log_l(listener, level, _fmt, ...) switch_log_printf(SWITCH_CHANNEL_LOG, level, \
"[%s:%d @ %s:%d] " _fmt, skinny_undef_str(listener->device_name), listener->device_instance, skinny_undef_str(listener->remote_ip), \
listener->remote_port, __VA_ARGS__)
#define skinny_log_l_ffl(listener, file, func, line, level, _fmt, ...) switch_log_printf( \
SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, level, \
"[%s:%d @ %s:%d] " _fmt, skinny_undef_str(listener->device_name), listener->device_instance, skinny_undef_str(listener->remote_ip), \
listener->remote_port, __VA_ARGS__)
#define skinny_log_ls(listener, session, level, _fmt, ...) switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), level, \
"[%s:%d @ %s:%d] " _fmt, skinny_undef_str(listener->device_name), listener->device_instance, skinny_undef_str(listener->remote_ip), \
listener->remote_port, __VA_ARGS__)
/*****************************************************************************/
/* MODULE TYPES */
/*****************************************************************************/
......@@ -274,6 +292,11 @@ switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
/*****************************************************************************/
switch_endpoint_interface_t *skinny_get_endpoint_interface();
/*****************************************************************************/
/* MODULE FUNCTIONS */
/*****************************************************************************/
#define skinny_textid2raw(label) (label > 0 ? switch_mprintf("\200%c", label) : switch_mprintf(""))
#endif /* _MOD_SKINNY_H */
/* For Emacs:
......
......@@ -311,10 +311,6 @@
RelativePath=".\skinny_api.h"
>
</File>
<File
RelativePath=".\skinny_labels.h"
>
</File>
<File
RelativePath=".\skinny_protocol.c"
>
......
......@@ -138,7 +138,6 @@
<ItemGroup>
<ClInclude Include="mod_skinny.h" />
<ClInclude Include="skinny_api.h" />
<ClInclude Include="skinny_labels.h" />
<ClInclude Include="skinny_protocol.h" />
<ClInclude Include="skinny_server.h" />
<ClInclude Include="skinny_tables.h" />
......
/*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2010, Mathieu Parent <math.parent@gmail.com>
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
*
* The Initial Developer of the Original Code is
* Mathieu Parent <math.parent@gmail.com>
* Portions created by the Initial Developer are Copyright (C)
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Mathieu Parent <math.parent@gmail.com>
*
* Based on chan-sccp-b (file src/sccp_labels.h)
*
* skinny_labels.h -- Skinny Call Control Protocol (SCCP) Endpoint Module
*
*/
#ifndef _SKINNY_LABELS_H
#define _SKINNY_LABELS_H
#define SKINNY_DISP_EMPTY ""
#define SKINNY_DISP_REDIAL "\200\1"
#define SKINNY_DISP_NEWCALL "\200\2"
#define SKINNY_DISP_HOLD "\200\3"
#define SKINNY_DISP_TRANSFER "\200\4"
#define SKINNY_DISP_CFWDALL "\200\5"
#define SKINNY_DISP_CFWDBUSY "\200\6"
#define SKINNY_DISP_CFWDNOANSWER "\200\7"
#define SKINNY_DISP_BACKSPACE "\200\10"
#define SKINNY_DISP_ENDCALL "\200\11"
#define SKINNY_DISP_RESUME "\200\12"
#define SKINNY_DISP_ANSWER "\200\13"
#define SKINNY_DISP_INFO "\200\14"
#define SKINNY_DISP_CONF "\200\15"
#define SKINNY_DISP_PARK "\200\16"
#define SKINNY_DISP_JOIN "\200\17"
#define SKINNY_DISP_MEETME "\200\20"
#define SKINNY_DISP_CALLPICKUP "\200\21"
#define SKINNY_DISP_GRPCALLPICKUP "\200\22"
#define SKINNY_DISP_YOUR_CURRENT_OPTIONS "\200\23"
#define SKINNY_DISP_OFF_HOOK "\200\24"
#define SKINNY_DISP_ON_HOOK "\200\25"
#define SKINNY_DISP_RING_OUT "\200\26"
#define SKINNY_DISP_FROM "\200\27"
#define SKINNY_DISP_CONNECTED "\200\30"
#define SKINNY_DISP_BUSY "\200\31"
#define SKINNY_DISP_LINE_IN_USE "\200\32"
#define SKINNY_DISP_CALL_WAITING "\200\33"
#define SKINNY_DISP_CALL_TRANSFER "\200\34"
#define SKINNY_DISP_CALL_PARK "\200\35"
#define SKINNY_DISP_CALL_PROCEED "\200\36"
#define SKINNY_DISP_IN_USE_REMOTE "\200\37"
#define SKINNY_DISP_ENTER_NUMBER "\200\40"
#define SKINNY_DISP_CALL_PARK_AT "\200\41"
#define SKINNY_DISP_PRIMARY_ONLY "\200\42"
#define SKINNY_DISP_TEMP_FAIL "\200\43"
#define SKINNY_DISP_YOU_HAVE_VOICEMAIL "\200\44"
#define SKINNY_DISP_FORWARDED_TO "\200\45"
#define SKINNY_DISP_CAN_NOT_COMPLETE_CONFERENCE "\200\46"
#define SKINNY_DISP_NO_CONFERENCE_BRIDGE "\200\47"
#define SKINNY_DISP_CAN_NOT_HOLD_PRIMARY_CONTROL "\200\50"
#define SKINNY_DISP_INVALID_CONFERENCE_PARTICIPANT "\200\51"
#define SKINNY_DISP_IN_CONFERENCE_ALREADY "\200\52"
#define SKINNY_DISP_NO_PARTICIPANT_INFO "\200\53"
#define SKINNY_DISP_EXCEED_MAXIMUM_PARTIES "\200\54"
#define SKINNY_DISP_KEY_IS_NOT_ACTIVE "\200\55"
#define SKINNY_DISP_ERROR_NO_LICENSE "\200\56"
#define SKINNY_DISP_ERROR_DBCONFIG "\200\57"
#define SKINNY_DISP_ERROR_DATABASE "\200\60"
#define SKINNY_DISP_ERROR_PASS_LIMIT "\200\61"
#define SKINNY_DISP_ERROR_UNKNOWN "\200\62"
#define SKINNY_DISP_ERROR_MISMATCH "\200\63"
#define SKINNY_DISP_CONFERENCE "\200\64"
#define SKINNY_DISP_PARK_NUMBER "\200\65"
#define SKINNY_DISP_PRIVATE "\200\66"
#define SKINNY_DISP_NOT_ENOUGH_BANDWIDTH "\200\67"
#define SKINNY_DISP_UNKNOWN_NUMBER "\200\70"
#define SKINNY_DISP_RMLSTC "\200\71"
#define SKINNY_DISP_VOICEMAIL "\200\72"
#define SKINNY_DISP_IMMDIV "\200\73"
#define SKINNY_DISP_INTRCPT "\200\74"
#define SKINNY_DISP_SETWTCH "\200\75"
#define SKINNY_DISP_TRNSFVM "\200\76"
#define SKINNY_DISP_DND "\200\77"
#define SKINNY_DISP_DIVALL "\200\100"
#define SKINNY_DISP_CALLBACK "\200\101"
#define SKINNY_DISP_NETWORK_CONGESTION_REROUTING "\200\102"
#define SKINNY_DISP_BARGE "\200\103"
#define SKINNY_DISP_FAILED_TO_SETUP_BARGE "\200\104"
#define SKINNY_DISP_ANOTHER_BARGE_EXISTS "\200\105"
#define SKINNY_DISP_INCOMPATIBLE_DEVICE_TYPE "\200\106"
#define SKINNY_DISP_NO_PARK_NUMBER_AVAILABLE "\200\107"
#define SKINNY_DISP_CALLPARK_REVERSION "\200\110"
#define SKINNY_DISP_SERVICE_IS_NOT_ACTIVE "\200\111"
#define SKINNY_DISP_HIGH_TRAFFIC_TRY_AGAIN_LATER "\200\112"
#define SKINNY_DISP_QRT "\200\113"
#define SKINNY_DISP_MCID "\200\114"
#define SKINNY_DISP_DIRTRFR "\200\115"
#define SKINNY_DISP_SELECT "\200\116"
#define SKINNY_DISP_CONFLIST "\200\117"
#define SKINNY_DISP_IDIVERT "\200\120"
#define SKINNY_DISP_CBARGE "\200\121"
#define SKINNY_DISP_CAN_NOT_COMPLETE_TRANSFER "\200\122"
#define SKINNY_DISP_CAN_NOT_JOIN_CALLS "\200\123"
#define SKINNY_DISP_MCID_SUCCESSFUL "\200\124"
#define SKINNY_DISP_NUMBER_NOT_CONFIGURED "\200\125"
#define SKINNY_DISP_SECURITY_ERROR "\200\126"
#define SKINNY_DISP_VIDEO_BANDWIDTH_UNAVAILABLE "\200\127"
#define SKINNY_DISP_VIDMODE "\200\130"
#define SKINNY_DISP_MAX_CALL_DURATION_TIMEOUT "\200\131"
#define SKINNY_DISP_MAX_HOLD_DURATION_TIMEOUT "\200\132"
#define SKINNY_DISP_OPICKUP "\200\133"
#define SKINNY_DISP_EXTERNAL_TRANSFER_RESTRICTED "\200\141"
#define SKINNY_DISP_MAC_ADDRESS "\200\145"
#define SKINNY_DISP_HOST_NAME "\200\146"
#define SKINNY_DISP_DOMAIN_NAME "\200\147"
#define SKINNY_DISP_IP_ADDRESS "\200\150"
#define SKINNY_DISP_SUBNET_MASK "\200\151"
#define SKINNY_DISP_TFTP_SERVER_1 "\200\152"
#define SKINNY_DISP_DEFAULT_ROUTER_1 "\200\153"
#define SKINNY_DISP_DEFAULT_ROUTER_2 "\200\154"
#define SKINNY_DISP_DEFAULT_ROUTER_3 "\200\155"
#define SKINNY_DISP_DEFAULT_ROUTER_4 "\200\156"
#define SKINNY_DISP_DEFAULT_ROUTER_5 "\200\157"
#define SKINNY_DISP_DNS_SERVER_1 "\200\160"
#define SKINNY_DISP_DNS_SERVER_2 "\200\161"
#define SKINNY_DISP_DNS_SERVER_3 "\200\162"
#define SKINNY_DISP_DNS_SERVER_4 "\200\163"
#define SKINNY_DISP_DNS_SERVER_5 "\200\164"
#define SKINNY_DISP_OPERATIONAL_VLAN_ID "\200\165"
#define SKINNY_DISP_ADMIN_VLAN_ID "\200\166"
#define SKINNY_DISP_CALL_MANAGER_1 "\200\167"
#define SKINNY_DISP_CALL_MANAGER_2 "\200\170"
#define SKINNY_DISP_CALL_MANAGER_3 "\200\171"
#define SKINNY_DISP_CALL_MANAGER_4 "\200\172"
#define SKINNY_DISP_CALL_MANAGER_5 "\200\173"
#define SKINNY_DISP_INFORMATION_URL "\200\174"
#define SKINNY_DISP_DIRECTORIES_URL "\200\175"
#define SKINNY_DISP_MESSAGES_URL "\200\176"
#define SKINNY_DISP_SERVICES_URL "\200\177"
#endif /* _SKINNY_LABELS_H */
/* For Emacs:
* Local Variables:
* mode:c
* indent-tabs-mode:t
* tab-width:4
* c-basic-offset:4
* End:
* For VIM:
* vim:set softtabstop=4 shiftwidth=4 tabstop=4:
*/
......@@ -43,7 +43,7 @@ struct skinny_table SKINNY_MESSAGE_TYPES[] = {
{STIMULUS_MESSAGE, "StimulusMessage"},
{OFF_HOOK_MESSAGE, "OffHookMessage"},
{ON_HOOK_MESSAGE, "OnHookMessage"},
{ FORWARD_STAT_REQ_MESSAGE, "ForwardStatReqMessage"},
{FORWARD_STAT_REQ_MESSAGE, "ForwardStatReqMessage"},
{SPEED_DIAL_STAT_REQ_MESSAGE, "SpeedDialStatReqMessage"},
{LINE_STAT_REQ_MESSAGE, "LineStatReqMessage"},
{CONFIG_STAT_REQ_MESSAGE, "ConfigStatReqMessage"},
......@@ -132,6 +132,19 @@ SKINNY_DECLARE_STR2ID(skinny_str2message_type, SKINNY_MESSAGE_TYPES, -1)
SKINNY_DECLARE_ID2STR(skinny_device_type2str, SKINNY_DEVICE_TYPES, "UnknownDeviceType")
SKINNY_DECLARE_STR2ID(skinny_str2device_type, SKINNY_DEVICE_TYPES, -1)
struct skinny_table SKINNY_TONS[] = {
{SKINNY_TONE_SILENCE, "Silence"},
{SKINNY_TONE_DIALTONE, "DialTone"},
{SKINNY_TONE_BUSYTONE, "BusyTone"},
{SKINNY_TONE_ALERT, "Alert"},
{SKINNY_TONE_REORDER, "Reorder"},
{SKINNY_TONE_CALLWAITTONE, "CallWaitTone"},
{SKINNY_TONE_NOTONE, "NoTone"},
{0, NULL}
};
SKINNY_DECLARE_ID2STR(skinny_tone2str, SKINNY_TONS, "UnknownTone")
SKINNY_DECLARE_STR2ID(skinny_str2tone, SKINNY_TONS, -1)
struct skinny_table SKINNY_RING_TYPES[] = {
{SKINNY_RING_OFF, "RingOff"},
{SKINNY_RING_INSIDE, "RingInside"},
......@@ -275,6 +288,132 @@ SKINNY_DECLARE_STR2ID(skinny_str2accessory_type, SKINNY_ACCESSORY_TYPES, -1)
SKINNY_DECLARE_ID2STR(skinny_accessory_state2str, SKINNY_ACCESSORY_STATES, "AccessoryStateUnknown")
SKINNY_DECLARE_STR2ID(skinny_str2accessory_state, SKINNY_ACCESSORY_STATES, -1)
struct skinny_table SKINNY_TEXTIDS[] = {
{SKINNY_TEXTID_EMPTY, "Empty"},
{SKINNY_TEXTID_REDIAL, "Redial"},
{SKINNY_TEXTID_NEWCALL, "Newcall"},
{SKINNY_TEXTID_HOLD, "Hold"},
{SKINNY_TEXTID_TRANSFER, "Transfer"},
{SKINNY_TEXTID_CFWDALL, "Cfwdall"},
{SKINNY_TEXTID_CFWDBUSY, "Cfwdbusy"},
{SKINNY_TEXTID_CFWDNOANSWER, "Cfwdnoanswer"},
{SKINNY_TEXTID_BACKSPACE, "Backspace"},
{SKINNY_TEXTID_ENDCALL, "Endcall"},
{SKINNY_TEXTID_RESUME, "Resume"},
{SKINNY_TEXTID_ANSWER, "Answer"},
{SKINNY_TEXTID_INFO, "Info"},
{SKINNY_TEXTID_CONF, "Conf"},
{SKINNY_TEXTID_PARK, "Park"},
{SKINNY_TEXTID_JOIN, "Join"},
{SKINNY_TEXTID_MEETME, "Meetme"},
{SKINNY_TEXTID_CALLPICKUP, "Callpickup"},
{SKINNY_TEXTID_GRPCALLPICKUP, "Grpcallpickup"},
{SKINNY_TEXTID_YOUR_CURRENT_OPTIONS, "Your Current Options"},
{SKINNY_TEXTID_OFF_HOOK, "Off Hook"},
{SKINNY_TEXTID_ON_HOOK, "On Hook"},
{SKINNY_TEXTID_RING_OUT, "Ring Out"},
{SKINNY_TEXTID_FROM, "From"},
{SKINNY_TEXTID_CONNECTED, "Connected"},
{SKINNY_TEXTID_BUSY, "Busy"},
{SKINNY_TEXTID_LINE_IN_USE, "Line In Use"},
{SKINNY_TEXTID_CALL_WAITING, "Call Waiting"},
{SKINNY_TEXTID_CALL_TRANSFER, "Call Transfer"},
{SKINNY_TEXTID_CALL_PARK, "Call Park"},
{SKINNY_TEXTID_CALL_PROCEED, "Call Proceed"},
{SKINNY_TEXTID_IN_USE_REMOTE, "In Use Remote"},
{SKINNY_TEXTID_ENTER_NUMBER, "Enter Number"},
{SKINNY_TEXTID_CALL_PARK_AT, "Call Park At"},
{SKINNY_TEXTID_PRIMARY_ONLY, "Primary Only"},
{SKINNY_TEXTID_TEMP_FAIL, "Temp Fail"},
{SKINNY_TEXTID_YOU_HAVE_VOICEMAIL, "You Have Voicemail"},
{SKINNY_TEXTID_FORWARDED_TO, "Forwarded To"},
{SKINNY_TEXTID_CAN_NOT_COMPLETE_CONFERENCE, "Can Not Complete Conference"},
{SKINNY_TEXTID_NO_CONFERENCE_BRIDGE, "No Conference Bridge"},
{SKINNY_TEXTID_CAN_NOT_HOLD_PRIMARY_CONTROL, "Can Not Hold Primary Control"},
{SKINNY_TEXTID_INVALID_CONFERENCE_PARTICIPANT, "Invalid Conference Participant"},
{SKINNY_TEXTID_IN_CONFERENCE_ALREADY, "In Conference Already"},
{SKINNY_TEXTID_NO_PARTICIPANT_INFO, "No Participant Info"},
{SKINNY_TEXTID_EXCEED_MAXIMUM_PARTIES, "Exceed Maximum Parties"},
{SKINNY_TEXTID_KEY_IS_NOT_ACTIVE, "Key Is Not Active"},
{SKINNY_TEXTID_ERROR_NO_LICENSE, "Error No License"},
{SKINNY_TEXTID_ERROR_DBCONFIG, "Error Dbconfig"},
{SKINNY_TEXTID_ERROR_DATABASE, "Error Database"},
{SKINNY_TEXTID_ERROR_PASS_LIMIT, "Error Pass Limit"},
{SKINNY_TEXTID_ERROR_UNKNOWN, "Error Unknown"},
{SKINNY_TEXTID_ERROR_MISMATCH, "Error Mismatch"},
{SKINNY_TEXTID_CONFERENCE, "Conference"},
{SKINNY_TEXTID_PARK_NUMBER, "Park Number"},
{SKINNY_TEXTID_PRIVATE, "Private"},
{SKINNY_TEXTID_NOT_ENOUGH_BANDWIDTH, "Not Enough Bandwidth"},
{SKINNY_TEXTID_UNKNOWN_NUMBER, "Unknown Number"},
{SKINNY_TEXTID_RMLSTC, "Rmlstc"},
{SKINNY_TEXTID_VOICEMAIL, "Voicemail"},
{SKINNY_TEXTID_IMMDIV, "Immdiv"},
{SKINNY_TEXTID_INTRCPT, "Intrcpt"},
{SKINNY_TEXTID_SETWTCH, "Setwtch"},
{SKINNY_TEXTID_TRNSFVM, "Trnsfvm"},
{SKINNY_TEXTID_DND, "Dnd"},
{SKINNY_TEXTID_DIVALL, "Divall"},
{SKINNY_TEXTID_CALLBACK, "Callback"},
{SKINNY_TEXTID_NETWORK_CONGESTION_REROUTING, "Network Congestion Rerouting"},
{SKINNY_TEXTID_BARGE, "Barge"},
{SKINNY_TEXTID_FAILED_TO_SETUP_BARGE, "Failed To Setup Barge"},
{SKINNY_TEXTID_ANOTHER_BARGE_EXISTS, "Another Barge Exists"},
{SKINNY_TEXTID_INCOMPATIBLE_DEVICE_TYPE, "Incompatible Device Type"},
{SKINNY_TEXTID_NO_PARK_NUMBER_AVAILABLE, "No Park Number Available"},
{SKINNY_TEXTID_CALLPARK_REVERSION, "Callpark Reversion"},
{SKINNY_TEXTID_SERVICE_IS_NOT_ACTIVE, "Service Is Not Active"},
{SKINNY_TEXTID_HIGH_TRAFFIC_TRY_AGAIN_LATER, "High Traffic Try Again Later"},
{SKINNY_TEXTID_QRT, "Qrt"},
{SKINNY_TEXTID_MCID, "Mcid"},
{SKINNY_TEXTID_DIRTRFR, "Dirtrfr"},
{SKINNY_TEXTID_SELECT, "Select"},
{SKINNY_TEXTID_CONFLIST, "Conflist"},
{SKINNY_TEXTID_IDIVERT, "Idivert"},
{SKINNY_TEXTID_CBARGE, "Cbarge"},
{SKINNY_TEXTID_CAN_NOT_COMPLETE_TRANSFER, "Can Not Complete Transfer"},
{SKINNY_TEXTID_CAN_NOT_JOIN_CALLS, "Can Not Join Calls"},
{SKINNY_TEXTID_MCID_SUCCESSFUL, "Mcid Successful"},
{SKINNY_TEXTID_NUMBER_NOT_CONFIGURED, "Number Not Configured"},
{SKINNY_TEXTID_SECURITY_ERROR, "Security Error"},
{SKINNY_TEXTID_VIDEO_BANDWIDTH_UNAVAILABLE, "Video Bandwidth Unavailable"},
{SKINNY_TEXTID_VIDMODE, "Vidmode"},
{SKINNY_TEXTID_MAX_CALL_DURATION_TIMEOUT, "Max Call Duration Timeout"},
{SKINNY_TEXTID_MAX_HOLD_DURATION_TIMEOUT, "Max Hold Duration Timeout"},
{SKINNY_TEXTID_OPICKUP, "Opickup"},
{SKINNY_TEXTID_EXTERNAL_TRANSFER_RESTRICTED, "External Transfer Restricted"},
{SKINNY_TEXTID_MAC_ADDRESS, "Mac Address"},
{SKINNY_TEXTID_HOST_NAME, "Host Name"},
{SKINNY_TEXTID_DOMAIN_NAME, "Domain Name"},
{SKINNY_TEXTID_IP_ADDRESS, "Ip Address"},
{SKINNY_TEXTID_SUBNET_MASK, "Subnet Mask"},
{SKINNY_TEXTID_TFTP_SERVER_1, "Tftp Server 1"},
{SKINNY_TEXTID_DEFAULT_ROUTER_1, "Default Router 1"},
{SKINNY_TEXTID_DEFAULT_ROUTER_2, "Default Router 2"},
{SKINNY_TEXTID_DEFAULT_ROUTER_3, "Default Router 3"},
{SKINNY_TEXTID_DEFAULT_ROUTER_4, "Default Router 4"},
{SKINNY_TEXTID_DEFAULT_ROUTER_5, "Default Router 5"},
{SKINNY_TEXTID_DNS_SERVER_1, "Dns Server 1"},
{SKINNY_TEXTID_DNS_SERVER_2, "Dns Server 2"},
{SKINNY_TEXTID_DNS_SERVER_3, "Dns Server 3"},
{SKINNY_TEXTID_DNS_SERVER_4, "Dns Server 4"},
{SKINNY_TEXTID_DNS_SERVER_5, "Dns Server 5"},
{SKINNY_TEXTID_OPERATIONAL_VLAN_ID, "Operational Vlan Id"},
{SKINNY_TEXTID_ADMIN_VLAN_ID, "Admin Vlan Id"},
{SKINNY_TEXTID_CALL_MANAGER_1, "Call Manager 1"},
{SKINNY_TEXTID_CALL_MANAGER_2, "Call Manager 2"},
{SKINNY_TEXTID_CALL_MANAGER_3, "Call Manager 3"},
{SKINNY_TEXTID_CALL_MANAGER_4, "Call Manager 4"},
{SKINNY_TEXTID_CALL_MANAGER_5, "Call Manager 5"},
{SKINNY_TEXTID_INFORMATION_URL, "Information Url"},
{SKINNY_TEXTID_DIRECTORIES_URL, "Directories Url"},
{SKINNY_TEXTID_MESSAGES_URL, "Messages Url"},
{SKINNY_TEXTID_SERVICES_URL, "Services Url"},
{0, NULL}
};
SKINNY_DECLARE_ID2STR(skinny_textid2str, SKINNY_TEXTIDS, "Unknown")
SKINNY_DECLARE_STR2ID(skinny_str2textid, SKINNY_TEXTIDS, -1)
/* For Emacs:
* Local Variables:
* mode:c
......
......@@ -106,6 +106,10 @@ enum skinny_tone {
SKINNY_TONE_CALLWAITTONE = 0x2D,
SKINNY_TONE_NOTONE = 0x7F,
};
extern struct skinny_table SKINNY_TONES[9];
const char *skinny_tone2str(uint32_t id);
uint32_t skinny_str2tone(const char *str);
#define SKINNY_PUSH_TONES SKINNY_DECLARE_PUSH_MATCH(SKINNY_TONES)
enum skinny_ring_type {
SKINNY_RING_OFF = 1,
......@@ -269,6 +273,134 @@ const char *skinny_accessory_state2str(uint32_t id);
uint32_t skinny_str2accessory_state(const char *str);
#define SKINNY_PUSH_ACCESSORY_STATES SKINNY_DECLARE_PUSH_MATCH(SKINNY_ACCESSORY_STATES)
enum skinny_label {
SKINNY_TEXTID_EMPTY = 0,
SKINNY_TEXTID_REDIAL = 1,
SKINNY_TEXTID_NEWCALL = 2,
SKINNY_TEXTID_HOLD = 3,
SKINNY_TEXTID_TRANSFER = 4,
SKINNY_TEXTID_CFWDALL = 5,
SKINNY_TEXTID_CFWDBUSY = 6,
SKINNY_TEXTID_CFWDNOANSWER = 7,
SKINNY_TEXTID_BACKSPACE = 8,
SKINNY_TEXTID_ENDCALL = 9,
SKINNY_TEXTID_RESUME = 10,
SKINNY_TEXTID_ANSWER = 11,
SKINNY_TEXTID_INFO = 12,
SKINNY_TEXTID_CONF = 13,
SKINNY_TEXTID_PARK = 14,
SKINNY_TEXTID_JOIN = 15,
SKINNY_TEXTID_MEETME = 16,
SKINNY_TEXTID_CALLPICKUP = 17,
SKINNY_TEXTID_GRPCALLPICKUP = 18,
SKINNY_TEXTID_YOUR_CURRENT_OPTIONS = 19,
SKINNY_TEXTID_OFF_HOOK = 20,
SKINNY_TEXTID_ON_HOOK = 21,
SKINNY_TEXTID_RING_OUT = 22,
SKINNY_TEXTID_FROM = 23,
SKINNY_TEXTID_CONNECTED = 24,
SKINNY_TEXTID_BUSY = 25,
SKINNY_TEXTID_LINE_IN_USE = 26,
SKINNY_TEXTID_CALL_WAITING = 27,
SKINNY_TEXTID_CALL_TRANSFER = 28,
SKINNY_TEXTID_CALL_PARK = 29,
SKINNY_TEXTID_CALL_PROCEED = 30,
SKINNY_TEXTID_IN_USE_REMOTE = 31,
SKINNY_TEXTID_ENTER_NUMBER = 32,
SKINNY_TEXTID_CALL_PARK_AT = 33,
SKINNY_TEXTID_PRIMARY_ONLY = 34,
SKINNY_TEXTID_TEMP_FAIL = 35,
SKINNY_TEXTID_YOU_HAVE_VOICEMAIL = 36,
SKINNY_TEXTID_FORWARDED_TO = 37,
SKINNY_TEXTID_CAN_NOT_COMPLETE_CONFERENCE = 38,
SKINNY_TEXTID_NO_CONFERENCE_BRIDGE = 39,
SKINNY_TEXTID_CAN_NOT_HOLD_PRIMARY_CONTROL = 40,
SKINNY_TEXTID_INVALID_CONFERENCE_PARTICIPANT = 41,
SKINNY_TEXTID_IN_CONFERENCE_ALREADY = 42,
SKINNY_TEXTID_NO_PARTICIPANT_INFO = 43,
SKINNY_TEXTID_EXCEED_MAXIMUM_PARTIES = 44,
SKINNY_TEXTID_KEY_IS_NOT_ACTIVE = 45,
SKINNY_TEXTID_ERROR_NO_LICENSE = 46,
SKINNY_TEXTID_ERROR_DBCONFIG = 47,
SKINNY_TEXTID_ERROR_DATABASE = 48,
SKINNY_TEXTID_ERROR_PASS_LIMIT = 49,
SKINNY_TEXTID_ERROR_UNKNOWN = 50,
SKINNY_TEXTID_ERROR_MISMATCH = 51,
SKINNY_TEXTID_CONFERENCE = 52,
SKINNY_TEXTID_PARK_NUMBER = 53,
SKINNY_TEXTID_PRIVATE = 54,
SKINNY_TEXTID_NOT_ENOUGH_BANDWIDTH = 55,
SKINNY_TEXTID_UNKNOWN_NUMBER = 56,
SKINNY_TEXTID_RMLSTC = 57,
SKINNY_TEXTID_VOICEMAIL = 58,
SKINNY_TEXTID_IMMDIV = 59,
SKINNY_TEXTID_INTRCPT = 60,
SKINNY_TEXTID_SETWTCH = 61,
SKINNY_TEXTID_TRNSFVM = 62,
SKINNY_TEXTID_DND = 63,
SKINNY_TEXTID_DIVALL = 64,
SKINNY_TEXTID_CALLBACK = 65,
SKINNY_TEXTID_NETWORK_CONGESTION_REROUTING = 66,
SKINNY_TEXTID_BARGE = 67,
SKINNY_TEXTID_FAILED_TO_SETUP_BARGE = 68,
SKINNY_TEXTID_ANOTHER_BARGE_EXISTS = 69,
SKINNY_TEXTID_INCOMPATIBLE_DEVICE_TYPE = 70,
SKINNY_TEXTID_NO_PARK_NUMBER_AVAILABLE = 71,
SKINNY_TEXTID_CALLPARK_REVERSION = 72,
SKINNY_TEXTID_SERVICE_IS_NOT_ACTIVE = 73,
SKINNY_TEXTID_HIGH_TRAFFIC_TRY_AGAIN_LATER = 74,
SKINNY_TEXTID_QRT = 75,
SKINNY_TEXTID_MCID = 76,
SKINNY_TEXTID_DIRTRFR = 77,
SKINNY_TEXTID_SELECT = 78,
SKINNY_TEXTID_CONFLIST = 79,
SKINNY_TEXTID_IDIVERT = 80,
SKINNY_TEXTID_CBARGE = 81,
SKINNY_TEXTID_CAN_NOT_COMPLETE_TRANSFER = 82,
SKINNY_TEXTID_CAN_NOT_JOIN_CALLS = 83,
SKINNY_TEXTID_MCID_SUCCESSFUL = 84,
SKINNY_TEXTID_NUMBER_NOT_CONFIGURED = 85,
SKINNY_TEXTID_SECURITY_ERROR = 86,
SKINNY_TEXTID_VIDEO_BANDWIDTH_UNAVAILABLE = 87,
SKINNY_TEXTID_VIDMODE = 88,
SKINNY_TEXTID_MAX_CALL_DURATION_TIMEOUT = 89,
SKINNY_TEXTID_MAX_HOLD_DURATION_TIMEOUT = 90,
SKINNY_TEXTID_OPICKUP = 91,
SKINNY_TEXTID_EXTERNAL_TRANSFER_RESTRICTED = 97,
SKINNY_TEXTID_MAC_ADDRESS = 101,
SKINNY_TEXTID_HOST_NAME = 102,
SKINNY_TEXTID_DOMAIN_NAME = 103,
SKINNY_TEXTID_IP_ADDRESS = 104,
SKINNY_TEXTID_SUBNET_MASK = 105,
SKINNY_TEXTID_TFTP_SERVER_1 = 106,
SKINNY_TEXTID_DEFAULT_ROUTER_1 = 107,
SKINNY_TEXTID_DEFAULT_ROUTER_2 = 108,
SKINNY_TEXTID_DEFAULT_ROUTER_3 = 109,
SKINNY_TEXTID_DEFAULT_ROUTER_4 = 110,
SKINNY_TEXTID_DEFAULT_ROUTER_5 = 111,
SKINNY_TEXTID_DNS_SERVER_1 = 112,
SKINNY_TEXTID_DNS_SERVER_2 = 113,
SKINNY_TEXTID_DNS_SERVER_3 = 114,
SKINNY_TEXTID_DNS_SERVER_4 = 115,
SKINNY_TEXTID_DNS_SERVER_5 = 116,
SKINNY_TEXTID_OPERATIONAL_VLAN_ID = 117,
SKINNY_TEXTID_ADMIN_VLAN_ID = 118,
SKINNY_TEXTID_CALL_MANAGER_1 = 119,
SKINNY_TEXTID_CALL_MANAGER_2 = 120,
SKINNY_TEXTID_CALL_MANAGER_3 = 121,
SKINNY_TEXTID_CALL_MANAGER_4 = 122,
SKINNY_TEXTID_CALL_MANAGER_5 = 123,
SKINNY_TEXTID_INFORMATION_URL = 124,
SKINNY_TEXTID_DIRECTORIES_URL = 125,
SKINNY_TEXTID_MESSAGES_URL = 126,
SKINNY_TEXTID_SERVICES_URL = 127
};
extern struct skinny_table SKINNY_TEXTIDS[128];
const char *skinny_textid2str(uint32_t id);
uint32_t skinny_str2textid(const char *str);
#define SKINNY_PUSH_TEXTIDS SKINNY_DECLARE_PUSH_MATCH(SKINNY_TEXTIDS)
#endif /* _SKINNY_TABLES_H */
/* For Emacs:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论