[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference azur::mcc

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

3698.0. "Why MCC_ASN_GET_REF returns MCC_S_ILVTAG now (with DECmcc V1.2)?" by ANNECY::JACQUEMOUX () Fri Sep 04 1992 19:13

	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.RTitleUserPersonal
Name
DateLines
3698.1its not a valid asn.1 tag valueTOOK::KOHLSRuth KohlsWed Sep 09 1992 15:1881
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 }