docs: @Override
      protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
          if (getInitiator() != null) {
              buf.append(" initiator=\"").append(getInitiator()).append('"');
          }
          if (getResponder() != null) {
              buf.append(" responder=\"").append(getResponder()).append('"');
          }
          if (getAction() != null) {
              buf.append(" action=\"").append(getAction().toString()).append('"');
          }
          if (getSid() != null) {
              buf.append(" sid=\"").append(getSid()).append('"');
          }
          buf.append('>');
  
          synchronized (contents) {
              for (JingleContent content : contents) {
                  buf.append(content.toXML());
              }
           }
  
          // and the same for audio jmf info
          if (contentInfo != null) {
              buf.append(contentInfo.toXML());
          }
  
          return buf;
      }