xqc_gp_timer_id_t xqc_timer_register_gp_timer()

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;
}