Ethereal-dev: Re: [Ethereal-dev] Problems with H.323 dissector(s)

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: "Martin Regner" <martin.regner@xxxxxxxxx>
Date: Mon, 1 Sep 2003 06:15:19 +0200
Andres Sikkema wrote:
>There is another error in the IRR/PerCallInfo stuff. The H.245
>TransportAddress has a problem deciding what kind of address it is. I
>haven't been able to find out why, the ASN.1 and the dissector seem to
>agree about optionality and stuff.
>
>See attached capture file containing one frame with the problem.


The problem seems to be with the H.225 NonStandardParameter. The definition of NonStandardParameter in H.225 is not the same
as in H.245. The NonStandardParameter in H.225 has an extensionmarker in NonStandardIdentifier and in H221NonStandard.

Ronnie made a fix a week ago, but it seems that it was not completely correct even if it solved the problem for all the captures I tried with.

When I made some changes as described below  I got your sample capture to be decoded correctly (I think) and it seems that my other captures are still working (I have only tried some of them yet). I have attached the results I got after my modifications and what results
the H.323-plugin gave for the same capture.

NonStandardParameter ::= SEQUENCE
{
 nonStandardIdentifier NonStandardIdentifier,
 data   OCTET STRING
}

NonStandardIdentifier ::= CHOICE
{
 object  OBJECT IDENTIFIER,
 h221NonStandard H221NonStandard,
 ...
}

H221NonStandard ::= SEQUENCE
{ t35CountryCode  INTEGER(0..255),
 t35Extension  INTEGER(0..255),
 manufacturerCode INTEGER(0..65535),
 ...
}

I think that the table for NonStandardParameter_with_extension_sequence (NonStandardParameter for H.221) should be:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

static per_sequence_t NonStandardParameter_with_extension_sequence[] = {
 { "nonStandardIdentifier", NO_EXTENSIONS, NOT_OPTIONAL,
  dissect_h245_NonStandardIdentifier_with_extension },
 { "data", NO_EXTENSIONS, NOT_OPTIONAL,
  dissect_h245_NonStandardParameterData },
 { NULL, 0, 0, NULL }
};

and then there needs to be a specific implementation of NonStandardIdentifier and H221NonStandard to be used for H.221, e.g. :
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


static per_sequence_t h221NonStandard_with_extension_sequence[] = {
 { "t35CountryCode", EXTENSION_ROOT, NOT_OPTIONAL,
  dissect_h245_t35CountryCode },
 { "t35Extension", EXTENSION_ROOT, NOT_OPTIONAL, 
  dissect_h245_t35Extension },
 { "manufacturerCode", EXTENSION_ROOT, NOT_OPTIONAL,
  dissect_h245_manufacturerCode },
 { NULL, 0, 0, NULL }
};
int
dissect_h245_h221NonStandard_with_extension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
 t35CountryCode = 0;
 t35Extension = 0;
 manufacturerCode = 0;

 offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_h221NonStandard, ett_h245_h221NonStandard, h221NonStandard_with_extension_sequence);

 h221NonStandard = ((t35CountryCode * 256) + t35Extension) * 65536 + manufacturerCode;

 return offset;
}



static per_choice_t NonStandardIdentifier_with_extension_choice[] = {
 { 0, "object", EXTENSION_ROOT,
  dissect_h245_object },
 { 1, "h221NonStandard", EXTENSION_ROOT, 
  dissect_h245_h221NonStandard_with_extension },
 { 0, NULL, 0, NULL }
};
static int
dissect_h245_NonStandardIdentifier_with_extension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
 guint32 value;

 *object = '\0';
 h221NonStandard = 0;

 offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h245_NonStandardIdentifier, ett_h245_NonStandardIdentifier, NonStandardIdentifier_with_extension_choice, "NonStandardIdentifier with extension", &value);

 switch (value) {
  case 0 :  /* object */
   nsp_handle = dissector_get_port_handle(nsp_object_dissector_table, adler32_str(object));
   break;
  case 1 :  /* h221NonStandard */
   nsp_handle = dissector_get_port_handle(nsp_h221_dissector_table, h221NonStandard);
   break;
  default :
   nsp_handle = NULL;
    }

 return offset;
}

The NonStandard definitions in the H.245 specifications doesn't have any extension markers:
--------------------------------------------------------------------------------------------------------------------------------

NonStandardParameter ::=SEQUENCE
{
 nonStandardIdentifier NonStandardIdentifier,
 data  OCTET STRING
}

NonStandardIdentifier ::=CHOICE
{
 object  OBJECT IDENTIFIER,
 h221NonStandard SEQUENCE
 {
  t35CountryCode INTEGER (0..255), -- country, per T.35 Annex A
  t35Extension INTEGER (0..255), 
    -- assigned nationally unless t35CountryCode is binary
    -- 1111 1111, in which case it shall contain the country code
    -- according to T.35 Annex B
  manufacturerCode INTEGER (0..65535) -- assigned nationally
 }
}




