~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/chat.py

  • Committer: William Grant
  • Date: 2010-07-28 04:12:08 UTC
  • mfrom: (1790.1.8 codemirror-srsly)
  • Revision ID: grantw@unimelb.edu.au-20100728041208-mciagtog1785oje4
Move from CodePress to CodeMirror. It's now an external dependency, too, so you'll need to install it yourself.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
# Author: Thomas Conway
20
20
# Date:   5/2/2008
21
21
 
22
 
try:
23
 
    import json
24
 
except ImportError:
25
 
    import simplejson as json
26
 
 
 
22
import cjson
27
23
import cStringIO
28
24
import hashlib
29
25
import sys
103
99
 
104
100
            response = handler(content)
105
101
 
106
 
            send_netstring(conn, json.dumps(response))
 
102
            send_netstring(conn, cjson.encode(response))
107
103
 
108
104
            conn.close()
109
105
 
110
106
        except Terminate, t:
111
107
            # Try and send final response and then terminate
112
108
            if t.final_response:
113
 
                send_netstring(conn, json.dumps(t.final_response))
 
109
                send_netstring(conn, cjson.encode(t.final_response))
114
110
            conn.close()
115
111
            sys.exit(0)
116
112
        except Exception:
123
119
                "value": str(e_val),
124
120
                "traceback": tb_dump.getvalue()
125
121
            }
126
 
            send_netstring(conn, json.dumps(json_exc))
 
122
            send_netstring(conn, cjson.encode(json_exc))
127
123
            conn.close()
128
124
 
129
125
 
132
128
    sok.connect((host, port))
133
129
    sok.settimeout(SOCKETTIMEOUT)
134
130
 
135
 
    out = encode(msg, magic)
 
131
    json = encode(msg, magic)
136
132
 
137
 
    send_netstring(sok, out)
 
133
    send_netstring(sok, json)
138
134
    inp = recv_netstring(sok)
139
135
 
140
136
    sok.close()
141
137
 
142
138
    if decode:
143
 
        return json.loads(inp)
 
139
        return cjson.decode(inp)
144
140
    else:
145
141
        return inp
146
142
 
149
145
    string to attach a HMAC digest.
150
146
    """
151
147
    # XXX: Any reason that we double encode?
152
 
    content = json.dumps(message)
 
148
    content = cjson.encode(message)
153
149
 
154
150
    digest = hashlib.md5(content + magic).hexdigest()
155
151
    env = {'digest':digest,'content':content}
156
 
    return json.dumps(env)
 
152
    json = cjson.encode(env)
 
153
 
 
154
    return json
157
155
 
158
156
 
159
157
def decode(message, magic):
160
158
    """Takes a message with an attached HMAC digest and validates the message.
161
159
    """
162
 
    msg = json.loads(message)
 
160
    msg = cjson.decode(message)
163
161
 
164
162
    # Check that the message is valid
165
163
    digest = hashlib.md5(msg['content'] + magic).hexdigest()
166
164
    if msg['digest'] != digest:
167
165
        raise ProtocolError("HMAC digest is invalid")
168
 
    content = json.loads(msg['content'])
 
166
    content = cjson.decode(msg['content'])
169
167
 
170
168
    return content
171
169