コード例 #1
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
snfs_call_status_t snfs_readdir(snfs_fhandle_t dir, unsigned cmax, snfs_dir_entry_t* list, unsigned* count)
{
	snfs_msg_req_t req;
	snfs_msg_res_t res;
	
	memset(&req,0,sizeof(req));
	memset(&res,0,sizeof(res));
	
	// format request
	req.type = REQ_READDIR;
	req.body.readdir.dir = dir;
	req.body.readdir.cmax = cmax;
	
	int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.readdir), 
				  &res, sizeof(res));

	// format response
	if (status < 0 || res.status != RES_OK) {
		return STAT_ERROR;
	}
	
	*count = res.body.readdir.count;
	memcpy(list, res.body.readdir.list, sizeof(snfs_dir_entry_t)*(*count));
	return STAT_OK;
}
コード例 #2
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
snfs_call_status_t snfs_create(snfs_fhandle_t dir, char* name, 
   snfs_fhandle_t* file)
{
	snfs_msg_req_t req;
	snfs_msg_res_t res;
	
	memset(&req,0,sizeof(req));
	memset(&res,0,sizeof(res));

	// format request
	req.type = REQ_CREATE;
	req.body.create.dir = (snfs_fhandle_t)dir;
	strcpy(req.body.create.name, name);
	
	int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.create), 
					       &res, sizeof(res));

	// format response
	if (status < 0 || res.status != RES_OK) {
		return STAT_ERROR;
	}
	
	*file = res.body.create.file;
	return STAT_OK;
}
コード例 #3
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
snfs_call_status_t snfs_write(snfs_fhandle_t fhandle, unsigned offset, 
   unsigned count, char* buffer, unsigned int* fsize)
{
	snfs_msg_req_t req;
	snfs_msg_res_t res;
	
	memset(&req,0,sizeof(req));
	memset(&res,0,sizeof(res));
	
	// format request
	req.type = REQ_WRITE;
	req.body.write.fhandle = fhandle;
	req.body.write.offset = offset;
	req.body.write.count = count;
	memcpy(req.body.write.data, buffer, count);
	
	int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.write), 
				  &res, sizeof(res));
	
	// format response
	if (status < 0 || res.status != RES_OK) {
		return STAT_ERROR;
	}
	
	*fsize = res.body.write.fsize;
	return STAT_OK;
}
コード例 #4
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
snfs_call_status_t snfs_read(snfs_fhandle_t fhandle, unsigned offset,
   unsigned count, char* buffer, int* nread)
{
	snfs_msg_req_t req;
	snfs_msg_res_t res;
	
	memset(&req,0,sizeof(req));
	memset(&res,0,sizeof(res));
	
	// format request
	req.type = REQ_READ;
	req.body.read.fhandle = fhandle;
	req.body.read.offset = offset;
	req.body.read.count = count;
	 
	int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.read), 
				  &res, sizeof(res));
	
	// format response
	if (status < 0 || res.status != RES_OK) {
		return STAT_ERROR;
	}
	
	memcpy(buffer, res.body.read.data, count);
	*nread = res.body.read.nread;
	return STAT_OK;
}
コード例 #5
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
snfs_call_status_t snfs_lookup(char* pathname, 
   snfs_fhandle_t* file, unsigned* fsize)
{

	snfs_msg_req_t req;
	snfs_msg_res_t res;
	
	memset(&req,0,sizeof(req));
	memset(&res,0,sizeof(res));
	
	// format request
	req.type = REQ_LOOKUP;
	strcpy(req.body.lookup.pname, pathname);
	
	int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.lookup), 
					       &res, sizeof(res));
	
	// format response
	if (status < 0 || res.status != RES_OK) {
		*file = res.body.lookup.file; // myopen() needs this information in case of a wrong pathname
		return STAT_ERROR;
	}
	
	*file = res.body.lookup.file;
	*fsize = res.body.lookup.fsize;
	return STAT_OK;
}
コード例 #6
0
ファイル: Rnd.hpp プロジェクト: JulianKunkel/siox
	inline Activity *activity()
	{
		ActivityID *aid = activity_id();
		
		UniqueComponentActivityID ucaid = randr();
		
		Timestamp time_start = randr();
		Timestamp  time_stop = time_start + randr();
		
		RemoteCallIdentifier *invoker = remote_call_id();
		
		ActivityError error_value = randr();
		
		vector<ActivityID> parents;
		int num_parents = randr(0, 20);
		for (int i = 0; i < num_parents; i++) 
			parents.push_back(*activity_id());
		
		
		vector<Attribute> attributes;
		int num_attrs = randr(0, 20);
		for (int i = 0; i < num_attrs; i++)
			attributes.push_back(*attribute());
		
		vector<RemoteCall> remote_calls;
		int num_rcs = randr(0, 20);
		for (int i = 0; i < num_rcs; i++)
			remote_calls.push_back(*remote_call());
		
		Activity *act = new Activity(ucaid, time_start, time_stop, *aid, parents, attributes, remote_calls, invoker, error_value);
		
		return act;
	}
