Пример #1
0
        // The main processing loop
        //
        // Unlike in normal C# we do not throw exceptions, instead we return
        // an error code to the calling client
        public override BoundResponse Request(BoundRequest BoundRequest)
        {
            bool Authenticated = false;
            Response Response = null;
            TicketData TicketData = null;

            try {
                if (BoundRequest.Ticket != null) {
                    TicketData = Context.GetTicketData (BoundRequest.Ticket);
                    // Check that the MAC code evaluates under the ticket
                    //
                    bool valid = true; //BoundRequest.VerifyMAC(TicketData.Authentication, TicketData.MasterKey);
                    if (!valid) {
                        return ErrorBadMac;
                        }
                    Authenticated = true;
                    }

                Request Request;
                try {
                    Request.Deserialize(BoundRequest.Payload, out Request);
                    Request.TicketData = TicketData;
                    }
                catch {
                    return ErrorSyntax;
                    }

                // The only time we will accept a message without authentication
                // is if it is an initial connection
                if (!Authenticated & Request.Authenticate ()) {
                    return ErrorBadMac;
                    }

                Response = Request.Dispatch (Context, TicketData);

                if (Response == null) {
                    return ErrorUnknown;
                    }

                BoundResponse BoundResponse;
                if (TicketData == null) {
                    BoundResponse = new BoundResponse  (Response.ToString());
                    }
                else {
                    BoundResponse = new BoundResponse (Response.ToString(),
                        BoundRequest.Ticket, TicketData.Authentication, TicketData.MasterKey);
                    }

                BoundResponse.Status = Response.Status;
                BoundResponse.StatusDescription = Response.StatusDescription;

                return BoundResponse;
                }
            catch {
                return ErrorUnknown;
                }
        }
Пример #2
0
        public override BoundResponse Request(BoundRequest BoundRequest)
        {
            bool Authenticated = false;
            QResponse Response = null;
            TicketData TicketData = null;

            try {
                if (BoundRequest.Ticket != null) {
                    TicketData = Context.GetTicketData (BoundRequest.Ticket);
                    Authenticated = true; // Otherwise an exception would have been thrown
                    }

                QRequest Request;
                try {
                    QRequest.Deserialize(BoundRequest.Payload, out Request);
                    Request.TicketData = TicketData;
                    }
                catch {
                    return ErrorSyntax;
                    }

                // The only time we will accept a message without authentication
                // is if it is an initial connection
                if (!Authenticated & Request.Authenticate ()) {
                    return ErrorBadMac;
                    }

                Response = Request.Dispatch (Context, TicketData);

                if (Response == null) {
                    return ErrorUnknown;
                    }

                BoundResponse BoundResponse;
                if (TicketData == null) {
                    BoundResponse = new BoundResponse(Response.ToString());
                    }
                else {
                    BoundResponse = new BoundResponse(Response.ToString(),
                        BoundRequest.Ticket, TicketData.Authentication, TicketData.MasterKey);
                    }
                BoundResponse.Status = Response.Status;
                BoundResponse.StatusDescription = Response.StatusDescription;
                return BoundResponse;
                }
            catch {
                return ErrorUnknown;
                }
        }