def doParse(self, data: bytes) -> GCCPDU: """ Parses the raw data bytes into a GCCPDU :param data: PDU data. """ stream = BytesIO(data) tag = per.readChoice(stream) if tag != 0: raise ParsingError("Expected object tag (0), got %d instead" % tag) oid = per.readObjectIdentifier(stream) if oid != GCCParser.T124_02_98_OID: raise ParsingError("Invalid object identifier: %r, expected %r" % (oid, GCCParser.T124_02_98_OID)) _length = per.readLength(stream) header = per.readChoice(stream) if header not in self.parsers: raise UnknownPDUTypeError( "Trying to parse unknown GCC PDU type %s" % header, header) pdu = self.parsers[header](stream) return pdu
def parseConferenceCreateRequest( self, stream: BytesIO) -> GCCConferenceCreateRequestPDU: """ Parse ConferenceCreateRequest data into a GCCPDU :param stream: byte stream containing the PDU data """ prop = per.readSelection(stream) if prop != 8: raise ParsingError( "Expected property to be 8 (conference name), got %d" % prop) conferenceName = per.readNumericString(stream, 1) stream.read(1) userDataCount = per.readNumberOfSet(stream) if userDataCount != 1: raise ParsingError("Expected user data count to be 1, got %d" % userDataCount) userDataType = per.readChoice(stream) if userDataType != 0xc0: raise ParsingError( "Expected user data type to be 0xc0 (h221NonStandard), got %d" % userDataType) key = per.readOctetStream(stream, 4) if key != GCCParser.H221_CLIENT_KEY: raise ParsingError("Expected user data key to be %s, got %s" % (GCCParser.H221_CLIENT_KEY, key)) payload = per.readOctetStream(stream) return GCCConferenceCreateRequestPDU(conferenceName, payload)
def parseConferenceCreateResponse( self, stream: BytesIO) -> GCCConferenceCreateResponsePDU: """ Parse ConferenceCreateResponse data into a GCCPDU :param stream: byte stream containing the PDU data """ nodeID = Uint16BE.unpack(stream.read(2)) + 1001 tag = per.readInteger(stream) result = per.readEnumeration(stream) userDataCount = per.readNumberOfSet(stream) if userDataCount != 1: raise ParsingError("Expected user data count to be 1, got %d" % userDataCount) userDataType = per.readChoice(stream) if userDataType != 0xc0: raise ParsingError( "Expected user data type to be 0xc0 (h221NonStandard), got %d" % userDataType) key = per.readOctetStream(stream, 4) if key != GCCParser.H221_SERVER_KEY: raise ParsingError("Expected user data key to be %s, got %s" % (GCCParser.H221_SERVER_KEY, key)) payload = per.readOctetStream(stream) return GCCConferenceCreateResponsePDU(nodeID, tag, result, payload)