in src/transport/xqc_timer.c [429:463]
xqc_gp_timer_id_t xqc_timer_register_gp_timer(xqc_timer_manager_t *manager,
char *timer_name, xqc_gp_timer_timeout_pt cb, void *user_data)
{
if (timer_name == NULL
|| manager == NULL
|| cb == NULL)
{
return -XQC_EPARAM;
}
if (manager->next_gp_timer_id == XQC_GP_TIMER_ID_MAX) {
return XQC_ERROR;
}
xqc_gp_timer_t *timer = (xqc_gp_timer_t*)xqc_calloc(1, sizeof(xqc_gp_timer_t));
if (timer == NULL) {
return -XQC_EMALLOC;
}
size_t name_len = strnlen(timer_name, 1024);
timer->name = (char*)xqc_calloc(1, name_len + 1);
if (timer->name == NULL) {
xqc_free(timer);
return -XQC_EMALLOC;
}
xqc_memcpy(timer->name, timer_name, name_len);
timer->timer_is_set = XQC_FALSE;
timer->id = manager->next_gp_timer_id++;
timer->timeout_cb = cb;
timer->user_data = user_data;
xqc_list_add_tail(&timer->list, &manager->gp_timer_list);
return timer->id;
}