void build_call_state_event(ics_event_t *event, int call_id, char *state) { int state_len = sizeof(event->call_state_event.state); event->call_state_event.eventid = ICS_CALL_STATE; event->call_state_event.call_id = call_id; ICS_EXIT_IF_TRUE(sizeof(state) < 0 , "invalid value reason_len"); ICS_EXIT_IF_TRUE(sizeof(state) > state_len, "Overflow in ics_call_state_event.state"); strncpy(event->call_state_event.state, state, state_len); }
void build_transfer_event(ics_event_t *event, int call_id, int st_code, char *st_text) { int len = sizeof(event->transfer_event.st_text); event->transfer_event.eventid = ICS_TRANSFER; event->transfer_event.call_id = call_id; event->transfer_event.st_code = st_code; ICS_EXIT_IF_TRUE(sizeof(st_text) < 0, "Invalid value st_text"); ICS_EXIT_IF_TRUE(sizeof(st_text) > len, "Overflow in ics_transfer_event.st_text"); strncpy(event->transfer_event.st_text, st_text, len); }
void build_reg_state_event(ics_event_t *event, int account_id, int is_registration, int code, char *reason, int reason_len) { event->reg_state_event.eventid = ICS_REG_STATE; event->reg_state_event.account_id = account_id; event->reg_state_event.is_registration = is_registration; event->reg_state_event.code = code; ICS_EXIT_IF_TRUE(reason_len < 0, "invalid value reason_len"); ICS_EXIT_IF_TRUE(reason_len > sizeof(event->reg_state_event.reason), "Overflow in ics_reg_state_event.reason"); strncpy(event->reg_state_event.reason, reason, reason_len); //event->reg_state_event.reason[reason_len] = '\0'; }
/** * \fn _ics_core_connect() * \brief Tao kenh ket noi (TCP,UDP,TLS,...) * \param agr1: ics_t *data * agr2: int port */ static void _ics_core_connect(ics_t *data, int port) { pj_status_t status; pjsua_transport_config cfg; pjsua_transport_config_default(&cfg); cfg.port = port; status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &cfg, NULL); ICS_EXIT_IF_TRUE(status != PJ_SUCCESS, "Cannot create connect"); status = pjsua_start(); ICS_EXIT_IF_TRUE(status != PJ_SUCCESS, "Cannot start pjsua"); }
void build_incoming_call_event(ics_event_t *event, int account_id, int call_id, char *remote_contact, char *local_contact) { int local_len = sizeof(event->incoming_call_event.local_contact); int remote_len = sizeof(event->incoming_call_event.remote_contact); event->incoming_call_event.eventid = ICS_INCOMING_CALL; event->incoming_call_event.account_id = account_id; event->incoming_call_event.call_id = call_id; ICS_EXIT_IF_TRUE((sizeof(remote_contact) < 0 || sizeof(local_contact) < 0), "invalid value reason_len"); ICS_EXIT_IF_TRUE(sizeof(local_contact) > local_len, "Overflow in ics_incoming_call_event.local_contact"); ICS_EXIT_IF_TRUE(sizeof(remote_contact) > remote_len, "Overflow in ics_incoming_call_event.remote_contact"); strncpy(event->incoming_call_event.remote_contact, remote_contact, remote_len); strncpy(event->incoming_call_event.local_contact, local_contact, local_len); //event->incoming_call_event.remote_contact[remote_len] = '\0'; //event->incoming_call_event.local_contact[local_len] = '\0'; }
/** * \fn process_event() * \brief Xu ly cac event, trong vi du la in ra cac thong tin cua event * \param agr1: ics_event_t *event */ void process_event(ics_event_t *event) { ICS_EXIT_IF_TRUE(event->event.eventid >= ICS_EVENT_END, "Unknown event id\n"); SHOW_LOG(3, "Event type: %s\n", ICS_EVENT_NAME[event->event.eventid]); switch(event->event.eventid){ case ICS_REG_START: on_reg_start_p(event->reg_start_event.account_id); break; case ICS_REG_STATE: on_reg_state_p(event->reg_state_event.account_id, (event->reg_state_event.is_registration < 1 || event->reg_state_event.code<0 || event->reg_state_event.code >= 300 ? "No" : "Yes"), event->reg_state_event.code, event->reg_state_event.reason); break; case ICS_INCOMING_CALL: on_incoming_call_p(event->incoming_call_event.account_id, event->incoming_call_event.call_id, event->incoming_call_event.st_code, event->incoming_call_event.remote_contact, event->incoming_call_event.local_contact); break; case ICS_CALL_STATE: on_call_state_p(event->call_state_event.call_id, event->call_state_event.state_code, event->call_state_event.state, event->call_state_event.remote_contact); break; case ICS_TRANSFER: on_call_transfer_p(event->transfer_event.call_id, event->transfer_event.st_code, event->transfer_event.st_text, event->transfer_event.remote_contact); break; case ICS_CALL_MEDIA_STATE: on_call_media_state_p(event->call_media_state_event.call_id, event->call_media_state_event.st_code, event->call_media_state_event.remote_contact); break; default: SHOW_LOG(3, "Invalid event id %d\n", event->event.eventid); break; } }