コード例 #7
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
snfs_call_status_t snfs_ping(char* inmsg, int insize, char* outmsg, int outsize)
{
   snfs_msg_req_t req;
   snfs_msg_res_t res;
  
   memset(&req,0,sizeof(req));
   memset(&res,0,sizeof(res));
 
   // format request
   req.type = REQ_PING;
   strncpy(req.body.ping.msg,inmsg,insize);

   int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.ping), 
      &res, sizeof(res));

   // format response
   if (status < 0 || res.status != RES_OK) {
      return STAT_ERROR;
   }
   strncpy(outmsg,res.body.ping.msg,outsize);
   return STAT_OK;
}
コード例 #8
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
snfs_call_status_t snfs_copy(snfs_fhandle_t src_dir, char* src_name, snfs_fhandle_t dst_dir, char* dst_name, snfs_fhandle_t* file)  
{   
	snfs_msg_req_t req;
	snfs_msg_res_t res;

	memset(&req, 0, sizeof(req));
	memset(&res, 0, sizeof(res));

	//format request
	req.type = REQ_COPY;
	req.body.copy.src_dir = src_dir;
	req.body.copy.dst_dir = dst_dir;
	strcpy(req.body.copy.src_name, src_name);
	strcpy(req.body.copy.dst_name, dst_name);

	int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.copy), &res, sizeof(res));

	// format response
	if (status < 0 || res.status != RES_OK)
		return STAT_ERROR;
	
	*file = res.body.copy.file;
	return STAT_OK;
}
コード例 #9
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
/* TEST */
snfs_call_status_t snfs_remove(snfs_fhandle_t dir, char* name, snfs_fhandle_t* file)  
{  
	puts("BANZAAAAAAAAAAI");	
	snfs_msg_req_t req;
	snfs_msg_res_t res;

	memset(&req, 0, sizeof(req));
	memset(&res, 0, sizeof(res));

	// format request
	req.type = REQ_REMOVE;
	req.body.remove.dir = dir;
	strcpy(req.body.remove.name, name);
	
	int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.remove), &res, sizeof(res));

	// format response
	if (status < 0 || res.status != RES_OK) {
		return STAT_ERROR;
	}

	*file = res.body.remove.file; 
	return STAT_OK;
}
コード例 #10
0
ファイル: snfs_api.c プロジェクト: shadowpt/sampleProject2
snfs_call_status_t snfs_mkdir(snfs_fhandle_t dir, char* name, snfs_fhandle_t* file)
{
	snfs_msg_req_t req;
	snfs_msg_res_t res;
	
	memset(&req,0,sizeof(req));
	memset(&res,0,sizeof(res));
	
	// format request
	req.type = REQ_MKDIR;
	req.body.mkdir.dir = dir;
	strcpy(req.body.mkdir.file, name);
	
	int status = remote_call(&req, sizeof(req.type) + sizeof(req.body.mkdir), 
				  &res, sizeof(res));

	// format response
	if (status < 0 || res.status != RES_OK) {
		return STAT_ERROR;
	}
	
	*file = res.body.mkdir.newdirid;
	return STAT_OK;
}