// 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; } }
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; } }