@Override protected void initOwnPageComponents() { super.initOwnPageComponents(); if (LOG.isDebugEnabled()) LOG.debug("Continue Authentication"); if (getMobiliserWebSession().getTxnPayer() == null) { setResponsePage(ErrorPage.class); return; } Transaction txn = getMobiliserWebSession().getTransaction(); if (LOG.isDebugEnabled()) LOG.debug("Request retry count: " + txn.getContinueRetryCounter()); // Create Thread. SmsAuthenticationThread t = new SmsAuthenticationThread( txn, getMobiliserWebSession().getMsisdn(), createWebContinueRequest()); t.setName("TxnThread" + txn.getTxnId()); // Store Thread in Context getMobiliserWebSession().setSmsThread(t); if (LOG.isDebugEnabled()) LOG.debug( "Starting Authentication Thread. [Msisdn=" + txn.getPayer().getId() + "] [txn=" + txn.getTxnId() + "]"); // Start Thread t.start(); constructPageComponent(); }
private void prepairResponse(AjaxResponse obj, Transaction txn) { if (LOG.isDebugEnabled()) LOG.debug("Return Ajax status " + obj.getStatus() + " - " + obj.getErrorMessage()); if (txn != null) { obj.setReturnUrl(txn.getReturnUrl()); obj.setRetry(txn.getContinueRetryCounter()); obj.setRedirect(true); if (LOG.isDebugEnabled()) { Date pollStart = (Date) txn.getContinueStartDate(); Date currentTime = new Date(); long dif = currentTime.getTime() - pollStart.getTime(); LOG.debug( "Ajax Poll: [RetryCount=" + (obj.getRetry()) + "] [Elapsed Time=" + (dif / 1000) + "s]"); } } response = obj; }
protected void checkStatus(AjaxRequestTarget target) { if (PortalUtils.exists(response)) { checkResponse(target); } // get current Thread SmsAuthenticationThread t = getMobiliserWebSession().getSmsThread(); // if technical problem... // Thread not started if (t == null) { prepairResponse(new AjaxResponse(9999, "Thread not started"), null); return; } // exception was thrown from thread if (t.getException() != null) { prepairResponse(new AjaxResponse(9999, "Exception: " + t.getException().getMessage()), null); return; } // Still processing request if (t.isActive()) { prepairResponse(new AjaxResponse(-1, ""), null); return; } // Thread is finished // no answer from Mobiliser. Technical error if (t.getResponse() == null) { prepairResponse(new AjaxResponse(9999, "No response from Mobiliser"), null); return; } Transaction txn = getMobiliserWebSession().getTransaction(); // check if second try is exceeded. Cancel Transaction by second // retry if (txn.getContinueRetryCounter() >= 2 && t.getResponse().getStatus().getCode() == 2853) { if (LOG.isDebugEnabled()) LOG.debug("retry count exceeded. Canceling transaction"); try { // Fail transaction txn.failTransaction(2853); } catch (Exception e) { LOG.error("#failTransaction: " + e, e); } // Kill Session getMobiliserWebSession().invalidate(); prepairResponse(new AjaxResponse(9999, "Cancel Response"), txn); return; } // check status of mobiliser response if (t.getResponse().getStatus() != null && t.getResponse().getStatus().getCode() != 0) { // Mobiliser request failed with an error code AjaxResponse response = new AjaxResponse( t.getResponse().getStatus().getCode(), t.getResponse().getStatus().getValue()); switch (t.getResponse().getStatus().getCode()) { case 2853: // Transaction timed out response.setRetryVisible(true); default: response.setRedirect(true); } prepairResponse(response, txn); return; } // everything was OK prepairResponse(new AjaxResponse(0, "OK"), txn); }