📄 ul_callback.c
字号:
/* * $Id: ul_callback.c,v 1.3 2004/08/24 09:00:46 janakj Exp $ * * Copyright (C) 2001-2003 FhG Fokus * * This file is part of ser, a free SIP server. * * ser is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version * * For a license to use the ser software under conditions * other than those described here, or to purchase support for this * software, please contact iptel.org by e-mail at the following addresses: * info@iptel.org * * ser is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *//* * History: * -------- * 2004-03-16 created (bogdan) */#include <stdlib.h>#include "../../dprint.h"#include "../../error.h"#include "../../mem/shm_mem.h"#include "ul_callback.h"struct ulcb_head_list* ulcb_list = 0;int init_ulcb_list(){ ulcb_list = (struct ulcb_head_list*)shm_malloc ( sizeof(struct ulcb_head_list) ); if (ulcb_list==0) { LOG(L_CRIT,"ERROR:usrloc:init_ulcb_list: no more shared mem\n"); return -1; } ulcb_list->first = 0; ulcb_list->reg_types = 0; return 1;}void destroy_ulcb_list(){ struct ul_callback *cbp, *cbp_tmp; if (!ulcb_list) return; for( cbp=ulcb_list->first; cbp ; ) { cbp_tmp = cbp; cbp = cbp->next; if (cbp_tmp->param) shm_free( cbp_tmp->param ); shm_free( cbp_tmp ); } shm_free(ulcb_list);}/* register a callback function 'f' for 'types' mask of events;*/int register_ulcb( int types, ul_cb f, void *param ){ struct ul_callback *cbp; /* are the callback types valid?... */ if ( types<0 || types>ULCB_MAX ) { LOG(L_CRIT, "BUG:usrloc:register_ulcb: invalid callback types: " "mask=%d\n",types); return E_BUG; } /* we don't register null functions */ if (f==0) { LOG(L_CRIT, "BUG:usrloc:register_ulcb: null callback function\n"); return E_BUG; } /* build a new callback structure */ if (!(cbp=(struct ul_callback*)shm_malloc(sizeof( struct ul_callback)))) { LOG(L_ERR, "ERROR:usrloc:register_ulcb: out of shm. mem\n"); return E_OUT_OF_MEM; } /* link it into the proper place... */ cbp->next = ulcb_list->first; ulcb_list->first = cbp; ulcb_list->reg_types |= types; /* ... and fill it up */ cbp->callback = f; cbp->param = param; cbp->types = types; if (cbp->next) cbp->id = cbp->next->id+1; else cbp->id = 0; return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -