use of org.asteriskjava.manager.TimeoutException in project opennms by OpenNMS.
the class AsteriskOriginator method originateCall.
/**
* Originates a call based on properties set on this bean.
*
* @throws org.opennms.netmgt.asterisk.utils.AsteriskOriginatorException if any.
*/
public void originateCall() throws AsteriskOriginatorException {
OriginateAction originateAction = buildOriginateAction();
LOG.info("Logging in Asterisk manager connection");
try {
m_managerConnection.login();
} catch (final IllegalStateException ise) {
throw new AsteriskOriginatorException("Illegal state logging in Asterisk manager connection", ise);
} catch (final IOException ioe) {
throw new AsteriskOriginatorException("I/O exception logging in Asterisk manager connection", ioe);
} catch (final AuthenticationFailedException afe) {
throw new AsteriskOriginatorException("Authentication failure logging in Asterisk manager connection", afe);
} catch (final TimeoutException toe) {
throw new AsteriskOriginatorException("Timed out logging in Asterisk manager connection", toe);
}
LOG.info("Successfully logged in Asterisk manager connection");
LOG.info("Originating a call to extension {}", m_legAExtension);
LOG.debug(createCallLogMsg());
LOG.debug("Originate action:\n\n{}", originateAction.toString());
ManagerResponse managerResponse = null;
try {
managerResponse = m_managerConnection.sendAction(originateAction);
} catch (final IllegalArgumentException iae) {
m_managerConnection.logoff();
throw new AsteriskOriginatorException("Illegal argument sending originate action", iae);
} catch (final IllegalStateException ise) {
m_managerConnection.logoff();
throw new AsteriskOriginatorException("Illegal state sending originate action", ise);
} catch (final IOException ioe) {
m_managerConnection.logoff();
throw new AsteriskOriginatorException("I/O exception sending originate action", ioe);
} catch (final TimeoutException toe) {
m_managerConnection.logoff();
throw new AsteriskOriginatorException("Timed out sending originate action", toe);
}
LOG.info("Asterisk manager responded: {}", managerResponse.getResponse());
LOG.info("Asterisk manager message: {}", managerResponse.getMessage());
if (managerResponse.getResponse().toLowerCase().startsWith("error")) {
m_managerConnection.logoff();
throw new AsteriskOriginatorException("Got error response sending originate event. Response: " + managerResponse.getResponse() + "; Message: " + managerResponse.getMessage());
}
LOG.info("Logging off Asterisk manager connection");
m_managerConnection.logoff();
LOG.info("Successfully logged off Asterisk manager connection");
}
use of org.asteriskjava.manager.TimeoutException in project opennms by OpenNMS.
the class AsteriskSIPPeerMonitor method poll.
/**
* {@inheritDoc}
*
* <P>
* Run the service monitor and return the poll status
* </P>
*/
public PollStatus poll(MonitoredService svc, Map<String, Object> parameters) {
// read configuration parameters
String sipPeer = ParameterMap.getKeyedString(parameters, "sip-peer", DEFAULT_SIPPEER);
if (sipPeer.equals(DEFAULT_SIPPEER)) {
LOG.error("AsteriskMonitor: No sip-peer parameter in poller configuration");
throw new RuntimeException("AsteriskMonitor: required parameter 'sip-peer' is not present in supplied properties.");
}
TimeoutTracker timeoutTracker = new TimeoutTracker(parameters, DEFAULT_RETRY, DEFAULT_TIMEOUT);
AmiPeerFactory amiPeerFactory = AmiPeerFactory.getInstance();
AmiAgentConfig amiConfig = amiPeerFactory.getAgentConfig(svc.getAddress());
// setting up AMI connection
LOG.debug("{}: Creating new AMI-Connection: {}:{}, {}/{}", svc.getSvcName(), svc.getIpAddr(), amiConfig.getPort(), amiConfig.getUsername(), amiConfig.getPassword());
ManagerConnectionFactory factory = new ManagerConnectionFactory(svc.getIpAddr(), amiConfig.getPort().orElse(null), amiConfig.getUsername().orElse(null), amiConfig.getPassword().orElse(null));
ManagerConnection managerConnection;
if (amiConfig.getUseTls().orElse(false)) {
managerConnection = factory.createSecureManagerConnection();
} else {
managerConnection = factory.createManagerConnection();
}
managerConnection.setSocketTimeout(new Long(timeoutTracker.getTimeoutInMillis()).intValue());
// start with polling
while (timeoutTracker.shouldRetry()) {
timeoutTracker.nextAttempt();
LOG.debug("{}: Attempt {}", svc.getSvcName(), timeoutTracker.getAttempt());
try {
LOG.debug("{}: AMI login", svc.getSvcName());
managerConnection.login();
LOG.debug("{}: AMI sendAction SipShowPeer", svc.getSvcName());
ManagerResponse response = managerConnection.sendAction(new SipShowPeerAction(sipPeer));
if (response.getAttribute("Status") == null) {
LOG.debug("{}: service status down", svc.getSvcName());
return PollStatus.decode("Down", "State of SIP Peer is unknown, because it was not found on the Asterisk server");
}
LOG.debug("{}: Response: {}", svc.getSvcName(), response.getAttribute("Status"));
LOG.debug("{}: AMI logoff", svc.getSvcName());
managerConnection.logoff();
if (response.getAttribute("Status").startsWith("OK")) {
LOG.debug("{}: service status up", svc.getSvcName());
return PollStatus.decode("Up", "OK");
} else {
LOG.debug("{}: service status down", svc.getSvcName());
return PollStatus.decode("Down", "State of SIP Peer is " + response.getAttribute("Status") + " and not OK");
}
} catch (AuthenticationFailedException e) {
LOG.debug("{}: AMI AuthenticationError.", svc.getSvcName(), e);
return PollStatus.decode("Down", "Could not get the state of SIP Peer: AMI AuthenticationError");
} catch (TimeoutException e) {
LOG.debug("{}: TimeOut reached.", svc.getSvcName(), e);
} catch (SocketTimeoutException e) {
LOG.debug("{}: TimeOut reached.", svc.getSvcName(), e);
} catch (Exception e) {
LOG.error("{}: An Unknown Exception Occurred.", svc.getSvcName(), e);
return PollStatus.decode("Down", "Could not get the state of SIP Peer: " + e.toString());
}
}
// If none of the retries worked
return PollStatus.decode("Down", "Could not get the state of SIP Peer: Timeout exceeded");
}
Aggregations