Esempio n. 1
0
  /**
   * Handles the packet specified, and forward packet to the responsible chained handler once done.
   * In this case, the handler parses the packet and creates a <code>GOOSEMessage</code>
   *
   * @param packet the packet to parse to create the <code>GOOSEMessage</code>
   */
  @Override
  public void handlePacket(JPacket packet) {
    Ethernet ethernetHeader = new Ethernet();
    if (packet.hasHeader(ethernetHeader)) {
      // If it's not a 61850 message then don't handle the packet
      if (ethernetHeader.type() != GOOSEMessage.GOOSE_MSG) {
        return;
      }

      try {
        if (gooseMessage == null) {
          gooseMessage = new GOOSEMessage();
        }
        gooseMessage.init();

        // set destination and source mac
        gooseMessage.setDst(ethernetHeader.destination());
        gooseMessage.setSrc(ethernetHeader.source());

        // set ethernet type
        switch (ethernetHeader.type()) {
          case GOOSEMessage.GOOSE_MSG: // GOOSE
            gooseMessage.setMessageType(GOOSEMessage.GOOSE_MESSAGE);
            // set goose payload
            byte[] payload = ethernetHeader.getPayload();
            GOOSEMessageGoosePDU goosePDU = GOOSEMessageGoosePDU.getInstance(payload, 8);
            // GOOSEMessageGoosePDU goosePDU = GOOSEMessageGoosePDU.getInstance(
            // payload, 7 );
            gooseMessage.setAPDU(goosePDU);
            break;
          case GOOSEMessage.GSE_MGMT_MSG: // GSE
            gooseMessage.setMessageType(GOOSEMessage.GSE_MANAGEMENT_MESSAGE);
            // TODO: handle GSE management message
            break;
          case GOOSEMessage.SVM_MSG: // SVM
            gooseMessage.setMessageType(GOOSEMessage.SV_MESSAGE);
            // TODO: handle SVM message
            break;
          default: // not GOOSE traffic so ignore the frame
            gooseMessage = null;
            return;
        }
      } catch (MessageException me) {
        // TODO - write error message
        return;
      }
    }

    // chain to next handler
    if (this._handler != null) {
      this._handler.handlePacket(packet);
    }

    return;
  }