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; }
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; }
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; }
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; }
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; }