⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pike.c

📁 用来作为linux中SIP SERVER,完成VOIP网络电话中服务器的功能
💻 C
字号:
/* * $Id: pike.c,v 1.23 2004/11/05 14:21:00 bogdan Exp $ * * PIKE module * * * 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: * -------- *  2003-03-11  updated to the new module exports interface (andrei) *  2003-03-11  converted to the new locking interface: locking.h -- *               major changes (andrei) *  2003-03-16  flags export parameter added (janakj) */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include "../../sr_module.h"#include "../../error.h"#include "../../dprint.h"#include "../../ut.h"#include "../../mem/shm_mem.h"#include "../../timer.h"#include "../../locking.h"#include "../../fifo_server.h"#include "ip_tree.h"#include "timer.h"#include "pike_funcs.h"#include "pike_fifo.h"MODULE_VERSIONstatic int pike_init(void);static int pike_exit(void);/* parameters */static int time_unit = 2;static int max_reqs  = 30;int timeout   = 120;/* global variables */gen_lock_t*             timer_lock=0;struct list_link*       timer = 0;static cmd_export_t cmds[]={	{"pike_check_req",  pike_check_req,  0,  0, REQUEST_ROUTE},	{0,0,0,0,0}};static param_export_t params[]={	{"sampling_time_unit",    INT_PARAM,  &time_unit},	{"reqs_density_per_unit", INT_PARAM,  &max_reqs},	{"remove_latency",        INT_PARAM,  &timeout},	{0,0,0}};struct module_exports exports= {	"pike",	cmds,	params,		pike_init,   /* module initialization function */	(response_function) 0,	(destroy_function) pike_exit,   /* module exit function */	0,	0  /* per-child init function */};static int pike_init(void){	LOG(L_INFO,"PIKE - initializing\n");	/* alloc the timer lock */	timer_lock=lock_alloc();	if (timer_lock==0) {		LOG(L_ERR,"ERROR:pike_init: alloc locks failed!\n");		goto error1;	}	/* init the lock */	if (lock_init(timer_lock)==0){		LOG(L_ERR, "ERROR:pike_init: init lock failed\n");		goto error1;	}	/* init the IP tree */	if ( init_ip_tree(max_reqs)!=0 ) {		LOG(L_ERR,"ERROR:pike_init: ip_tree creation failed!\n");		goto error2;	}	/* init timer list */	timer = (struct list_link*)shm_malloc(sizeof(struct list_link));	if (timer==0) {		LOG(L_ERR,"ERROR:pike_init: cannot alloc shm mem for timer!\n");		goto error3;	}	timer->next = timer->prev = timer;	/* registering timing functions  */	register_timer( clean_routine , 0, 1 );	register_timer( swap_routine , 0, time_unit );	/* register fifo commands */	if (register_fifo_cmd( fifo_print_ip_tree, PIKE_PRINT_IP_TREE, 0)!=1) {		LOG(L_ERR,"ERROR:pike_init: cannot register fifo cmd %s\n",			PIKE_PRINT_IP_TREE);		goto error4;	}	/* register fifo commands */	if (register_fifo_cmd( fifo_print_timer_list, PIKE_PRINT_TIMER, 0)!=1) {		LOG(L_ERR,"ERROR:pike_init: cannot register fifo cmd %s\n",			PIKE_PRINT_IP_TREE);		goto error4;	}	return 0;error4:	shm_free( timer );error3:	destroy_ip_tree();error2:	lock_destroy(timer_lock);error1:	if (timer_lock) lock_dealloc(timer_lock);	timer_lock = 0;	return -1;}static int pike_exit(void){	LOG(L_INFO,"PIKE - destroying module\n");	/* destroy semaphore */	if (timer_lock) {		lock_destroy(timer_lock);		lock_dealloc(timer_lock);	}	/* empty the timer list head */	if (timer) {		shm_free(timer);		timer = 0;	}	/* destroy the IP tree */	destroy_ip_tree();	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -