void IHttpServerAgent.HandleRequest(BaseConnection c, HttpMessageReader httpReader, ArraySegment <byte> httpContent) { Console.WriteLine("{0} :: {1}", httpReader.Method.ToString(), httpReader.RequestUri.ToString()); HttpMessageWriter response = null; InitializeXcapPathParser(); int parsed; if (pathParser.ParseAll(httpReader.RequestUri.ToArraySegment(), out parsed) == false) { Console.WriteLine("Failed to parse requesr uri."); Console.WriteLine(" " + httpReader.RequestUri.ToString()); Console.WriteLine(" " + "^".PadLeft(parsed + 1, '-')); } else { pathParser.SetArray(httpReader.RequestUri.Bytes); if (httpReader.Method == Methods.Options) { response = GetWriter(); response.WriteOptionsResponse(); } else { if (pathParser.Username.IsValid && pathParser.Domain.IsValid) { var handler = usersHandlers.Get(pathParser.Auid.ToString()); switch (httpReader.Method) { case Methods.Get: response = handler.ProcessGetItem(pathParser.Username, pathParser.Domain); break; case Methods.Put: response = handler.ProcessPutItem(pathParser.Username, pathParser.Domain, httpReader, httpContent); break; case Methods.Delete: response = handler.ProcessDeleteItem(pathParser.Username, pathParser.Domain); break; default: response = null; break; } } else { var handler = genericHandlers.Get(pathParser.Auid.ToString()); if (handler == xcapCapsHander && xcapCapsHander.IsValid == false) { xcapCapsHander.Update(Handlers); } if (handler != null) { if (pathParser.IsGlobal) { response = handler.ProcessGlobal(); } else { switch (httpReader.Method) { case Methods.Get: response = handler.ProcessGetItem(pathParser.Item); break; case Methods.Put: response = handler.ProcessPutItem(pathParser.Item, httpContent); break; case Methods.Delete: response = handler.ProcessDeleteItem(pathParser.Item); break; default: response = null; break; } } } } } } if (response == null) { response = GetWriter(); response.WriteEmptyResponse(StatusCodes.NotFound); } httpServer.SendResponse(c, response); }