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

📄 dtnstubimp.c

📁 tinyos最新版
💻 C
字号:
// $Id: DTNStubImp.c,v 1.12 2003/10/07 21:46:09 idgay Exp $/*									tab:4 * "Copyright (c) 2000-2003 The Regents of the University  of California.   * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. *  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." * * Copyright (c) 2002-2003 Intel Corporation * All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE      * file. If you do not find these files, copies can be found by writing to * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA,  * 94704.  Attention:  Intel License Inquiry. *//* Authors:  Wei Hong <whong@intel-research.net> *           Intel Research Berkeley Lab * */#include <jni.h>#include "net_tinyos_util_DTNStub.h"#include "bundle_api.h"#include <stdio.h>#include <errno.h>#define	REGION					""#define SENSORPATCH1_URI		"bundles://mule/tcp://10.212.2.120:5000/stuff"/*#define DATACENTER_ADMIN	"dcgw"#define MULE_ADMIN			"dcgw"*/#define DEFAULT_LOCALSTUFF	"tinydb"#define DEFAULT_EXPIRE		60 * 60 * 24 * 3	/* 3 days */static BUNDLE_AGENT		gBundleAgent;static BUNDLE_SPEC		gBundleSpec;static char namebuf1[1024]; /* space for tuple */static char namebuf2[1024]; /* space for tuple */static char namebuf3[1024]; /* space for tuple */static BUNDLE_TUPLE		gLocalTuple = {{0, namebuf1}, 0};static BUNDLE_TUPLE		gDestTuple1 = {{0, namebuf2}, 0};static BUNDLE_TUPLE		gDestTuple2 = {{0, namebuf3}, 0};static BUNDLE_ITERATOR	gBundleIterator = BUNDLE_ITERATOR_NONE;static uint32_t			gRegCookie = BUNDLE_REG_COOKIE_NONE;static BUNDLE_SPEC		gBundleSpec1;static BUNDLE_SPEC		gBundleSpec2;static int				gPacketSize;static JNIEnv			*gEnv;static jobject			gObj;static jmethodID		gMid;static jbyteArray		gPacketArray;extern int (*bundle_arrived_ptr)(BUNDLE_WAITING *);JNIEXPORT void JNICALL Java_net_tinyos_util_DTNStub_openDTNAgent(JNIEnv *env, jobject obj, jstring jBundleAgent){	char *bundleAgentHost = (char*)(*env)->GetStringUTFChars(env, jBundleAgent, 0);	printf("DTNStubImp: bundleAgentHost = %s\n", bundleAgentHost);	gBundleAgent = open_agent(bundleAgentHost);	(*env)->ReleaseStringUTFChars(env, jBundleAgent, bundleAgentHost); 	if (gBundleAgent != NULL)		printf("DTNStubImp: open_agent successful.\n");	else	{		printf("DTNStubImp: open_agent failed.\n");		return;	}	if (local_tuple(gBundleAgent, REGION,							DEFAULT_LOCALSTUFF, &gLocalTuple) < 0)	{		printf("DTNStubImp: local_tuple failed.\n");		return;	}	printf("DTNStubImp: local_tuple successful.\n");	if (remote_tuple(SENSORPATCH1_URI, &gDestTuple1) < 0)	{		printf("DTNStubImp: remote_tuple 1 failed.\n");		return;	}		printf("DTNStubImp: remote_tuple successful.\n");	if (bundle_spec(COS_NORMAL, COS_NONE, gLocalTuple, gDestTuple1, gLocalTuple, DEFAULT_EXPIRE, &gBundleSpec1) < 0)		printf("DTNStubImp: bundle_spec 1 failed.\n");}JNIEXPORT void JNICALL Java_net_tinyos_util_DTNStub_closeDTNAgent(JNIEnv *env, jobject obj){	close_agent(gBundleAgent);}int receive_bundle(BUNDLE_WAITING *arrive_info){	char bundleFileName[1024];	jbyte packet[256];	FILE *fp;	size_t size;	memcpy(bundleFileName, arrive_info->filename.filename_val,			arrive_info->filename.filename_len);	bundleFileName[arrive_info->filename.filename_len] = '\0';	printf("DTNStubImp: got a bundle at %s\n", bundleFileName);	fp = fopen(bundleFileName, "r");	if (fp == NULL)	{		perror("DTNStubImp: unable to open bundle file.");		return -1;	}	size = fread((void*)packet, 1, gPacketSize, fp);	if (size == 0 && ferror(fp))	{		perror("DTNStubImp: fread on bundle failed.");		return -1;	}	printf("DTNStubImp: read %d bytes from bundle\n", size);	fclose(fp);	// unlink(bundleFileName);	if (size > 0)	{		(*gEnv)->SetByteArrayRegion(gEnv, gPacketArray, 0, gPacketSize, packet);		(*gEnv)->CallVoidMethod(gEnv, gObj, gMid, gPacketArray);		printf("java callback returned.\n");	}	return 0;}JNIEXPORT void JNICALL Java_net_tinyos_util_DTNStub_receiveDTNBundle(JNIEnv *env, jobject obj, jbyteArray jbundle){	jclass cls = (*env)->GetObjectClass(env, obj);	jfieldID fid = (*env)->GetFieldID(env, cls, "packetSize", "I");	printf("field id of packetSize is %d\n", fid);	gEnv = env;	gObj = obj;	gMid = (*env)->GetMethodID(env, cls, "packetReceived", "([B)V");	printf("method id of packetReceived is %d\n", gMid);	gPacketArray = jbundle;	gPacketSize = (int)(*env)->GetIntField(env, obj, fid);	printf("gPacketSize = %d\n", gPacketSize);	bundle_arrived_ptr = receive_bundle;	if (demux_register(gBundleAgent, gLocalTuple, BUNDLE_REG_ABORT, &gRegCookie) < 0)		printf("DTNStubImp: demux_register failed.\n");	printf("About to call svc_run\n");	svc_run();	printf("svc_run returned. errno = %d\n", errno);}JNIEXPORT void JNICALL Java_net_tinyos_util_DTNStub_sendDTNBundle(JNIEnv *env, jobject obj, jbyteArray jbundle){	// jsize len = (*env)->GetArrayLength(env, jbundle);	jbyte *bundle = (*env)->GetByteArrayElements(env, jbundle, 0);	/*	printf("sending bundle %d bytes", len);	print_bundle_spec(gBundleSpec1);	*/	if (send_bundle_mem(gBundleAgent, gBundleSpec1, (char*)bundle, gPacketSize) < 0)		printf("DTNStubImp: send_bundle_mem 1 failed.\n");	/*	if (send_bundle_mem(gBundleAgent, gBundleSpec2, (char*)bundle, gPacketSize) < 0)		printf("DTNStubImp: send_bundle_mem 2 failed.\n");	*/	(*env)->ReleaseByteArrayElements(env, jbundle, bundle, 0);}

⌨️ 快捷键说明

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