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

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

?? capi.c

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*    CMTP implementation for Linux Bluetooth stack (BlueZ).   Copyright (C) 2002-2003 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 version 2 as   published by the Free Software Foundation;   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS    SOFTWARE IS DISCLAIMED.*/#include <linux/config.h>#include <linux/module.h>#include <linux/types.h>#include <linux/errno.h>#include <linux/kernel.h>#include <linux/major.h>#include <linux/sched.h>#include <linux/slab.h>#include <linux/poll.h>#include <linux/fcntl.h>#include <linux/skbuff.h>#include <linux/socket.h>#include <linux/ioctl.h>#include <linux/file.h>#include <net/sock.h>#include <linux/isdn/capilli.h>#include <linux/isdn/capicmd.h>#include <linux/isdn/capiutil.h>#include "cmtp.h"#ifndef CONFIG_BT_CMTP_DEBUG#undef  BT_DBG#define BT_DBG(D...)#endif#define CAPI_INTEROPERABILITY		0x20#define CAPI_INTEROPERABILITY_REQ	CAPICMD(CAPI_INTEROPERABILITY, CAPI_REQ)#define CAPI_INTEROPERABILITY_CONF	CAPICMD(CAPI_INTEROPERABILITY, CAPI_CONF)#define CAPI_INTEROPERABILITY_IND	CAPICMD(CAPI_INTEROPERABILITY, CAPI_IND)#define CAPI_INTEROPERABILITY_RESP	CAPICMD(CAPI_INTEROPERABILITY, CAPI_RESP)#define CAPI_INTEROPERABILITY_REQ_LEN	(CAPI_MSG_BASELEN + 2)#define CAPI_INTEROPERABILITY_CONF_LEN	(CAPI_MSG_BASELEN + 4)#define CAPI_INTEROPERABILITY_IND_LEN	(CAPI_MSG_BASELEN + 2)#define CAPI_INTEROPERABILITY_RESP_LEN	(CAPI_MSG_BASELEN + 2)#define CAPI_FUNCTION_REGISTER		0#define CAPI_FUNCTION_RELEASE		1#define CAPI_FUNCTION_GET_PROFILE	2#define CAPI_FUNCTION_GET_MANUFACTURER	3#define CAPI_FUNCTION_GET_VERSION	4#define CAPI_FUNCTION_GET_SERIAL_NUMBER	5#define CAPI_FUNCTION_MANUFACTURER	6#define CAPI_FUNCTION_LOOPBACK		7#define CMTP_MSGNUM	1#define CMTP_APPLID	2#define CMTP_MAPPING	3static struct cmtp_application *cmtp_application_add(struct cmtp_session *session, __u16 appl){	struct cmtp_application *app = kmalloc(sizeof(*app), GFP_KERNEL);	BT_DBG("session %p application %p appl %d", session, app, appl);	if (!app)		return NULL;	memset(app, 0, sizeof(*app));	app->state = BT_OPEN;	app->appl = appl;	list_add_tail(&app->list, &session->applications);	return app;}static void cmtp_application_del(struct cmtp_session *session, struct cmtp_application *app){	BT_DBG("session %p application %p", session, app);	if (app) {		list_del(&app->list);		kfree(app);	}}static struct cmtp_application *cmtp_application_get(struct cmtp_session *session, int pattern, __u16 value){	struct cmtp_application *app;	struct list_head *p, *n;	list_for_each_safe(p, n, &session->applications) {		app = list_entry(p, struct cmtp_application, list);		switch (pattern) {		case CMTP_MSGNUM:			if (app->msgnum == value)				return app;			break;		case CMTP_APPLID:			if (app->appl == value)				return app;			break;		case CMTP_MAPPING:			if (app->mapping == value)				return app;			break;		}	}	return NULL;}static int cmtp_msgnum_get(struct cmtp_session *session){	session->msgnum++;	if ((session->msgnum & 0xff) > 200)		session->msgnum = CMTP_INITIAL_MSGNUM + 1;	return session->msgnum;}static void cmtp_send_interopmsg(struct cmtp_session *session,					__u8 subcmd, __u16 appl, __u16 msgnum,					__u16 function, unsigned char *buf, int len){	struct sk_buff *skb;	unsigned char *s;	BT_DBG("session %p subcmd 0x%02x appl %d msgnum %d", session, subcmd, appl, msgnum);	if (!(skb = alloc_skb(CAPI_MSG_BASELEN + 6 + len, GFP_ATOMIC))) {		BT_ERR("Can't allocate memory for interoperability packet");		return;	}	s = skb_put(skb, CAPI_MSG_BASELEN + 6 + len);	capimsg_setu16(s, 0, CAPI_MSG_BASELEN + 6 + len);	capimsg_setu16(s, 2, appl);	capimsg_setu8 (s, 4, CAPI_INTEROPERABILITY);	capimsg_setu8 (s, 5, subcmd);	capimsg_setu16(s, 6, msgnum);	/* Interoperability selector (Bluetooth Device Management) */	capimsg_setu16(s, 8, 0x0001);	capimsg_setu8 (s, 10, 3 + len);	capimsg_setu16(s, 11, function);	capimsg_setu8 (s, 13, len);	if (len > 0)		memcpy(s + 14, buf, len);	cmtp_send_capimsg(session, skb);}static void cmtp_recv_interopmsg(struct cmtp_session *session, struct sk_buff *skb){	struct capi_ctr *ctrl = &session->ctrl;	struct cmtp_application *application;	__u16 appl, msgnum, func, info;	__u32 controller;	BT_DBG("session %p skb %p len %d", session, skb, skb->len);	switch (CAPIMSG_SUBCOMMAND(skb->data)) {	case CAPI_CONF:		func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 5);		info = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 8);		switch (func) {		case CAPI_FUNCTION_REGISTER:			msgnum = CAPIMSG_MSGID(skb->data);			application = cmtp_application_get(session, CMTP_MSGNUM, msgnum);			if (application) {				application->state = BT_CONNECTED;				application->msgnum = 0;				application->mapping = CAPIMSG_APPID(skb->data);				wake_up_interruptible(&session->wait);			}			break;		case CAPI_FUNCTION_RELEASE:			appl = CAPIMSG_APPID(skb->data);			application = cmtp_application_get(session, CMTP_MAPPING, appl);			if (application) {				application->state = BT_CLOSED;				application->msgnum = 0;				wake_up_interruptible(&session->wait);			}			break;		case CAPI_FUNCTION_GET_PROFILE:			controller = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 11);			msgnum = CAPIMSG_MSGID(skb->data);			if (!info && (msgnum == CMTP_INITIAL_MSGNUM)) {				session->ncontroller = controller;				wake_up_interruptible(&session->wait);				break;			}			if (!info && ctrl) {				memcpy(&ctrl->profile,					skb->data + CAPI_MSG_BASELEN + 11,					sizeof(capi_profile));				session->state = BT_CONNECTED;				capi_ctr_ready(ctrl);			}			break;		case CAPI_FUNCTION_GET_MANUFACTURER:			controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 10);			if (!info && ctrl) {				strncpy(ctrl->manu,					skb->data + CAPI_MSG_BASELEN + 15,					skb->data[CAPI_MSG_BASELEN + 14]);			}			break;		case CAPI_FUNCTION_GET_VERSION:			controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);			if (!info && ctrl) {				ctrl->version.majorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 16);				ctrl->version.minorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 20);				ctrl->version.majormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 24);				ctrl->version.minormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 28);			}			break;		case CAPI_FUNCTION_GET_SERIAL_NUMBER:			controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);			if (!info && ctrl) {				memset(ctrl->serial, 0, CAPI_SERIAL_LEN);				strncpy(ctrl->serial,					skb->data + CAPI_MSG_BASELEN + 17,					skb->data[CAPI_MSG_BASELEN + 16]);			}			break;		}		break;	case CAPI_IND:		func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 3);		if (func == CAPI_FUNCTION_LOOPBACK) {			appl = CAPIMSG_APPID(skb->data);			msgnum = CAPIMSG_MSGID(skb->data);			cmtp_send_interopmsg(session, CAPI_RESP, appl, msgnum, func,						skb->data + CAPI_MSG_BASELEN + 6,						skb->data[CAPI_MSG_BASELEN + 5]);		}		break;	}	kfree_skb(skb);}void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb){	struct capi_ctr *ctrl = &session->ctrl;	struct cmtp_application *application;	__u16 cmd, appl;	__u32 contr;	BT_DBG("session %p skb %p len %d", session, skb, skb->len);	if (CAPIMSG_COMMAND(skb->data) == CAPI_INTEROPERABILITY) {		cmtp_recv_interopmsg(session, skb);		return;	}	if (session->flags & (1 << CMTP_LOOPBACK)) {		kfree_skb(skb);		return;	}	cmd = CAPICMD(CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data));	appl = CAPIMSG_APPID(skb->data);	contr = CAPIMSG_CONTROL(skb->data);	application = cmtp_application_get(session, CMTP_MAPPING, appl);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜免费福利视频| 日韩成人一区二区三区在线观看| 欧美影视一区二区三区| 国产乱子伦一区二区三区国色天香| 18成人在线视频| 欧美成人vps| 欧美成人一区二区三区在线观看| 不卡视频在线观看| 精品一区二区三区视频| 亚洲成精国产精品女| 亚洲精选视频在线| 国产精品美女久久久久久久网站| 日韩欧美一区中文| 欧美视频一区二| 色噜噜狠狠成人网p站| 成人免费视频免费观看| 国产一区二区在线观看免费| 亚洲国产一区二区视频| 成人欧美一区二区三区在线播放| 久久蜜桃av一区精品变态类天堂| 欧美日本国产视频| 欧美日韩你懂的| 欧美艳星brazzers| 色综合久久久久网| 99久久er热在这里只有精品15| 国内精品写真在线观看| 蜜桃视频一区二区三区在线观看| 午夜欧美电影在线观看| 一区二区在线观看不卡| 中文字幕欧美一| 国产精品久久久久久久久动漫| 久久久久国产精品厨房| 国产日韩av一区二区| 2020日本不卡一区二区视频| 久久色视频免费观看| 久久综合狠狠综合| 欧美国产精品专区| 中文字幕av一区二区三区免费看 | 欧美电影免费观看高清完整版| 欧美日韩一区 二区 三区 久久精品| 色哟哟日韩精品| 在线精品视频一区二区三四| 一本色道久久综合亚洲aⅴ蜜桃| 91视频观看免费| 日本丰满少妇一区二区三区| 91成人看片片| 91精品中文字幕一区二区三区| 欧美午夜寂寞影院| 日韩一级二级三级| 欧美tk—视频vk| 国产欧美日韩另类一区| 亚洲色图另类专区| 午夜精品福利一区二区蜜股av| 日韩成人午夜精品| 国产揄拍国内精品对白| 成人黄色a**站在线观看| 91精品91久久久中77777| 777欧美精品| 久久久久国产精品厨房| 亚洲欧美色综合| 日韩中文字幕麻豆| 国产精品资源在线看| 99国产精品国产精品毛片| 欧美综合色免费| 精品国产乱码久久久久久图片 | 欧美天堂亚洲电影院在线播放| 欧美精品日韩综合在线| 精品国产成人系列| 亚洲女人的天堂| 美女久久久精品| caoporen国产精品视频| 欧美日韩综合不卡| 国产欧美一区二区三区鸳鸯浴| 一片黄亚洲嫩模| 麻豆成人在线观看| 色呦呦国产精品| 精品国产凹凸成av人导航| 亚洲欧美偷拍卡通变态| 久久激五月天综合精品| 91亚洲精品久久久蜜桃| 精品国产乱码久久久久久闺蜜| 中文字幕五月欧美| 乱中年女人伦av一区二区| 99久久亚洲一区二区三区青草| 91精品国产综合久久久久久久| 国产精品视频在线看| 青青草精品视频| 色狠狠色狠狠综合| 国产日产欧美一区二区视频| 香蕉成人啪国产精品视频综合网| 国产成人啪午夜精品网站男同| 欧美乱妇15p| 国产精品女人毛片| 精品系列免费在线观看| 在线观看免费亚洲| 亚洲国产成人午夜在线一区| 日韩综合小视频| 在线观看亚洲一区| 欧美国产精品一区二区三区| 青草国产精品久久久久久| 色哟哟国产精品免费观看| 久久九九久久九九| 免费成人av在线| 欧美日韩一区二区三区免费看| 国产精品国产三级国产普通话蜜臀 | 欧美韩日一区二区三区| 日本vs亚洲vs韩国一区三区二区| 日本精品一区二区三区高清| 中文字幕av资源一区| 国内成+人亚洲+欧美+综合在线| 欧美日韩色一区| 亚洲乱码中文字幕综合| 亚洲欧洲成人自拍| 色综合久久久久| 久久久国际精品| 免费日韩伦理电影| 91精品国产综合久久蜜臀| 亚洲激情av在线| 91亚洲精华国产精华精华液| 国产色一区二区| 国产老肥熟一区二区三区| 欧美videofree性高清杂交| 免费一区二区视频| 欧美一区二区三区精品| 天堂蜜桃一区二区三区| 欧美三级午夜理伦三级中视频| 亚洲人成在线观看一区二区| 成+人+亚洲+综合天堂| 国产精品免费观看视频| 国产河南妇女毛片精品久久久| 精品欧美久久久| 国产在线精品视频| 久久免费看少妇高潮| 国产成人高清视频| 中文字幕av一区二区三区| 国产99久久久国产精品潘金| 亚洲国产高清不卡| 9人人澡人人爽人人精品| 中文字幕日韩精品一区| 色爱区综合激月婷婷| 成人在线一区二区三区| 中文在线一区二区| 91亚洲精品一区二区乱码| 日韩理论在线观看| 欧美在线影院一区二区| 亚洲第一av色| 欧美一区二区日韩一区二区| 免费av成人在线| 久久综合狠狠综合久久综合88| 国产主播一区二区| 国产精品美日韩| 在线看日韩精品电影| 亚洲第一福利一区| 精品盗摄一区二区三区| 懂色av一区二区三区免费看| 亚洲三级在线播放| 69久久夜色精品国产69蝌蚪网| 日本不卡一二三区黄网| 久久精品一区二区三区不卡牛牛| 丁香啪啪综合成人亚洲小说| 一区二区日韩av| 精品蜜桃在线看| 成人精品国产福利| 亚洲福利视频三区| 久久久亚洲精华液精华液精华液| jizz一区二区| 日韩影院在线观看| 国产欧美一区二区精品性色 | 国产精品资源网| 亚洲视频在线观看一区| 91精品国产91久久久久久一区二区| 韩日欧美一区二区三区| 亚洲精品第一国产综合野| 日韩一区二区电影| 97久久精品人人做人人爽50路| 首页亚洲欧美制服丝腿| 欧美国产日本韩| 欧美一级黄色片| aaa欧美日韩| 久久国产精品72免费观看| 亚洲男女一区二区三区| 久久女同精品一区二区| 欧美性猛交一区二区三区精品| 国产呦萝稀缺另类资源| 亚洲超碰97人人做人人爱| 国产日韩一级二级三级| 欧美一区二区三区四区在线观看| 成人av在线资源网站| 美女精品一区二区| 亚洲精品欧美专区| 久久久久久免费| 欧美亚洲国产一区二区三区va| 国产精品亚洲成人| 日本怡春院一区二区| 一区二区三区欧美| 国产精品无人区| 久久美女高清视频| 日韩一级片网址| 欧美日韩精品欧美日韩精品一综合| 成人一级黄色片|