Enforce checkstyle and findbug under PCE Api
[bgpcep.git] / pcep / pcc-mock / src / main / java / org / opendaylight / protocol / pcep / pcc / mock / protocol / PCCSessionListener.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.protocol.pcep.pcc.mock.protocol;
10
11 import java.util.Random;
12 import org.opendaylight.protocol.pcep.PCEPSession;
13 import org.opendaylight.protocol.pcep.PCEPSessionListener;
14 import org.opendaylight.protocol.pcep.PCEPTerminationReason;
15 import org.opendaylight.protocol.pcep.pcc.mock.api.PCCSession;
16 import org.opendaylight.protocol.pcep.pcc.mock.api.PCCTunnelManager;
17 import org.opendaylight.protocol.pcep.pcc.mock.spi.MsgBuilderUtil;
18 import org.opendaylight.protocol.pcep.spi.PCEPErrors;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Pcinitiate;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Pcrpt;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Pcupd;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.pcupd.message.Updates;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.Srp;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Pcerr;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.Tlvs;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29
30 public final class PCCSessionListener implements PCEPSessionListener, PCCSession {
31
32     private static final Logger LOG = LoggerFactory.getLogger(PCCSessionListener.class);
33
34     private final boolean errorMode;
35     private final PCCTunnelManager tunnelManager;
36     private final int sessionId;
37     private PCEPSession session;
38
39     public PCCSessionListener(final int sessionId, final PCCTunnelManager tunnelManager, final boolean errorMode) {
40         this.errorMode = errorMode;
41         this.tunnelManager = tunnelManager;
42         this.sessionId = sessionId;
43     }
44
45     @Override
46     public void onMessage(final PCEPSession session, final Message message) {
47         LOG.trace("Received message: {}", message);
48         if (this.errorMode) {
49             //random error message
50             session.sendMessage(createErrorMessage(message));
51             return;
52         }
53         if (message instanceof Pcupd) {
54             final Updates upd = ((Pcupd) message).getPcupdMessage().getUpdates().get(0);
55             this.tunnelManager.onMessagePcupd(upd, this);
56         } else if (message instanceof Pcinitiate) {
57             this.tunnelManager.onMessagePcInitiate(((Pcinitiate) message).getPcinitiateMessage().getRequests().get(0), this);
58         }
59     }
60
61     @Override
62     public void onSessionUp(final PCEPSession session) {
63         LOG.debug("Session up.");
64         this.session = session;
65         this.tunnelManager.onSessionUp(this);
66     }
67
68     @Override
69     public void onSessionDown(final PCEPSession session, final Exception exception) {
70         LOG.info("Session down with cause : {} or exception: {}", exception.getCause(), exception, exception);
71         this.tunnelManager.onSessionDown(this);
72         try {
73             session.close();
74         } catch (Exception ie) {
75             LOG.warn("Error closing session", ie);
76         }
77     }
78
79     @Override
80     public void onSessionTerminated(final PCEPSession session, final PCEPTerminationReason cause) {
81         LOG.info("Session terminated. Cause : {}", cause.toString());
82     }
83
84     @Override
85     public void sendReport(final Pcrpt reportMessage) {
86         this.session.sendMessage(reportMessage);
87     }
88
89     @Override
90     public void sendError(final Pcerr errorMessage) {
91         this.session.sendMessage(errorMessage);
92     }
93
94     @Override
95     public int getId() {
96         return this.sessionId;
97     }
98
99     @Override
100     public Tlvs getRemoteTlvs() {
101         return this.session.getRemoteTlvs();
102     }
103
104     @Override
105     public Tlvs localSessionCharacteristics() {
106         return this.session.localSessionCharacteristics();
107     }
108
109     private final Random rnd = new Random();
110
111     private PCEPErrors getRandomError() {
112         return PCEPErrors.values()[this.rnd.nextInt(PCEPErrors.values().length)];
113     }
114
115     private Pcerr createErrorMessage(final Message message) {
116         final Srp srp;
117         if (message instanceof Pcupd) {
118             srp = ((Pcupd) message).getPcupdMessage().getUpdates().get(0).getSrp();
119         } else {
120             srp = ((Pcinitiate) message).getPcinitiateMessage().getRequests().get(0).getSrp();
121         }
122         return MsgBuilderUtil.createErrorMsg(getRandomError(), srp.getOperationId().getValue());
123     }
124
125 }