1 22 23 package org.snmp4j.agent.agentx.master; 24 25 import org.snmp4j.agent.agentx.AgentXPDU; 26 import java.util.LinkedList ; 27 import org.snmp4j.smi.VariableBinding; 28 import org.snmp4j.agent.request.SnmpSubRequest; 29 import java.util.List ; 30 import org.snmp4j.agent.request.SnmpRequest; 31 import org.snmp4j.agent.request.Request; 32 import org.snmp4j.agent.agentx.AgentXTestSetPDU; 33 import org.snmp4j.agent.agentx.AgentXCommitSetPDU; 34 import org.snmp4j.agent.agentx.AgentXCleanupSetPDU; 35 import org.snmp4j.agent.agentx.AgentXUndoSetPDU; 36 import org.snmp4j.agent.request.SubRequest; 37 import org.snmp4j.agent.request.SubRequestIterator; 38 import org.snmp4j.agent.request.SubRequestIteratorSupport; 39 40 public class AgentXPendingSet extends AbstractAgentXPending { 41 42 private AgentXMasterSession session; 43 private List vbs = new LinkedList (); 44 private AgentXPDU requestPDU; 45 46 public AgentXPendingSet(AgentXRegEntry regEntry, SnmpRequest request) { 47 super(regEntry, request); 48 this.session = regEntry.getSession(); 49 } 50 51 public synchronized void add(SnmpSubRequest reference, VariableBinding vb) { 52 vbs.add(new AgentXSetVB(vb, reference)); 53 requestPDU = null; 55 } 56 57 public AgentXPDU getAgentXPDU() { 58 if (requestPDU == null) { 59 createRequestPDU(); 60 } 61 return requestPDU; 62 } 63 64 private void createRequestPDU() { 65 AgentXPDU reqPDU = null; 66 SnmpRequest request = (SnmpRequest) 67 ((AgentXSetVB)vbs.get(0)).getReferenceSubRequest().getRequest(); 68 switch (request.getPhase()) { 69 case Request.PHASE_INIT: 70 case Request.PHASE_1PC: 71 case Request.PHASE_2PC_PREPARE: { 72 reqPDU = 73 new AgentXTestSetPDU(request.getContext(), (VariableBinding[]) 74 vbs.toArray(new VariableBinding[vbs.size()])); 75 break; 76 } 77 case Request.PHASE_2PC_COMMIT: { 78 reqPDU = new AgentXCommitSetPDU(); 79 break; 80 } 81 case Request.PHASE_2PC_CLEANUP: { 82 reqPDU = new AgentXCleanupSetPDU(); 83 break; 84 } 85 default: { 86 reqPDU = new AgentXUndoSetPDU(); 87 break; 88 } 89 } 90 reqPDU.setSessionID(session.getSessionID()); 91 reqPDU.setTransactionID(request.getTransactionID()); 92 this.requestPDU = reqPDU; 93 } 94 95 public AgentXMasterSession getSession() { 96 return session; 97 } 98 99 public SubRequestIterator getReferences() { 100 return new SetSubRequestIterator(); 101 } 102 103 public String toString() { 104 return getClass().getName()+"["+super.toStringMembers()+",vbs="+vbs+"]"; 105 } 106 107 public class AgentXSetVB extends VariableBinding { 108 private SnmpSubRequest referenceSubRequest; 109 110 public AgentXSetVB(VariableBinding vb, SnmpSubRequest reference) { 111 super(vb.getOid(), vb.getVariable()); 112 this.referenceSubRequest = reference; 113 } 114 115 public SnmpSubRequest getReferenceSubRequest() { 116 return referenceSubRequest; 117 } 118 } 119 120 class SetSubRequestIterator extends SubRequestIteratorSupport { 121 protected SetSubRequestIterator() { 122 super(AgentXPendingSet.this.vbs.iterator()); 123 } 124 125 protected SubRequest mapToSubRequest(Object element) { 126 return ((AgentXSetVB)element).getReferenceSubRequest(); 127 } 128 } 129 130 131 } 132 | Popular Tags |