Java jSS7中的异常行为

Java jSS7中的异常行为,java,wireshark,restcomm,ss7,Java,Wireshark,Restcomm,Ss7,所以我有一个fork版本,在那里我实现了SendParameters SS7命令,它是为mapv1定义的,因为我fork的版本当时没有实现它(不要认为它仍然实现)。这不是我在JSS7中实现的第一个命令。问题是,我非常确定我的编码/解码遵循规范,但当我在subscriberId部分构造一个给定TMSI而不是IMSI的invoke SendParameters消息时,它在wireshark中显示为msisdn,并且没有正确解析。这是wireshark的问题还是我的实现有问题?我的SendParame

所以我有一个fork版本,在那里我实现了SendParameters SS7命令,它是为mapv1定义的,因为我fork的版本当时没有实现它(不要认为它仍然实现)。这不是我在JSS7中实现的第一个命令。问题是,我非常确定我的编码/解码遵循规范,但当我在subscriberId部分构造一个给定TMSI而不是IMSI的invoke SendParameters消息时,它在wireshark中显示为msisdn,并且没有正确解析。这是wireshark的问题还是我的实现有问题?我的SendParametersRequestImpl和SubscriberIdImpl供参考:

公共类SendParameterRequestImp扩展MobilityMessageImpl实现SendParametersRequest{
私有静态final int _TAG _SUBSCRIBER _ID=0;
私有静态final int _TAG_REQUESTED_参数=1;
私有SubscriberId SubscriberId;
私有静态最终字符串\u PrimitiveName=“SendParameterRequestImp”;
私有ArrayList requestParameterList;
public SendParameterRequestImp(SubscriberId SubscriberId,ArrayList requestParameters){
this.subscriberId=subscriberId;
this.requestParameterList=requestParameters;
}
公共SendParameterRequestImp(){
}
@凌驾
公共ArrayList getRequestParameterList(){
返回请求参数列表;
}
@凌驾
公共SubscriberId getSubscriberId(){
返回subscriberId;
}
public void setSubscriberId(SubscriberId SubscriberId){
this.subscriberId=subscriberId;
}
@凌驾
公共MAPMessageType getMessageType(){
返回MAPMessageType.sendParameter\u请求;
}
@凌驾
public int getOperationCode(){
返回MAPOperationCode.sendParameters;
}
@凌驾
public int getTag()引发MAPException{
返回标签序列;
}
@凌驾
公共int getTagClass(){
返回Tag.CLASS_UNIVERSAL;
}
@凌驾
公共布尔getIsPrimitive(){
返回false;
}
@凌驾
public void decodeAll(AsnInputStream ansIS)引发MAPParsingComponentException{
试一试{
int length=ansIS.readLength();
这个。_解码(ansIS,长度);
}捕获(IOE异常){
抛出新的MAPParsingComponentException(“解码“+_PrimitiveName+”:“+e.getMessage(),e,
MAPParsingComponentExceptionReason.MistypedParameter);
}捕获(ASE){
抛出新的MAPParsingComponentException(“解码“+_PrimitiveName+”:“+e.getMessage(),e,
MAPParsingComponentExceptionReason.MistypedParameter);
}
}
私有void_decode(AsnInputStream ansIS,int length)抛出IOException、AsnException、MAPParsingComponentException{
AsnInputStream ais=ansIS.readSequenceStreamData(长度);
while(true){
如果(ais.available()==0)
打破
int tag=ais.readTag();
开关(ais.getTagClass()){
case Tag.CLASS_上下文_特定:
this.subscriberId=new SubscriberIdImpl();
((subscriberIDMPL)this.subscriberId).decodeAll(ais);
打破
case Tag.CLASS_UNIVERSAL:
开关(标签){
case Tag.SEQUENCE:
this.requestParameterList=新的ArrayList();
AsnInputStream ais3=ais.readSequenceStream();
while(true){
如果(ais3.available()==0)
打破
int tag2=ais3.readTag();
if(tag2!=Tag.ENUMERATED)
抛出新的MAPParsingComponentException(“解码时出错”+\u PrimitiveName
+“:解码plmnClientList时,标签或标记类错误或不是原语”,
MAPParsingComponentExceptionReason.MistypedParameter);
int code=(int)ais3.readInteger();
RequestParameter elem=RequestParameter.getInstance(代码);
this.requestParameterList.add(elem);
}
打破
违约:
ais.advanceElement();
打破
}
打破
违约:
ais.advanceElement();
打破
}
}
}
@凌驾
public void decodeData(AsnInputStream ansIS,int-length)引发MAPParsingComponentException{
试一试{
这个。_解码(ansIS,长度);
}捕获(IOE异常){
抛出新的MAPParsingComponentException(“解码“+_PrimitiveName+”:“+e.getMessage(),e,
MAPParsingComponentExceptionReason.MistypedParameter);
}捕获(ASE){
抛出新的MAPParsingComponentException(“解码“+_PrimitiveName+”:“+e.getMessage(),e,
MAPParsingComponentExceptionReason.MistypedParameter);
}
}
@凌驾
public void encodeAll(AsnOutputStream asnOs)引发MAPException{
this.encodeAll(asnOs,this.getTagClass(),this.getTag());
}
@凌驾
public void encodeAll(AsnOutputStream asnOs、int-tagClass、int-tag)引发MAPException{
试一试{
asnOs.writeTag(tagClass,this.getIsPrimitive(),tag);
int pos=asnOs.StartContentDefiniteLength();
这是数据编码(asnOs);
asnOs.FinalizeContent(位置);
}捕获(ASE){
扔新地图
MAP V1: SendParametersArg ::= SEQUENCE { subscriberId SubscriberId, requestParameterList RequestParameterList}
requestParameterList SEQUENCE SIZE (1..2) OF RequestParameter
SubscriberId ::= CHOICE { imsi [0] IMSI, tmsi [1] TMSI}