def on_net_msg(self, data): d = data.read('<I') emsg = d & ~proto_mask is_proto = d & proto_mask if not EMSGS.get(emsg): print 'WARNING: skipping', emsg return [] # TODO: use steamd on these headers elif emsg in (EMsg.ChannelEncryptRequest, EMsg.ChannelEncryptResult): # TODO: not going to actual implement a deserializer for a type that # only gets used for 2 message types, RIGHT HERE target = data.read('Q') source = data.read('Q') hdr = (target, source) rest = data.truncate() self.dispatch(emsg, hdr, rest) return [(emsg, hdr, rest)] elif is_proto: length = data.read('I') proto = data.read_len(length) hdr = steam_base.CMsgProtoBufHeader() hdr.ParseFromString(proto) if not self.session_id: self.session_id = hdr.client_sessionid if emsg in PROTO_MAPPING: msg = PROTO_MAPPING[emsg]() msg.ParseFromString(data.read_rest()) if emsg == EMsg.Multi: return self.on_multi(msg) else: self.dispatch(emsg, hdr, msg) return [(emsg, hdr, msg)] else: rest = data.truncate() self.dispatch(emsg, hdr, rest) return [(emsg, hdr, rest)] return []
sys.exit(1) client = SteamClient() client.login(args.user, password, sentry_hash) blacklist = [ EMsg.ClientAccountInfo, EMsg.ClientClanState, EMsg.ClientEmailAddrInfo, EMsg.ClientFriendsGroupsList, EMsg.ClientFriendsList, EMsg.ClientLicenseList, EMsg.ClientPersonaState, EMsg.ClientPlayerNicknameList, EMsg.ClientServerList, EMsg.ClientServersAvailable, ] for emsg, msg in client.pump(): if not emsg in blacklist: print EMSGS.get(emsg) if emsg == EMsg.ClientUpdateMachineAuth: print 'got sentry hash' sha1 = hashlib.sha1(msg.bytes).digest() with open(sentry_file, 'w') as f: f.write(sha1) elif emsg == EMsg.ClientNewLoginKey: print 'ready!' elif emsg == EMsg.ClientLogOnResponse: if msg.eresult == EResult.AccountLogonDenied: token = raw_input('SteamGuard Token: ') client.login(args.user, password, sentry_hash, token)