Exemple #1
0
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);
}
Exemple #2
0
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);
}
Exemple #3
0
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';
}
Exemple #4
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");
}
Exemple #5
0
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';
}
Exemple #6
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;
    }
}