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

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

?? obex_object.c

?? 這是Linux環(huán)境下的openobex
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	   many as possible into the tx-msg */	while(addmore == TRUE && object->tx_headerq != NULL) {				h = object->tx_headerq->data;		if(h->stream) {			/* This is a streaming body */			actual = send_stream(self, h, txmsg, tx_left);			if(actual < 0 )				return -1;			tx_left -= actual;			if (object->suspend)				addmore = FALSE;		}		else if(h->hi == OBEX_HDR_BODY) {			/* The body may be fragmented over several packets. */			tx_left -= send_body(object, h, txmsg, tx_left);		}		else if(h->length <= tx_left) {			/* There is room for more data in tx msg */			DEBUG(4, "Adding non-body header\n");			g_netbuf_put_data(txmsg, h->buf->data, h->length);			tx_left -= h->length;							/* Remove from tx-queue */			object->tx_headerq = slist_remove(object->tx_headerq, h);			g_netbuf_free(h->buf);			free(h);		}		else if(h->length > self->mtu_tx) {			/* Header is bigger than MTU. This should not happen,			   because OBEX_ObjectAddHeader() rejects headers			   bigger than the MTU */							DEBUG(0, "ERROR! header to big for MTU\n");			return -1;		}		else	{			/* This header won't fit. */			addmore = FALSE;		}				if(tx_left == 0)			addmore = FALSE;	};		/* Decide which command to use, and if to use final-bit */	if(object->tx_headerq) {		/* Have more headers (or body) to send */		/* In server, final bit is always set.		 * In client, final bit is set only when we finish sending.		 * Jean II */		if(forcefinalbit)			real_opcode = object->opcode | OBEX_FINAL;		else			real_opcode = object->opcode;		finished = 0;	}	else if(allowfinalcmd == FALSE) {		/* Have no yet any headers to send, but not allowed to send		 * final command (== server, receiving incomming request) */		real_opcode = object->opcode | OBEX_FINAL;		finished = 0;	}	else {		/* Have no more headers to send, and allowed to send final		 * command (== end data we are sending) */		real_opcode = object->lastopcode | OBEX_FINAL;		finished = 1;	}	DEBUG(4, "Sending package with opcode %d\n",	      real_opcode);	actual = obex_data_request(self, txmsg, real_opcode);	if(actual < 0) {		DEBUG(4, "Send error\n");		return actual;	}	else {		return finished;	}}/* * Function obex_object_getnextheader() * * Return the next header in the rx-queue * */int obex_object_getnextheader(obex_t *self, obex_object_t *object, uint8_t *hi,				obex_headerdata_t *hv, uint32_t *hv_size){	uint32_t *bq4;	struct obex_header_element *h;	DEBUG(4, "\n");	/* No more headers */	if(object->rx_headerq == NULL)		return 0;	/* New headers are appended at the end of the list while receiving, so	   we pull them from the front.	   Since we cannot free the mem used just yet just put the header in	   another list so we can free it when the object is deleted. */		h = object->rx_headerq->data;	object->rx_headerq = slist_remove(object->rx_headerq, h);	object->rx_headerq_rm = slist_append(object->rx_headerq_rm, h);			*hi = h->hi;	*hv_size= h->length;	switch (h->hi & OBEX_HI_MASK) {		case OBEX_BYTE_STREAM:			hv->bs = &h->buf->data[0];			break;		case OBEX_UNICODE:			hv->bs = &h->buf->data[0];			break;		case OBEX_INT:			bq4 = (uint32_t*) h->buf->data;			hv->bq4 = ntohl(*bq4);			break;		case OBEX_BYTE:			hv->bq1 = h->buf->data[0];			break;	}	return 1;}/* * Function obex_object_reparseheader() * * Allow the user to re-parse the headers in the rx-queue * */int obex_object_reparseheaders(obex_t *self, obex_object_t *object){	DEBUG(4, "\n");	/* Check that there is no more active headers */	if(object->rx_headerq != NULL)		return 0;	/* Put the old headers back in the active list */	object->rx_headerq = object->rx_headerq_rm;	object->rx_headerq_rm = NULL;	/* Success */	return 1;}/* * Function obex_object_receive_stream() * *    Handle receiving of body-stream * */static void obex_object_receive_stream(obex_t *self, uint8_t hi,				uint8_t *source, unsigned int len){	obex_object_t *object = self->object;	DEBUG(4, "\n");		/* Spare the app this empty nonlast body-hdr */	if(hi == OBEX_HDR_BODY && len == 0) {		return;	}		object->s_buf = source;	object->s_len = len;	if (object->abort) {		DEBUG(3, "Ignoring incomming data because request was aborted\n");		return;	}		/* Notify app that data has arrived */	obex_deliver_event(self, OBEX_EV_STREAMAVAIL, 0, 0, FALSE);		/* If send send EOS to app */	if(hi == OBEX_HDR_BODY_END && len != 0) {		object->s_buf = source;		object->s_len = 0;		obex_deliver_event(self, OBEX_EV_STREAMAVAIL, 0, 0, FALSE);	}}/* * Function obex_object_receive_body() * *    Handle receiving of body * */static int obex_object_receive_body(obex_object_t *object, GNetBuf *msg, uint8_t hi,				uint8_t *source, unsigned int len){	struct obex_header_element *element;	DEBUG(4, "This is a body-header. Len=%d\n", len);	if(len > msg->len)	{		DEBUG(1, "Header %d to big. HSize=%d Buffer=%d\n", hi,						len,						msg->len);		return -1;	}	if(!object->rx_body)	{		int alloclen = OBEX_OBJECT_ALLOCATIONTRESHOLD + len;		if(object->hinted_body_len)			alloclen = object->hinted_body_len;		DEBUG(4, "Allocating new body-buffer. Len=%d\n", alloclen);		if(! (object->rx_body = g_netbuf_new(alloclen)))			return -1;	}	/* Reallocate body-netbuf if needed */ 	if(g_netbuf_tailroom(object->rx_body) < (int)len)	{		DEBUG(4, "Buffer too small. Go realloc\n");		if(! (object->rx_body = g_netbuf_realloc(object->rx_body,				object->rx_body->truesize + OBEX_OBJECT_ALLOCATIONTRESHOLD + len) ) )	{			DEBUG(1, "Can't realloc rx_body\n");			return -1;			// FIXME: Handle this in a nice way...		}	}	g_netbuf_put_data(object->rx_body, source, len);	if(hi == OBEX_HDR_BODY_END)	{		DEBUG(4, "Body receive done\n");		if( (element = malloc(sizeof(struct obex_header_element)) ) ) {			memset(element, 0, sizeof(struct obex_header_element));			element->length = object->rx_body->len;			element->hi = OBEX_HDR_BODY;			element->buf = object->rx_body;			/* Add element to rx-list */			object->rx_headerq = slist_append(object->rx_headerq, element);		}		else	{			g_netbuf_free(object->rx_body);		}				object->rx_body = NULL;	}	else	{		DEBUG(4, "Normal body fragment...\n");	}	return 1;}/*  * Function obex_object_receive() * *    Add any incoming headers to headerqueue. * */int obex_object_receive(obex_t *self, GNetBuf *msg){	obex_object_t *object;	struct obex_header_element *element;	uint8_t *source = NULL;	unsigned int len, hlen;	uint8_t hi;	int err = 0;	union {		struct obex_unicode_hdr     *unicode;		struct obex_byte_stream_hdr *bstream;		struct obex_uint_hdr	    *uint;	} h;	DEBUG(4, "\n");	object = self->object;	/* Remove command from buffer */	g_netbuf_pull(msg, sizeof(struct obex_common_hdr));	/* Copy any non-header data (like in CONNECT and SETPATH) */	if(object->headeroffset) {		object->rx_nonhdr_data = g_netbuf_new(object->headeroffset);		if(!object->rx_nonhdr_data)			return -1;		g_netbuf_put_data(object->rx_nonhdr_data, msg->data, object->headeroffset);		DEBUG(4, "Command has %d bytes non-headerdata\n", object->rx_nonhdr_data->len);		g_netbuf_pull(msg, object->headeroffset);		object->headeroffset = 0;	}	while ((msg->len > 0) && (!err)) {		hi = msg->data[0];		DEBUG(4, "Header: %02x\n", hi);		switch (hi & OBEX_HI_MASK) {		case OBEX_UNICODE:			h.unicode = (struct obex_unicode_hdr *) msg->data;			source = &msg->data[3];			hlen = ntohs(h.unicode->hl);			len = hlen - 3;			break;		case OBEX_BYTE_STREAM:			h.bstream = (struct obex_byte_stream_hdr *) msg->data;			source = &msg->data[3];			hlen = ntohs(h.bstream->hl);			len = hlen - 3;			if(hi == OBEX_HDR_BODY || hi == OBEX_HDR_BODY_END) {				/* The body-header need special treatment */				if(object->s_srv) {					obex_object_receive_stream(self, hi, source, len);				}				else  {					if(obex_object_receive_body(object, msg, hi, source, len) < 0)						err = -1;				}				/* We have already handled this data! */				source = NULL;			}			break;		case OBEX_BYTE:			source = &msg->data[1];			len = 1;			hlen = 2;			break;		case OBEX_INT:			source = &msg->data[1];			len = 4;			hlen = 5;			break;		default:			DEBUG(1, "Badly formed header received\n");			source = NULL;			hlen = 0;			len = 0;			err = -1;			break;		}		/* Make sure that the msg is big enough for header */		if(len > msg->len)	{			DEBUG(1, "Header %d to big. HSize=%d Buffer=%d\n", hi,						len,						msg->len);			source = NULL;			err = -1;		}		if(source) {			/* The length MAY be useful when receiving body. */			if(hi == OBEX_HDR_LENGTH)	{				h.uint = (struct obex_uint_hdr *) msg->data;				object->hinted_body_len = ntohl(h.uint->hv);				DEBUG(4, "Hinted body len is %d\n",							object->hinted_body_len);			}			if( (element = malloc(sizeof(struct obex_header_element)) ) ) {				memset(element, 0, sizeof(struct obex_header_element));				element->length = len;				element->hi = hi;				// If we get an emtpy we have to deal with it...				// This might not be an optimal way, but it works.				if(len == 0) {					DEBUG(4, "Got empty header. Allocating dummy buffer anyway\n");					element->buf = g_netbuf_new(1);				}				else {					element->buf = g_netbuf_new(len);					if(element->buf) {						DEBUG(4, "Copying %d bytes\n", len);						g_netbuf_put_data(element->buf, source, len);					}				}				if(element->buf) {					/* Add element to rx-list */					object->rx_headerq = slist_append(object->rx_headerq, element);				}				else	{					DEBUG(1, "Cannot allocate memory\n");					free(element);					err = -1;				}			}			else {				DEBUG(1, "Cannot allocate memory\n");				err = -1;			}		}		if(err)			return err;		DEBUG(4, "Pulling %d bytes\n", hlen);		g_netbuf_pull(msg, hlen);	}	return 1;}/* * Function obex_object_readstream() * *    App wants to read stream fragment. * */int obex_object_readstream(obex_t *self, obex_object_t *object, const uint8_t **buf){	DEBUG(4, "\n");	/* Enable streaming */	if(buf == NULL) {		DEBUG(4, "Streaming is enabled!\n");		object->s_srv = TRUE;		return 0;	}	DEBUG(4, "s_len = %d\n", object->s_len);	*buf = object->s_buf;	return object->s_len;}int obex_object_suspend(obex_object_t *object){	object->suspend = 1;	return 0;}int obex_object_resume(obex_t *self, obex_object_t *object){	if (!object->suspend)		return 0;	object->suspend = 0; 	if (!object->continue_received) 		return 0;	if (obex_object_send(self, object, TRUE, FALSE) < 0)		obex_deliver_event(self, OBEX_EV_LINKERR, object->opcode, 0, TRUE);	else		obex_deliver_event(self, OBEX_EV_PROGRESS, object->opcode, 0, FALSE);	object->continue_received = 0;		return 0;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品国产91久久久久久| 日韩精品在线一区| 99视频精品在线| 丁香一区二区三区| 粉嫩欧美一区二区三区高清影视| 国产综合色精品一区二区三区| 蜜臀久久99精品久久久久宅男| 亚洲国产成人高清精品| 午夜精品在线视频一区| 日韩精品久久理论片| 美女脱光内衣内裤视频久久影院| 美女性感视频久久| 国产麻豆视频一区二区| 粉嫩绯色av一区二区在线观看| 粉嫩aⅴ一区二区三区四区 | 麻豆精品视频在线| 精品一区二区三区在线视频| 国产美女在线观看一区| 成人免费精品视频| 91美女片黄在线观看| 欧美在线不卡视频| 欧美一级日韩免费不卡| 久久久久久久国产精品影院| 国产精品色眯眯| 有码一区二区三区| 日本在线观看不卡视频| 国产精品一色哟哟哟| 99精品在线免费| 欧美乱妇15p| 日韩精品一区二区三区蜜臀| 国产亚洲欧美日韩俺去了| 日韩美女视频一区二区 | 99精品视频一区二区三区| 欧美亚洲动漫精品| 日韩免费在线观看| 国产精品乱码妇女bbbb| 亚洲一区二区欧美| 国模一区二区三区白浆| 91在线观看一区二区| 91精品国产综合久久香蕉麻豆 | 午夜天堂影视香蕉久久| 韩国av一区二区三区在线观看| proumb性欧美在线观看| 欧美日韩日日摸| 久久婷婷久久一区二区三区| 一区二区三区在线观看国产| 麻豆视频观看网址久久| www.欧美亚洲| 欧美一二三区在线| 国产精品不卡在线| 六月婷婷色综合| 色综合久久久久网| 久久综合狠狠综合久久综合88| 亚洲乱码国产乱码精品精小说| 蜜臀久久久99精品久久久久久| 99久久精品国产麻豆演员表| 精品欧美乱码久久久久久1区2区| 亚洲女同ⅹxx女同tv| 久99久精品视频免费观看| 在线免费av一区| 久久精品一区二区| 日本伊人午夜精品| 色偷偷久久一区二区三区| 久久蜜桃av一区精品变态类天堂| 亚洲午夜私人影院| 北条麻妃国产九九精品视频| 日韩区在线观看| 一二三区精品福利视频| 国产91精品一区二区麻豆网站| 欧美精品第1页| 最新成人av在线| 国产一区二区免费视频| 91精品国产综合久久精品性色| 中文字幕一区二区三区在线观看| 寂寞少妇一区二区三区| 欧美精品自拍偷拍动漫精品| 亚洲另类春色校园小说| 国产精品1区2区3区| 91精品国产免费| 亚洲成av人**亚洲成av**| 91麻豆国产在线观看| 亚洲国产精品精华液ab| 久久国产免费看| 91精选在线观看| 天天色图综合网| 欧美撒尿777hd撒尿| 亚洲女同ⅹxx女同tv| 91片在线免费观看| 亚洲欧美综合色| www.亚洲国产| 国产精品久久久久久久久久久免费看| 国产主播一区二区| 日韩一区二区影院| 麻豆一区二区在线| 欧美电影免费观看高清完整版在线| 无吗不卡中文字幕| 8v天堂国产在线一区二区| 亚洲成人资源在线| 欧美日韩免费一区二区三区视频| 亚洲综合男人的天堂| 欧美性xxxxxxxx| 五月综合激情日本mⅴ| 欧美日韩高清一区二区不卡| 亚洲成人午夜影院| 91精品欧美久久久久久动漫| 日韩精品亚洲专区| 日韩三区在线观看| 精品一区二区三区在线观看| 亚洲精品一区二区三区四区高清| 久色婷婷小香蕉久久| 欧美精品一区二区三区在线| 国产一区视频在线看| 国产亚洲精品精华液| 成人精品免费看| 亚洲色图在线视频| 欧美日免费三级在线| 日本成人中文字幕| 欧美精品一区二区三区蜜臀| 国产成人精品一区二区三区四区 | 欧美一区二区免费观在线| 免费观看在线色综合| 2021国产精品久久精品| 国产99久久精品| 亚洲免费观看视频| 欧美区一区二区三区| 麻豆精品一二三| 国产精品女人毛片| 欧美在线观看一区二区| 免费一级片91| 中文字幕的久久| 在线观看日韩av先锋影音电影院| 天天色综合天天| 久久久99精品久久| 色中色一区二区| 日产国产欧美视频一区精品| 久久久99免费| 91小宝寻花一区二区三区| 天天av天天翘天天综合网| 精品剧情在线观看| 91丨九色丨黑人外教| 青青草精品视频| 中文字幕精品一区二区三区精品| 欧洲一区二区av| 国产一级精品在线| 亚洲一区二区三区四区中文字幕| 日韩欧美成人午夜| 91原创在线视频| 老司机精品视频在线| 日韩毛片在线免费观看| 日韩一区二区在线观看| 白白色 亚洲乱淫| 日韩va亚洲va欧美va久久| 日本一区二区不卡视频| 欧美剧情电影在线观看完整版免费励志电影| 久久精品二区亚洲w码| 中文字幕佐山爱一区二区免费| 亚洲精品日韩综合观看成人91| 欧美理论电影在线| 丁香婷婷综合网| 奇米影视在线99精品| 综合精品久久久| 精品国产伦一区二区三区免费 | 精品国产凹凸成av人导航| 91官网在线免费观看| 国产精品亚洲一区二区三区在线| 亚洲综合在线视频| 国产三级一区二区| 日韩天堂在线观看| 在线观看视频91| 国产白丝精品91爽爽久久| 日韩va欧美va亚洲va久久| 1024成人网| 国产亚洲精品免费| 日韩片之四级片| 欧美三级欧美一级| 99久久精品国产导航| 国产福利视频一区二区三区| 日本免费新一区视频| 亚洲一区二区视频在线观看| 国产精品成人免费精品自在线观看| 欧美不卡视频一区| 正在播放亚洲一区| 欧洲一区二区av| 色猫猫国产区一区二在线视频| 国产福利精品一区二区| 国内精品免费**视频| 美女看a上一区| 日韩国产欧美在线观看| 一区二区三区蜜桃网| 亚洲色图制服诱惑| 国产精品久久久久久久久搜平片| 国产亚洲精品超碰| 久久综合狠狠综合久久综合88 | 亚洲一区二区三区国产| 亚洲人成伊人成综合网小说| 国产精品久久久久影院色老大 | 国产精品一线二线三线| 黄色小说综合网站| 精品在线视频一区| 久久草av在线|