code: public boolean refreshBuddy(Request req, long timeout) {
      if (parent.getBuddyList().get(targetUri) == null) {
        setReturnCode(SipSession.INVALID_ARGUMENT);
        setErrorMessage("Buddy refresh for URI " + targetUri
            + " failed, uri was not found in the buddy list. Use fetchPresenceInfo() for users not in the buddy list");
  
        return false;
      }
  
      return refreshSubscription(req, timeout, parent.getProxyHost() != null);
    }
docs: This method is the same as refreshBuddy(duration, eventId, timeout) except that instead of
  creating the SUBSCRIBE request from parameters passed in, the given request message parameter
  is used for sending out the SUBSCRIBE message.
  
  <p>
  The Request parameter passed into this method should come from calling createSubscribeMessage()
  - see that javadoc. The subscription duration is reset to the passed in Request's expiry value.
  If it is 0, this is an unsubscribe. Note, the buddy stays in the buddy list even though the
  subscription won't be active. The event "id" in the given request will be used subsequently
  (for error checking SUBSCRIBE responses and NOTIFYs from the server as well as for sending
  subsequent SUBSCRIBEs).