亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? contact.c

?? 用來作為linux中SIP SERVER,完成VOIP網絡電話中服務器的功能
?? C
字號:
/* * $Id: contact.c,v 1.9 2004/09/01 20:08:23 janakj Exp $ * * Parses one Contact in Contact HF body * * 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-25 Adapted to use new parameter parser (janakj) */#include <string.h>        /* memset */#include "../../mem/mem.h" /* pkg_malloc, pkg_free */#include "../../dprint.h"#include "../../trim.h"    /* trim_leading, trim_trailing */#include "contact.h"#define ST1 1 /* Basic state */#define ST2 2 /* Quoted */#define ST3 3 /* Angle quoted */#define ST4 4 /* Angle quoted and quoted */#define ST5 5 /* Escape in quoted */#define ST6 6 /* Escape in angle quoted and quoted *//* * Skip URI, stops when , (next contact) * or ; (parameter) is found */static inline int skip_uri(str* _s){	register int st = ST1;	while(_s->len) {		switch(*(_s->s)) {		case ',':		case ';':			if (st == ST1) return 0;			break;		case '\"':			switch(st) {			case ST1: st = ST2; break;			case ST2: st = ST1; break;			case ST3: st = ST4; break;			case ST4: st = ST3; break;			case ST5: st = ST2; break;			case ST6: st = ST4; break;			}			break;		case '<':			switch(st) {			case ST1: st = ST3; break;			case ST3: 				LOG(L_ERR, "skip_uri(): Second < found\n");				return -1;			case ST5: st = ST2; break;			case ST6: st = ST4; break;			}			break;					case '>':			switch(st) {			case ST1: 				LOG(L_ERR, "skip_uri(): > is first\n");				return -2;			case ST3: st = ST1; break;			case ST5: st = ST2; break;			case ST6: st = ST4; break;			}			break;		case '\\':			switch(st) {			case ST2: st = ST5; break;			case ST4: st = ST6; break;			case ST5: st = ST2; break;			case ST6: st = ST4; break;			}			break;		default: break;		}		_s->s++;		_s->len--;	}	if (st != ST1) {		LOG(L_ERR, "skip_uri(): < or \" not closed\n");		return -3;	}	return 0;}/* * Skip name part * * _s will be adjusted to point at the beginning * of URI */static inline int skip_name(str* _s){	char* last_wsp, *p;	int i, quoted = 0;		if (!_s) {		LOG(L_ERR, "skip_name(): Invalid parameter value\n");		return -1;	}	p = _s->s;	last_wsp = 0;	for(i = 0; i < _s->len; i++) {		if (!quoted) {			if ((*p == ' ') || (*p == '\t')) {				last_wsp = p;			} else {				if (*p == '<') {					_s->s = p;					_s->len -= i;					return 0;				}								if (*p == ':') {					if (last_wsp) {						_s->s = last_wsp;						_s->len -= last_wsp - _s->s + 1;					}					return 0;				}				if (*p == '\"') {					quoted = 1;				}			}		} else {			if ((*p == '\"') && (*(p-1) != '\\')) quoted = 0;		}		p++;	}	if (quoted) {		LOG(L_ERR, "skip_name(): Closing quote missing in name part of Contact\n");	} else {		LOG(L_ERR, "skip_name(): Error in contact, scheme separator not found\n");	}	return -1;}/* * Parse contacts in a Contact HF */int parse_contacts(str* _s, contact_t** _c){	contact_t* c;	param_hooks_t hooks;	while(1) {		     /* Allocate and clear contact structure */		c = (contact_t*)pkg_malloc(sizeof(contact_t));		if (c == 0) {			LOG(L_ERR, "parse_contacts(): No memory left\n");			goto error;		}		memset(c, 0, sizeof(contact_t));				c->name.s = _s->s;		if (skip_name(_s) < 0) {			LOG(L_ERR, "parse_contacts(): Error while skipping name part\n");			goto error;		}		c->uri.s = _s->s;		c->name.len = _s->s - c->name.s;		trim_trailing(&c->name);				     /* Find the end of the URI */		if (skip_uri(_s) < 0) {			LOG(L_ERR, "parse_contacts(): Error while skipping URI\n");			goto error;		}				c->uri.len = _s->s - c->uri.s; /* Calculate URI length */		trim_trailing(&(c->uri));      /* Remove any trailing spaces from URI */		     /* Remove <> if any */		if ((c->uri.len >= 2) && (c->uri.s[0] == '<') && (c->uri.s[c->uri.len - 1] == '>')) {			c->uri.s++;			c->uri.len -= 2;		}		trim(&c->uri);				if (_s->len == 0) goto ok;				if (_s->s[0] == ';') {         /* Contact parameter found */			_s->s++;			_s->len--;			trim_leading(_s);						if (_s->len == 0) {				LOG(L_ERR, "parse_contacts(): Error while parsing params\n");				goto error;			}			if (parse_params(_s, CLASS_CONTACT, &hooks, &c->params) < 0) {				LOG(L_ERR, "parse_contacts(): Error while parsing parameters\n");				goto error;			}			c->q = hooks.contact.q;			c->expires = hooks.contact.expires;			c->received = hooks.contact.received;			c->method = hooks.contact.method;			if (_s->len == 0) goto ok;		}		     /* Next character is comma */		c->len = _s->s - c->name.s;		_s->s++;		_s->len--;		trim_leading(_s);		if (_s->len == 0) {			LOG(L_ERR, "parse_contacts(): Text after comma missing\n");			goto error;		}		c->next = *_c;		*_c = c;	} error:	if (c) pkg_free(c);	free_contacts(_c); /* Free any contacts created so far */	return -1; ok:	c->len = _s->s - c->name.s;	c->next = *_c;	*_c = c;	return 0;}/* * Free list of contacts * _c is head of the list */void free_contacts(contact_t** _c){	contact_t* ptr;	while(*_c) {		ptr = *_c;		*_c = (*_c)->next;		if (ptr->params) {			free_params(ptr->params);		}		pkg_free(ptr);	}}/* * Print list of contacts, just for debugging */void print_contacts(FILE* _o, contact_t* _c){	contact_t* ptr;	ptr = _c;	while(ptr) {		fprintf(_o, "---Contact---\n");		fprintf(_o, "name    : '%.*s'\n", ptr->name.len, ptr->name.s);		fprintf(_o, "URI     : '%.*s'\n", ptr->uri.len, ptr->uri.s);		fprintf(_o, "q       : %p\n", ptr->q);		fprintf(_o, "expires : %p\n", ptr->expires);		fprintf(_o, "received: %p\n", ptr->received);		fprintf(_o, "method  : %p\n", ptr->method);		fprintf(_o, "len     : %d\n", ptr->len);		if (ptr->params) {			print_params(_o, ptr->params);		}		fprintf(_o, "---/Contact---\n");		ptr = ptr->next;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区不卡| av电影在线观看不卡| 国产精品一二一区| 欧美午夜电影网| 国产欧美一区二区精品性色| 亚洲成人免费视| 97se亚洲国产综合自在线不卡 | 奇米精品一区二区三区在线观看| 成人app网站| 久久精品一二三| 免费欧美高清视频| 欧美喷水一区二区| 亚洲精品国产精华液| 成人伦理片在线| 久久综合国产精品| 精品系列免费在线观看| 欧美男男青年gay1069videost| 中文字幕日韩欧美一区二区三区| 裸体在线国模精品偷拍| 日韩一二三区视频| 五月婷婷综合激情| 欧美精品久久99| 天天影视色香欲综合网老头| 欧美日韩午夜影院| 亚洲成av人片www| 欧美亚洲精品一区| 亚洲国产综合91精品麻豆| 色偷偷久久人人79超碰人人澡| 亚洲国产成人自拍| 99热99精品| 亚洲天堂av老司机| 色婷婷综合久久久中文字幕| 中文字幕亚洲不卡| 欧美一级理论片| 免费成人结看片| 精品国产精品一区二区夜夜嗨| 香蕉影视欧美成人| 日韩亚洲欧美一区二区三区| 六月丁香综合在线视频| 久久综合九色综合97婷婷女人| 国产综合久久久久影院| 久久久久久久久久久久久久久99| 国产另类ts人妖一区二区| 亚洲国产成人在线| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 91麻豆精品国产综合久久久久久| 五月激情六月综合| 日韩欧美高清一区| 国产电影精品久久禁18| 亚洲欧美乱综合| 欧美另类久久久品| 国产揄拍国内精品对白| 国产精品视频免费看| 色妹子一区二区| 五月天欧美精品| 久久久亚洲综合| 一本色道久久综合精品竹菊| 天堂蜜桃91精品| 久久精品夜色噜噜亚洲aⅴ| 一本久道中文字幕精品亚洲嫩| 午夜成人在线视频| 国产亲近乱来精品视频| 91福利在线观看| 韩国av一区二区| 亚洲夂夂婷婷色拍ww47| 日韩欧美国产一区二区在线播放| 成人黄页毛片网站| 婷婷夜色潮精品综合在线| 国产日韩欧美精品一区| 欧美日韩午夜影院| 成人性生交大片免费看中文 | 欧美群妇大交群的观看方式| 狠狠狠色丁香婷婷综合激情| 一区二区三区中文字幕在线观看| 欧美成人a∨高清免费观看| eeuss鲁片一区二区三区| 日本中文字幕不卡| 亚洲男人电影天堂| 久久久久九九视频| 欧美精品成人一区二区三区四区| 成人黄色777网| 精品一区二区三区日韩| 亚洲国产精品久久艾草纯爱| 国产精品每日更新| 欧美α欧美αv大片| 91精品1区2区| a级精品国产片在线观看| 日本午夜精品视频在线观看| 亚洲私人影院在线观看| 久久日韩精品一区二区五区| 欧美日韩亚洲综合| 92国产精品观看| 国产精品综合久久| www.久久精品| 国产成人三级在线观看| 美日韩一区二区| 日韩国产成人精品| 亚洲电影在线免费观看| 成人欧美一区二区三区在线播放| 26uuu久久综合| 日韩一区二区在线看| 精品视频免费看| 欧美三日本三级三级在线播放| 91亚洲午夜精品久久久久久| 粉嫩欧美一区二区三区高清影视| 麻豆精品视频在线| 久久狠狠亚洲综合| 美女国产一区二区三区| 看片网站欧美日韩| 美女在线视频一区| 狠狠色丁香婷婷综合| 九九在线精品视频| 国产一区二区视频在线| 国产精品原创巨作av| 国产激情一区二区三区| 国产不卡在线一区| www.久久久久久久久| 97se亚洲国产综合自在线不卡| 91在线观看成人| 欧美在线播放高清精品| 欧美亚洲国产一区在线观看网站| 欧美性色欧美a在线播放| 欧美精品亚洲二区| 日韩视频永久免费| 久久综合国产精品| 国产精品全国免费观看高清| 国产精品水嫩水嫩| 亚洲三级在线播放| 亚洲一区二区三区不卡国产欧美| 亚洲一区在线视频| 蜜桃视频一区二区三区| 国产电影一区二区三区| 9i看片成人免费高清| 欧美自拍偷拍一区| 717成人午夜免费福利电影| 日韩精品最新网址| 久久久久久电影| 亚洲激情男女视频| 欧美a级一区二区| 国产成人av一区二区三区在线| 91亚洲精品久久久蜜桃网站| 欧美日韩精品欧美日韩精品一综合| 欧美精品 国产精品| 国产欧美一区二区精品久导航| 亚洲丝袜美腿综合| 蜜桃视频在线观看一区| 99久久99久久免费精品蜜臀| 欧美日韩电影在线播放| 久久精品男人的天堂| 亚洲图片有声小说| 国产主播一区二区三区| 日本精品裸体写真集在线观看 | 人人超碰91尤物精品国产| 国产高清无密码一区二区三区| 91丝袜国产在线播放| 日韩一区和二区| 亚洲欧美日韩一区二区| 久久成人免费网| 欧美怡红院视频| 免费久久99精品国产| 99久久精品久久久久久清纯| 67194成人在线观看| 欧美国产精品一区| 麻豆久久久久久| 欧美丝袜丝交足nylons| 亚洲国产高清不卡| 极品美女销魂一区二区三区| 欧美日韩一级二级| 亚洲日本丝袜连裤袜办公室| 国产综合色精品一区二区三区| 欧美日韩一区中文字幕| 国产精品国产馆在线真实露脸| 麻豆成人免费电影| 欧美日韩在线一区二区| 亚洲图片另类小说| 国产成人免费视频网站| 欧美一激情一区二区三区| 亚洲一区二区av电影| 北岛玲一区二区三区四区| 26uuu另类欧美| 美女一区二区久久| 777xxx欧美| 亚洲一区二区三区国产| 91色|porny| 国产精品久久久久aaaa樱花| 国产精品资源在线观看| 日韩欧美123| 日本aⅴ亚洲精品中文乱码| 欧美最猛性xxxxx直播| 亚洲激情成人在线| 色香蕉成人二区免费| 中文字幕一区二区三区在线观看| 国产成人精品www牛牛影视| 久久久久久久精| 成人精品gif动图一区| 国产亲近乱来精品视频| 成人性视频网站| 亚洲国产激情av| 9人人澡人人爽人人精品| 亚洲欧美福利一区二区|