Skip to content
Snippets Groups Projects
  1. Mar 13, 2013
    • Don Kjer's avatar
      Large changes to the LLCurl::Responder API, as well as pulling in some changes... · f9454152
      Don Kjer authored
      Large changes to the LLCurl::Responder API, as well as pulling in some changes to common libraries from the server codebase:
      
      * Additional error checking in http handlers.
      * Uniform log spam for http errors.
      * Switch to using constants for http heads and status codes.
      * Fixed bugs in incorrectly checking if parsing LLSD xml resulted in an error.
      * Reduced spam regarding LLSD parsing errors in the default completedRaw http handler.  It should not longer be necessary to short-circuit completedRaw to avoid spam.
      * Ported over a few bug fixes from the server code.
      * Switch mode http status codes to use S32 instead of U32.
      * Ported LLSD::asStringRef from server code; avoids copying strings all over the place.
      * Ported server change to LLSD::asBinary; this always returns a reference now instead of copying the entire binary blob.
      * Ported server pretty notation format (and pretty binary format) to llsd serialization.
      
      * The new LLCurl::Responder API no longer has two error handlers to choose from.  Overriding the following methods have been deprecated:
      ** error - use httpFailure
      ** errorWithContent - use httpFailure
      ** result - use httpSuccess
      ** completed - use httpCompleted
      ** completedHeader - no longer necessary; call getResponseHeaders() from a completion method to obtain these headers.
      
      * In order to 'catch' a completed http request, override one of these methods:
      ** httpSuccess - Called for any 2xx status code.
      ** httpFailure - Called for any non-2xx status code.
      ** httpComplete - Called for all status codes.  Default implementation is to call either httpSuccess or httpFailure.
      * It is recommended to keep these methods protected/private in order to avoid triggering of these methods without using a 'push' method (see below).
      
      * Uniform error handling should followed whenever possible by calling a variant of this during httpFailure:
      ** llwarns << dumpResponse() << llendl;
      * Be sure to include LOG_CLASS(your_class_name) in your class in order for the log entry to give more context.
      
      * In order to 'push' a result into the responder, you should no longer call error, errorWithContent, result, or completed.
      * Nor should you directly call httpSuccess/Failure/Completed (unless passing a message up to a parent class).
      * Instead, you can set the internal content of a responder and trigger a corresponding method using the following methods:
      ** successResult - Sets results and calls httpSuccess
      ** failureResult - Sets results and calls httpFailure
      ** completedResult - Sets results and calls httpCompleted
      
      * To obtain information about a the response from a reponder method, use the following getters:
      ** getStatus - HTTP status code
      ** getReason - Reason string
      ** getContent - Content (Parsed body LLSD)
      ** getResponseHeaders - Response Headers (LLSD map)
      ** getHTTPMethod - HTTP method of the request
      ** getURL - URL of the request
      
      * It is still possible to override completeRaw if you want to manipulate data directly out of LLPumpIO.
      
      * See indra/llmessage/llcurl.h for more information.
      f9454152
  2. Dec 21, 2012
    • Monty Brandenberg's avatar
      SH-3331 Fix incorrect overrun message when sending body with HTTP · 6c337535
      Monty Brandenberg authored
      request.  During readcallback, would generate an overrun-type message
      about reading position beyond end-of-data.  Mistake was is messaging
      when state is exactly at end of data (which is expected) versus an
      overrun.  Both result in declaring end-of-data to libcurl.  Also
      changed some of the status logging for the metrics payload to be
      less chatty on success, more informative on error.
      6c337535
  3. Jul 23, 2012
  4. Jul 16, 2012
  5. Jul 11, 2012
  6. Jul 07, 2012
  7. Jul 06, 2012
    • Monty Brandenberg's avatar
      SH-3222 Slow loading textures on Lag Me 1 · f37b90df
      Monty Brandenberg authored
      Think I have found the major factor that causes the Linksys WRT54G V5 to
      fall over in testing scenarios:  DNS.  For some historical reason, we're
      trying to use libcurl without any DNS caching.  My implementation echoed
      that and implemented it correctly and I was seeing a DNS request per request
      on the wire.  The existing implementation tries to do that and has bugs
      because it is clearing caching DNS data querying only once every few
      seconds.  Once I started emulating the bug, comms through the WRT became
      much, much more reliable.
      f37b90df
  8. Jun 20, 2012
  9. Jun 19, 2012
  10. Jun 14, 2012
    • Monty Brandenberg's avatar
      LLMutex recursive lock, global & per-request tracing, simple GET request,... · b08125a5
      Monty Brandenberg authored
      LLMutex recursive lock, global & per-request tracing, simple GET request, LLProxy support, HttpOptions starting to work, HTTP resource waiting fixed.
      Non-LLThread-based threads need to do some registration or LLMutex locks taken out in these
      threads will not work as expected (SH-3154).  We'll get a better solution later, this fixes
      some things for now.  Tracing of operations now supported.  Global and per-request (via
      HttpOptions) tracing levels of [0..3].  The 2 and 3 levels use libcurl's VERBOSE mode
      combined with CURLOPT_DEBUGFUNCTION to stream high levels of detail into the log.  *Very*
      laggy but useful.  Simple GET request supported (no Range: header).  Really just a
      degenrate case of a ranged get but supplied an API anyway.  Global option to use the
      LLProxy interface to setup CURL handles for either socks5 or http proxy usage.  This
      isn't really the most encapsulated way to do this but a better solution will have to
      come later.  The wantHeaders and tracing options are now supported in HttpOptions giving
      per-request controls.  Big refactoring of the HTTP resource waiter in lltexturefetch.
      What I was doing before wasn't correct.  Instead, I'm implementing the resource wait
      after the Semaphore model (though not using system semaphores).  So instead of having
      a sequence like:  SEND_HTTP_REQ -> WAIT_HTTP_RESOURCE -> SEND_HTTP_REQ, we now
      do WAIT_HTTP_RESOURCE -> WAIT_HTTP_RESOURCE2 (actual wait) -> SEND_HTTP_REQ.  Works
      well but the prioritized filling of the corehttp library needs some performance
      work later.
      b08125a5
  11. Jun 12, 2012
    • Monty Brandenberg's avatar
      HTTP Proxy, PUT & POST, unit tests and refactoring. · 7adeb392
      Monty Brandenberg authored
      Implemented/modified PUT & POST to not used chunked encoding for the request.
      Made the unit test much happier and probably a better thing for the pipeline.
      Have a cheesy static & dynamic proxy capability using both local options and
      a way to wire into LLProxy in llmessages.  Not a clean thing but it will get
      the proxy path working with both socks5 & http proxies.  Refactoring to get
      rid of unneeded library handler and unified an HttpStatus return for all
      requests.  Big batch of code removed as a result of that and more is possible
      as well as some syscall avoidance with a bit more work.  Boosted the unit
      tests for simple PUT & POST test which revealed the test harness does *not*
      like chunked encoding so we'll avoid it for now (and don't really need it
      in any of our schemes).
      7adeb392
  12. Jun 11, 2012
  13. Jun 08, 2012
    • Monty Brandenberg's avatar
      Implemented HTTP retry for requests. Went in rather easily which · 28a04400
      Monty Brandenberg authored
      surprised me.  Added a retry queue similar to ready queue to the
      policy object which is sorted by retry time.  Currently do five
      retries (after the initial try) delayed by .25, .5, 1, 2 and 5
      seconds.  Removed the retry logic from the lltexturefetch module.
      Upped the waiting time in the unit test for the retries.  People
      won't like this but tough, need tests.
      28a04400
  14. Jun 06, 2012
    • Monty Brandenberg's avatar
      Policy + caching fixes + https support + POST working · 05af16a2
      Monty Brandenberg authored
      Implemented first global policy definitions to support SSL CA certificate configuration
      to support https: operations.  Fixed HTTP 206 status handling to match what is currently
      being done by grid services and to lay a foundation for fixes that will be a response
      to ER-1824.  More libcurl CURLOPT options set on easy handles to do peer verification
      in the traditional way.  HTTP POST working and now reporting asset metrics back to
      grid for the viewer's asset system.  This uses LLSD so that is also showing as compatible
      with the new library.
      05af16a2
  15. Jun 05, 2012
  16. Jun 01, 2012
  17. May 23, 2012
    • Monty Brandenberg's avatar
      Integrate llcorehttp library into lltexturefetch design. · 8fc35012
      Monty Brandenberg authored
      This is the first functional viewer pass with the HTTP work of the texture fetch
      code performed by the llcorehttp library.  Not exactly a 'drop-in' replacement
      but a work-alike with some changes (e.g. handler notification in consumer
      thread versus responder notification in worker thread).
      
      This also includes some temporary changes in the priority scheme to prevent
      the kind of priority inversion found in VWR-28996.  Scheme used here does
      provide liveness if not optimal responsiveness or order-of-operation.
      
      The llcorehttp library at this point is far from optimally performing.
      Its worker thread is making relatively poor use of cycles it gets and
      it doesn't idle or sleep intelligently yet.  This early integration step
      helps shake out the interfaces, implementation niceties will be covered
      soon.
      8fc35012
  18. May 07, 2012
    • Monty Brandenberg's avatar
      Build llcorehttp as part of a viewer dependency with unit tests. This required · 74d59e71
      Monty Brandenberg authored
      boost::thread and the easiest path to that was to go with the 1.48 Boost release
      in the 3P tree (eliminating a fork for a modified 1.45 packaging).  One unit test,
      the most important one, is failing in test_httprequest but that can be attended
      to later.  This test issues a GET to http://localhost:2/ and that is hitting the
      wire but the libcurl plumbing isn't delivering the failure, only the eventual
      timeout.  An unexpected change in behavior.
      74d59e71
  19. Apr 25, 2012
  20. Apr 23, 2012
Loading