HTML5 WebSocket Server – Work in Progress

So, I thought I’d devise a websocket server in Python. I’ve been tweeting some stuff about that too, but as soon as I wanted to publish the source code, I accidentally deleted websocket.py, instead of websocket.pyc (which I didn’t want to occur on github). That was quite dumb…

A basis for further development

Today I started rewriting it from scratch. Unfortunately, the “draft76” implementation I wrote back then is already outdated. So the code isn’t really all that useful, except that I got a basic version working, though it still blocks threads that have a client connected, and the server won’t shutdown until the clients disconnect. That is a design error and a major bug that demands yet another rewrite.

Anyway, the part that cost me the most time was figuring out the opening handshake code, so here it is:

def _challenge_response(self, key1, key2, key3):
    """The response to a WebSocket challenge. 
 
    - key1 is the contents of the Sec-WebSocket-Key1 header
    - key1 is the contents of the Sec-WebSocket-Key2 header
    - key3 is the contents of the 8 bytes long request body"""
    def extract_number(key):
        number = ''
        spaces = 0
        for ch in key:
            if ch == " ": 
                spaces += 1
            elif ch.isdigit(): 
                number += ch
 
        number = int(number)
        if spaces > 0 and number > 0 and number % spaces == 0:
            return int(int(number) / spaces)
        raise ValueError("Invalid challenge part %s, can not extract number" % key)
 
    self._debug("Challenge: \n\t%s\n\t%s\n\t%s" % (key1, key2, key3))
 
    packed = pack('>L', extract_number(key1))
    packed += pack('>L', extract_number(key2)) 
    packed += key3
 
    response =  hashlib.md5(packed).digest()
 
    self._debug("Response: %s" % response)
    return response

Current development code

Just to be sure I won’t delete the source code again, I just published the development code on my github.

This entry was posted in Development and tagged , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

3 Comments

  1. Surrey
    Posted July 1, 2011 at 23:14 | Permalink

    You really ought to put *.pyc in your .gitignore file. This way you wouldn’t have to worry about deleting your .pyc files every time you wanted to push to Github.

    • drm
      Posted July 17, 2011 at 12:03 | Permalink

      That was the plan, but I deleted them before I added the sources to git 🙂 Thanks for the tip though

  2. Posted April 24, 2014 at 19:12 | Permalink

    Sagging hinges will cause you to have to slam the doors and often more than once to fasten them. He also added that 80% corollas are driven among the 7000,000 vehicles. To buy used cars in hyderabad like used maruti cars on afgfordable price visit free classifieds site khojle.

Post a Comment

Your email is never published nor shared.

You may use these HTML tags and attributes <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Subscribe without commenting