'Add OAuth parameters to the request.
Parameters may be included from the body if the content-type is
urlencoded, if no content type is set a guess is made.'

def __call__(self, r):

    log.debug(u'Signing    request    %s    using    client    %s', r, self.client)
    content_type = r.headers.get(u'Content-Type', u'')
    if (((not content_type) and extract_params(r.body)) or (self.client.signature_type == SIGNATURE_TYPE_BODY)):
        content_type = CONTENT_TYPE_FORM_URLENCODED
    if (not isinstance(content_type, unicode)):
        content_type = content_type.decode(u'utf-8')
    is_form_encoded = (CONTENT_TYPE_FORM_URLENCODED in content_type)
    log.debug(u'Including    body    in    call    to    sign:    %s', (is_form_encoded or self.force_include_body))
    if is_form_encoded:
        r.headers[u'Content-Type'] = CONTENT_TYPE_FORM_URLENCODED
        (r.url, headers, r.body) = self.client.sign(unicode(r.url), unicode(r.method), (r.body or u''), r.headers)
    elif self.force_include_body:
        (r.url, headers, r.body) = self.client.sign(unicode(r.url), unicode(r.method), (r.body or u''), r.headers)
    else:
        (r.url, headers, _) = self.client.sign(unicode(r.url), unicode(r.method), None, r.headers)
    r.prepare_headers(headers)
    r.url = to_native_string(r.url)
    log.debug(u'Updated    url:    %s', r.url)
    log.debug(u'Updated    headers:    %s', headers)
    log.debug(u'Updated    body:    %r', r.body)
    return r
