#include #include void rb2_handle_request(rb2_telegram_buffer_t *telegram) { list_t *segment; RB2_PROXY *proxy; uint8_t temp; if (!telegram) return; proxy = rb2_get_proxy( telegram->telegram.receiver.node ); temp = telegram->telegram.sender.addr; telegram->telegram.sender.addr = telegram->telegram.receiver.addr; telegram->telegram.receiver.addr = temp; telegram->telegram.flags.response = 1; if (proxy) { if (proxy->register_node_proc != NULL){ temp = telegram->telegram.flags.type; telegram->telegram.flags.fail = proxy->register_node_proc( (proxy->id << 8) | (telegram->telegram.flags.read ? RNPOP_READ : RNPOP_WRITE), telegram->telegram.regno, &temp, &telegram->telegram.i32 ) ? 1 : 0; telegram->telegram.flags.type = temp; rb2_route_listed( telegram ); return; }; if ((proxy->register_proc == NULL) || proxy->register_proc( NULL, &(telegram->telegram) )) { for_each_list_entry(segment,&proxy->segments){ RB2_REGISTER *reg; for (reg = list_entry(segment,RB2_RSEGMENT,list)->registers; reg->ptr; reg++) { if (reg->register_no == telegram->telegram.regno) { if (rb2_default_register_proc( reg, &telegram->telegram )) telegram->telegram.flags.fail = 1; rb2_route_listed( telegram ); return; }; }; }; } else { rb2_route_listed( telegram ); return; }; }; rb2_pool_push( telegram ); };