Example #1
0
        /// <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));
        }
Example #3
0
        /// <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);
        }