Exemplo n.º 1
0
    def __init__(self, application_id, data, total_size=None,
            session_id=None, blob_id=None, is_file=False):
        if data is not None:
            if isinstance(data, str):
                if len(data) > 0:
                    total_size = len(data)
                    data = StringIO.StringIO(data)
                else:
                    data = StringIO.StringIO()

            if total_size is None:
                data.seek(0, 2) # relative to the end
                total_size = data.tell()
                data.seek(0, 0)
        else:
            total_size = 0

        self.data = data
        self.current_size = 0
        self.total_size = total_size
        self.application_id = application_id
        if session_id is None:
            session_id = _generate_id()
        self.session_id = session_id
        self.id = blob_id or _generate_id()
        self.is_file = is_file
Exemplo n.º 2
0
 def change(self):
     filename = os.path.basename(self.options.change)
     self._data = file(self.options.change, 'r').read()
     msn_object = papyon.p2p.MSNObject(
         self.profile,
         len(self._data),
         papyon.p2p.MSNObjectType.DISPLAY_PICTURE,
         filename,
         "",
         data=StringIO.StringIO(self._data))
     self.profile.msn_object = msn_object
Exemplo n.º 3
0
 def _parse(self, data):
     events = ("start", "end", "start-ns", "end-ns")
     ns = []
     data = StringIO.StringIO(data)
     context = ElementTree.iterparse(data, events=events)
     for event, elem in context:
         if event == "start-ns":
             ns.append(elem)
         elif event == "end-ns":
             ns.pop()
         elif event == "start":
             elem.set("(xmlns)", tuple(ns))
     data.close()
     return context.root
 def SetAvatar(self, avatar, mime_type):
     self._avatar_known = True
     if not isinstance(avatar, str):
         avatar = "".join([chr(b) for b in avatar])
     msn_object = papyon.p2p.MSNObject(
         self.msn_client.profile,
         len(avatar),
         papyon.p2p.MSNObjectType.DISPLAY_PICTURE,
         hashlib.sha1(avatar).hexdigest() + '.tmp',
         "",
         data=StringIO.StringIO(avatar))
     self.msn_client.profile.msn_object = msn_object
     avatar_token = msn_object._data_sha.encode("hex")
     logger.info("Setting self avatar to %s" % avatar_token)
     return avatar_token
Exemplo n.º 5
0
    def parse(client, xml_data):
        data = StringIO.StringIO(xml_data)
        try:
            element = ElementTree.parse(data).getroot().attrib
        except:
            raise MSNObjectParseError(xml_data)

        creator = element["Creator"]
        size = int(element["Size"])
        type = int(element["Type"])

        if "Location" in element:
            location = xml.unescape(element["Location"])
        else:
            location = "0"

        if "Friendly" in element:
            friendly = b64_decode(xml.unescape(element["Friendly"]))
        else:
            friendly = '\x00\x00'

        shad = element.get("SHA1D", None)
        if shad is not None:
            try:
                shad = b64_decode(shad)
            except TypeError:
                logger.warning("Invalid SHA1D in MSNObject: %s" % shad)
                shad = None

        shac = element.get("SHA1C", None)
        if shac is not None:
            try:
                shac = b64_decode(shac)
            except TypeError:
                logger.warning("Invalid SHA1C in MSNObject: %s" % shac)
                shac = None

        try:
            result = MSNObject(creator, size, type, location, friendly, shad,
                               shac)
            result._repr = xml_data
        except ValueError:
            raise MSNObjectParseError(xml_data)

        return result
Exemplo n.º 6
0
    def decode_body(self):
        """Decodes body content using "Content-Encoding" header. As of now
           only 'gzip' encoding is supported. Also encodes the result string
           to UTF-8 if necessary.
           @note Only 'gzip' encoding is supported for now
           @raises HTTPParseError: if encoding is unknown"""

        encoding = self.headers.get("Content-Encoding", "")
        if encoding == "":
            body = self.body
        elif encoding == "gzip":
            body_stream = StringIO.StringIO(self.body)
            unzipper = gzip.GzipFile(fileobj=body_stream)
            body = unzipper.read()
        else:
            raise HTTPParseError("%s is not implemented" % encoding)

        type, charset = self.content_type
        if charset.lower() != "utf-8":
            body = body.decode(charset).encode("utf-8")

        return body
Exemplo n.º 7
0
Arquivo: p2p.py Projeto: lppedd/papyon
    def parse(client, xml_data):
        data = StringIO.StringIO(xml_data)
        try:
            element = ElementTree.parse(data).getroot().attrib
        except:
            raise ParseError('Invalid MSNObject')

        creator = element["Creator"]
        size = int(element["Size"])
        type = int(element["Type"])
        location = xml.unescape(element["Location"])
        friendly = base64.b64decode(xml.unescape(element["Friendly"]))
        shad = element.get("SHA1D", None)
        if shad is not None:
            shad = base64.b64decode(shad)
        shac = element.get("SHA1C", None)
        if shac is not None:
            shac = base64.b64decode(shac)

        result = MSNObject(creator, size, type, location, friendly, shad, shac)
        result._repr = xml_data
        return result
Exemplo n.º 8
0
 def _parse(self, data):
     data = StringIO.StringIO(data)
     return ElementTree.parse(data)