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

📄 utils.c

📁 用来作为linux中SIP SERVER,完成VOIP网络电话中服务器的功能
💻 C
字号:
/*  * $Id: utils.c,v 1.12 2004/12/02 21:16:02 andrei Exp $  * * MySQL module utilities * * 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-04-14 tm_isdst in struct tm set to -1 to let mktime  *            guess daylight saving (janakj) */#define _XOPEN_SOURCE 4     /* bsd */#define _XOPEN_SOURCE_EXTENDED 1    /* solaris */#include <strings.h>#include <string.h>#include <time.h>  /*strptime, XOPEN issue must be >=4 */#include "utils.h"/* * Convert time_t structure to format accepted by MySQL database */int time2mysql(time_t _time, char* _result, int _res_len){	struct tm* t;		     /*	       if (_time == MAX_TIME_T) {	       snprintf(_result, _res_len, "0000-00-00 00:00:00");	       }	     */	t = localtime(&_time);	return strftime(_result, _res_len, "%Y-%m-%d %H:%M:%S", t);}/* * Convert MySQL time representation to time_t structure */time_t mysql2time(const char* _str){	struct tm time;		     /* It is necessary to zero tm structure first */	memset(&time, '\0', sizeof(struct tm));	strptime(_str, "%Y-%m-%d %H:%M:%S", &time);	     /* Daylight saving information got lost in the database	      * so let mktime to guess it. This eliminates the bug when	      * contacts reloaded from the database have different time	      * of expiration by one hour when daylight saving is used	      */ 	time.tm_isdst = -1;   	return mktime(&time);}/* * Parse a mysql database URL of form  * mysql://[username[:password]@]hostname[:port]/database * * Returns 0 if parsing was successful and -1 otherwise */int parse_mysql_url(char* _url, char** _user, char** _pass,		    char** _host, char** _port, char** _db){#define SHORTEST_MYSQL_URL "mysql://a/b"#define SHORTEST_MYSQL_URL_LEN (sizeof(SHORTEST_MYSQL_URL) - 1)#define MYSQL_URL_PREFIX "mysql://"#define MYSQL_URL_PREFIX_LEN (sizeof(MYSQL_URL_PREFIX) - 1)	enum state {		ST_USER_HOST,  /* Username or hostname */		ST_PASS_PORT,  /* Password or port part */		ST_HOST,       /* Hostname part */		ST_PORT,       /* Port part */		ST_DB          /* Database part */	};	enum state st;	int len, i;	char* begin, *prev_begin;	if (!_url || !_user || !_pass || !_host || !_port || !_db) {		return -1;	}		len = strlen(_url);	if (len < SHORTEST_MYSQL_URL_LEN) {		return -1;	}		if (strncasecmp(_url, MYSQL_URL_PREFIX, MYSQL_URL_PREFIX_LEN)) {		return -1;	}	     /* Skip the prefix part */	_url += MYSQL_URL_PREFIX_LEN;	len -= MYSQL_URL_PREFIX_LEN;		     /* Initialize all variables */	*_user = '\0';	*_pass = '\0';	*_host = '\0';	*_port = '\0';	*_db   = '\0';	st = ST_USER_HOST;	begin = _url;	prev_begin = 0;	for(i = 0; i < len; i++) {		switch(st) {		case ST_USER_HOST:			switch(_url[i]) {			case '@':				st = ST_HOST;				*_user = begin;				begin = _url + i + 1;				_url[i] = '\0';				break;			case ':':				st = ST_PASS_PORT;				prev_begin = begin;				begin = _url + i + 1;				_url[i] = '\0';				break;			case '/':				*_host = begin;				_url[i] = '\0';				*_db = _url + i + 1;				return 0;			}		case ST_PASS_PORT:			switch(_url[i]) {			case '@':				st = ST_HOST;				*_user = prev_begin;				*_pass = begin;				begin = _url + i + 1;				_url[i] = '\0';				break;			case '/':				*_host = prev_begin;				*_port = begin;				_url[i] = '\0';				*_db = _url + i + 1;				return 0;			}		case ST_HOST:			switch(_url[i]) {			case ':':				st = ST_PORT;				*_host = begin;				begin = _url + i + 1;				_url[i] = '\0';				break;			case '/':				*_host = begin;				_url[i] = '\0';				*_db = _url + i + 1;				return 0;			}		case ST_PORT:			switch(_url[i]) {			case '/':				*_port = begin;				_url[i] = '\0';				*_db = _url + i + 1;				return 0;			}			break;					case ST_DB:			break;		}	}	if (st != ST_DB) {		return -1;	}	return 0;}

⌨️ 快捷键说明

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