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 _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)