Ejemplo n.º 1
0
 def writeChannelJoinRequest(self, stream: BytesIO, pdu: MCSChannelJoinRequestPDU):
     """
     Encode a Channel Join Request PDU
     :param stream: The destination stream to write into.
     :param pdu: the PDU to encode.
     """
     stream.write(Uint16BE.pack(pdu.initiator - MCSChannelID.USERCHANNEL_BASE))
     stream.write(Uint16BE.pack(pdu.channelID))
     stream.write(pdu.payload)
Ejemplo n.º 2
0
 def writeConnectionPDU(self, stream: BytesIO, header: X224PDUType,
                        destination: int, source: int, options: int):
     """
     Write a connection PDU (connectionRequest/connectionConfirm/disconnectRequest) in the provided byte stream.
     """
     stream.write(Uint8.pack(header))
     stream.write(Uint16BE.pack(destination))
     stream.write(Uint16BE.pack(source))
     stream.write(Uint8.pack(options))
Ejemplo n.º 3
0
 def writeDataPDU(self, stream: BytesIO, pdu: Union[MCSSendDataRequestPDU, MCSSendDataIndicationPDU]):
     """
     Encode a Data PDU
     :param stream: The destination stream to write into.
     :param pdu: the PDU to encode.
     """
     stream.write(Uint16BE.pack(pdu.initiator - MCSChannelID.USERCHANNEL_BASE))
     stream.write(Uint16BE.pack(pdu.channelID))
     stream.write(per.writeEnumeration(pdu.priority))
     stream.write(per.writeOctetStream(pdu.payload))
Ejemplo n.º 4
0
    def writeChannelJoinConfirm(self, stream: BytesIO, pdu: MCSChannelJoinConfirmPDU):
        """
        Encode a Channel Join Confirm PDU
        :param stream: The destination stream to write into.
        :param pdu: the confirmation PDU.
        """
        stream.write(per.writeEnumeration(pdu.result))
        stream.write(Uint16BE.pack(pdu.initiator - MCSChannelID.USERCHANNEL_BASE))
        stream.write(Uint16BE.pack(pdu.requested))

        if pdu.channelID is not None:
            stream.write(Uint16BE.pack(pdu.channelID))
            stream.write(pdu.payload)
Ejemplo n.º 5
0
    def writeAttachUserConfirm(self, stream: BytesIO, pdu: MCSAttachUserConfirmPDU):
        """
        Encode a Attach User Confirm PDU
        :param stream: The destination stream to write into.
        :param pdu: the PDU to encode.
        """
        stream.write(per.writeEnumeration(pdu.result))

        if pdu.initiator is not None:
            stream.write(Uint16BE.pack(pdu.initiator - MCSChannelID.USERCHANNEL_BASE))
Ejemplo n.º 6
0
    def write(self, pdu: TPKTPDU) -> bytes:
        """
        Encode a TPKTPDU into bytes to send on the network.
        """

        stream = BytesIO()
        stream.write(Uint8.pack(pdu.header))
        stream.write(b"\x00")
        stream.write(Uint16BE.pack(len(pdu.payload) + 4))
        stream.write(pdu.payload)

        return stream.getvalue()
Ejemplo n.º 7
0
    def writeConferenceCreateResponse(self, stream: BytesIO, pdu: GCCConferenceCreateResponsePDU):
        """
        Write a GCCConferenceCreateResponsePDU to a stream.
        :param stream: byte stream to put the ConferenceCreateResponse data in.
        :param pdu: the PDU to write.
        """

        stream.write(Uint16BE.pack(GCCParser.NODE_ID - 1001))
        stream.write(per.writeInteger(1))
        stream.write(per.writeEnumeration(0))
        stream.write(per.writeNumberOfSet(1))
        stream.write(per.writeChoice(0xc0))
        stream.write(per.writeOctetStream(GCCParser.H221_SERVER_KEY, 4))
        stream.write(per.writeOctetStream(pdu.payload))
Ejemplo n.º 8
0
    def writeConferenceCreateResponse(self, stream, pdu):
        """
        Read a GCCConferenceCreateResponsePDU and put its raw data into stream
        :param stream: byte stream to put the ConferenceCreateResponse data in
        :type stream: BytesIO
        :type pdu: GCCConferenceCreateResponsePDU
        """

        stream.write(Uint16BE.pack(GCCParser.NODE_ID - 1001))
        stream.write(per.writeInteger(1))
        stream.write(per.writeEnumeration(0))
        stream.write(per.writeNumberOfSet(1))
        stream.write(per.writeChoice(0xc0))
        stream.write(per.writeOctetStream(GCCParser.H221_SERVER_KEY, 4))
        stream.write(per.writeOctetStream(pdu.payload))
Ejemplo n.º 9
0
 def writeLength(self, stream: BytesIO, pdu: FastPathPDU):
     length = self.calculatePDULength(pdu)
     Uint16BE.pack(length | 0x8000, stream)
Ejemplo n.º 10
0
 def writeLength(self, stream, pdu):
     length = self.calculatePDULength(pdu)
     Uint16BE.pack(length | 0x8000, stream)