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

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

?? sdp-glib.c

?? 基于LINUX內核驅動的開發
?? C
字號:
/* * *  BlueZ - Bluetooth protocol stack for Linux * *  Copyright (C) 2004-2008  Marcel Holtmann <marcel@holtmann.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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA * */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdlib.h>#include <limits.h>#include <bluetooth/sdp.h>#include <bluetooth/sdp_lib.h>#include <glib.h>#include "logging.h"#include "sdp-xml.h"static int compute_seq_size(sdp_data_t *data){	int unit_size = data->unitSize;	sdp_data_t *seq = data->val.dataseq;	for (; seq; seq = seq->next)		unit_size += seq->unitSize;	return unit_size;}struct context_data {	sdp_record_t *record;	sdp_data_t attr_data;	struct sdp_xml_data *stack_head;	uint16_t attr_id;};static void element_start(GMarkupParseContext *context,		const gchar *element_name, const gchar **attribute_names,		const gchar **attribute_values, gpointer user_data, GError **err){	struct context_data *ctx_data = user_data;	if (!strcmp(element_name, "record"))		return;	if (!strcmp(element_name, "attribute")) {		int i;		for (i = 0; attribute_names[i]; i++) {			if (!strcmp(attribute_names[i], "id")) {				ctx_data->attr_id = strtol(attribute_values[i], 0, 0);				break;			}		}		debug("New attribute 0x%04x", ctx_data->attr_id);		return;	}	if (ctx_data->stack_head) {		struct sdp_xml_data *newelem = sdp_xml_data_alloc();		newelem->next = ctx_data->stack_head;		ctx_data->stack_head = newelem;	} else {		ctx_data->stack_head = sdp_xml_data_alloc();		ctx_data->stack_head->next = NULL;	}	if (!strcmp(element_name, "sequence"))		ctx_data->stack_head->data = sdp_data_alloc(SDP_SEQ8, NULL);	else if (!strcmp(element_name, "alternate"))		ctx_data->stack_head->data = sdp_data_alloc(SDP_ALT8, NULL);	else {		int i;		/* Parse value, name, encoding */		for (i = 0; attribute_names[i]; i++) {			if (!strcmp(attribute_names[i], "value")) {				int curlen = strlen(ctx_data->stack_head->text);				int attrlen = strlen(attribute_values[i]);				/* Ensure we're big enough */				while ((curlen + 1 + attrlen) > ctx_data->stack_head->size) {					sdp_xml_data_expand(ctx_data->stack_head);				}				memcpy(ctx_data->stack_head->text + curlen,						attribute_values[i], attrlen);				ctx_data->stack_head->text[curlen + attrlen] = '\0';			}			if (!strcmp(attribute_names[i], "encoding")) {				if (!strcmp(attribute_values[i], "hex"))					ctx_data->stack_head->type = 1;			}			if (!strcmp(attribute_names[i], "name")) {				ctx_data->stack_head->name = strdup(attribute_values[i]);			}		}		ctx_data->stack_head->data = sdp_xml_parse_datatype(element_name,				ctx_data->stack_head, ctx_data->record);		if (ctx_data->stack_head->data == NULL)			error("Can't parse element %s", element_name);	}}static void element_end(GMarkupParseContext *context,		const gchar *element_name, gpointer user_data, GError **err){	struct context_data *ctx_data = user_data;	struct sdp_xml_data *elem;	if (!strcmp(element_name, "record"))		return;	if (!strcmp(element_name, "attribute")) {		if (ctx_data->stack_head && ctx_data->stack_head->data) {			int ret = sdp_attr_add(ctx_data->record, ctx_data->attr_id,							ctx_data->stack_head->data);			if (ret == -1)				debug("Trouble adding attribute\n");			ctx_data->stack_head->data = NULL;			sdp_xml_data_free(ctx_data->stack_head);			ctx_data->stack_head = NULL;		} else {			debug("No data for attribute 0x%04x\n", ctx_data->attr_id);		}		return;	}	if (!strcmp(element_name, "sequence")) {		ctx_data->stack_head->data->unitSize = compute_seq_size(ctx_data->stack_head->data);		if (ctx_data->stack_head->data->unitSize > USHRT_MAX) {			ctx_data->stack_head->data->unitSize += sizeof(uint32_t);			ctx_data->stack_head->data->dtd = SDP_SEQ32;		} else if (ctx_data->stack_head->data->unitSize > UCHAR_MAX) {			ctx_data->stack_head->data->unitSize += sizeof(uint16_t);			ctx_data->stack_head->data->dtd = SDP_SEQ16;		} else {			ctx_data->stack_head->data->unitSize += sizeof(uint8_t);		}	} else if (!strcmp(element_name, "alternate")) {		ctx_data->stack_head->data->unitSize = compute_seq_size(ctx_data->stack_head->data);		if (ctx_data->stack_head->data->unitSize > USHRT_MAX) {			ctx_data->stack_head->data->unitSize += sizeof(uint32_t);			ctx_data->stack_head->data->dtd = SDP_ALT32;		} else if (ctx_data->stack_head->data->unitSize > UCHAR_MAX) {			ctx_data->stack_head->data->unitSize += sizeof(uint16_t);			ctx_data->stack_head->data->dtd = SDP_ALT16;		} else {			ctx_data->stack_head->data->unitSize += sizeof(uint8_t);		}	}	if (ctx_data->stack_head->next && ctx_data->stack_head->data &&					ctx_data->stack_head->next->data) {		switch (ctx_data->stack_head->next->data->dtd) {		case SDP_SEQ8:		case SDP_SEQ16:		case SDP_SEQ32:		case SDP_ALT8:		case SDP_ALT16:		case SDP_ALT32:			ctx_data->stack_head->next->data->val.dataseq =				sdp_seq_append(ctx_data->stack_head->next->data->val.dataseq,								ctx_data->stack_head->data);			ctx_data->stack_head->data = NULL;			break;		}		elem = ctx_data->stack_head;		ctx_data->stack_head = ctx_data->stack_head->next;		sdp_xml_data_free(elem);	}}static GMarkupParser parser = {	element_start, element_end, NULL, NULL, NULL};sdp_record_t *sdp_xml_parse_record(const char *data, int size){	GMarkupParseContext *ctx;	struct context_data *ctx_data;	sdp_record_t *record;	ctx_data = malloc(sizeof(*ctx_data));	if (!ctx_data)		return NULL;	record = sdp_record_alloc();	if (!record) {		free(ctx_data);		return NULL;	}	memset(ctx_data, 0, sizeof(*ctx_data));	ctx_data->record = record;	ctx = g_markup_parse_context_new(&parser, 0, ctx_data, NULL);	if (g_markup_parse_context_parse(ctx, data, size, NULL) == FALSE) {		error("XML parsing error");		g_markup_parse_context_free(ctx);		sdp_record_free(record);		free(ctx_data);		return NULL;	}	g_markup_parse_context_free(ctx);	free(ctx_data);	return record;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲一区三区| 欧美成人一区二区三区| 国产亚洲欧美日韩在线一区| 亚洲综合图片区| 欧美日韩在线直播| 九色|91porny| 国产精品美女一区二区在线观看| 成人免费毛片片v| 有码一区二区三区| 日韩一级黄色大片| 成人av小说网| 国产一区二区久久| 亚洲欧洲av一区二区三区久久| 在线观看亚洲专区| 国产麻豆午夜三级精品| 成人一区二区三区视频在线观看| 懂色av一区二区三区免费观看| 一区二区三区四区视频精品免费| 日韩午夜在线影院| 久久久91精品国产一区二区三区| 久久久噜噜噜久噜久久综合| 一本一道综合狠狠老| 欧美aaaaa成人免费观看视频| 久久久久久久久久久久电影| 国产精品免费看片| 亚洲二区视频在线| 亚洲欧美在线aaa| 亚洲国产精品一区二区www| 久久精品国产成人一区二区三区 | 91黄色免费观看| 国产一区啦啦啦在线观看| 成人毛片老司机大片| 欧美手机在线视频| 26uuu国产一区二区三区| 欧美三级日本三级少妇99| 欧美一级久久久| 国产精品不卡视频| 欧美国产一区在线| www欧美成人18+| 一卡二卡三卡日韩欧美| 理论电影国产精品| 色婷婷综合久久久久中文一区二区| 欧美男同性恋视频网站| 欧美在线观看一二区| 精品少妇一区二区三区| 亚洲一区免费观看| 国产91在线|亚洲| 91麻豆精品国产综合久久久久久| 日本久久电影网| 久久综合久久综合久久| 亚洲国产精品人人做人人爽| 国产精品亚洲综合一区在线观看| 极品尤物av久久免费看| 欧美性感一区二区三区| 国产精品污www在线观看| 午夜av区久久| 青草av.久久免费一区| 92国产精品观看| 欧洲亚洲精品在线| 亚洲欧洲精品成人久久奇米网| 久久精品国产亚洲高清剧情介绍| 日本电影亚洲天堂一区| 中文字幕一区二区三区精华液 | 99国产欧美久久久精品| 精品免费国产一区二区三区四区| 亚洲精品成人天堂一二三| 成人av网站在线| 久久久天堂av| 国产精品2024| 久久久久久久电影| 国产一区福利在线| 精品久久久影院| 美国av一区二区| 91在线播放网址| 91精品免费在线观看| 一区二区三区不卡视频在线观看| 岛国一区二区三区| 国产精品传媒视频| av在线播放成人| 91精品国产综合久久久蜜臀粉嫩 | 欧美巨大另类极品videosbest| 制服视频三区第一页精品| 亚洲一区二区三区四区在线观看 | 欧美日韩国产综合草草| 一区二区理论电影在线观看| 在线观看视频91| 亚洲成人资源网| 国产呦萝稀缺另类资源| 久久亚洲综合色一区二区三区 | 国产精品午夜在线观看| 99久久久久久| 亚洲免费av高清| 久草热8精品视频在线观看| 欧美成人艳星乳罩| 国产91精品免费| 一区二区三区四区乱视频| 欧美日韩一区高清| 精品在线免费观看| 日本一区二区动态图| 在线亚洲+欧美+日本专区| 香蕉久久夜色精品国产使用方法| 日韩欧美激情在线| 亚洲成a人片综合在线| 欧美一区二区日韩一区二区| 一区二区在线观看不卡| 6080午夜不卡| 成人福利在线看| 视频一区中文字幕国产| 一本大道久久a久久精品综合| 亚洲超碰精品一区二区| 26uuu精品一区二区| 在线视频中文字幕一区二区| 麻豆精品一区二区av白丝在线| 国产拍欧美日韩视频二区| 久草中文综合在线| 亚洲日本成人在线观看| 国产精品一区二区x88av| 亚洲男人天堂一区| 精品国产乱码久久久久久免费| 丝袜美腿亚洲一区二区图片| 久久综合一区二区| 91精品蜜臀在线一区尤物| 成人免费毛片片v| 日本不卡一区二区三区高清视频| 欧美三级蜜桃2在线观看| 国产激情视频一区二区在线观看| 国产亚洲一本大道中文在线| 日本电影欧美片| 成人污污视频在线观看| 蜜芽一区二区三区| 悠悠色在线精品| 国产精品久久午夜| 久久亚洲欧美国产精品乐播| 欧美日韩一区小说| 色94色欧美sute亚洲13| 成人黄色大片在线观看| 狠狠色丁香九九婷婷综合五月| 亚洲精品一线二线三线| 欧美日韩国产影片| 91久久一区二区| 99久久伊人精品| 国产成人免费在线观看| 久久成人免费电影| 人人狠狠综合久久亚洲| 亚洲二区在线视频| 调教+趴+乳夹+国产+精品| 亚洲一区自拍偷拍| 一区二区在线观看免费| 悠悠色在线精品| 亚洲嫩草精品久久| 夜夜嗨av一区二区三区中文字幕| 亚洲婷婷综合色高清在线| 国产欧美中文在线| 亚洲国产高清aⅴ视频| 国产精品视频九色porn| 国产精品看片你懂得| 国产精品入口麻豆九色| 国产精品免费视频一区| 国产精品理论片在线观看| 亚洲欧洲日产国码二区| 亚洲另类在线视频| 性久久久久久久久| 免费观看一级欧美片| 六月婷婷色综合| 国产成人亚洲精品狼色在线| 国产成人a级片| 99精品视频在线播放观看| 色婷婷久久久综合中文字幕| 91久久国产最好的精华液| 欧美性猛交xxxx黑人交| 欧美一卡2卡三卡4卡5免费| 日韩视频一区在线观看| 国产欧美一区二区精品性色超碰| 国产精品精品国产色婷婷| 一区二区三区色| 美美哒免费高清在线观看视频一区二区 | 国产欧美一区二区三区鸳鸯浴 | 日本韩国一区二区三区| 欧美视频日韩视频| 欧美一区二区三区成人| 久久精品一区二区三区四区| 综合久久久久久| 天堂久久久久va久久久久| 韩国三级中文字幕hd久久精品| www.欧美精品一二区| 欧美二区三区的天堂| www久久久久| 一区二区三区加勒比av| 美女一区二区视频| 99视频热这里只有精品免费| 欧美综合一区二区| 精品日韩欧美一区二区| 亚洲美女在线国产| 国产麻豆视频一区| 欧美日韩一区二区在线观看 | 五月激情综合色| 国产一区二区三区在线看麻豆| www.欧美亚洲| 久久一留热品黄| 日韩福利电影在线观看|