コード例 #1
0
  private void sendBye() {
    MsnslpRequest req = new MsnslpRequest();
    MsnFileByeMessage bye = new MsnFileByeMessage();
    bye.setSlpMessage(req);
    int lastRandomIdentifier = NumberUtils.getIntRandom();

    // Set the destination for the message (the MsnObject creator)
    bye.setP2PDest(fileTransfer.getEmail().getEmailAddress());

    // Set the binary Header
    bye.setSessionId(Integer.parseInt(fileTransfer.getID()));
    bye.setIdentifier(getNextIdentifier());
    bye.setFlag(MsnP2PMessage.FLAG_OLD_NONE);
    bye.setField7(lastRandomIdentifier);
    bye.setField8(0);
    bye.setField9(0);

    // Set body
    req.setRequestMethod(MsnP2PByeMessage.METHOD_BYE);
    req.setRequestURI(
        "MSNMSGR:"
            + fileTransfer.getSession().getMessenger().getOwner().getEmail().getEmailAddress());
    req.setTo("<msnmsgr:" + fileTransfer.getEmail().getEmailAddress() + ">");
    req.setFrom(
        "<msnmsgr:"
            + fileTransfer.getSession().getMessenger().getOwner().getEmail().getEmailAddress()
            + ">");
    req.setVia("MSNSLP/1.0/TLP ;branch={A0D624A6-6C0C-4283-A9E0-BC97B4B46D32}");
    req.setCSeq(0);
    req.setCallId(fileTransfer.getReqMessage().getSlpMessage().getCallId());
    req.setMaxForwards(0);
    req.setContentType("application/x-msnmsgr-sessionclosebody");
    req.setBody(JmlConstants.LINE_SEPARATOR + "\0");

    // Get the size of the message to be setted
    int slpMessageLength = Charset.encodeAsByteArray(req.toString()).length;
    bye.setTotalLength(slpMessageLength);
    bye.setCurrentLength(slpMessageLength);

    OutgoingMSG[] outgoingOkMessages =
        bye.toOutgoingMsg(fileTransfer.getSession().getMessenger().getActualMsnProtocol());
    for (OutgoingMSG outgoingOkMessage : outgoingOkMessages) {
      if (switchboard != null) switchboard.send(outgoingOkMessage);
      else fileTransfer.getSession().sendAsynchronousMessage(outgoingOkMessage);
    }
  }