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

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

?? obex.c

?? 最新的openobex源碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/********************************************************************* *                 * Filename:      obex.c * Version:       0.9 * Description:   API to be used by applications wanting to use OBEX * Status:        Stable. * Author:        Dag Brattli <dagb@cs.uit.no> * Created at:    Sat Apr 17 16:50:25 1999 * CVS ID:        $Id: obex.c,v 1.47 2006/05/25 18:09:41 zany Exp $ *  *     Copyright (c) 1999, 2000 Dag Brattli, All Rights Reserved. *     Copyright (c) 1999, 2000 Pontus Fuchs, 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#include <stdio.h>#include <string.h>#include <errno.h>#ifdef _WIN32#include <winsock.h>#define ESOCKTNOSUPPORT 1#else /* _WIN32 */#include <fcntl.h>#include <signal.h>#include <unistd.h>#endif#include "obex_main.h"#include "obex_object.h"#include "obex_connect.h"#include "obex_client.h"#include "inobex.h"#ifdef HAVE_IRDA#include "irobex.h"#endif#ifdef HAVE_USB#include "usbobex.h"#endif#ifdef HAVE_BLUETOOTH#include "btobex.h"#else// This is to workaround compilation without Bluetooth support. - Jean IItypedef char *bdaddr_t;#endifvoid OBEX_FreeInterfaces(obex_t *self);/** * OBEX_Init - Initialize OBEX. * @transport: Which transport to use. The following transports are available : *             %OBEX_TRANS_IRDA : Use regular IrDA socket (need an IrDA stack) *             %OBEX_TRANS_INET : Use regular TCP/IP socket *             %OBEX_TRANS_CUSTOM : Use user provided transport *             %OBEX_TRANS_BLUETOOTH: Use regular Bluetooth RFCOMM socket (need the BlueZ stack) *             %OBEX_TRANS_USB: Use USB transport (libusb needed) *             If you use %OBEX_TRANS_CUSTOM you must register your own *             transport with OBEX_RegisterCTransport() * @eventcb: Function pointer to your event callback. *           See obex.h for prototype of this callback. * @flags: Bitmask of flags. The following flags are available : *         %OBEX_FL_KEEPSERVER : Keep the server alive after incomming request *         %OBEX_FL_FILTERHINT : Filter target devices based on Obex hint bit *         %OBEX_FL_FILTERIAS  : Filter target devices based on IAS entry * * Returns an OBEX handle or %NULL on error. */obex_t *OBEX_Init(int transport, obex_event_t eventcb, unsigned int flags){	obex_t *self;#if OBEX_DEBUG	obex_debug = OBEX_DEBUG;#endif#if OBEX_DUMP	obex_dump = OBEX_DUMP;#endif	obex_return_val_if_fail(eventcb != NULL, NULL);#ifdef _WIN32	{		WSADATA WSAData;	  	if (WSAStartup (MAKEWORD(2,0), &WSAData) != 0) {			DEBUG(4, "WSAStartup failed\n");			return NULL;		}	}#endif	self = malloc(sizeof(obex_t));	if (self == NULL)		return NULL;	memset(self, 0, sizeof(obex_t));	self->eventcb = eventcb;	self->keepserver = (flags & OBEX_FL_KEEPSERVER) ? TRUE : FALSE;	self->filterhint = (flags & OBEX_FL_FILTERHINT) ? TRUE : FALSE;	self->filterias  = (flags & OBEX_FL_FILTERIAS ) ? TRUE : FALSE;	self->fd = -1;	self->serverfd = -1;	self->writefd = -1;        self->state = MODE_SRV | STATE_IDLE;		/* Init transport */	self->trans.type = transport;	self->trans.connected = FALSE;		/* Safe values.	 * Both self->mtu_rx and self->mtu_tx_max can be increased by app	 * self->mtu_tx will be whatever the other end sneds us - Jean II */	/* Set MTU to the maximum, if using USB transport - Alex Kanavin */	if (transport == OBEX_TRANS_USB) {		self->mtu_rx = OBEX_MAXIMUM_MTU;		self->mtu_tx = OBEX_MINIMUM_MTU;		self->mtu_tx_max = OBEX_MAXIMUM_MTU;	} else {		self->mtu_rx = OBEX_DEFAULT_MTU;		self->mtu_tx = OBEX_MINIMUM_MTU;		self->mtu_tx_max = OBEX_DEFAULT_MTU;	}	/* Allocate message buffers */	/* It's safe to allocate them smaller than OBEX_MAXIMUM_MTU	 * because buf_t will realloc data as needed. - Jean II */	self->rx_msg = buf_new(self->mtu_rx);	if (self->rx_msg == NULL)		goto out_err;	self->tx_msg = buf_new(self->mtu_tx_max);	if (self->tx_msg == NULL)		goto out_err;#ifndef _WIN32	/* Ignore SIGPIPE. Otherwise send() will raise it and the app will quit */	signal(SIGPIPE, SIG_IGN);#endif	return self;out_err:	if (self->tx_msg != NULL)		buf_free(self->tx_msg);	if (self->rx_msg != NULL)		buf_free(self->rx_msg);	free(self);	return NULL;}/** * OBEX_RegisterCTransport - Register a custom transport * @self: OBEX handle * @ctrans: Structure with callbacks to transport operations * (see obex_const.h for details) * * Call this function directly after OBEX_Init if you are using * a custom transport. */int OBEX_RegisterCTransport(obex_t *self, obex_ctrans_t *ctrans){	obex_return_val_if_fail(self != NULL, -1);	obex_return_val_if_fail(ctrans != NULL, -1);	memcpy(&self->ctrans, ctrans, sizeof(obex_ctrans_t));	return 1;}/** * OBEX_Cleanup - Close down an OBEX instance * @self: OBEX handle * * Close down an OBEX instance. */void OBEX_Cleanup(obex_t *self){	obex_return_if_fail(self != NULL);		obex_transport_disconnect_request(self);	obex_transport_disconnect_server(self);	if (self->tx_msg)		buf_free(self->tx_msg);		if (self->rx_msg)		buf_free(self->rx_msg);	OBEX_FreeInterfaces(self);	free(self);}/** * OBEX_SetUserData - Set userdata of an OBEX handle * @self: OBEX handle * @data: It's all up to you! */void OBEX_SetUserData(obex_t *self, void * data){	obex_return_if_fail(self != NULL);	self->userdata=data;}/** * OBEX_GetUserData - Read the userdata from an OBEX handle * @self: OBEX handle * * Returns userdata */void * OBEX_GetUserData(obex_t *self){	obex_return_val_if_fail(self != NULL, 0);	return self->userdata;}/** * OBEX_SetUserCallBack - Change user callback on an OBEX handle * @self: OBEX handle * @eventcb: Function pointer to your new event callback. * @data: Pointer to the new user data to pass to the new callback (optional) */void OBEX_SetUserCallBack(obex_t *self, obex_event_t eventcb, void * data){	obex_return_if_fail(self != NULL);	/* The callback can't be NULL */	if(eventcb != NULL) {		self->eventcb = eventcb;		/* Optionaly change the user data */		if(data != NULL)			self->userdata = data;	}}/** * OBEX_SetTransportMTU - Set MTU to be used for receive and transmit * @self: OBEX handle * @mtu_rx: maximum receive transport packet size * @mtu_tx_max: maximum transmit transport packet size negociated * * Changing those values can increase the performance of the underlying * transport, but will increase memory consumption and latency (especially * abort latency), and may trigger bugs in buggy transport. * This need to be set *before* establishing the connection. * * Returns -1 on error. */int OBEX_SetTransportMTU(obex_t *self, uint16_t mtu_rx, uint16_t mtu_tx_max){	obex_return_val_if_fail(self != NULL, -EFAULT);	if (self->object)	{		DEBUG(1, "We are busy.\n");		return -EBUSY;	}	if (mtu_rx < OBEX_MINIMUM_MTU /*|| mtu_rx > OBEX_MAXIMUM_MTU*/)		return -E2BIG;	if (mtu_tx_max < OBEX_MINIMUM_MTU /*|| mtu_tx_max > OBEX_MAXIMUM_MTU*/)		return -E2BIG;	/* Change MTUs */	self->mtu_rx = mtu_rx;	self->mtu_tx_max = mtu_tx_max;	/* Reallocate transport buffers */	buf_resize(self->rx_msg, self->mtu_rx);	if (self->rx_msg == NULL)		return -ENOMEM;	buf_resize(self->tx_msg, self->mtu_tx_max);	if (self->tx_msg == NULL)		return -ENOMEM;	return 0;}/** * OBEX_ServerRegister - Start listening for incoming connections * @self: OBEX handle * @saddr: Local address to bind to * @addrlen: Length of address * * Bind a server socket to an Obex service. Common transport have * specialised version of this function. * Note : between 0.9.8 and 0.10.0, the prototype of this function * changed to make it generic. If you want your code to work across * new and old version of OpenObex, you may use #ifdef OBEX_MAXIMUM_MTU * to test the Obex version. * * Returns -1 on error. */int OBEX_ServerRegister(obex_t *self, struct sockaddr *saddr, int addrlen){	DEBUG(3, "\n");	obex_return_val_if_fail(self != NULL, -1);	obex_return_val_if_fail((addrlen == 0) || (saddr != NULL), -1);	memcpy(&self->trans.self, saddr, addrlen);	return obex_transport_listen(self);}/** * OBEX_ServerAccept - Accept an incoming connection * @server: OBEX handle * @eventcb: Event callback for client (use %NULL for same as server) * @data: Userdata for client (use %NULL for same as server) * * Create a new OBEX instance to handle the incomming connection. * The old OBEX instance will continue to listen for new connections. * The two OBEX instances become totally independant from each other. * * This function should be called after the library generates * an %OBEX_EV_ACCEPTHINT event to the user, but before the user * start to pull data out of the incomming connection. * * Using this function also requires that the OBEX handle was created * with the %OBEX_FL_KEEPSERVER flag set while calling OBEX_Init(). * * Returns the client instance or %NULL for error. */obex_t *OBEX_ServerAccept(obex_t *server, obex_event_t eventcb, void * data){	obex_t *self;	DEBUG(3, "\n");	obex_return_val_if_fail(server != NULL, NULL);	/* We can accept only if both the server and the connection socket	 * are active */	if((server->fd < 0) || (server->serverfd < 0))		return(NULL);	/* If we have started receiving something, it's too late... */	if(server->object != NULL)		return(NULL);	/* Allocate new instance */	self =  malloc(sizeof(obex_t));	if (self == NULL)		return(NULL);	memset(self, 0, sizeof(obex_t));	/* Set callback and callback data as needed */	if(eventcb != NULL)		self->eventcb = eventcb;	else		self->eventcb = server->eventcb;		if(data != NULL)		self->userdata = data;	else		self->userdata = server->userdata;	self->keepserver = server->keepserver;	/* Copy transport data */	memcpy(&self->trans, &server->trans, sizeof(obex_transport_t));	memcpy(&self->ctrans, &server->ctrans, sizeof(obex_ctrans_t));	self->mtu_rx = server->mtu_rx;	self->mtu_tx = server->mtu_tx;	self->mtu_tx_max = server->mtu_tx_max;	/* Allocate message buffers */	self->rx_msg = buf_new(self->mtu_rx);	if (self->rx_msg == NULL)		goto out_err;	/* Note : mtu_tx not yet negociated, so let's be safe here - Jean II */	self->tx_msg = buf_new(self->mtu_tx_max);	if (self->tx_msg == NULL)		goto out_err;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合天天综合给合国产| 色综合天天综合色综合av| 日韩毛片一二三区| 欧美一区二区精品在线| 91亚洲精品乱码久久久久久蜜桃| 视频一区二区三区中文字幕| 国产日产亚洲精品系列| 欧美日韩高清一区二区| 99久久久免费精品国产一区二区| 免费在线观看成人| 亚洲免费三区一区二区| 久久久久久久久久久黄色| 欧美视频你懂的| 99久久精品国产观看| 精品在线免费观看| 五月婷婷久久综合| 亚洲欧美日韩成人高清在线一区| 国产亚洲欧美日韩在线一区| 欧美久久一二区| 色综合久久88色综合天天6| 国产福利一区二区三区视频在线| 日日夜夜精品视频免费| 亚洲黄色小视频| 1024亚洲合集| 国产精品视频在线看| 欧美tk—视频vk| 欧美电影一区二区三区| 在线观看欧美精品| 成人国产免费视频| 成熟亚洲日本毛茸茸凸凹| 久久超碰97人人做人人爱| 性久久久久久久久| 亚洲成人一区在线| 夜夜揉揉日日人人青青一国产精品| 国产精品蜜臀在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 精品国产sm最大网站免费看| 欧美一区二区视频在线观看2020 | 972aa.com艺术欧美| 国产尤物一区二区| 国内成人自拍视频| 精品亚洲国内自在自线福利| 久久精品久久99精品久久| 奇米色777欧美一区二区| 日本va欧美va欧美va精品| 日韩精品亚洲一区| 美女视频黄频大全不卡视频在线播放| 三级亚洲高清视频| 蜜臀a∨国产成人精品| 麻豆精品国产91久久久久久| 久久精工是国产品牌吗| 国内久久婷婷综合| 成人激情电影免费在线观看| 99视频超级精品| 日本乱码高清不卡字幕| 欧美性感一区二区三区| 欧美精品在线观看一区二区| 777亚洲妇女| 久久综合九色综合97婷婷女人 | 91麻豆精品国产无毒不卡在线观看| 欧美伊人久久久久久午夜久久久久| 欧美专区日韩专区| 欧美一级日韩免费不卡| 欧美精品一区二区三区四区| 国产亚洲一区二区三区四区| 国产精品久久99| 亚洲在线中文字幕| 免费观看成人av| 国产成人av一区| 色综合久久66| 91精品国产综合久久小美女 | 亚洲精品久久久蜜桃| 婷婷丁香久久五月婷婷| 国内成人免费视频| 91丨九色丨蝌蚪丨老版| 欧美日韩精品一区二区三区 | 亚洲视频一区二区在线观看| 亚洲国产成人tv| 久久99国产精品久久99| 99精品国产热久久91蜜凸| 欧美在线你懂的| 久久久久久亚洲综合影院红桃| ...xxx性欧美| 久久精工是国产品牌吗| 91一区在线观看| 日韩一区二区电影| 亚洲视频在线一区二区| 免费看日韩精品| 91麻豆视频网站| 精品欧美黑人一区二区三区| 亚洲视频免费在线观看| 麻豆精品视频在线观看| 一本久久a久久免费精品不卡| 日韩一卡二卡三卡| 亚洲男人的天堂一区二区 | 久久激情综合网| 91亚洲精品久久久蜜桃| 精品国产一区二区亚洲人成毛片| 亚洲乱码国产乱码精品精小说| 美女网站在线免费欧美精品| 色综合网站在线| 久久中文娱乐网| 天天射综合影视| 91蝌蚪porny成人天涯| 久久久三级国产网站| 亚洲国产美女搞黄色| 成人av在线电影| 精品国产一区二区三区不卡| 亚洲国产视频在线| 99国产精品久久久久| 欧美mv日韩mv国产网站| 亚洲午夜三级在线| 91毛片在线观看| 国产精品久久久久aaaa樱花| 国产乱国产乱300精品| 91精品啪在线观看国产60岁| 一区二区三区免费网站| 99精品视频免费在线观看| 国产性做久久久久久| 精品在线观看视频| 91精品国产麻豆| 偷拍日韩校园综合在线| 欧美在线视频你懂得| 亚洲人成在线播放网站岛国| 成人永久aaa| 国产欧美日韩综合| 国产乱色国产精品免费视频| 日韩欧美卡一卡二| 三级影片在线观看欧美日韩一区二区| 在线精品视频免费播放| 亚洲美女免费视频| 97精品视频在线观看自产线路二| 国产精品久久久久影视| 国产精品456| 日本一区二区不卡视频| 高清不卡在线观看| 国产欧美精品一区二区三区四区| 国产在线不卡一区| 久久久不卡网国产精品一区| 精品亚洲成a人| 久久一区二区三区四区| 国产乱国产乱300精品| 国产婷婷色一区二区三区 | 欧美专区日韩专区| 亚洲一二三四区| 欧美三级韩国三级日本三斤| 亚洲国产精品欧美一二99| 欧美亚洲综合一区| 无吗不卡中文字幕| 日韩免费视频一区| 国产专区欧美精品| 日本一区二区高清| 色天天综合久久久久综合片| 亚洲自拍偷拍综合| 56国语精品自产拍在线观看| 免费精品视频在线| 久久久亚洲综合| 99久久伊人精品| 亚洲一区在线观看免费 | 在线视频国内自拍亚洲视频| 亚洲一区二区三区在线播放| 制服.丝袜.亚洲.中文.综合| 激情五月婷婷综合| 国产精品国产三级国产aⅴ无密码| 一本大道av一区二区在线播放| 亚洲一二三四区| 日韩你懂的电影在线观看| 国产成人免费视频网站高清观看视频 | 狠狠色丁香婷综合久久| 国产亚洲精品aa| 色婷婷精品大视频在线蜜桃视频| 亚洲一区二区三区四区在线免费观看| 欧美二区在线观看| 国产宾馆实践打屁股91| 一区二区三区影院| 欧美大度的电影原声| av日韩在线网站| 麻豆精品精品国产自在97香蕉 | 亚洲人成亚洲人成在线观看图片| 欧美日韩精品系列| 国产乱子伦视频一区二区三区| 亚洲激情校园春色| 精品免费视频.| 91黄视频在线| 国产精品一区二区不卡| 亚洲午夜在线观看视频在线| 久久久精品黄色| 欧美日韩免费观看一区二区三区| 国产综合久久久久久鬼色| 亚洲一区二三区| 亚洲国产经典视频| 亚洲视频在线观看三级| 69久久99精品久久久久婷婷| 成人小视频免费在线观看| 午夜激情一区二区| 国产精品久久久久久久久图文区 | 狠狠久久亚洲欧美| 亚洲一区av在线| 国产精品全国免费观看高清| 91精品婷婷国产综合久久竹菊|