270 lines
7.4 KiB
C
Executable File
270 lines
7.4 KiB
C
Executable File
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "cpr_types.h"
|
|
#include "cpr_stdio.h"
|
|
#include "cpr_string.h"
|
|
#include "cpr_memory.h"
|
|
#include "cpr_stdlib.h"
|
|
#include "ccapi.h"
|
|
#include "ccsip_task.h"
|
|
#include "debug.h"
|
|
#include "phone_debug.h"
|
|
#include "phntask.h"
|
|
#include "phone.h"
|
|
#include "text_strings.h"
|
|
#include "string_lib.h"
|
|
#include "gsm.h"
|
|
#include "vcm.h"
|
|
#include "subapi.h"
|
|
#include "misc_apps_task.h"
|
|
|
|
|
|
static void
|
|
sub_print_msg (char *pData, int len)
|
|
{
|
|
int ix;
|
|
int msg_id = *((int *)pData);
|
|
|
|
buginf("\nCCAPI: cc_msg= %s, 0x=", cc_msg_name((cc_msgs_t)msg_id));
|
|
for (ix = 0; ix < len; ix++) {
|
|
if ((ix % 8 == 0) && ix) {
|
|
buginf(" ");
|
|
}
|
|
if (ix % 24 == 0) {
|
|
buginf("\n");
|
|
}
|
|
buginf("%02x ", *pData++);
|
|
}
|
|
buginf("\n");
|
|
}
|
|
|
|
cc_rcs_t
|
|
sub_send_msg (cprBuffer_t buf, uint32_t cmd, uint16_t len, cc_srcs_t dst_id)
|
|
{
|
|
cpr_status_e rc;
|
|
|
|
CC_DEBUG_MSG sub_print_msg((char *)buf, len);
|
|
|
|
switch (dst_id) {
|
|
case CC_SRC_GSM:
|
|
rc = gsm_send_msg(cmd, buf, len);
|
|
if (rc == CPR_FAILURE) {
|
|
cpr_free(buf);
|
|
}
|
|
break;
|
|
case CC_SRC_SIP:
|
|
rc = SIPTaskSendMsg(cmd, buf, len, NULL);
|
|
if (rc == CPR_FAILURE) {
|
|
cpr_free(buf);
|
|
}
|
|
break;
|
|
case CC_SRC_MISC_APP:
|
|
rc = MiscAppTaskSendMsg(cmd, buf, len);
|
|
if (rc == CPR_FAILURE) {
|
|
cpr_free(buf);
|
|
}
|
|
break;
|
|
default:
|
|
rc = CPR_FAILURE;
|
|
break;
|
|
}
|
|
|
|
return (rc == CPR_SUCCESS) ? CC_RC_SUCCESS : CC_RC_ERROR;
|
|
}
|
|
|
|
cc_rcs_t
|
|
sub_int_subnot_register (cc_srcs_t src_id, cc_srcs_t dst_id,
|
|
cc_subscriptions_t evt_pkg, void *callback_fun,
|
|
cc_srcs_t dest_task, int msg_id, void *term_callback,
|
|
int term_msg_id, long min_duration, long max_duration)
|
|
{
|
|
sipspi_msg_t *pmsg;
|
|
|
|
pmsg = (sipspi_msg_t *) cc_get_msg_buf(sizeof(*pmsg));
|
|
if (!pmsg) {
|
|
return CC_RC_ERROR;
|
|
}
|
|
|
|
pmsg->msg.subs_reg.eventPackage = evt_pkg;
|
|
pmsg->msg.subs_reg.max_duration = max_duration;
|
|
pmsg->msg.subs_reg.min_duration = min_duration;
|
|
pmsg->msg.subs_reg.subsIndCallback = (ccsipSubsIndCallbackFn_t)
|
|
callback_fun;
|
|
pmsg->msg.subs_reg.subsIndCallbackMsgID = msg_id;
|
|
pmsg->msg.subs_reg.subsIndCallbackTask = dest_task;
|
|
pmsg->msg.subs_reg.subsTermCallback = (ccsipSubsTerminateCallbackFn_t)
|
|
term_callback;
|
|
pmsg->msg.subs_reg.subsTermCallbackMsgID = term_msg_id;
|
|
|
|
return sub_send_msg((cprBuffer_t)pmsg, SIPSPI_EV_CC_SUBSCRIBE_REGISTER,
|
|
sizeof(*pmsg), dst_id);
|
|
}
|
|
|
|
/*
|
|
* Function: sub_int_subscribe()
|
|
*
|
|
* Parameters: msg_p - pointer to sipspi_msg_t (input parameter)
|
|
*
|
|
* Description: posts SIPSPI_EV_CC_SUBSCRIBE to SIP task message queue.
|
|
*
|
|
* Returns: CC_RC_ERROR - failed to post msg.
|
|
* CC_RC_SUCCESS - successful posted msg.
|
|
*/
|
|
cc_rcs_t
|
|
sub_int_subscribe (sipspi_msg_t *msg_p)
|
|
{
|
|
sipspi_msg_t *pmsg;
|
|
|
|
pmsg = (sipspi_msg_t *) cc_get_msg_buf(sizeof(*pmsg));
|
|
if (!pmsg) {
|
|
return CC_RC_ERROR;
|
|
}
|
|
|
|
memcpy(pmsg, msg_p, sizeof(sipspi_msg_t));
|
|
return sub_send_msg((cprBuffer_t)pmsg, SIPSPI_EV_CC_SUBSCRIBE,
|
|
sizeof(*pmsg), CC_SRC_SIP);
|
|
}
|
|
|
|
|
|
cc_rcs_t
|
|
sub_int_subscribe_ack (cc_srcs_t src_id, cc_srcs_t dst_id, sub_id_t sub_id,
|
|
uint16_t response_code, int duration)
|
|
{
|
|
sipspi_msg_t *pmsg;
|
|
|
|
pmsg = (sipspi_msg_t *) cc_get_msg_buf(sizeof(*pmsg));
|
|
if (!pmsg) {
|
|
return CC_RC_ERROR;
|
|
}
|
|
|
|
pmsg->msg.subscribe_resp.response_code = response_code;
|
|
pmsg->msg.subscribe_resp.sub_id = sub_id;
|
|
pmsg->msg.subscribe_resp.duration = duration;
|
|
|
|
return sub_send_msg((cprBuffer_t)pmsg, SIPSPI_EV_CC_SUBSCRIBE_RESPONSE,
|
|
sizeof(*pmsg), dst_id);
|
|
}
|
|
|
|
|
|
cc_rcs_t
|
|
sub_int_notify (cc_srcs_t src_id, cc_srcs_t dst_id, sub_id_t sub_id,
|
|
ccsipNotifyResultCallbackFn_t notifyResultCallback,
|
|
int subsNotResCallbackMsgID, ccsip_event_data_t * eventData,
|
|
subscriptionState subState)
|
|
{
|
|
sipspi_msg_t *pmsg;
|
|
|
|
pmsg = (sipspi_msg_t *) cc_get_msg_buf(sizeof(*pmsg));
|
|
if (!pmsg) {
|
|
return CC_RC_ERROR;
|
|
}
|
|
|
|
pmsg->msg.notify.eventData = eventData;
|
|
pmsg->msg.notify.notifyResultCallback = notifyResultCallback;
|
|
pmsg->msg.notify.sub_id = sub_id;
|
|
pmsg->msg.notify.subsNotResCallbackMsgID = subsNotResCallbackMsgID;
|
|
pmsg->msg.notify.subState = subState;
|
|
|
|
return sub_send_msg((cprBuffer_t) pmsg, SIPSPI_EV_CC_NOTIFY,
|
|
sizeof(*pmsg), dst_id);
|
|
}
|
|
|
|
/*
|
|
* Function: sub_int_notify_ack()
|
|
*
|
|
* Parameters: sub_id - subcription id for sip stack to track the subscription.
|
|
* response_code - response code to be sent in response to NOTIFY.
|
|
* cseq : CSeq for which response is being sent.
|
|
*
|
|
* Description: posts SIPSPI_EV_CC_NOTIFY_RESPONSE to SIP task message queue.
|
|
*
|
|
* Returns: CC_RC_ERROR - failed to post msg.
|
|
* CC_RC_SUCCESS - successful posted msg.
|
|
*/
|
|
cc_rcs_t
|
|
sub_int_notify_ack (sub_id_t sub_id, uint16_t response_code, uint32_t cseq)
|
|
{
|
|
sipspi_msg_t *pmsg;
|
|
|
|
pmsg = (sipspi_msg_t *) cc_get_msg_buf(sizeof(*pmsg));
|
|
if (!pmsg) {
|
|
return CC_RC_ERROR;
|
|
}
|
|
|
|
pmsg->msg.notify_resp.sub_id = sub_id;
|
|
pmsg->msg.notify_resp.response_code = response_code;
|
|
pmsg->msg.notify_resp.cseq = cseq;
|
|
|
|
return sub_send_msg((cprBuffer_t)pmsg, SIPSPI_EV_CC_NOTIFY_RESPONSE,
|
|
sizeof(*pmsg), CC_SRC_SIP);
|
|
}
|
|
|
|
|
|
/*
|
|
* Function: sub_int_subscribe_term()
|
|
*
|
|
* Parameters: sub_id - subcription id for sip stack to track the subscription.
|
|
* immediate - boolean flag to indicate if the termination be immediate.
|
|
* request_id - request id significant for out going subscriptions
|
|
* event_package - event package type
|
|
*
|
|
* Description: posts SIPSPI_EV_CC_SUBSCRIPTION_TERMINATED to SIP task message queue.
|
|
*
|
|
* Returns: CC_RC_ERROR - failed to post msg.
|
|
* CC_RC_SUCCESS - successful posted msg.
|
|
*/
|
|
cc_rcs_t
|
|
sub_int_subscribe_term (sub_id_t sub_id, boolean immediate, int request_id,
|
|
cc_subscriptions_t event_package)
|
|
{
|
|
sipspi_msg_t *pmsg;
|
|
|
|
pmsg = (sipspi_msg_t *) cc_get_msg_buf(sizeof(*pmsg));
|
|
if (!pmsg) {
|
|
return CC_RC_ERROR;
|
|
}
|
|
|
|
pmsg->msg.subs_term.immediate = immediate;
|
|
pmsg->msg.subs_term.sub_id = sub_id;
|
|
pmsg->msg.subs_term.request_id = request_id;
|
|
pmsg->msg.subs_term.eventPackage = event_package;
|
|
|
|
return sub_send_msg((cprBuffer_t)pmsg, SIPSPI_EV_CC_SUBSCRIPTION_TERMINATED,
|
|
sizeof(*pmsg), CC_SRC_SIP);
|
|
}
|
|
|
|
cc_rcs_t
|
|
sip_send_message (ccsip_sub_not_data_t * msg_data, cc_srcs_t dest_id, int msg_id)
|
|
{
|
|
ccsip_sub_not_data_t *pmsg;
|
|
|
|
pmsg = (ccsip_sub_not_data_t *) cc_get_msg_buf(sizeof(*pmsg));
|
|
|
|
if (!pmsg) {
|
|
return CC_RC_ERROR;
|
|
}
|
|
|
|
memcpy(pmsg, msg_data, sizeof(*pmsg));
|
|
|
|
return sub_send_msg((cprBuffer_t)pmsg, msg_id, sizeof(*pmsg), dest_id);
|
|
}
|
|
|
|
|
|
cc_rcs_t
|
|
app_send_message (void *msg_data, int msg_len, cc_srcs_t dest_id, int msg_id)
|
|
{
|
|
void *pmsg;
|
|
|
|
pmsg = (void *) cc_get_msg_buf(msg_len);
|
|
|
|
if (!pmsg) {
|
|
return CC_RC_ERROR;
|
|
}
|
|
|
|
memcpy(pmsg, msg_data, msg_len);
|
|
|
|
return sub_send_msg((cprBuffer_t)pmsg, msg_id, (uint16_t)msg_len, dest_id);
|
|
}
|