Frame 1 (197 bytes on wire, 197 bytes captured)
    Arrival Time: Dec  9, 2002 18:48:28.925013000
    Time delta from previous packet: 0.000000000 seconds
    Time relative to first packet: 0.000000000 seconds
    Frame Number: 1
    Packet Length: 197 bytes
    Capture Length: 197 bytes
    File Offset: 40 (0x28)
Ethernet II, Src: 00:02:b9:fa:41:79, Dst: 00:80:c8:ca:fd:c4
    Destination: 00:80:c8:ca:fd:c4 (D-Link_ca:fd:c4)
    Source: 00:02:b9:fa:41:79 (Cisco_fa:41:79)
    Type: IP (0x0800)
Internet Protocol, Src Addr: 10.102.1.33 (10.102.1.33), Dst Addr: 10.102.1.33 (10.101.1.240)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 183
    Identification: 0x0019 (25)
    Flags: 0x00
        .0.. = Don't fragment: Not set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 255
    Protocol: UDP (0x11)
    Header checksum: 0xa341 (correct)
    Source: 10.102.1.33 (10.102.1.33)
    Destination: 10.102.1.33 (10.102.1.33)
User Datagram Protocol, Src Port: 56733 (56733), Dst Port: 1719 (1719)
    Source port: 56733 (56733)
    Destination port: 1719 (1719)
    Length: 163
    Checksum: 0x3a6a (correct)
H.225.0 RAS
    RasMessage
        RasMessage: .101 10.. : infoRequestResponse (22)
            InfoRequestResponse
                RequestSeqNum: 26
                EndPointType
                    GatewayInfo
                        protocol
                            Item 0
                                SupportedProtocols
                                    SupportedProtocols: .011 1... : voice (7)
                                        VoiceCaps
                                            SupportedPrefixes
                                                Item 0
                                                    SupportedPrefix
                                                        prefix
                                                            prefix: ...0 .... : dialedDigits (0)
                                                                privateNumberDigits: 9
                    mc: 0... .... False
                    undefinedNode: .0.. .... False
                EndpointIdentifier: 615743C40000008C
                rasAddress
                    rasAddress: .000 .... : ipAddress (0)
                        ipAddress
                            IP: 10.102.1.33 (10.102.1.33)
                            Port: 56733
                callSignalAddress
                    Item 0
                        TransportAddress
                            TransportAddress: .000 .... : ipAddress (0)
                                ipAddress
                                    IP: 10.102.1.33 (10.102.1.33)
                                    Port: 1720
                endpointAlias
                    Item 0
                        AliasAddress
                            AliasAddress: .1.. .... : h323ID (1)
                                h323ID: Cisco_GW_UK_WAN
                perCallInfo
                    Item 0
                        perCallInfo_item
                            NonStandardParameter
                                NonStandardIdentifier with extension
                                    NonStandardIdentifier type: .... ...1 : h221NonStandard (1)
                                        h221NonStandard
                                            t35CountryCode: United States (181)
                                            t35Extension: 0
                                            manufacturerCode: 18
                                Octet String Length: 5
                                data: 70388A5247
                            CallReferenceValue: 7
                            conferenceID: 33F68493D06711D380109EE14B943CDA
                            h245
                            callSignaling
                            CallType
                                CallType: .... ...0  0... .... : pointToPoint (0)
                            BandWidth: 1280
                            CallModel
                                CallModel: .0.. .... : direct (0)
                            CallIdentifier
                                guid: 33F68493D06711D380119EE14B943CDA
                needResponse: 0... .... False
Frame 1 (197 bytes on wire, 197 bytes captured)
    Arrival Time: Dec  9, 2002 18:48:28.925013000
    Time delta from previous packet: 0.000000000 seconds
    Time relative to first packet: 0.000000000 seconds
    Frame Number: 1
    Packet Length: 197 bytes
    Capture Length: 197 bytes
    File Offset: 40 (0x28)
Ethernet II, Src: 00:02:b9:fa:41:79, Dst: 00:80:c8:ca:fd:c4
    Destination: 00:80:c8:ca:fd:c4 (D-Link_ca:fd:c4)
    Source: 00:02:b9:fa:41:79 (Cisco_fa:41:79)
    Type: IP (0x0800)
Internet Protocol, Src Addr: 10.102.1.33 (10.102.1.33), Dst Addr: 10.101.1.240 (10.101.1.240)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 183
    Identification: 0x0019
    Flags: 0x00
        .0.. = Don't fragment: Not set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 255
    Protocol: UDP (0x11)
    Header checksum: 0xa341 (correct)
    Source: 10.102.1.33 (10.102.1.33)
    Destination: 10.101.1.240 (10.101.1.240)
