Title: | DECmcc user notes file. Does not replace IPMT. |
Notice: | Use IPMT for problems. Newsletter location in note 6187 |
Moderator: | TAEC::BEROUD |
Created: | Mon Aug 21 1989 |
Last Modified: | Wed Jun 04 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 6497 |
Total number of notes: | 27359 |
Hello, I work on the TRANSLAN AM portage on DECmcc V1.2 and I meet a problem with the MCC_ASN_GET_REF returned status. When the relevant ASN Flag (%X0050A1BF) is found (from MCC_ASN_GET_TAG), the MCC_ASN_GET_REF says "tag of ASN.1 value not valid or not supported" (MCC_S_ILVTAG). With regard to the code, could you tell me if something is not supported by DECmcc V1.2 (I.e. ExpectedType) or is it the TRANSLAN tag which no more supported by the new DECmcc ASN implementation? I look forward to having you comments on this matter. Thierry - EIC T&N-E Annecy ---------------------------------------------------------------------------------- While (Rcb.mcc_ret = mcc_s_normal) And (Entry_not_there) Do Begin Rcb.mcc_ret := mcc_asn_get_tag( Bridge_Context, Tag); { Look for Protocol filter descriptor } If (Rcb.mcc_ret = mcc_s_normal) AND (Tag = %x'0050 a1bf') Then Begin { Save Bridge_Context for later. Vitalink packet is NOT ASN.1 } { compliant. We will return to this point later. } lib$movc3(Context_Size, Bridge_Context, Temp_Context); Rcb.mcc_ret := mcc_asn_get_ref( Bridge_Context, -mcc_k_asn_dt_sequence, Data_Type, Native_Value_Buffer, Max_packet_size, Native_Value_Size ); Rcb.mcc_ret := mcc_asn_get_tag( Bridge_Context, Tag); lib$movc3(Context_Size, Temp_Context, Bridge_Context); { Tag really contains the value we are looking for. } If (Index_Num < Tag) Then Index_Num := Tag; End; { Tag = } { Check for Dups } If (Rcb.mcc_ret = mcc_s_normal) AND (Tag = %x'055 a29f') Then Begin Rcb.mcc_ret := mcc_asn_get_ref( Bridge_Context, -mcc_k_asn_dt_octetstring, Data_Type, Native_Value_Buffer, Max_packet_size, Native_Value_Size ); If (In_p_Pkt_Type[1] = Native_Value_Buffer[1]::char) And (In_p_Pkt_Type[2] = Native_Value_Buffer[2]::char) Then Entry_Not_There:= False; End; End; { While }
T.R | Title | User | Personal Name | Date | Lines |
---|---|---|---|---|---|
3698.1 | its not a valid asn.1 tag value | TOOK::KOHLS | Ruth Kohls | Wed Sep 09 1992 12:18 | 81 |
Hello, Thierry, The "ASN.1 Tag" (%X0050A1BF) in question appears to be badly formed, or it is not ASN.1. This is what the error message is telling you. However, the routine mcc_asn_get_tag expects both of its arguments "by reference". Assuming this routine is written in PASCAL, if the Tag argument is "by reference" in that call, then the Tag = %x... statement is not testing the value of the Tag. One of the two methods of reference to Tag is wrong. This pattern is repeated in all of the places the variable Tag is used-- See the places marked with ">" in your code fragment. For further ASN.1 questions or mcc_asn_xxx routine questions, please get a dump of the encoding, either using mcc_asn_dump() or a plain hex or octal dump, and send it with the questions to TOOK::SANKAR and/or TOOK::KOHLS. All the Best, Ruth Kohls +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ While (Rcb.mcc_ret = mcc_s_normal) And (Entry_not_there) Do Begin Rcb.mcc_ret := mcc_asn_get_tag( Bridge_Context, >(should be by reference) Tag); { Look for Protocol filter descriptor } If (Rcb.mcc_ret = mcc_s_normal) AND >(NOT by reference) (Tag = %x'0050 a1bf') Then Begin { Save Bridge_Context for later. Vitalink packet is NOT ASN.1 } { compliant. We will return to this point later. } lib$movc3(Context_Size, Bridge_Context, Temp_Context); Rcb.mcc_ret := mcc_asn_get_ref( Bridge_Context, -mcc_k_asn_dt_sequence, Data_Type, Native_Value_Buffer, Max_packet_size, Native_Value_Size ); Rcb.mcc_ret := mcc_asn_get_tag( Bridge_Context, >(should be by reference) Tag); lib$movc3(Context_Size, Temp_Context, Bridge_Context); { Tag really contains the value we are looking for. } >(can't tell if this is valid) If (Index_Num < Tag) Then Index_Num := Tag; End; { Tag = } { Check for Dups } If (Rcb.mcc_ret = mcc_s_normal) AND >(NOT by reference) (Tag = %x'055 a29f') Then Begin Rcb.mcc_ret := mcc_asn_get_ref( Bridge_Context, -mcc_k_asn_dt_octetstring, Data_Type, Native_Value_Buffer, Max_packet_size, Native_Value_Size ); If (In_p_Pkt_Type[1] = Native_Value_Buffer[1]::char) And (In_p_Pkt_Type[2] = Native_Value_Buffer[2]::char) Then Entry_Not_There:= False; End; End; { While } |