Ejemplo n.º 1
0
int router_find_aspect_policy_byname(void **msg_policy,char * name)
{
    DISPATCH_POLICY * policy;
    int ret;
		
    *msg_policy=NULL;
    ret=dispatch_policy_getfirst(&policy);
    if(ret<0)
        return ret;
    while(policy!=NULL)
    {
		
	if(policy->type==MSG_FLOW_ASPECT)
	{
		ret=Strncmp(name,policy->name,DIGEST_SIZE);
		if(ret==0)
		{
			*msg_policy=policy;		
			break;
		}
    		ret=dispatch_policy_getnext(&policy);
	}	
    }
    return ret;
}
Ejemplo n.º 2
0
int router_find_route_policy(void * message,void **msg_policy,char * sender_proc)
{
    DISPATCH_POLICY * policy;
    int ret;
    *msg_policy=NULL;

    ret=dispatch_policy_getfirst(&policy);
    if(ret<0)
        return ret;
    while(policy!=NULL)
    {
	if((policy->state==POLICY_CLOSE)||(policy->state==POLICY_IGNORE))
	{
    		ret=dispatch_policy_getnext(&policy);
    		if(ret<0)
             		return ret;
		continue;
	}

    	ret=dispatch_match_sender(policy,sender_proc);
	if(ret>0)
	{	
		ret=dispatch_match_message_jump(policy,message);
		if(ret>0)
		{
       			ret=dispatch_match_message(policy,message);
        		if(ret<0)
            			return ret;
   	     		if(ret>0)
        		{
            			*msg_policy=policy;
            			return ret;
        		}
		}	
	}
    	ret=dispatch_policy_getnext(&policy);
    	if(ret<0)
             return ret;
    }
    return ret;
}
Ejemplo n.º 3
0
int router_find_policy_byname(void **msg_policy,char * name,int rjump,int ljump)
{
    DISPATCH_POLICY * policy;
    int ret;
		
    *msg_policy=NULL;
    ret=dispatch_policy_getfirst(&policy);
    if(ret<0)
        return ret;
    while(policy!=NULL)
    {
	ret=Strncmp(name,policy->name,DIGEST_SIZE);
	if(ret==0)
	{
		if((policy->rjump==0) || (policy->rjump==rjump))
		{
			if((policy->ljump==0) || (policy->ljump==ljump))
			{
				*msg_policy=policy;		
				break;
			}
		}
	}
    	ret=dispatch_policy_getnext(&policy);
    }
    
    // find policy in router policy list;
    if(policy!=NULL)
	return ret;

    // if can't find policy in router policy list, look up it in aspect policy list	
    ret=dispatch_aspect_policy_getfirst(&policy);
    if(ret<0)
        return ret;
    while(policy!=NULL)
    {
	ret=Strncmp(name,policy->newname,DIGEST_SIZE);
	if(ret==0)
	{
		if((policy->rjump==0) || (policy->rjump==rjump))
		{
			if((policy->ljump==0) || (policy->ljump==ljump))
			{
				*msg_policy=policy;		
				break;
			}
		}
	}
    	ret=dispatch_aspect_policy_getnext(&policy);
    }

    return ret;
}
Ejemplo n.º 4
0
int _routine_dispatch_recv_start()
{
	int ret;
	int count=0;
	void * policy;
	void * match_rule;
	void * route_rule;
	void * msg;
	void * message_list=_get_recv_message_list(NULL);

	do
	{
		ret=list_queue_get(message_list,&msg);
		if(ret<0)
			return ret;
		if(msg==NULL)
			break;
		ret=dispatch_policy_getfirst(&policy);
		if(ret<0)
			return -EINVAL;
		while(policy!=NULL)
		{
			ret=dispatch_match_message(policy,msg);
			if(ret>0)
			{
				ret=dispatch_policy_getfirstrouterule(policy,&route_rule);
//				if(route_rule!=NULL)
//				{
//					
//				}
			}
			ret=dispatch_policy_getnext(&policy);
		}
		
	}while(1);

	return count;
}
Ejemplo n.º 5
0
int main() {

  	static unsigned char alloc_buffer[4096*(1+1+4+1+32+1+256)];	
	char json_buffer[4096];
	char print_buffer[4096];
	int ret;
	int readlen;
	int json_offset;
	void * root_node;
	void * findlist;
	void * memdb_template ;
	BYTE uuid[DIGEST_SIZE];
	int i;
	MSG_HEAD * msg_head;
	pthread_t  cube_thread;
	
	char * baseconfig[] =
	{
		"namelist.json",
		"dispatchnamelist.json",
		"typelist.json",
		"subtypelist.json",
		"msghead.json",
		"msgrecord.json",
		"expandrecord.json",
		"base_msg.json",
		"dispatchrecord.json",
		NULL
	};

//	alloc_init(alloc_buffer);
	struct_deal_init();
	memdb_init();

// test namelist reading start

	for(i=0;baseconfig[i]!=NULL;i++)
	{
		ret=read_json_file(baseconfig[i]);
		if(ret<0)
			return ret;
		printf("read %d elem from file %s!\n",ret,baseconfig[i]);
	}

	void * record;

// test struct desc reading start

	msgfunc_init();
	dispatch_init();
	
	void * message;
	void * policy;
	
	ret=read_dispatch_file("dispatch_policy.json");

	message=message_create(DTYPE_MESSAGE,SUBTYPE_BASE_MSG,NULL);	

	struct basic_message * base_msg;
	base_msg=Talloc0(sizeof(*base_msg));
	if(base_msg==NULL)
		return -ENOMEM;
	base_msg->message=dup_str("hello",0);

	message_add_record(message,base_msg);	
	ret=message_output_json(message,json_buffer);
	if(ret<0)
	{
		printf("message output json failed!\n");
		return ret;
	}

	printf("%s\n",json_buffer);

	ret=dispatch_policy_getfirst(&policy);
	while(policy!=NULL)
	{
		ret=dispatch_match_message(policy,message);
		if(ret==0)
		{
			printf("this message match the policy!\n");
			break;
		}
		ret=dispatch_policy_getnext(&policy);
	}

	if(policy!=NULL)
	{
		router_set_local_route(message,policy);	
		ret=message_output_json(message,json_buffer);
		if(ret<0)
		{
			printf("message output json failed!\n");
			return ret;
		}

		printf("%s\n",json_buffer);
	}

//	routine_start();
//	sleep(100000);
	
	return 0;

}