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

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

?? obex_main.c

?? 這是Linux環境下的openobex
?? C
字號:
/********************************************************************* *                 * Filename:      obex_main.c * Version:       0.9 * Description:   Implementation of the Object Exchange Protocol OBEX * Status:        Experimental. * Author:        Dag Brattli <dagb@cs.uit.no> * Created at:    Fri Jul 17 23:02:02 1998 * CVS ID:        $Id: obex_main.c,v 1.25 2006/01/03 18:36:15 holtmann Exp $ *  *     Copyright (c) 2000 Pontus Fuchs, All Rights Reserved. *     Copyright (c) 1999 Dag Brattli, All Rights Reserved. * *     This library is free software; you can redistribute it and/or *     modify it under the terms of the GNU Lesser General Public *     License as published by the Free Software Foundation; either *     version 2 of the License, or (at your option) any later version. * *     This library 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 *     Lesser General Public License for more details. * *     You should have received a copy of the GNU Lesser General Public *     License along with this library; if not, write to the Free Software *     Foundation, Inc., 59 Temple Place, Suite 330, Boston,  *     MA  02111-1307  USA *      ********************************************************************/#ifdef HAVE_CONFIG_H#include <config.h>#endif#ifdef _WIN32#include <winsock.h>#else /* _WIN32 */#include <unistd.h>#include <string.h>#include <fcntl.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/types.h>#include <stdio.h>#ifdef HAVE_BLUETOOTH#include <bluetooth/bluetooth.h>#endif /*HAVE_BLUETOOTH*/#endif /* _WIN32 */#include "obex_main.h"#include "obex_header.h"#include "obex_server.h"#include "obex_client.h"#include <openobex/obex_const.h>#ifdef OBEX_DEBUGint obex_debug;#endif#ifdef OBEX_DUMPint obex_dump;#endif/* * Function obex_create_socket() * *    Create socket if needed. * */int obex_create_socket(obex_t *self, int domain){	int fd, proto;	DEBUG(4, "\n");	proto = 0;#ifdef HAVE_BLUETOOTH	if (domain == AF_BLUETOOTH)		proto = BTPROTO_RFCOMM;#endif /*HAVE_BLUETOOTH*/	fd = socket(domain, SOCK_STREAM, proto);	return fd;}/* * Function obex_delete_socket() * *    Close socket if opened. * */int obex_delete_socket(obex_t *self, int fd){	int ret;	DEBUG(4, "\n");	if(fd < 0)		return fd;#ifdef _WIN32	ret = closesocket(fd);#else /* _WIN32 */	ret = close(fd);#endif /* _WIN32 */	return ret;}/* * Function obex_response_to_string(rsp) * *    Return a string of an OBEX-response * */char *obex_response_to_string(int rsp){	switch (rsp) {	case OBEX_RSP_CONTINUE:		return "Continue";	case OBEX_RSP_SWITCH_PRO:		return "Switching protocols";	case OBEX_RSP_SUCCESS:		return "OK, Success";	case OBEX_RSP_CREATED:		return "Created";	case OBEX_RSP_ACCEPTED:		return "Accepted";	case OBEX_RSP_NO_CONTENT:		return "No Content";	case OBEX_RSP_BAD_REQUEST:		return "Bad Request";	case OBEX_RSP_UNAUTHORIZED:		return "Unautorized";	case OBEX_RSP_PAYMENT_REQUIRED:		return "Payment required";	case OBEX_RSP_FORBIDDEN:		return "Forbidden";	case OBEX_RSP_NOT_FOUND:		return "Not found";	case OBEX_RSP_METHOD_NOT_ALLOWED:		return "Method not allowed";	case OBEX_RSP_CONFLICT:		return "Conflict";	case OBEX_RSP_INTERNAL_SERVER_ERROR:		return "Internal server error";	case OBEX_RSP_NOT_IMPLEMENTED:		return "Not implemented!";	case OBEX_RSP_DATABASE_FULL:		return "Database full";	case OBEX_RSP_DATABASE_LOCKED:		return "Database locked";	default:		return "Unknown response";	}}/* * Function obex_deliver_event () * *    Deliver an event to app. * */void obex_deliver_event(obex_t *self, int event, int cmd, int rsp, int del){	if(self->state & MODE_SRV)		self->eventcb(self, self->object, OBEX_SERVER, event, cmd, rsp);	else		self->eventcb(self, self->object, OBEX_CLIENT, event, cmd, rsp);		if(del == TRUE && self->object != NULL) {		obex_object_delete(self->object);		self->object = NULL;	}}/* * Function obex_response_request (self, opcode) * *    Send a response to peer device * */void obex_response_request(obex_t *self, uint8_t opcode){	GNetBuf *msg;	obex_return_if_fail(self != NULL);	msg = g_netbuf_recycle(self->tx_msg);	g_netbuf_reserve(msg, sizeof(obex_common_hdr_t));	obex_data_request(self, msg, opcode | OBEX_FINAL);}/* * Function obex_data_request (self, opcode, cmd) * *    Send response or command code along with optional headers/data. * */int obex_data_request(obex_t *self, GNetBuf *msg, int opcode){	obex_common_hdr_t *hdr;	int actual = 0;	obex_return_val_if_fail(self != NULL, -1);	obex_return_val_if_fail(msg != NULL, -1);	/* Insert common header */	hdr = (obex_common_hdr_t *) g_netbuf_push(msg, sizeof(obex_common_hdr_t));	hdr->opcode = opcode;	hdr->len = htons((uint16_t)msg->len);	DUMPBUFFER(1, "Tx", msg);	DEBUG(1, "len = %d bytes\n", msg->len);	actual = obex_transport_write(self, msg);	return actual;}/* * Function obex_data_indication (self) * *    Read/Feed some input from device and find out which packet it is * */int obex_data_indication(obex_t *self, uint8_t *buf, int buflen){	obex_common_hdr_t *hdr;	GNetBuf *msg;	int final;	int actual = 0;	unsigned int size;	int ret;		DEBUG(4, "\n");	obex_return_val_if_fail(self != NULL, -1);	msg = self->rx_msg;		/* First we need 3 bytes to be able to know how much data to read */	if(msg->len < 3)  {		actual = obex_transport_read(self, 3 - (msg->len), buf, buflen);				DEBUG(4, "Got %d bytes\n", actual);		/* Check if we are still connected */		if (actual <= 0)	{			obex_deliver_event(self, OBEX_EV_LINKERR, 0, 0, TRUE);			return actual;		}		buf += actual;		buflen -= actual;		g_netbuf_put(msg, actual);	}	/* If we have 3 bytes data we can decide how big the packet is */	if(msg->len >= 3) {		hdr = (obex_common_hdr_t *) msg->data;		size = ntohs(hdr->len);		actual = 0;		if(msg->len != (int) ntohs(hdr->len)) {			actual = obex_transport_read(self, size - msg->len, buf,				buflen);			/* Check if we are still connected */			if (actual <= 0)	{				obex_deliver_event(self, OBEX_EV_LINKERR, 0, 0, TRUE);				return actual;			}		}	}        else {		/* Wait until we have at least 3 bytes data */		DEBUG(3, "Need at least 3 bytes got only %d!\n", msg->len);		return actual;        }	/* New data has been inserted at the end of message */	g_netbuf_put(msg, actual);	DEBUG(1, "Got %d bytes msg len=%d\n", actual, msg->len);	/*	 * Make sure that the buffer we have, actually has the specified	 * number of bytes. If not the frame may have been fragmented, and	 * we will then need to read more from the socket.  	 */	/* Make sure we have a whole packet */	if (size > msg->len) {		DEBUG(3, "Need more data, size=%d, len=%d!\n",		      size, msg->len);		/* I'll be back! */		return msg->len;	}	DUMPBUFFER(2, "Rx", msg);	actual = msg->len;	final = hdr->opcode & OBEX_FINAL; /* Extract final bit */	/* Dispatch to the mode we are in */	if(self->state & MODE_SRV) {		ret = obex_server(self, msg, final);		g_netbuf_recycle(msg);			}	else	{		ret = obex_client(self, msg, final);		g_netbuf_recycle(msg);	}	/* Check parse errors */	if(ret < 0)		actual = ret;	return actual;}/* * Function obex_cancel_request () * *    Cancel an ongoing request * */int obex_cancelrequest(obex_t *self, int nice){	/* If we have no ongoing request do nothing */	if(self->object == NULL)		return 0;	/* Abort request without sending abort */	if (!nice) {		/* Deliver event will delete the object */		obex_deliver_event(self, OBEX_EV_ABORT, 0, 0, TRUE);		g_netbuf_recycle(self->tx_msg);		g_netbuf_recycle(self->rx_msg);		/* Since we didn't send ABORT to peer we are out of sync		   and need to disconnect transport immediately, so we signal		   link error to app */		obex_deliver_event(self, OBEX_EV_LINKERR, 0, 0, FALSE);		return 1;	} else {		obex_object_t *object;		object = obex_object_new();		if (object == NULL)			return -1;		obex_object_setcmd(object, OBEX_CMD_ABORT, OBEX_CMD_ABORT);		if (obex_object_send(self, object, TRUE, TRUE) < 0) {			obex_object_delete(object);			return -1;		}		obex_object_delete(object);		self->object->abort = TRUE;		self->state = STATE_REC;		return 0;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区黄色| 欧美精品 国产精品| 日韩vs国产vs欧美| 亚洲国产精品人人做人人爽| 久久精品国产精品亚洲精品| 亚洲国产人成综合网站| 一区二区三区日韩精品| 亚洲精品国产成人久久av盗摄 | 在线播放中文一区| 在线这里只有精品| 欧美日韩国产123区| 欧美一区二区三区爱爱| 日韩精品一区二区三区在线| 欧美mv日韩mv国产网站app| 精品久久人人做人人爽| 日本一区二区三区四区在线视频| 中文字幕不卡在线播放| 亚洲女性喷水在线观看一区| 亚洲狠狠丁香婷婷综合久久久| 亚洲影院久久精品| 久久精品国产久精国产爱| 国产精品一品视频| 91在线精品一区二区| 欧美精品在欧美一区二区少妇| 日韩精品专区在线影院重磅| 国产亚洲成aⅴ人片在线观看| 国产精品免费看片| 天堂成人国产精品一区| 懂色av中文一区二区三区| 91老师国产黑色丝袜在线| 欧美日本免费一区二区三区| 26uuu久久天堂性欧美| 亚洲免费观看视频| 九九九精品视频| 91麻豆国产在线观看| 欧美电影免费观看高清完整版 | 18涩涩午夜精品.www| 亚洲大片一区二区三区| 国产一区中文字幕| 久久色在线观看| 亚洲欧洲制服丝袜| 精品影视av免费| 欧美亚一区二区| 久久精品一级爱片| 免费成人深夜小野草| av在线一区二区| 久久综合九色综合97婷婷女人 | 国产喂奶挤奶一区二区三区| 亚洲国产另类精品专区| 国产精品资源网| 欧美一区二区三区四区高清| 国产日韩精品一区二区浪潮av| 午夜精品福利久久久| 91污在线观看| 国产精品欧美一区喷水| 久久er精品视频| 欧美嫩在线观看| 有码一区二区三区| 成人高清视频免费观看| 久久婷婷国产综合国色天香| 爽好久久久欧美精品| 欧美亚洲国产一卡| 亚洲黄色小视频| 91亚洲精品乱码久久久久久蜜桃| 国产视频一区二区在线| 久久精品国产精品亚洲精品| 91精品免费在线观看| 亚洲电影一区二区| 欧美亚洲综合网| 一区二区三区 在线观看视频| 不卡欧美aaaaa| 国产精品丝袜黑色高跟| 国产91综合一区在线观看| 欧美成人欧美edvon| 久久99精品久久久久久久久久久久| 51精品久久久久久久蜜臀| 大陆成人av片| 亚洲国产精品高清| 成人短视频下载| 亚洲欧美区自拍先锋| 91一区二区三区在线观看| 亚洲免费观看高清完整| 欧美中文字幕一区| 亚洲国产视频网站| 日韩欧美美女一区二区三区| 久久国产夜色精品鲁鲁99| 久久色成人在线| 成人av电影免费在线播放| 中文字幕在线播放不卡一区| 色哟哟精品一区| 婷婷久久综合九色综合绿巨人 | 成人av网站免费| 亚洲精品日韩专区silk| 欧美日韩免费电影| 韩国视频一区二区| 中文字幕一区二区三区在线观看| 色婷婷久久99综合精品jk白丝| 亚洲成av人在线观看| 日韩欧美你懂的| 成人app下载| 亚洲成av人片观看| xf在线a精品一区二区视频网站| 国产99久久久久| 成人免费高清在线观看| 亚洲日本va在线观看| 欧美日韩极品在线观看一区| 国产自产视频一区二区三区| 中文字幕免费一区| 这里只有精品99re| 国v精品久久久网| 午夜国产精品一区| 久久久.com| 欧美午夜精品久久久久久孕妇| 日本欧美在线看| 亚洲欧美另类久久久精品| 日韩精品一区国产麻豆| 99久久精品99国产精品| 精品一区二区三区免费观看| 国产精品视频yy9299一区| 91精品国产91久久久久久一区二区| 国产91丝袜在线播放0| 青青青爽久久午夜综合久久午夜| 欧美国产禁国产网站cc| 日韩一级二级三级精品视频| 99国产精品视频免费观看| 国产一区二区在线影院| 午夜精品福利在线| 亚洲男人电影天堂| 亚洲国产精品传媒在线观看| 日韩欧美三级在线| 欧美精品黑人性xxxx| 一本大道久久a久久综合| 国产成人免费视| 男人的天堂亚洲一区| 亚洲国产精品麻豆| 一区二区三区四区在线免费观看| 中文字幕精品综合| 久久久久久久综合色一本| 日韩一级黄色片| 91精品国产综合久久精品性色 | 欧洲av一区二区嗯嗯嗯啊| 丁香桃色午夜亚洲一区二区三区| 蜜桃视频一区二区| 首页亚洲欧美制服丝腿| 亚洲大片在线观看| 亚洲大片一区二区三区| 亚洲福利一区二区三区| 亚洲综合色在线| 亚洲乱码国产乱码精品精98午夜| 国产精品乱码人人做人人爱| 国产日韩欧美高清| 国产精品国产三级国产普通话蜜臀 | 一本一道综合狠狠老| 成人午夜在线免费| 成人午夜在线播放| kk眼镜猥琐国模调教系列一区二区 | 一区二区三区精品在线观看| 亚洲男女毛片无遮挡| 亚洲日本丝袜连裤袜办公室| 看电影不卡的网站| 麻豆视频观看网址久久| 久久精品免费看| 国产精品69毛片高清亚洲| 国产乱子轮精品视频| 粉嫩一区二区三区性色av| 成人永久免费视频| 色一区在线观看| 欧美日韩精品一区二区三区| 欧美精品久久99| 久久人人97超碰com| 国产日韩欧美一区二区三区综合| 国产精品私房写真福利视频| 亚洲婷婷综合久久一本伊一区| 18成人在线观看| 手机精品视频在线观看| 老色鬼精品视频在线观看播放| 国产一区二区毛片| 97成人超碰视| 3atv一区二区三区| 国产欧美日韩激情| 亚洲午夜电影在线| 九色综合狠狠综合久久| 91在线观看一区二区| 欧美男人的天堂一二区| xvideos.蜜桃一区二区| 尤物av一区二区| 美国三级日本三级久久99| caoporm超碰国产精品| 欧美性猛交xxxx黑人交| 精品国产乱码久久久久久老虎| 中文字幕一区不卡| 美女免费视频一区二区| 成人爱爱电影网址| 欧美一二三四在线| 亚洲免费三区一区二区| 国产一区二区在线影院| 欧美性感一区二区三区| 日本一区二区免费在线| 日本人妖一区二区| 欧洲人成人精品|