Ejemplo n.º 1
0
    def _decodeGETSUBSMessage(self, message):
        try:
            values = bdecode(message[1:])
        except:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Error bdecoding message'
            return None

        if len(values) != 3:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid number of fields in GET_SUBS'
            return None
        channel_id, infohash, bitmask = values[0], values[1], values[2]
        if not validPermid(channel_id):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid channel_id in GET_SUBS'
            return None
        if not validInfohash(infohash):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid infohash in GET_SUBS'
            return None
        if not isinstance(bitmask, str) or not len(bitmask) == 4:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid bitmask in GET_SUBS'
            return None
        try:
            bitmask, = unpack('!L', bitmask)
            languages = self._languagesUtility.maskToLangCodes(bitmask)
        except:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid bitmask in GET_SUBS'
            return None

        return (channel_id, infohash, languages)
    def _decodeGETSUBSMessage(self, message):
        try:
            values = bdecode(message[1:])
        except:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Error bdecoding message'
            return None

        if len(values) != 3:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid number of fields in GET_SUBS'
            return None
        channel_id, infohash, bitmask = values[0], values[1], values[2]
        if not validPermid(channel_id):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid channel_id in GET_SUBS'
            return None
        if not validInfohash(infohash):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid infohash in GET_SUBS'
            return None
        if not isinstance(bitmask, str) or not len(bitmask) == 4:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid bitmask in GET_SUBS'
            return None
        try:
            bitmask, = unpack('!L', bitmask)
            languages = self._languagesUtility.maskToLangCodes(bitmask)
        except:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid bitmask in GET_SUBS'
            return None

        return (channel_id, infohash, languages)
Ejemplo n.º 3
0
    def _decodeSUBSMessage(self, message):
        try:
            values = bdecode(message[1:])
        except:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Error bdecoding SUBS message'
            return None

        if len(values) != 4:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid number of fields in SUBS'
            return None
        channel_id, infohash, bitmask, contents = (values[0], values[1],
                                                   values[2], values[3])
        if not validPermid(channel_id):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid channel_id in SUBS'
            return None
        if not validInfohash(infohash):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid infohash in SUBS'
            return None
        if not isinstance(bitmask, str) or not len(bitmask) == 4:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid bitmask in SUBS'
            return None
        try:
            bitmask, = unpack('!L', bitmask)
            languages = self._languagesUtility.maskToLangCodes(bitmask)
        except:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid bitmask in SUBS'
            return None

        if not isinstance(contents, list):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid contents in SUBS'
            return None
        if len(languages) != len(contents):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Bitmask and contents do not match in SUBS'
            return None
        numOfContents = len(languages)
        if numOfContents == 0:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Empty message. Discarding.'
            return None
        contentsDictionary = dict()
        for i in range(numOfContents):
            lang = languages[i]
            subtitle = contents[i]
            if len(subtitle) <= self._maxSubSize:
                contentsDictionary[lang] = subtitle
            elif DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Dropping subtitle, too large', len(
                    subtitle), self._maxSubSize
            else:
                continue

        bitmask = self._languagesUtility.langCodesToMask(
            contentsDictionary.keys())
        return (channel_id, infohash, bitmask, contentsDictionary)
    def _decodeSUBSMessage(self, message):
        try:
            values = bdecode(message[1:])
        except:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Error bdecoding SUBS message'
            return None

        if len(values) != 4:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid number of fields in SUBS'
            return None
        channel_id, infohash, bitmask, contents = (values[0],
         values[1],
         values[2],
         values[3])
        if not validPermid(channel_id):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid channel_id in SUBS'
            return None
        if not validInfohash(infohash):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid infohash in SUBS'
            return None
        if not isinstance(bitmask, str) or not len(bitmask) == 4:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid bitmask in SUBS'
            return None
        try:
            bitmask, = unpack('!L', bitmask)
            languages = self._languagesUtility.maskToLangCodes(bitmask)
        except:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid bitmask in SUBS'
            return None

        if not isinstance(contents, list):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Invalid contents in SUBS'
            return None
        if len(languages) != len(contents):
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Bitmask and contents do not match in SUBS'
            return None
        numOfContents = len(languages)
        if numOfContents == 0:
            if DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Empty message. Discarding.'
            return None
        contentsDictionary = dict()
        for i in range(numOfContents):
            lang = languages[i]
            subtitle = contents[i]
            if len(subtitle) <= self._maxSubSize:
                contentsDictionary[lang] = subtitle
            elif DEBUG:
                print >> sys.stderr, SUBS_LOG_PREFIX + 'Dropping subtitle, too large', len(subtitle), self._maxSubSize
            else:
                continue

        bitmask = self._languagesUtility.langCodesToMask(contentsDictionary.keys())
        return (channel_id,
         infohash,
         bitmask,
         contentsDictionary)