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

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

?? irobex.c

?? 這是Linux環境下的openobex
?? C
字號:
/*************************************<******************************** *                 * Filename:      irobex.c * Version:       0.6 * Description:   IrOBEX, IrDA transport for OBEX * Status:        Experimental. * Author:        Dag Brattli <dagb@cs.uit.no> * Created at:    Fri Apr 23 14:28:13 1999 * CVS ID:        $Id: irobex.c,v 1.18 2006/01/03 18:36:15 holtmann Exp $ *  *     Copyright (c) 1999 Dag Brattli, All Rights Reserved. *     Copyright (c) 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#ifdef HAVE_IRDA#ifdef _WIN32#include <winsock.h>#include <irda_wrap.h>#else /* _WIN32 *//* Linux case */#include <string.h>#include <unistd.h>#include <stdio.h>		/* perror */#include <errno.h>		/* errno and EADDRNOTAVAIL */#include <netinet/in.h>#include <sys/socket.h>#include "irda_wrap.h"#ifndef AF_IRDA#define AF_IRDA 23#endif /* AF_IRDA */#endif /* _WIN32 */#include "obex_main.h"#include "irobex.h"/* * Function irobex_no_addr (addr) * *    Check if the address is not valid for connection * */static inline int irobex_no_addr(struct sockaddr_irda *addr){#ifndef _WIN32	return((addr->sir_addr == 0x0) || (addr->sir_addr == 0xFFFFFFFF));#else	return( ((addr->irdaDeviceID[0] == 0x00) &&		 (addr->irdaDeviceID[1] == 0x00) &&		 (addr->irdaDeviceID[2] == 0x00) &&		 (addr->irdaDeviceID[3] == 0x00)) ||		((addr->irdaDeviceID[0] == 0xFF) &&		 (addr->irdaDeviceID[1] == 0xFF) &&		 (addr->irdaDeviceID[2] == 0xFF) &&		 (addr->irdaDeviceID[3] == 0xFF)) );#endif /* _WIN32 */}/* * Function irobex_prepare_connect (self, service) * *    Prepare for IR-connect * */void irobex_prepare_connect(obex_t *self, const char *service){	self->trans.peer.irda.sir_family = AF_IRDA;	if (service)		strncpy(self->trans.peer.irda.sir_name, service, 25);	else		strcpy(self->trans.peer.irda.sir_name, "OBEX");}/* * Function irobex_prepare_listen (self, service) * *    Prepare for IR-listen * */void irobex_prepare_listen(obex_t *self, const char *service){	/* Bind local service */	self->trans.self.irda.sir_family = AF_IRDA;	if (service == NULL)		strncpy(self->trans.self.irda.sir_name, "OBEX", 25);	else		strncpy(self->trans.self.irda.sir_name, service, 25);#ifndef _WIN32	self->trans.self.irda.sir_lsap_sel = LSAP_ANY;#endif /* _WIN32 */}/* * Function irobex_listen (self) * *    Listen for incoming connections. * */int irobex_listen(obex_t *self){	DEBUG(3, "\n");	self->serverfd = obex_create_socket(self, AF_IRDA);	if(self->serverfd < 0) {		DEBUG(0, "Error creating socket\n");		return -1;	}		if (bind(self->serverfd, (struct sockaddr*) &self->trans.self.irda, 		 sizeof(struct sockaddr_irda)))	{		DEBUG(0, "Error doing bind\n");		goto out_freesock;	}#ifndef _WIN32	/* Ask the IrDA stack to advertise the Obex hint bit - Jean II */	/* Under Linux, it's a regular socket option */	{		unsigned char	hints[4];	/* Hint be we advertise */		/* We want to advertise the OBEX hint bit */		hints[0] = HINT_EXTENSION;		hints[1] = HINT_OBEX;		/* Tell the stack about it */		if (setsockopt(self->serverfd, SOL_IRLMP, IRLMP_HINTS_SET,			       hints, sizeof(hints))) {			/* This command is not supported by older kernels,			   so ignore any errors! */		}	}#else /* _WIN32 */	/* Ask the IrDA stack to advertise the Obex hint bit */	/* Under Windows, it's a complicated story */#endif /* _WIN32 */	if (listen(self->serverfd, 1)) {		DEBUG(0, "Error doing listen\n");		goto out_freesock;	}	DEBUG(4, "We are now listening for connections\n");	return 1;out_freesock:	obex_delete_socket(self, self->serverfd);	self->serverfd = -1;	return -1;}/* * Function irobex_accept (self) * *    Accept an incoming connection. * * Note : don't close the server socket here, so apps may want to continue * using it... */int irobex_accept(obex_t *self){	socklen_t addrlen = sizeof(struct sockaddr_irda);	int mtu;	socklen_t len = sizeof(int);	// First accept the connection and get the new client socket.	self->fd = accept(self->serverfd, (struct sockaddr *) &self->trans.peer.irda, 			  &addrlen);	if (self->fd < 0) {		return -1;	}#ifndef _WIN32	/* Check what the IrLAP data size is */	if (getsockopt(self->fd, SOL_IRLMP, IRTTP_MAX_SDU_SIZE, (void *) &mtu, 		       &len)) 	{		return -1;	}	self->trans.mtu = mtu;	DEBUG(3, "transport mtu=%d\n", mtu);#else	self->trans.mtu = OBEX_DEFAULT_MTU;#endif /* _WIN32 */	return 0;}	/* Memory allocation for discovery */#define DISC_BUF_LEN	sizeof(struct irda_device_list) + \			sizeof(struct irda_device_info) * (MAX_DEVICES)/* * Function irobex_discover_devices (self) * *    Try to discover some remote device(s) that we can connect to * * Note : we optionally can do a first filtering on the Obex hint bit, * and then we can verify that the device does have the requested service... * Note : in this function, the memory allocation for the discovery log * is done "the right way", so that it's safe and we don't leak memory... * Jean II */static int irobex_discover_devices(obex_t *self){	struct irda_device_list *	list;	unsigned char		buf[DISC_BUF_LEN];	int ret = -1;	int err;	socklen_t len;	int i;#ifndef _WIN32	/* Hint bit filtering. Linux case */	if(self->filterhint) {		unsigned char	hints[4];	/* Hint be we filter on */		/* We want only devices that advertise OBEX hint */		hints[0] = HINT_EXTENSION;		hints[1] = HINT_OBEX;		/* Set the filter used for performing discovery */		if (setsockopt(self->fd, SOL_IRLMP, IRLMP_HINT_MASK_SET,			       hints, sizeof(hints))) {			perror("setsockopt:");			return(-1);		}	}#endif /* _WIN32 */	/* Set the list to point to the correct place */	list = (struct irda_device_list *) buf;	len = DISC_BUF_LEN;	/* Perform a discovery and get device list */	if (getsockopt(self->fd, SOL_IRLMP, IRLMP_ENUMDEVICES, buf, &len)) {		DEBUG(1, "Didn't find any devices!\n");		return(-1);	}#ifndef _WIN32	/* Did we get any ? (in some rare cases, this test is true) */	if (list->len <= 0) {		DEBUG(1, "Didn't find any devices!\n");		return(-1);	}	/* List all Obex devices : Linux case */	DEBUG(1, "Discovered %d devices :\n", list->len);	for(i = 0; i < list->len; i++) {		DEBUG(1, "  [%d] name:  %s, daddr: 0x%08x",		      i + 1, list->dev[i].info, list->dev[i].daddr);		//fflush(stdout);		/* Do we want to filter devices based on IAS ? */		if(self->filterias) {			struct irda_ias_set ias_query;			/* Ask if the requested service exist on this device */			len = sizeof(ias_query);			ias_query.daddr = list->dev[i].daddr;			strcpy(ias_query.irda_class_name,			       self->trans.peer.irda.sir_name);			strcpy(ias_query.irda_attrib_name,			       "IrDA:TinyTP:LsapSel");			err = getsockopt(self->fd, SOL_IRLMP, IRLMP_IAS_QUERY,					 &ias_query, &len);			/* Check if we failed */			if(err != 0) {				if(errno != EADDRNOTAVAIL) {					DEBUG(1, " <can't query IAS>\n");				} else {					DEBUG(1, ", doesn't have %s\n",					      self->trans.peer.irda.sir_name);				}				/* Go back to for(;;) */				continue;			}			DEBUG(1, ", has service %s\n",			      self->trans.peer.irda.sir_name);		}		else {			DEBUG(1, "\n");		}		/* Pick this device */		self->trans.peer.irda.sir_addr = list->dev[i].daddr;		self->trans.self.irda.sir_addr = list->dev[i].saddr;		ret = 0;	}#else	/* List all Obex devices : Win32 case */	if (len > 0) {		DEBUG(1, "Discovered: (list len=%d)\n", list->numDevice);		for (i=0; i<(int)list->numDevice; i++) {			DEBUG(1, "  name:  %s\n", list->Device[i].irdaDeviceName);			DEBUG(1, "  daddr: %08x\n", list->Device[i].irdaDeviceID);			memcpy(&self->trans.peer.irda.irdaDeviceID[0], &list->Device[i].irdaDeviceID[0], 4);			ret = 0;		}	}#endif /* _WIN32 */	if(ret <  0)		DEBUG(1, "didn't find any OBEX devices!\n");	return(ret);}/* * Function irobex_irda_connect_request (self) * *    Open the TTP connection * */int irobex_connect_request(obex_t *self){	int mtu = 0;	socklen_t len = sizeof(int);	int ret;	DEBUG(4, "\n");	if(self->fd < 0)	{		self->fd = obex_create_socket(self, AF_IRDA);		if(self->fd < 0)			return -1;	}	/* Check if the application did supply a valid address.	 * You need to use OBEX_TransportConnect() for that. Jean II */	if(irobex_no_addr(&self->trans.peer.irda)) {		/* Nope. Go find one... */		ret = irobex_discover_devices(self);		if (ret < 0)	{			DEBUG(1, "No devices in range\n");			goto out_freesock;		}	}	ret = connect(self->fd, (struct sockaddr*) &self->trans.peer.irda,		      sizeof(struct sockaddr_irda));	if (ret < 0) {		DEBUG(4, "ret=%d\n", ret);		goto out_freesock;	}#ifndef _WIN32	/* Check what the IrLAP data size is */	ret = getsockopt(self->fd, SOL_IRLMP, IRTTP_MAX_SDU_SIZE, 			 (void *) &mtu, &len);	if (ret < 0) {		goto out_freesock;	}#else	mtu = 512;#endif	self->trans.mtu = mtu;	DEBUG(2, "transport mtu=%d\n", mtu);		return 1;out_freesock:	obex_delete_socket(self, self->fd);	self->fd = -1;	return ret;	}/* * Function irobex_link_disconnect_request (self) * *    Shutdown the IrTTP link * */int irobex_disconnect_request(obex_t *self){	int ret;	DEBUG(4, "\n");	ret = obex_delete_socket(self, self->fd);	if(ret < 0)		return ret;	self->fd = -1;	return ret;	}/* * Function irobex_link_disconnect_server (self) * *    Close the server socket * * Used when we start handling a incomming request, or when the * client just want to quit... */int irobex_disconnect_server(obex_t *self){	int ret;	DEBUG(4, "\n");	ret = obex_delete_socket(self, self->serverfd);	self->serverfd = -1;	return ret;	}#endif /* HAVE_IRDA */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区免费在线观看| 国产精品自拍三区| 国产在线一区观看| 91亚洲精华国产精华精华液| 日韩精品专区在线影院重磅| 中文字幕一区三区| 国产一区二区免费在线| 欧美系列在线观看| 日韩伦理av电影| 国产一区二区三区黄视频 | 国产精品理伦片| 午夜激情一区二区三区| 99久久精品费精品国产一区二区| 欧美久久久久久久久中文字幕| 国产欧美日产一区| 国产在线精品一区二区不卡了| 欧美日韩1234| 五月天亚洲婷婷| 一本色道久久综合狠狠躁的推荐| 国产亚洲欧洲一区高清在线观看| 日本伊人精品一区二区三区观看方式| 欧洲在线/亚洲| 亚洲女爱视频在线| 91丝袜美女网| 亚洲久本草在线中文字幕| 久久 天天综合| 日韩一区二区电影在线| 亚洲国产综合视频在线观看| 一本色道亚洲精品aⅴ| 国产精品天美传媒沈樵| 国产不卡在线播放| 久久久亚洲高清| 国产精品亚洲专一区二区三区| 精品国产免费久久| 国产又黄又大久久| 精品国产sm最大网站免费看| 精品一区二区av| 精品国产sm最大网站| 精品无码三级在线观看视频 | 日本亚洲欧美天堂免费| 欧美日韩中文一区| 日韩精品五月天| 欧美一区二区三区在线| 蜜桃av一区二区三区电影| 欧美videossexotv100| 韩国在线一区二区| 国产精品视频线看| 国产福利不卡视频| 国产午夜精品一区二区三区嫩草 | 日日骚欧美日韩| 欧美一区二区日韩一区二区| 六月丁香婷婷色狠狠久久| 久久久久久99精品| 成人免费av在线| 亚洲乱码中文字幕| 在线播放一区二区三区| 狠狠色丁香久久婷婷综合丁香| 日韩精品资源二区在线| 久久精品国产99久久6| 欧美韩国日本不卡| 欧美性猛交xxxx黑人交| 精品一区二区三区在线视频| 国产精品网站导航| 久久久久久久久久电影| 成人97人人超碰人人99| 亚洲一区在线视频| 精品成人免费观看| 色综合久久综合| 美腿丝袜亚洲三区| 亚洲美女精品一区| 精品第一国产综合精品aⅴ| 91在线观看视频| 麻豆国产91在线播放| 国产欧美一区二区精品婷婷| 91色九色蝌蚪| 国产中文一区二区三区| 亚洲香蕉伊在人在线观| 国产亚洲制服色| 欧美精品一二三四| av成人免费在线观看| 美女脱光内衣内裤视频久久影院| 亚洲欧美日韩成人高清在线一区| 欧美一级一区二区| 色系网站成人免费| 国产老肥熟一区二区三区| 五月婷婷欧美视频| 自拍视频在线观看一区二区| 久久夜色精品国产噜噜av| 欧美视频日韩视频| 成人福利视频在线看| 久久99精品久久久久久动态图| 国产精品免费aⅴ片在线观看| 欧美一区二视频| 欧美亚洲综合色| 91在线观看一区二区| 麻豆精品国产91久久久久久| 亚洲第一在线综合网站| 日韩美女啊v在线免费观看| 久久久久久麻豆| 欧美电视剧在线看免费| 欧美人动与zoxxxx乱| 精品精品欲导航| 欧美日韩国产综合草草| 在线亚洲欧美专区二区| 成人av先锋影音| 国产99久久久久久免费看农村| 美女视频黄免费的久久| 日本欧美加勒比视频| 亚洲免费电影在线| 国产精品久久久久影院亚瑟| 国产日韩v精品一区二区| 久久久久久久av麻豆果冻| 91麻豆精品国产91久久久久久久久 | 成人永久aaa| 国产福利电影一区二区三区| 精品无人区卡一卡二卡三乱码免费卡| 日韩精品午夜视频| 日韩国产欧美一区二区三区| 天天色综合天天| 免费看欧美女人艹b| 日韩激情一二三区| 蜜臀91精品一区二区三区| 日本亚洲一区二区| 麻豆国产欧美日韩综合精品二区| 久久99精品久久久久久| 久国产精品韩国三级视频| 国产在线观看一区二区| 国产福利精品一区二区| 99精品视频一区二区| 91久久香蕉国产日韩欧美9色| 不卡的电影网站| 成人动漫一区二区在线| 91色在线porny| 欧美日韩国产美女| 亚洲综合色婷婷| 亚洲国产精品自拍| 蜜臀久久久久久久| 国产v日产∨综合v精品视频| 97精品电影院| 7878成人国产在线观看| 这里只有精品视频在线观看| 日韩欧美三级在线| 精品999在线播放| 亚洲欧美综合在线精品| 亚洲成人免费视频| 狠狠色丁香九九婷婷综合五月| 懂色av噜噜一区二区三区av| 色欧美片视频在线观看| 欧美成人video| 1000精品久久久久久久久| 亚洲国产另类精品专区| 国产美女一区二区| 色噜噜狠狠色综合欧洲selulu| 欧美一级电影网站| 国产精品福利一区二区| 日韩二区在线观看| 懂色av一区二区三区免费观看| 欧美午夜电影在线播放| 国产亚洲欧美激情| 亚洲一级电影视频| 国产.欧美.日韩| 欧美日韩高清影院| 欧美高清在线精品一区| 婷婷久久综合九色国产成人| 国产成人免费在线视频| 67194成人在线观看| 国产精品国产精品国产专区不蜜| 奇米精品一区二区三区四区 | 亚洲成人精品一区| 懂色av一区二区三区蜜臀| 欧美高清激情brazzers| 国产精品女上位| 精品无码三级在线观看视频 | 亚洲午夜激情av| 盗摄精品av一区二区三区| 91精品国产综合久久精品app| 自拍偷拍亚洲欧美日韩| 国产成人综合在线观看| 欧美一区二区三区系列电影| 一区二区三区鲁丝不卡| 成人黄动漫网站免费app| 欧美精品一区二区三区四区| 日韩不卡手机在线v区| 欧美影院一区二区三区| 最新欧美精品一区二区三区| 国产91在线看| 亚洲精品国产视频| 成人免费看视频| 国产欧美日韩在线视频| 久久草av在线| 欧美成人综合网站| 日本亚洲电影天堂| 91麻豆精品国产自产在线观看一区| 亚洲视频一区在线| 91亚洲午夜精品久久久久久| 欧美成人video| 精品一区在线看| 精品免费视频.| 国产精品一区在线观看乱码| 精品国产一区二区亚洲人成毛片 |