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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? scanner.c

?? 基于sip協(xié)議的網(wǎng)絡(luò)電話源碼
?? C
字號(hào):
/* $Id: scanner.c 1203 2007-04-18 15:40:44Z bennylp $ *//*  * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org> * * This program 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. * * This program 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  */#include <pjlib-util/scanner.h>#include <pj/ctype.h>#include <pj/string.h>#include <pj/except.h>#include <pj/os.h>#include <pj/errno.h>#include <pj/assert.h>#define PJ_SCAN_IS_SPACE(c)		((c)==' ' || (c)=='\t')#define PJ_SCAN_IS_NEWLINE(c)		((c)=='\r' || (c)=='\n')#define PJ_SCAN_IS_PROBABLY_SPACE(c)	((c) <= 32)#define PJ_SCAN_CHECK_EOF(s)		(*s)#if defined(PJ_SCANNER_USE_BITWISE) && PJ_SCANNER_USE_BITWISE != 0#  include "scanner_cis_bitwise.c"#else#  include "scanner_cis_uint.c"#endifstatic void pj_scan_syntax_err(pj_scanner *scanner){    (*scanner->callback)(scanner);}PJ_DEF(void) pj_cis_add_range(pj_cis_t *cis, int cstart, int cend){    /* Can not set zero. This is the requirement of the parser. */    pj_assert(cstart > 0);    while (cstart != cend) {        PJ_CIS_SET(cis, cstart);	++cstart;    }}PJ_DEF(void) pj_cis_add_alpha(pj_cis_t *cis){    pj_cis_add_range( cis, 'a', 'z'+1);    pj_cis_add_range( cis, 'A', 'Z'+1);}PJ_DEF(void) pj_cis_add_num(pj_cis_t *cis){    pj_cis_add_range( cis, '0', '9'+1);}PJ_DEF(void) pj_cis_add_str( pj_cis_t *cis, const char *str){    while (*str) {        PJ_CIS_SET(cis, *str);	++str;    }}PJ_DEF(void) pj_cis_add_cis( pj_cis_t *cis, const pj_cis_t *rhs){    int i;    for (i=0; i<256; ++i) {	if (PJ_CIS_ISSET(rhs, i))	    PJ_CIS_SET(cis, i);    }}PJ_DEF(void) pj_cis_del_range( pj_cis_t *cis, int cstart, int cend){    while (cstart != cend) {        PJ_CIS_CLR(cis, cstart);        cstart++;    }}PJ_DEF(void) pj_cis_del_str( pj_cis_t *cis, const char *str){    while (*str) {        PJ_CIS_CLR(cis, *str);	++str;    }}PJ_DEF(void) pj_cis_invert( pj_cis_t *cis ){    unsigned i;    /* Can not set zero. This is the requirement of the parser. */    for (i=1; i<256; ++i) {	if (PJ_CIS_ISSET(cis,i))            PJ_CIS_CLR(cis,i);        else            PJ_CIS_SET(cis,i);    }}PJ_DEF(void) pj_scan_init( pj_scanner *scanner, char *bufstart, int buflen, 			   unsigned options, pj_syn_err_func_ptr callback ){    PJ_CHECK_STACK();    scanner->begin = scanner->curptr = bufstart;    scanner->end = bufstart + buflen;    scanner->line = 1;    scanner->start_line = scanner->begin;    scanner->callback = callback;    scanner->skip_ws = options;    if (scanner->skip_ws) 	pj_scan_skip_whitespace(scanner);}PJ_DEF(void) pj_scan_fini( pj_scanner *scanner ){    PJ_CHECK_STACK();    PJ_UNUSED_ARG(scanner);}PJ_DEF(void) pj_scan_skip_whitespace( pj_scanner *scanner ){    register char *s = scanner->curptr;    while (PJ_SCAN_IS_SPACE(*s)) {	++s;    }    if (PJ_SCAN_IS_NEWLINE(*s) && (scanner->skip_ws & PJ_SCAN_AUTOSKIP_NEWLINE)) {	for (;;) {	    if (*s == '\r') {		++s;		if (*s == '\n') ++s;		++scanner->line;		scanner->curptr = scanner->start_line = s;	    } else if (*s == '\n') {		++s;		++scanner->line;		scanner->curptr = scanner->start_line = s;	    } else if (PJ_SCAN_IS_SPACE(*s)) {		do {		    ++s;		} while (PJ_SCAN_IS_SPACE(*s));	    } else {		break;	    }	}    }    if (PJ_SCAN_IS_NEWLINE(*s) && (scanner->skip_ws & PJ_SCAN_AUTOSKIP_WS_HEADER)==PJ_SCAN_AUTOSKIP_WS_HEADER) {	/* Check for header continuation. */	scanner->curptr = s;	if (*s == '\r') {	    ++s;	}	if (*s == '\n') {	    ++s;	}	scanner->start_line = s;	if (PJ_SCAN_IS_SPACE(*s)) {	    register char *t = s;	    do {		++t;	    } while (PJ_SCAN_IS_SPACE(*t));	    ++scanner->line;	    scanner->curptr = t;	}    } else {	scanner->curptr = s;    }}PJ_DEF(void) pj_scan_skip_line( pj_scanner *scanner ){    char *s = pj_ansi_strchr(scanner->curptr, '\n');    if (!s) {	scanner->curptr = scanner->end;    } else {	scanner->curptr = scanner->start_line = s+1;	scanner->line++;   }}PJ_DEF(int) pj_scan_peek( pj_scanner *scanner,			  const pj_cis_t *spec, pj_str_t *out){    register char *s = scanner->curptr;    if (s >= scanner->end) {	pj_scan_syntax_err(scanner);	return -1;    }    /* Don't need to check EOF with PJ_SCAN_CHECK_EOF(s) */    while (pj_cis_match(spec, *s))	++s;    pj_strset3(out, scanner->curptr, s);    return *s;}PJ_DEF(int) pj_scan_peek_n( pj_scanner *scanner,			     pj_size_t len, pj_str_t *out){    char *endpos = scanner->curptr + len;    if (endpos > scanner->end) {	pj_scan_syntax_err(scanner);	return -1;    }    pj_strset(out, scanner->curptr, len);    return *endpos;}PJ_DEF(int) pj_scan_peek_until( pj_scanner *scanner,				const pj_cis_t *spec, 				pj_str_t *out){    register char *s = scanner->curptr;    if (s >= scanner->end) {	pj_scan_syntax_err(scanner);	return -1;    }    while (PJ_SCAN_CHECK_EOF(s) && !pj_cis_match( spec, *s))	++s;    pj_strset3(out, scanner->curptr, s);    return *s;}PJ_DEF(void) pj_scan_get( pj_scanner *scanner,			  const pj_cis_t *spec, pj_str_t *out){    register char *s = scanner->curptr;    pj_assert(pj_cis_match(spec,0)==0);    /* EOF is detected implicitly */    if (!pj_cis_match(spec, *s)) {	pj_scan_syntax_err(scanner);	return;    }    do {	++s;    } while (pj_cis_match(spec, *s));    /* No need to check EOF here (PJ_SCAN_CHECK_EOF(s)) because     * buffer is NULL terminated and pj_cis_match(spec,0) should be     * false.     */    pj_strset3(out, scanner->curptr, s);    scanner->curptr = s;    if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {	pj_scan_skip_whitespace(scanner);        }}PJ_DEF(void) pj_scan_get_unescape( pj_scanner *scanner,				   const pj_cis_t *spec, pj_str_t *out){    register char *s = scanner->curptr;    char *dst = s;    pj_assert(pj_cis_match(spec,0)==0);    /* Must not match character '%' */    pj_assert(pj_cis_match(spec,'%')==0);    /* EOF is detected implicitly */    if (!pj_cis_match(spec, *s) && *s != '%') {	pj_scan_syntax_err(scanner);	return;    }    out->ptr = s;    do {	if (*s == '%') {	    if (s+3 <= scanner->end && pj_isxdigit(*(s+1)) && 		pj_isxdigit(*(s+2))) 	    {		*dst = (pj_uint8_t) ((pj_hex_digit_to_val(*(s+1)) << 4) +				      pj_hex_digit_to_val(*(s+2)));		++dst;		s += 3;	    } else {		*dst++ = *s++;		*dst++ = *s++;		break;	    }	}		if (pj_cis_match(spec, *s)) {	    char *start = s;	    do {		++s;	    } while (pj_cis_match(spec, *s));	    if (dst != start) pj_memmove(dst, start, s-start);	    dst += (s-start);	} 	    } while (*s == '%');    scanner->curptr = s;    out->slen = (dst - out->ptr);    if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {	pj_scan_skip_whitespace(scanner);        }}PJ_DEF(void) pj_scan_get_quote( pj_scanner *scanner,				int begin_quote, int end_quote, 				pj_str_t *out){    char beg = (char)begin_quote;    char end = (char)end_quote;    pj_scan_get_quotes(scanner, &beg, &end, 1, out);}PJ_DEF(void) pj_scan_get_quotes(pj_scanner *scanner,                                const char *begin_quote, const char *end_quote,                                int qsize, pj_str_t *out){    register char *s = scanner->curptr;    int qpair = -1;    int i;    pj_assert(qsize > 0);    /* Check and eat the begin_quote. */    for (i = 0; i < qsize; ++i) {	if (*s == begin_quote[i]) {	    qpair = i;	    break;	}    }    if (qpair == -1) {	pj_scan_syntax_err(scanner);	return;    }    ++s;    /* Loop until end_quote is found.      */    do {	/* loop until end_quote is found. */	while (*s && *s != '\n' && *s != end_quote[qpair]) {	    ++s;	}	/* check that no backslash character precedes the end_quote. */	if (*s == end_quote[qpair]) {	    if (*(s-1) == '\\') {		if (s-2 == scanner->begin) {		    break;		} else {		    char *q = s-2;		    char *r = s-2;		    while (r != scanner->begin && *r == '\\') {			--r;		    }		    /* break from main loop if we have odd number of backslashes */		    if (((unsigned)(q-r) & 0x01) == 1) {			++s;			break;		    }		    ++s;		}	    } else {		/* end_quote is not preceeded by backslash. break now. */		break;	    }	} else {	    /* loop ended by non-end_quote character. break now. */	    break;	}    } while (1);    /* Check and eat the end quote. */    if (*s != end_quote[qpair]) {	pj_scan_syntax_err(scanner);	return;    }    ++s;    pj_strset3(out, scanner->curptr, s);    scanner->curptr = s;    if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {	pj_scan_skip_whitespace(scanner);    }}PJ_DEF(void) pj_scan_get_n( pj_scanner *scanner,			    unsigned N, pj_str_t *out){    if (scanner->curptr + N > scanner->end) {	pj_scan_syntax_err(scanner);	return;    }    pj_strset(out, scanner->curptr, N);        scanner->curptr += N;    if (PJ_SCAN_IS_PROBABLY_SPACE(*scanner->curptr) && scanner->skip_ws) {	pj_scan_skip_whitespace(scanner);    }}PJ_DEF(int) pj_scan_get_char( pj_scanner *scanner ){    int chr = *scanner->curptr;    if (!chr) {	pj_scan_syntax_err(scanner);	return 0;    }    ++scanner->curptr;    if (PJ_SCAN_IS_PROBABLY_SPACE(*scanner->curptr) && scanner->skip_ws) {	pj_scan_skip_whitespace(scanner);    }    return chr;}PJ_DEF(void) pj_scan_get_newline( pj_scanner *scanner ){    if (!PJ_SCAN_IS_NEWLINE(*scanner->curptr)) {	pj_scan_syntax_err(scanner);	return;    }    if (*scanner->curptr == '\r') {	++scanner->curptr;    }    if (*scanner->curptr == '\n') {	++scanner->curptr;    }    ++scanner->line;    scanner->start_line = scanner->curptr;    /**     * This probably is a bug, see PROTOS test #2480.     * This would cause scanner to incorrectly eat two new lines, e.g.     * when parsing:     *        *	Content-Length: 120\r\n     *	\r\n     *	<space><space><space>...     *     * When pj_scan_get_newline() is called to parse the first newline     * in the Content-Length header, it will eat the second newline     * too because it thinks that it's a header continuation.     *     * if (PJ_SCAN_IS_PROBABLY_SPACE(*scanner->curptr) && scanner->skip_ws) {     *    pj_scan_skip_whitespace(scanner);     * }     */}PJ_DEF(void) pj_scan_get_until( pj_scanner *scanner,				const pj_cis_t *spec, pj_str_t *out){    register char *s = scanner->curptr;    if (s >= scanner->end) {	pj_scan_syntax_err(scanner);	return;    }    while (PJ_SCAN_CHECK_EOF(s) && !pj_cis_match(spec, *s)) {	++s;    }    pj_strset3(out, scanner->curptr, s);    scanner->curptr = s;    if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {	pj_scan_skip_whitespace(scanner);    }}PJ_DEF(void) pj_scan_get_until_ch( pj_scanner *scanner, 				   int until_char, pj_str_t *out){    register char *s = scanner->curptr;    if (s >= scanner->end) {	pj_scan_syntax_err(scanner);	return;    }    while (PJ_SCAN_CHECK_EOF(s) && *s != until_char) {	++s;    }    pj_strset3(out, scanner->curptr, s);    scanner->curptr = s;    if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {	pj_scan_skip_whitespace(scanner);    }}PJ_DEF(void) pj_scan_get_until_chr( pj_scanner *scanner,				     const char *until_spec, pj_str_t *out){    register char *s = scanner->curptr;    int speclen;    if (s >= scanner->end) {	pj_scan_syntax_err(scanner);	return;    }    speclen = strlen(until_spec);    while (PJ_SCAN_CHECK_EOF(s) && !memchr(until_spec, *s, speclen)) {	++s;    }    pj_strset3(out, scanner->curptr, s);    scanner->curptr = s;    if (PJ_SCAN_IS_PROBABLY_SPACE(*s) && scanner->skip_ws) {	pj_scan_skip_whitespace(scanner);    }}PJ_DEF(void) pj_scan_advance_n( pj_scanner *scanner,				 unsigned N, pj_bool_t skip_ws){    if (scanner->curptr + N > scanner->end) {	pj_scan_syntax_err(scanner);	return;    }    scanner->curptr += N;    if (PJ_SCAN_IS_PROBABLY_SPACE(*scanner->curptr) && skip_ws) {	pj_scan_skip_whitespace(scanner);    }}PJ_DEF(int) pj_scan_strcmp( pj_scanner *scanner, const char *s, int len){    if (scanner->curptr + len > scanner->end) {	pj_scan_syntax_err(scanner);	return -1;    }    return strncmp(scanner->curptr, s, len);}PJ_DEF(int) pj_scan_stricmp( pj_scanner *scanner, const char *s, int len){    if (scanner->curptr + len > scanner->end) {	pj_scan_syntax_err(scanner);	return -1;    }    return pj_ansi_strnicmp(scanner->curptr, s, len);}PJ_DEF(int) pj_scan_stricmp_alnum( pj_scanner *scanner, const char *s, 				   int len){    if (scanner->curptr + len > scanner->end) {	pj_scan_syntax_err(scanner);	return -1;    }    return strnicmp_alnum(scanner->curptr, s, len);}PJ_DEF(void) pj_scan_save_state( const pj_scanner *scanner, 				 pj_scan_state *state){    state->curptr = scanner->curptr;    state->line = scanner->line;    state->start_line = scanner->start_line;}PJ_DEF(void) pj_scan_restore_state( pj_scanner *scanner, 				    pj_scan_state *state){    scanner->curptr = state->curptr;    scanner->line = state->line;    scanner->start_line = state->start_line;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天亚洲精品| 欧美久久久久中文字幕| 国产成人在线观看免费网站| 毛片av一区二区| 裸体在线国模精品偷拍| 日韩精品乱码免费| 麻豆成人91精品二区三区| 美女网站色91| 国产乱码精品一区二区三区av| 国产在线不卡一区| 国产精品88av| 97精品视频在线观看自产线路二| 91网站在线观看视频| 91黄色小视频| 欧美精品aⅴ在线视频| 日韩欧美亚洲另类制服综合在线| 日韩午夜在线影院| 国产欧美日韩视频在线观看| 中文字幕免费不卡| 一区二区激情小说| 日韩国产欧美在线播放| 精品一区二区久久| gogo大胆日本视频一区| 色综合天天综合网天天看片| 欧美午夜精品电影| 日韩免费电影网站| 中文字幕一区二区三区色视频 | 亚洲激情五月婷婷| 亚洲bdsm女犯bdsm网站| 久久99精品视频| 99久久99久久免费精品蜜臀| 91福利视频久久久久| 欧美一三区三区四区免费在线看 | 国产调教视频一区| 亚洲欧美在线aaa| 日韩电影一二三区| 高清在线观看日韩| 欧美日韩国产小视频| 精品国产一区二区在线观看| 国产精品毛片无遮挡高清| 亚洲九九爱视频| 另类小说图片综合网| 成人开心网精品视频| 欧美年轻男男videosbes| 久久久国产精品午夜一区ai换脸| 亚洲欧美在线aaa| 久草中文综合在线| 欧美在线小视频| 久久久精品综合| 亚洲不卡一区二区三区| 高清久久久久久| 欧美一区二区三区四区五区 | 麻豆国产精品一区二区三区| 成人国产免费视频| 日韩欧美一区中文| 亚洲精品视频观看| 国产成人精品免费| 91精品国产色综合久久ai换脸 | 亚洲18色成人| www.欧美色图| 日韩欧美国产不卡| 亚洲午夜精品网| 成人18视频在线播放| 日韩欧美国产一区二区三区| 一区二区三区久久久| 国产精品888| 欧美电影免费观看高清完整版在线观看| 国产精品美女久久久久久久久久久| 日韩电影一二三区| 欧美视频一区在线观看| 国产精品热久久久久夜色精品三区| 青青草国产成人99久久| 中文字幕亚洲区| 在线观看日韩精品| 久久久久久久网| 日本女人一区二区三区| 在线欧美小视频| 国产精品国产三级国产a| 精品亚洲国内自在自线福利| 欧美日韩免费一区二区三区 | 国模娜娜一区二区三区| 欧美日韩亚洲综合| 亚洲蜜臀av乱码久久精品蜜桃| 韩国一区二区在线观看| 日韩一区二区视频在线观看| 亚洲成a人v欧美综合天堂下载| 成人听书哪个软件好| 久久九九久久九九| 九九视频精品免费| 日韩亚洲欧美在线| 日本亚洲天堂网| 欧美高清性hdvideosex| 亚洲综合久久av| 欧美亚洲图片小说| 亚洲一区二区欧美日韩| 在线看日韩精品电影| 亚洲欧美日韩国产一区二区三区| 成人久久18免费网站麻豆| 国产校园另类小说区| 国产伦精一区二区三区| 久久综合九色综合97_久久久 | 精品精品欲导航| 麻豆成人免费电影| 精品国产91亚洲一区二区三区婷婷| 日本午夜一区二区| 91精品国产综合久久久蜜臀粉嫩 | 一区二区三区丝袜| 欧美三级日韩在线| 日韩制服丝袜av| 欧美videossexotv100| 久久国产免费看| 久久久精品影视| 成人免费视频网站在线观看| 国产精品久久久久影视| 91免费视频网址| 亚洲国产日产av| 91麻豆精品国产91久久久久久| 美女视频黄频大全不卡视频在线播放| 91精品国产91久久久久久最新毛片 | 久久精品一区四区| 成人福利视频在线| 日韩理论片网站| 91成人免费网站| 亚洲国产精品久久一线不卡| 欧美日本精品一区二区三区| 日本女优在线视频一区二区| 久久久久久久免费视频了| www.一区二区| 午夜精品久久久久久久| 精品久久久久久久久久久久包黑料| 国产成人av电影在线播放| 国产精品久久久久久久久久久免费看| 色综合久久88色综合天天免费| 亚洲午夜精品网| 久久伊人蜜桃av一区二区| 99精品视频一区二区| 午夜精品一区二区三区三上悠亚| 欧美电视剧在线看免费| 成人av午夜电影| 午夜视频一区在线观看| 久久美女高清视频| 色94色欧美sute亚洲线路二| 男女视频一区二区| 中文字幕亚洲综合久久菠萝蜜| 欧美色综合网站| 国产在线视视频有精品| 亚洲伦理在线精品| 精品国产网站在线观看| 91在线小视频| 久久aⅴ国产欧美74aaa| 最近日韩中文字幕| 日韩精品中午字幕| 色悠久久久久综合欧美99| 激情五月激情综合网| 一区二区三区中文在线观看| 精品国产污网站| 欧美丝袜自拍制服另类| 国产成人午夜电影网| 亚洲3atv精品一区二区三区| 国产免费成人在线视频| 日韩一区二区三区四区| 色综合激情久久| 国产成人日日夜夜| 天天免费综合色| 亚洲激情在线播放| 国产精品久久夜| 精品成人一区二区三区| 91.xcao| 色婷婷av一区二区三区软件 | 欧美xxxxx裸体时装秀| 91亚洲精华国产精华精华液| 狠狠狠色丁香婷婷综合久久五月| 一区二区三区小说| 国产精品美女久久久久久久久| 欧美成人国产一区二区| 欧美性一区二区| 一本色道综合亚洲| 成人午夜看片网址| 韩国av一区二区| 久热成人在线视频| 日日骚欧美日韩| 亚洲风情在线资源站| 亚洲激情图片qvod| 中文字幕亚洲在| 国产精品你懂的在线欣赏| 精品成人在线观看| 欧美xxxx老人做受| 日韩午夜激情电影| 正在播放一区二区| 777午夜精品视频在线播放| 欧美色视频一区| 欧洲国内综合视频| 色美美综合视频| 色视频一区二区| 91女人视频在线观看| 91亚洲国产成人精品一区二三| 国产91综合一区在线观看| 国产乱一区二区| 国产一二精品视频| 国产精品中文有码|