Exemplo n.º 1
0
  /*
   * (non-Javadoc)
   *
   * @see org.mobicents.protocols.ss7.map.primitives.MAPAsnPrimitive#encodeData (org.mobicents.protocols.asn.AsnOutputStream)
   */
  public void encodeData(AsnOutputStream asnOs) throws MAPException {

    if (this.ssCode == null)
      throw new MAPException("Error while encoding " + _PrimitiveName + ": ssCode required.");

    if (this.ssStatus == null)
      throw new MAPException("Error while encoding " + _PrimitiveName + ": ssStatus required.");

    if (this.basicServiceGroupList != null
        && (this.basicServiceGroupList.size() < 1 || this.basicServiceGroupList.size() > 32)) {
      throw new MAPException(
          "Error while encoding "
              + _PrimitiveName
              + ": Parameter basicServiceGroupList size must be from 1 to 32, found: "
              + this.basicServiceGroupList.size());
    }

    try {

      ((SSCodeImpl) this.ssCode).encodeAll(asnOs);

      ((ExtSSStatusImpl) this.ssStatus)
          .encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC, _TAG_ss_Status);

      if (this.ssSubscriptionOption != null) {
        ((SSSubscriptionOptionImpl) this.ssSubscriptionOption).encodeAll(asnOs);
      }

      if (this.basicServiceGroupList != null) {
        asnOs.writeTag(Tag.CLASS_UNIVERSAL, false, Tag.SEQUENCE);
        int pos = asnOs.StartContentDefiniteLength();
        for (ExtBasicServiceCode serviceItem : this.basicServiceGroupList) {
          ((ExtBasicServiceCodeImpl) serviceItem).encodeAll(asnOs);
        }
        asnOs.FinalizeContent(pos);
      }

      if (this.extensionContainer != null)
        ((MAPExtensionContainerImpl) this.extensionContainer)
            .encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC, _TAG_extensionContainer);
    } catch (AsnException e) {
      throw new MAPException(
          "AsnException when encoding " + _PrimitiveName + ": " + e.getMessage(), e);
    }
  }
Exemplo n.º 2
0
  protected void _decode(AsnInputStream ansIS, int length)
      throws MAPParsingComponentException, IOException, AsnException {
    ExtBasicServiceCode serviceItem = null;
    this.ssCode = null;
    this.ssStatus = null;
    this.ssSubscriptionOption = null;
    this.basicServiceGroupList = null;
    this.extensionContainer = null;

    AsnInputStream ais = ansIS.readSequenceStreamData(length);

    int num = 0;
    while (true) {
      if (ais.available() == 0) break;

      int tag = ais.readTag();

      switch (num) {
        case 0: // ssCode
          if (ais.getTagClass() != Tag.CLASS_UNIVERSAL
              || tag != Tag.STRING_OCTET
              || !ais.isTagPrimitive())
            throw new MAPParsingComponentException(
                "Error while decoding "
                    + _PrimitiveName
                    + ".ssCode: bad tag or tag class or not primitive",
                MAPParsingComponentExceptionReason.MistypedParameter);
          this.ssCode = new SSCodeImpl();
          ((SSCodeImpl) this.ssCode).decodeAll(ais);
          break;

        case 1: // ss-Status
          if (ais.getTagClass() != Tag.CLASS_CONTEXT_SPECIFIC
              || tag != _TAG_ss_Status
              || !ais.isTagPrimitive())
            throw new MAPParsingComponentException(
                "Error while decoding "
                    + _PrimitiveName
                    + "._TAG_ss_Status: bad tag or tag class or not primitive",
                MAPParsingComponentExceptionReason.MistypedParameter);
          this.ssStatus = new ExtSSStatusImpl();
          ((ExtSSStatusImpl) this.ssStatus).decodeAll(ais);
          break;

        default:
          switch (ais.getTagClass()) {
            case Tag.CLASS_CONTEXT_SPECIFIC:
              switch (tag) {
                case SSSubscriptionOptionImpl._TAG_overrideCategory:
                case SSSubscriptionOptionImpl._TAG_cliRestrictionOption:
                  this.ssSubscriptionOption = new SSSubscriptionOptionImpl();
                  ((SSSubscriptionOptionImpl) this.ssSubscriptionOption).decodeAll(ais);
                  break;

                case _TAG_extensionContainer:
                  if (ais.isTagPrimitive())
                    throw new MAPParsingComponentException(
                        "Error while decoding "
                            + _PrimitiveName
                            + ".extensionContainer: is primitive",
                        MAPParsingComponentExceptionReason.MistypedParameter);
                  this.extensionContainer = new MAPExtensionContainerImpl();
                  ((MAPExtensionContainerImpl) this.extensionContainer).decodeAll(ais);
                  break;

                default:
                  ais.advanceElement();
                  break;
              }
              break;

            case Tag.CLASS_UNIVERSAL: // basicServiceGroupList
              switch (tag) {
                case Tag.SEQUENCE:
                  AsnInputStream ais2 = ais.readSequenceStream();
                  this.basicServiceGroupList = new ArrayList<ExtBasicServiceCode>();
                  while (true) {
                    if (ais2.available() == 0) break;

                    ais2.readTag();
                    serviceItem = new ExtBasicServiceCodeImpl();
                    ((ExtBasicServiceCodeImpl) serviceItem).decodeAll(ais2);
                    this.basicServiceGroupList.add(serviceItem);
                  }
                  if (this.basicServiceGroupList.size() < 1
                      && this.basicServiceGroupList.size() > 32) {
                    throw new MAPParsingComponentException(
                        "Error while decoding "
                            + _PrimitiveName
                            + ": Parameter basicServiceGroupList size must be from 1 to 32, found: "
                            + this.basicServiceGroupList.size(),
                        MAPParsingComponentExceptionReason.MistypedParameter);
                  }
                  break;
                default:
                  ais.advanceElement();
                  break;
              }
              break;

            default:
              ais.advanceElement();
              break;
          }
          break;
      }

      num++;
    }

    if (this.ssCode == null)
      throw new MAPParsingComponentException(
          "Error while decoding " + _PrimitiveName + ": ssCode required.",
          MAPParsingComponentExceptionReason.MistypedParameter);

    if (this.ssStatus == null)
      throw new MAPParsingComponentException(
          "Error while decoding " + _PrimitiveName + ": ssStatus required.",
          MAPParsingComponentExceptionReason.MistypedParameter);
  }