User Datagram Protocol, Src Port: 56733 (56733), Dst Port: 1719 (1719)
    Source port: 56733 (56733)
    Destination port: 1719 (1719)
    Length: 163
    Checksum: 0x3a6a (correct)
ITU-T Recommendation H.225.0
    infoRequestResponse
        requestSeqNum: 26
        endpointType (EndpointType)
            gateway (GatewayInfo)
                protocol (SupportedProtocols)
                    Item 0 (voice)
                        voice
                            supportedPrefixes (SupportedPrefix)
                                Item 0 (SupportedPrefix)
                                    prefix (e164)
                                        e164: 9
            mc: False
            undefinedNode: False
        endpointIdentifier: 615743C40000008C
        rasAddress (ipAddress)
            ipAddress
                ip: 10.102.1.33 (10.102.1.33)
                port: 56733
        callSignalAddress (TransportAddress)
            Item 0 (ipAddress)
                ipAddress
                    ip: 10.102.1.33 (10.102.1.33)
                    port: 1720
        endpointAlias (AliasAddress)
            Item 0 (h323_ID)
                h323_ID: Cisco_GW_UK_WAN
        perCallInfo (InfoRequestResponse-perCallInfo)
            Item 0 (InfoRequestResponse-perCallInfo-subtype)
                nonStandardData (NonStandardParameter)
                    nonStandardIdentifier (h221NonStandard)
                        h221NonStandard
                            t35CountryCode: 181
                            t35Extension: 0
                            manufacturerCode: 18
                    data: p8ŠRG
                callReferenceValue: 7
                conferenceID: 33F68493-D067-11D3-8010-9EE14B943CDA
                h245 (TransportChannelInfo)
                callSignaling (TransportChannelInfo)
                callType (pointToPoint)
                    pointToPoint: pointToPoint
                bandWidth: 1280
                callModel (direct)
                    direct: direct
                callIdentifier (CallIdentifier)
                    guid: 33F68493-D067-11D3-8011-9EE14B943CDA
        needResponse: False
Frame 1 (197 bytes on wire, 197 bytes captured)
    Arrival Time: Dec  9, 2002 18:48:28.925013000
    Time delta from previous packet: 0.000000000 seconds
    Time relative to first packet: 0.000000000 seconds
    Frame Number: 1
    Packet Length: 197 bytes
    Capture Length: 197 bytes
    File Offset: 40 (0x28)
Ethernet II, Src: 00:02:b9:fa:41:79, Dst: 00:80:c8:ca:fd:c4
    Destination: 00:80:c8:ca:fd:c4 (D-Link_ca:fd:c4)
    Source: 00:02:b9:fa:41:79 (Cisco_fa:41:79)
    Type: IP (0x0800)
Internet Protocol, Src Addr: 10.102.1.33 (10.102.1.33), Dst Addr: 10.102.1.33 (10.101.1.240)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 183
    Identification: 0x0019 (25)
    Flags: 0x00
        .0.. = Don't fragment: Not set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 255
    Protocol: UDP (0x11)
    Header checksum: 0xa341 (correct)
    Source: 10.102.1.33 (10.102.1.33)
    Destination: 10.102.1.33 (10.102.1.33)
User Datagram Protocol, Src Port: 56733 (56733), Dst Port: 1719 (1719)
    Source port: 56733 (56733)
    Destination port: 1719 (1719)
    Length: 163
    Checksum: 0x3a6a (correct)
