{"SoftKeyEventMessage", SOFT_KEY_EVENT_MESSAGE},
{"UnregisterMessage", UNREGISTER_MESSAGE},
{"SoftKeyTemplateReqMessage", SOFT_KEY_TEMPLATE_REQ_MESSAGE},
+ {"ServiceUrlStatReqMessage", SERVICE_URL_STAT_REQ_MESSAGE},
{"FeatureStatReqMessage", FEATURE_STAT_REQ_MESSAGE},
{"HeadsetStatusMessage", HEADSET_STATUS_MESSAGE},
{"RegisterAvailableLinesMessage", REGISTER_AVAILABLE_LINES_MESSAGE},
{"UnregisterAckMessage", UNREGISTER_ACK_MESSAGE},
{"DialedNumberMessage", DIALED_NUMBER_MESSAGE},
{"FeatureResMessage", FEATURE_STAT_RES_MESSAGE},
+ {"ServiceUrlStatMessage", SERVICE_URL_STAT_RES_MESSAGE},
{NULL, 0}
};
SKINNY_DECLARE_ID2STR(skinny_message_type2str, SKINNY_MESSAGE_TYPES, "UnknownMessage")
{"SpeedDial", SKINNY_BUTTON_SPEED_DIAL},
{"Line", SKINNY_BUTTON_LINE},
{"Voicemail", SKINNY_BUTTON_VOICEMAIL},
+ {"Privacy", SKINNY_BUTTON_PRIVACY},
+ {"ServiceUrl", SKINNY_BUTTON_SERVICE_URL},
{"Undefined", SKINNY_BUTTON_UNDEFINED},
{NULL, 0}
};
*button = helper.button;
}
+struct service_url_get_helper {
+ uint32_t pos;
+ struct service_url_stat_res_message *button;
+};
+
+int skinny_service_url_get_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+ struct service_url_get_helper *helper = pArg;
+
+ helper->pos++;
+ if (helper->pos == atoi(argv[0])) { /* wanted_position */
+ helper->button->index = helper->pos;
+ strncpy(helper->button->url, argv[3], 256); /* value */
+ strncpy(helper->button->display_name, argv[2], 40); /* label */
+ }
+ return 0;
+}
+
+void skinny_service_url_get(listener_t *listener, uint32_t instance, struct service_url_stat_res_message **button)
+{
+ struct service_url_get_helper helper = {0};
+ char *sql;
+
+ switch_assert(listener);
+ switch_assert(listener->profile);
+ switch_assert(listener->device_name);
+
+ helper.button = switch_core_alloc(listener->pool, sizeof(struct service_url_stat_res_message));
+
+ if ((sql = switch_mprintf(
+ "SELECT '%d' AS wanted_position, position, label, value, settings "
+ "FROM skinny_buttons "
+ "WHERE device_name='%s' AND type=%d "
+ "ORDER BY position",
+ instance,
+ listener->device_name,
+ SKINNY_BUTTON_SERVICE_URL
+ ))) {
+ skinny_execute_sql_callback(listener->profile, listener->profile->listener_mutex, sql, skinny_service_url_get_callback, &helper);
+ switch_safe_free(sql);
+ }
+ *button = helper.button;
+}
+
struct feature_get_helper {
uint32_t pos;
struct feature_stat_res_message *button;
if ((sql = switch_mprintf(
"SELECT '%d' AS wanted_position, position, label, value, settings "
"FROM skinny_buttons "
- "WHERE device_name='%s' AND NOT (type=%d OR type=%d) "
+ "WHERE device_name='%s' AND NOT (type=%d OR type=%d OR type=%d) "
"ORDER BY position",
instance,
listener->device_name,
- SKINNY_BUTTON_LINE, SKINNY_BUTTON_SPEED_DIAL
+ SKINNY_BUTTON_LINE, SKINNY_BUTTON_SPEED_DIAL, SKINNY_BUTTON_SERVICE_URL
))) {
skinny_execute_sql_callback(listener->profile, listener->profile->listener_mutex, sql, skinny_feature_get_callback, &helper);
switch_safe_free(sql);
return SWITCH_STATUS_SUCCESS;
}
+switch_status_t skinny_handle_service_url_stat_request(listener_t *listener, skinny_message_t *request)
+{
+ skinny_message_t *message;
+ struct service_url_stat_res_message *button = NULL;
+
+ skinny_check_data_length(request, sizeof(request->data.service_url_req));
+
+ message = switch_core_alloc(listener->pool, 12+sizeof(message->data.service_url_res));
+ message->type = SERVICE_URL_STAT_RES_MESSAGE;
+ message->length = 4 + sizeof(message->data.service_url_res);
+
+ skinny_service_url_get(listener, request->data.service_url_req.service_url_index, &button);
+
+ memcpy(&message->data.service_url_res, button, sizeof(struct service_url_stat_res_message));
+
+ skinny_send_reply(listener, message);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
switch_status_t skinny_handle_feature_stat_request(listener_t *listener, skinny_message_t *request)
{
skinny_message_t *message;
return skinny_handle_line_stat_request(listener, request);
case SPEED_DIAL_STAT_REQ_MESSAGE:
return skinny_handle_speed_dial_stat_request(listener, request);
+ case SERVICE_URL_STAT_REQ_MESSAGE:
+ return skinny_handle_service_url_stat_request(listener, request);
case FEATURE_STAT_REQ_MESSAGE:
return skinny_handle_feature_stat_request(listener, request);
case REGISTER_AVAILABLE_LINES_MESSAGE:
/* SoftKeyTemplateReqMessage */
#define SOFT_KEY_TEMPLATE_REQ_MESSAGE 0x0028
+/* ServiceUrlStatReqMessage */
+#define SERVICE_URL_STAT_REQ_MESSAGE 0x0033
+struct service_url_stat_req_message {
+ uint32_t service_url_index;
+};
+
/* FeatureStatReqMessage */
#define FEATURE_STAT_REQ_MESSAGE 0x0034
struct feature_stat_req_message {
uint32_t status;
};
+/* ServiceUrlStatMessage */
+#define SERVICE_URL_STAT_RES_MESSAGE 0x012F
+struct service_url_stat_res_message {
+ uint32_t index;
+ char url[256];
+ char display_name[40];
+};
/*****************************************************************************/
/* SKINNY MESSAGE */
struct alarm_message alarm;
struct open_receive_channel_ack_message open_receive_channel_ack;
struct soft_key_event_message soft_key_event;
+ struct service_url_stat_req_message service_url_req;
struct feature_stat_req_message feature_req;
struct headset_status_message headset_status;
struct register_available_lines_message reg_lines;
struct unregister_ack_message unregister_ack;
struct dialed_number_message dialed_number;
struct feature_stat_res_message feature_res;
+ struct service_url_stat_res_message service_url_res;
uint16_t as_uint16;
char as_char;
status = SWITCH_STATUS_SUCCESS;\
}
-struct skinny_table SKINNY_MESSAGE_TYPES[53];
+struct skinny_table SKINNY_MESSAGE_TYPES[55];
const char *skinny_message_type2str(uint32_t id);
uint32_t skinny_str2message_type(const char *str);
#define SKINNY_PUSH_MESSAGE_TYPES SKINNY_DECLARE_PUSH_MATCH(SKINNY_MESSAGE_TYPES)
SKINNY_BUTTON_SPEED_DIAL = 0x02,
SKINNY_BUTTON_LINE = 0x09,
SKINNY_BUTTON_VOICEMAIL = 0x0F,
+ SKINNY_BUTTON_PRIVACY = 0x13,
+ SKINNY_BUTTON_SERVICE_URL = 0x14,
SKINNY_BUTTON_UNDEFINED = 0xFF,
};
-struct skinny_table SKINNY_BUTTONS[6];
+struct skinny_table SKINNY_BUTTONS[8];
const char *skinny_button2str(uint32_t id);
uint32_t skinny_str2button(const char *str);
#define SKINNY_PUSH_STIMULI SKINNY_DECLARE_PUSH_MATCH(SKINNY_BUTTONS)