Lines Matching refs:request

30  * 5-14-96	Jerry Yeung	add request filter
55 #include "request.h"
89 static void trace_request(Request *request);
102 void request_free(Request *request);
109 static int session_send_request(Request *request);
111 static Request *session_move_request(Request *request, Subtree *subtree);
118 static int session_send_loopback_request(Request *request,int doRespondHere);
129 /* send the request Get-Next(columnA) */
141 static int request_add_visited_agent(Request *request, Agent *agent);
173 Request *request;
184 for(request = session->first_request; request; request = request->next_request)
186 trace_request(request);
193 static void trace_request(Request *request)
195 Session *session = request->session;
196 Subtree *subtree = request->subtree;
206 trace("\trequest %d:\n", request->request_id);
218 for(alp = request->visited_agent_list; alp; alp = alp->next)
235 trace("\t\tflags: 0x%x\n", request->flags);
237 trace("\t\tstate: %d\n", request->state);
239 for(variable = request->pdu->first_variable; variable; variable = variable->next_variable)
246 trace("\t\ttime: %s\n", timeval_string(&request->time));
247 trace("\t\texpire: %s\n", timeval_string(&request->expire));
344 trace("!! This request is already being processed by session %d\n\n",
352 /* Three Phase: if the request across multi-subagents
410 int local_request(Request* request)
414 if(request && request->subtree){
415 agent = request->subtree->agent;
428 * But if we succeed to answer the SNMP request before the
446 Request *request;
572 for(request = session->first_request; request; request = request->next_request)
574 if(request->state == 0) /* request not sent/process yet */
576 if(local_request(request)){
577 if(session_send_loopback_request(request,FALSE) == -1){
583 }else if(session_send_request(request) == -1)
603 Request *request;
609 for(request = session->first_request; request; request = request->next_request)
612 last_request = request;
616 request = (Request *) malloc(sizeof(Request));
617 if(request == NULL)
622 memset(request, 0, sizeof(Request));
624 request->session = session;
625 request->subtree = NULL;
627 request->request_id = request_id;
629 request->pdu = snmp_pdu_dup(session->pdu, error_label);
630 if(request->pdu == NULL)
633 request_free(request);
636 request->pdu->request_id = session->session_id + request->request_id;
638 request->pdu->first_variable = snmp_variable_dup(variable, error_label);
639 if(request->pdu->first_variable == NULL)
642 request_free(request);
646 request->flags = (1 << (index - 1));
648 request->state = 0;
650 /* append this request to the request */
654 last_request->next_request = request;
658 session->first_request = request;
661 request->flags = (1 << (index - 1));
665 request->response = snmp_pdu_dup(session->pdu, error_label);
666 if(request->response == NULL)
671 request->response->type = GET_RSP_MSG;
672 request->response->request_id = session->session_id + request->request_id;
675 request->response->first_variable = snmp_typed_variable_new(&sysUptime_instance, TIMETICKS,
677 if(request->response->first_variable == NULL)
683 session->o_flags = session->o_flags | request->flags;
685 request->state = REQUEST_COMPLETED;
686 session->i_flags = session->i_flags | request->flags;
698 Request *request;
705 for(request = session->first_request; request; request = request->next_request)
707 if(request->subtree && request->subtree->agent == subtree->agent)
713 last_request = request;
718 for(request = session->first_request; request; request = request->next_request)
721 last_request = request;
726 if(request == NULL)
728 request = (Request *) malloc(sizeof(Request));
729 if(request == NULL)
734 request->next_request = NULL;
735 request->visited_agent_list = NULL;
736 request->pdu = NULL;
737 request->response = NULL;
739 request->session = session;
740 request->subtree = subtree;
741 if(request_add_visited_agent(request, subtree->agent) == -1)
743 request_free(request);
747 request->request_id = request_id;
749 request->pdu = snmp_pdu_dup(session->pdu, error_label);
750 if(request->pdu == NULL)
753 request_free(request);
757 request->flags = 0;
758 request->state = 0;
760 /* append this request to the request */
764 last_request->next_request = request;
768 session->first_request = request;
780 request->flags = request->flags | (1 << (index - 1));
783 /* append the new variable to the variable list of request->pdu */
784 if(request->pdu->first_variable)
790 for(current_variable = request->pdu->first_variable; current_variable; current_variable = current_variable->next_variable)
798 request->pdu->first_variable = new_variable;
934 Request *request;
958 for(request = session->first_request; request; request = request->next_request)
960 if(request->state != REQUEST_COMPLETED)
962 error("BUG: session_respond() : session %d - request %d: state is not COMPLETED",
964 request->request_id);
970 /* we will extract the variables from the request->reponse */
976 for(request = session->first_request; request; request = request->next_request)
978 if(request->flags & (1 << i))
984 if(request == NULL)
986 error("BUG: session_respond(): request is NULL");
989 if(request->response == NULL)
991 /* request timeout */
992 if(request->subtree != NULL &&
993 request->subtree->agent !=NULL){
994 /*request->subtree->agent->numOfFailRequest++*/;
1003 if(request->response->error_status != SNMP_ERR_NOERROR)
1013 if(request->flags & (1<< j))
1019 if(request->response->error_index == index)
1022 session_respond_error(session, request->response->error_status, i + 1);
1031 if (request->response->error_index ==
1036 request->subtree->agent->name,
1037 request->response->error_status);
1047 /* remove the first variable from the request->response */
1048 variable = request->response->first_variable;
1052 request->subtree->agent->name);
1056 request->response->first_variable = variable->next_variable;
1222 static int session_send_loopback_request(Request *request,int doRespondHere)
1224 Session *session = request->session;
1226 Subtree *subtree = request->subtree;
1233 if(subtree == NULL || request->pdu == NULL)
1241 request->time = tv;
1245 request->expire = tv;
1247 session->o_flags = session->o_flags | request->flags;
1248 request->state = REQUEST_STARTED;
1250 pdu = snmp_pdu_dup(request->pdu, error_label);
1251 pdu->request_id = session->session_id + request->request_id;
1253 for(variable = request->pdu->first_variable; variable;
1291 static int session_send_request(Request *request)
1293 Session *session = request->session;
1294 SNMP_pdu *pdu = request->pdu;
1295 Subtree *subtree = request->subtree;
1300 pdu->request_id = session->session_id + request->request_id;
1318 request->time = tv;
1322 request->expire = tv;
1324 session->o_flags = session->o_flags | request->flags;
1325 request->state = REQUEST_STARTED;
1334 static Request *session_move_request(Request *request, Subtree *subtree)
1336 Session *session = request->session;
1341 trace("!! session %d - request %d: trying another subtree %s supported by %s\n\n",
1343 request->request_id,
1348 request->subtree = subtree;
1353 if(request_add_visited_agent(request, subtree->agent) == -1)
1359 if (local_request(request)) {
1360 if (session_send_loopback_request(request, TRUE) == -1) {
1367 } else if(session_send_request(request) == -1) {
1372 return request;
1378 void request_free(Request *request)
1380 if(request == NULL)
1385 agent_list_free(request->visited_agent_list);
1387 snmp_pdu_free(request->pdu);
1389 snmp_pdu_free(request->response);
1391 free(request);
1481 Request *request;
1531 for(request = session->first_request; request; request = request->next_request)
1533 if((response->request_id & REQUEST_ID_MASK) == request->request_id)
1538 if(request == NULL)
1540 error("request not found for the session %d for a PDU received from %s",
1546 if(request->state == REQUEST_COMPLETED)
1548 error("a PDU has been received from %s for session %d - request %d whereas the request is already completed",
1551 request->request_id);
1555 if(request->response)
1562 subtree = request->subtree;
1582 trace("!! session %d - request %d: the Get-Next returned No Such Name\n\n",
1584 request->request_id);
1595 if(!is_in_agent_list(request->visited_agent_list, sub->agent))
1597 session_move_request(request, sub);
1623 trace("!! session %d - request %d: the Get-Next issued in the subtree %s supported by %s",
1625 request->request_id,
1653 session_move_request(request, s);
1664 /* we consider response a valid response for the request request */
1665 if(request->response)
1667 error("BUG: session_read(): request->response is not NULL");
1669 request->response = response;
1670 request->state = REQUEST_COMPLETED;
1671 session->i_flags = session->i_flags | request->flags;
1702 /* For each request in each session, if it is the */
1815 trace("!! session %d - request %d: timeout\n\n",
1859 static int request_add_visited_agent(Request *request, Agent *agent)
1864 if(request == NULL)
1866 error("BUG: request_add_visited_agent(): request is NULL");
1882 new->next = request->visited_agent_list;
1883 request->visited_agent_list = new;