int srv_handle_req(srv_t *srv) { base_req_t *req = (base_req_t *)srv->req; if(!req_is_valid(req)) return (srv->fn_rv = RRW_RV_BAD_REQ); switch(req->fn) { case RRW_FN_STATUS: srv->fn_rv = srv_handle_status_req(srv); break; case RRW_FN_MEAS_CTL: srv->fn_rv = srv_handle_meas_ctl_req(srv); break; case RRW_FN_TEST: srv->fn_rv = srv_handle_test_req(srv); break; case RRW_FN_DATA: srv->fn_rv = srv_handle_data_req(srv); break; default: srv->fn_rv = RRW_RV_BAD_REQ; break; } return srv->fn_rv; }
/**Handle request in dependence of its type*/ int srv_handle_req(srv_t *srv) { base_req_t *req = (base_req_t *)srv->req; //if request has no validity mark stop further processing if(!req_is_valid(req)) { #ifdef DBG_SRV logprintf("SERVER: invalid request!\n"); #endif // DBG_SRV return (srv->fn_rv = RRW_RV_BAD_REQ); } //call appropriate handler and set request return value (srv->fn_rv) switch(req->fn) { case RRW_FN_STATUS: #ifdef DBG_SRV logprintf("SERVER: %d get status!\n",((base_req_t *)srv->req)->no); #endif srv->fn_rv = srv_handle_status_req(srv); break; case RRW_FN_MEAS_CTL: #ifdef DBG_SRV logprintf("SERVER: %d measurement control!\n",((base_req_t *)srv->req)->no); #endif srv->fn_rv = srv_handle_meas_ctl_req(srv); break; case RRW_FN_DATA_ALT: #ifdef DBG_SRV if(req->fn == RRW_FN_DATA) logprintf("SERVER: %d get data!\n",((base_req_t *)srv->req)->no); if(req->fn == RRW_FN_DATA_ALT) logprintf("SERVER: %d get data alt!\n",((base_req_t *)srv->req)->no); #endif srv->fn_rv = srv_handle_data_req(srv); break; case RRW_FN_SET_TH: #ifdef DBG_SRV logprintf("SERVER: %d set threshold!\n",((base_req_t *)srv->req)->no); #endif srv->fn_rv = srv_handle_setth_req(srv); break; case RRW_FN_GET_TH: #ifdef DBG_SRV logprintf("SERVER: %d get threshold!\n",((base_req_t *)srv->req)->no); #endif srv->fn_rv = srv_handle_getth_req(srv); break; default: #ifdef DBG_SRV logprintf("SERVER: %d incorrect function code!\n",((base_req_t *)srv->req)->no); #endif //if request contains incorrect function code process it as bad request srv->fn_rv = RRW_RV_BAD_REQ; break; } return srv->fn_rv; }