/// <summary> /// Process message 0 /// </summary> /// <param name="data">Thread Data, input parameter (HttpRequestMessage) from the client</param> public void ProcessMessage(object data) { log.Debug("ProcessMessage(.) started."); try { if (data == null) { HttpResponseException e = new HttpResponseException(System.Net.HttpStatusCode.InternalServerError); options.LogThrownException(e); throw e; } HttpRequestMessage request = (HttpRequestMessage)data; mClient = ClientDatabase.GetTransaction(request, Constants.msg0Str); if (mClient == null) { Exception e = new HttpResponseException(System.Net.HttpStatusCode.InternalServerError); options.LogThrownException(e); throw e; } // kill client wait thread so we don't time out. mClient.killTimerThread(); // NOTE: There is a potential race-condition where the client is removed from the database during the time that the cilent sends its response // Can choose to check to re-add the client here in that case log.Debug("\n ***** State: Starting Message 0 sequence for client: " + mClient.ID + "\n"); Msg0 m0 = new Msg0(); M0ResponseMessage m0Response = m0.ProcessMessage0(request, mClient.sigmaSequenceCheck); msg0Response = m0Response; } catch (HttpResponseException re) { options.LogCaughtException(re); httpRE = re; } catch (Exception ex) { options.LogCaughtException(ex); threadException = ex; } finally { log.Debug("ProcessMessage(.) returning."); } }
public async Task <IHttpActionResult> Msg0() { log.Debug("Msg0(.) started."); bool error = false; HttpStatusCode errorCode = System.Net.HttpStatusCode.InternalServerError; M0ResponseMessage m0Response = null; try { m0Response = await ClientDatabase.Message0(this.Request); } catch (WebException we) { error = true; log.Debug("Web Exception in Message 0: " + we.Message); HttpWebResponse WebResponse = we.Response as HttpWebResponse; errorCode = (HttpStatusCode)WebResponse.StatusCode; } catch (HttpResponseException re) { error = true; log.Debug("HttpResponseException in Message 0: " + re.Message); errorCode = (HttpStatusCode)re.Response.StatusCode; } catch (Exception e) { error = true; log.Debug("******* M0 Content Error"); log.Debug("Error: " + e.Message); errorCode = System.Net.HttpStatusCode.InternalServerError; } // Return response to client if (error) { log.DebugFormat("Msg0(.) returning HTTP status code {0}.", errorCode); try { ClientDatabase.RemoveTransaction(this.Request, Constants.msg0Str); } catch (Exception e) // This catches HttpResponseException also, which is what we want here { log.Debug("Exception in Message 0 while error cleanup RemoveTransaction(): " + e.Message); } return(StatusCode(errorCode)); } log.Debug("Msg0(.) success - Accepted HTTP response."); return(Json(m0Response)); }
/// <summary> /// Process Message 0 /// </summary> /// <param name="Request">Client Provisioning request</param> /// <param name="sigmaSequenceCheck">Service Provider Sequence (State) Check</param> /// <returns>Message 0 response</returns> public M0ResponseMessage ProcessMessage0(HttpRequestMessage Request, SpSequenceCheck sigmaSequenceCheck) { log.Debug("ProcessMessage0(.) started."); if (Request == null) { HttpResponseException e = new HttpResponseException(System.Net.HttpStatusCode.BadRequest); options.LogThrownException(e); throw e; } if (sigmaSequenceCheck == null) { HttpResponseException e = new HttpResponseException(System.Net.HttpStatusCode.InternalServerError); options.LogThrownException(e); throw e; } // Check and parse Message 0 M0RequestMessage m0Received = VerifyMessage0IsValid(Request, sigmaSequenceCheck); if (m0Received == null) { HttpResponseException e = new HttpResponseException(System.Net.HttpStatusCode.InternalServerError); options.LogThrownException(e); throw e; } M0ResponseMessage msg0Response = new M0ResponseMessage(); msg0Response.respHeader.sessionNonce = m0Received.reqHeader.nonce; // Successful process of Message 0 log.Debug("ProcessMessage0(.) returning."); return(msg0Response); }