H.225.0 RAS
    RasMessage
        Extension Bit: 0... .... False
        RasMessage: .101 10.. : infoRequestResponse (22)
            InfoRequestResponse
                Extension Bit: .... ..1. True
                Optional Field Bit: .... ...0 False (nonStandardData is NOT present)
                Optional Field Bit: 1... .... True (endpointAlias is present)
                Optional Field Bit: .1.. .... True (perCallInfo is present)
                RequestSeqNum: 26
                EndPointType
                    Extension Bit: 0... .... False
                    Optional Field Bit: .0.. .... False (nonStandardData is NOT present)
                    Optional Field Bit: ..0. .... False (vendor is NOT present)
                    Optional Field Bit: ...0 .... False (gatekeeper is NOT present)
                    Optional Field Bit: .... 1... True (gateway is present)
                    Optional Field Bit: .... .0.. False (mcu is NOT present)
                    Optional Field Bit: .... ..0. False (terminal is NOT present)
                    GatewayInfo
                        Extension Bit: .... ...0 False
                        Optional Field Bit: 1... .... True (protocol is present)
                        Optional Field Bit: .0.. .... False (nonStandardData is NOT present)
                        protocol
                            Sequence-Of Length: 1
                            Item 0
                                SupportedProtocols
                                    Extension Bit: 0... .... False
                                    SupportedProtocols: .011 1... : voice (7)
                                        VoiceCaps
                                            Extension Bit: .... .1.. True
                                            Optional Field Bit: .... ..0. False (nonStandardData is NOT present)
                                            Small Number Bit: .... ...0 False
                                            Number of Sequence Extensions: 1
                                            Extension Present Bit: .... ..0. False (dataRatesSupported is NOT present)
                                            Extension Present Bit: .... ...1 True (supportedPrefixes is present)
                                            Open Type Length: 4
                                            SupportedPrefixes
                                                Sequence-Of Length: 1
                                                Item 0
                                                    SupportedPrefix
                                                        Extension Bit: 0... .... False
                                                        Optional Field Bit: .0.. .... False (nonStandardData is NOT present)
                                                        prefix
                                                            Extension Bit: ..0. .... False
                                                            prefix: ...0 .... : dialedDigits (0)
                                                                Octet String Length: 1
                                                                privateNumberDigits: 9
                    mc: 0... .... False
                    undefinedNode: .0.. .... False
                Octet String Length: 16
                EndpointIdentifier: 615743C40000008C
                rasAddress
                    Extension Bit: 0... .... False
                    rasAddress: .000 .... : ipAddress (0)
                        ipAddress
                            IP: 10.102.1.33 (10.102.1.33)
                            Port: 56733
                callSignalAddress
                    Sequence-Of Length: 1
                    Item 0
                        TransportAddress
                            Extension Bit: 0... .... False
                            TransportAddress: .000 .... : ipAddress (0)
                                ipAddress
                                    IP: 10.102.1.33 (10.102.1.33)
                                    Port: 1720
                endpointAlias
                    Sequence-Of Length: 1
                    Item 0
                        AliasAddress
                            Extension Bit: 0... .... False
                            AliasAddress: .1.. .... : h323ID (1)
                                Octet String Length: 15
                                h323ID: Cisco_GW_UK_WAN
                perCallInfo
                    Sequence-Of Length: 1
                    Item 0
                        perCallInfo_item
                            Extension Bit: 1... .... True
                            Optional Field Bit: .1.. .... True (nonStandardData is present)
                            Optional Field Bit: ..0. .... False (originator is NOT present)
                            Optional Field Bit: ...0 .... False (audio is NOT present)
                            Optional Field Bit: .... 0... False (video is NOT present)
                            Optional Field Bit: .... .0.. False (data is NOT present)
                            NonStandardParameter
                                NonStandardIdentifier with extension
                                    Extension Bit: .... ..0. False
                                    NonStandardIdentifier type: .... ...1 : h221NonStandard (1)
                                        h221NonStandard
                                            Extension Bit: 0... .... False
                                            t35CountryCode: United States (181)
                                            t35Extension: 0
                                            manufacturerCode: 18
                                Octet String Length: 5
                                data: 70388A5247
                            CallReferenceValue: 7
                            conferenceID: 33F68493D06711D380109EE14B943CDA
                            h245
                                Extension Bit: 0... .... False
                                Optional Field Bit: .0.. .... False (sendAddress is NOT present)
                                Optional Field Bit: ..0. .... False (recvAddress is NOT present)
                            callSignaling
                                Extension Bit: ...0 .... False
                                Optional Field Bit: .... 0... False (sendAddress is NOT present)
                                Optional Field Bit: .... .0.. False (recvAddress is NOT present)
                            CallType
                                Extension Bit: .... ..0. False
                                CallType: .... ...0  0... .... : pointToPoint (0)
                            BandWidth: 1280
                            CallModel
                                Extension Bit: 0... .... False
                                CallModel: .0.. .... : direct (0)
                            Small Number Bit: ..0. .... False
                            Number of Sequence Extensions: 5
                            Extension Present Bit: .1.. .... True (callIdentifier is present)
                            Extension Present Bit: ..0. .... False (tokens is NOT present)
                            Extension Present Bit: ...0 .... False (cryptoTokens is NOT present)
                            Extension Present Bit: .... 0... False (substituteConfIDs is NOT present)
                            Extension Present Bit: .... .0.. False (pdu is NOT present)
                            Extension Present Bit: .... ..0. False (callLinkage is NOT present)
                            Open Type Length: 17
                            CallIdentifier
                                Extension Bit: 0... .... False
                                guid: 33F68493D06711D380119EE14B943CDA
                Small Number Bit: 0... .... False
                Number of Sequence Extensions: 3
                Extension Present Bit: .... ...0 False (tokens is NOT present)
                Extension Present Bit: 0... .... False (cryptoTokens is NOT present)
                Extension Present Bit: .0.. .... False (integrityCheckValue is NOT present)
                Extension Present Bit: ..1. .... True (needResponse is present)
                Open Type Length: 1
                needResponse: 0... .... False