コード例 #1
0
ファイル: frame.py プロジェクト: cyberj/pulsar
    def __init__(self, message=None, opcode=None, version=None,
                 masking_key=None, final=False, rsv1=0, rsv2=0, rsv3=0):
        """Implements the framing protocol as defined by hybi_
specification supporting protocol version 13::
    
    >>> f = Frame(opcode, 'hello world', os.urandom(4), fin=1)
    >>> data = f.build()
    >>> f = Frame()
    >>> f.parser.send(bytes[1])
    >>> f.parser.send(bytes[2])
    >>> f.parser.send(bytes[2:])
"""
        self.version = get_version(version)
        if opcode is None and message is not None:
            opcode = 0x1 if is_text_data(message) else 0x2
        message = to_bytes(message or b'')
        self.payload_length = len(message)
        if opcode is None:
            raise WebSocketProtocolError('opcode not available')
        self.version = version
        self.opcode = opcode
        if masking_key:
            masking_key = to_bytes(masking_key)
            if len(masking_key) != 4:
                raise WebSocketProtocolError('Masking key must be 4 bytes long')
        self.masking_key = masking_key
        self.fin = 0x1 if final else 0
        self.rsv1 = rsv1
        self.rsv2 = rsv2
        self.rsv3 = rsv3
        self.body = message
        self.msg = self.build_frame(message)
コード例 #2
0
ファイル: httpurl.py プロジェクト: cyberj/pulsar
 def test_to_bytes(self):
     s = httpurl.to_bytes('ciao')
     self.assertTrue(isinstance(s, bytes))
     s2 = httpurl.to_bytes(s)
     self.assertEqual(id(s), id(s2))
     s3 = httpurl.to_bytes(s, 'latin-1')
     self.assertEqual(s, s3)
     self.assertNotEqual(id(s), id(s3))
コード例 #3
0
ファイル: httpurl.py プロジェクト: cyberj/pulsar
 def test_WWWAuthenticate_digest(self):
     H = httpurl.hexmd5
     nonce = H(to_bytes('%d' % time.time()) + os.urandom(10))
     auth = httpurl.WWWAuthenticate.digest('www.mydomain.org', nonce,
                                 opaque=H(os.urandom(10)),
                                 qop=('auth', 'auth-int'))
     self.assertEqual(auth.options['qop'], 'auth, auth-int')
コード例 #4
0
ファイル: manage.py プロジェクト: cyberj/pulsar
 def request_challenge_digest_auth(self, environ, bits):
     if len(bits) == 3:
         auth = environ.get('HTTP_AUTHORIZATION')
         if auth and auth.authenticated(environ, *bits[1:]):
             data = jsonbytes({'autheinticated': True,
                               'username': auth.username})
             return self.response(data)
         nonce = hexmd5(to_bytes('%d' % time.time()) + os.urandom(10))
         digest = WWWAuthenticate.digest("Fake Realm", nonce,
                                         opaque=hexmd5(os.urandom(10)),
                                         qop=bits[:1])
         raise HttpException(status=401,
                             headers=[('WWW-Authenticate', str(digest))])
     else:
         raise HttpException(status=404)
コード例 #5
0
ファイル: mailbox.py プロジェクト: cyberj/pulsar
 def encode(self, msg):
     if isinstance(msg, ActorMessage):
         return msg.encode()
     else:
         return to_bytes(msg)
コード例 #6
0
ファイル: __init__.py プロジェクト: ilmiacs/pulsar
 def challenge_response(self, key):
     sha1 = hashlib.sha1(to_bytes(key+WEBSOCKET_GUID))
     return native_str(base64.b64encode(sha1.digest()))