⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 obex_test_server.c

📁 这是Linux环境下的openobex
💻 C
字号:
/********************************************************************* *                 * Filename:      obex_test_server.c * Version:       0.8 * Description:   Server OBEX Commands * Status:        Experimental. * Author:        Pontus Fuchs <pontus.fuchs@tactel.se> * Created at:    Sun Aug 13 03:00:28 PM CEST 2000 * Modified at:   Sun Aug 13 03:00:33 PM CEST 2000 * Modified by:   Pontus Fuchs <pontus.fuchs@tactel.se> *  *     Copyright (c) 2000, Pontus Fuchs, All Rights Reserved. * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program 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 Library General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; 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 <openobex/obex.h>#include <stdlib.h>#include <fcntl.h>#include <string.h>#include "obex_io.h"#include "obex_test.h"#include "obex_test_server.h"#define TRUE  1#define FALSE 0//////void put_server(obex_t *handle, obex_object_t *object){	obex_headerdata_t hv;	uint8_t hi;	uint32_t hlen;	const uint8_t *body = NULL;	int body_len = 0;	char *name = NULL;	char *namebuf = NULL;	printf("%s()\n", __FUNCTION__);	while (OBEX_ObjectGetNextHeader(handle, object, &hi, &hv, &hlen))	{		switch(hi)	{		case OBEX_HDR_BODY:			printf("%s() Found body\n", __FUNCTION__);			body = hv.bs;			body_len = hlen;			break;		case OBEX_HDR_NAME:			printf("%s() Found name\n", __FUNCTION__);			if( (namebuf = malloc(hlen / 2)))	{				OBEX_UnicodeToChar((uint8_t *) namebuf, hv.bs, hlen);				name = namebuf;			}			break;				default:			printf("%s() Skipped header %02x\n", __FUNCTION__, hi);		}	}	if(!body)	{		printf("Got a PUT without a body\n");		return;	}	if(!name)	{		name = "OBEX_PUT_Unknown_object";		printf("Got a PUT without a name. Setting name to %s\n", name);	}	safe_save_file(name, body, body_len);	free(namebuf);}//////void get_server(obex_t *handle, obex_object_t *object){	uint8_t *buf;	obex_headerdata_t hv;	uint8_t hi;	uint32_t hlen;	int file_size;	char *name = NULL;	char *namebuf = NULL;	printf("%s()\n", __FUNCTION__);	while (OBEX_ObjectGetNextHeader(handle, object, &hi, &hv, &hlen))	{		switch(hi)	{		case OBEX_HDR_NAME:			printf("%s() Found name\n", __FUNCTION__);			if( (namebuf = malloc(hlen / 2)))	{				OBEX_UnicodeToChar((uint8_t *) namebuf, hv.bs, hlen);				name = namebuf;			}			break;				default:			printf("%s() Skipped header %02x\n", __FUNCTION__, hi);		}	}	if(!name)	{		printf("%s() Got a GET without a name-header!\n", __FUNCTION__);		OBEX_ObjectSetRsp(object, OBEX_RSP_NOT_FOUND, OBEX_RSP_NOT_FOUND);		return;	}	printf("%s() Got a request for %s\n", __FUNCTION__, name);	buf = easy_readfile(name, &file_size);	if(buf == NULL) {		printf("Can't find file %s\n", name);		OBEX_ObjectSetRsp(object, OBEX_RSP_NOT_FOUND, OBEX_RSP_NOT_FOUND);		return;	}	OBEX_ObjectSetRsp(object, OBEX_RSP_CONTINUE, OBEX_RSP_SUCCESS);	hv.bs = buf;	OBEX_ObjectAddHeader(handle, object, OBEX_HDR_BODY, hv, file_size, 0);	hv.bq4 = file_size;	OBEX_ObjectAddHeader(handle, object, OBEX_HDR_LENGTH, hv, sizeof(uint32_t), 0);	free(buf);	return;}//////void connect_server(obex_t *handle, obex_object_t *object){	obex_headerdata_t hv;	uint8_t hi;	uint32_t hlen;	const uint8_t *who = NULL;	int who_len = 0;	printf("%s()\n", __FUNCTION__);	while (OBEX_ObjectGetNextHeader(handle, object, &hi, &hv, &hlen))	{		if(hi == OBEX_HDR_WHO)	{			who = hv.bs;			who_len = hlen;		}		else	{			printf("%s() Skipped header %02x\n", __FUNCTION__, hi);		}	}	if (who_len == 6)	{		if(memcmp("Linux", who, 6) == 0)	{			printf("Weeeha. I'm talking to the coolest OS ever!\n");		}	}	OBEX_ObjectSetRsp(object, OBEX_RSP_SUCCESS, OBEX_RSP_SUCCESS);}//////void server_request(obex_t *handle, obex_object_t *object, int event, int cmd){	switch(cmd)	{	case OBEX_CMD_CONNECT:		connect_server(handle, object);		break;	case OBEX_CMD_DISCONNECT:		printf("We got a disconnect-request\n");		OBEX_ObjectSetRsp(object, OBEX_RSP_SUCCESS, OBEX_RSP_SUCCESS);		break;	case OBEX_CMD_GET:		/* A Get always fits one package */		get_server(handle, object);		break;	case OBEX_CMD_PUT:		OBEX_ObjectSetRsp(object, OBEX_RSP_CONTINUE, OBEX_RSP_SUCCESS);		put_server(handle, object);		break;	case OBEX_CMD_SETPATH:		printf("Got a SETPATH request\n");		OBEX_ObjectSetRsp(object, OBEX_RSP_CONTINUE, OBEX_RSP_SUCCESS);		break;	default:		printf("%s() Denied %02x request\n", __FUNCTION__, cmd);		OBEX_ObjectSetRsp(object, OBEX_RSP_NOT_IMPLEMENTED, OBEX_RSP_NOT_IMPLEMENTED);		break;	}	return;}//////void server_done(obex_t *handle, obex_object_t *object, int obex_cmd, int obex_rsp){	struct context *gt;	gt = OBEX_GetUserData(handle);	printf("Server request finished!\n");	switch (obex_cmd) {	case OBEX_CMD_DISCONNECT:		printf("Disconnect done!\n");		OBEX_TransportDisconnect(handle);		gt->serverdone = TRUE;		break;	default:		printf("%s() Command (%02x) has now finished\n", __FUNCTION__, obex_cmd);		break;	}}//////void server_do(obex_t *handle){	struct context *gt;	gt = OBEX_GetUserData(handle);	gt->serverdone = FALSE;	while(!gt->serverdone) {		if(OBEX_HandleInput(handle, 1) < 0) {			printf("Error while doing OBEX_HandleInput()\n");			break;		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -