code: public Subscription subscribe(String jid, SubscribeForm subForm) throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
          PubSub request = createPubsubPacket(Type.set, new SubscribeExtension(jid, getId()));
          request.addExtension(new FormNode(FormNodeType.OPTIONS, subForm));
          PubSub reply = sendPubsubPacket(request);
          return reply.getExtension(PubSubElementType.SUBSCRIPTION);
      }
docs: The user subscribes to the node using the supplied jid and subscription
  options.  The bare jid portion of this one must match the jid for the
  connection.
  
  Please note that the {@link Subscription.State} should be checked
  on return since more actions may be required by the caller.
  {@link Subscription.State#pending} - The owner must approve the subscription
  request before messages will be received.
  {@link Subscription.State#unconfigured} - If the {@link Subscription#isConfigRequired()} is true,
  the caller must configure the subscription before messages will be received.  If it is false
  the caller can configure it but is not required to do so.
  
  @param jid The jid to subscribe as.
  @param subForm
  
  @return The subscription
  @throws XMPPErrorException
  @throws NoResponseException
  @throws NotConnectedException
  @throws InterruptedException