def HandleHello(self, data): toSend = Packet().create() self.CONNOBJ.locale = data.get( "PacketData", 'locale') # Save locale for translated countryList and termsOfUse currentTime = strftime('%b-%d-%Y %H:%M:%S UTC') toSend.set("PacketData", "TXN", "Hello") toSend.set("PacketData", "domainPartition.domain", "eagames") toSend.set("PacketData", "domainPartition.subDomain", "bfwest-server") toSend.set("PacketData", "curTime", currentTime) toSend.set( "PacketData", "activityTimeoutSecs", "3600") # We could let idle clients disconnect here automatically? toSend.set("PacketData", "messengerIp", readFromConfig("connection", "emulator_ip")) toSend.set("PacketData", "messengerPort", 0) # Unknown data are being send to this port toSend.set("PacketData", "theaterIp", readFromConfig("connection", "emulator_ip")) toSend.set("PacketData", "theaterPort", readFromConfig("connection", "theater_server_port")) self.CONNOBJ.IsUp = True Packet(toSend).send(self, "fsys", 0xC0000000, self.CONNOBJ.plasmaPacketID) SendMemCheck(self)
def __init__(self, messageFrom, messageColor): init() self.messageFrom = messageFrom self.messageColor = messageColor self.logFile = readFromConfig("debug", "create_log") self.logTimestamp = readFromConfig("debug", "put_timestamp_in_log") self.fileLogLevel = int(readFromConfig("debug", "file_log_level")) self.consoleLogLevel = int(readFromConfig("debug", "console_log_level")) self.useColors = readFromConfig("console", "use_colors")
def HandleGetLockerURL(self): toSend = Packet().create() toSend.set("PacketData", "TXN", "GetLockerURL") url = "http%3a//" + readFromConfig( "connection", "emulator_ip") + "/fileupload/locker2.jsp" toSend.set("PacketData", "URL", url) Packet(toSend).send(self, "acct", 0x80000000, self.CONNOBJ.plasmaPacketID)
def HandleHello(self, data): toSend = Packet().create() self.CONNOBJ.clientVersion = data.get("PacketData", "clientVersion") currentTime = strftime('%b-%d-%Y %H:%M:%S UTC') toSend.set("PacketData", "domainPartition.domain", "eagames") toSend.set("PacketData", "messengerIp", readFromConfig("connection", "emulator_ip")) toSend.set("PacketData", "messengerPort", 0) # Unknown data are being send to this port toSend.set("PacketData", "domainPartition.subDomain", "BFBC2") toSend.set("PacketData", "TXN", "Hello") toSend.set("PacketData", "activityTimeoutSecs", 0) # We could let idle clients disconnect here automatically? toSend.set("PacketData", "curTime", currentTime) toSend.set("PacketData", "theaterIp", readFromConfig("connection", "emulator_ip")) toSend.set("PacketData", "theaterPort", readFromConfig("connection", "theater_server_port")) Packet(toSend).send(self, "fsys", 0x80000000, self.CONNOBJ.plasmaPacketID) self.CONNOBJ.IsUp = True SendMemCheck(self)
def HandleGetPingSites(self): toSend = Packet().create() toSend.set("PacketData", "TXN", "GetPingSites") emuIp = readFromConfig("connection", "emulator_ip") toSend.set("PacketData", "pingSite.[]", "2") toSend.set("PacketData", "pingSite.0.addr", emuIp) toSend.set("PacketData", "pingSite.0.type", "0") toSend.set("PacketData", "pingSite.0.name", "gva") toSend.set("PacketData", "pingSite.1.addr", emuIp) toSend.set("PacketData", "pingSite.1.type", "1") toSend.set("PacketData", "pingSite.1.name", "nrt") toSend.set("PacketData", "minPingSitesToPing", "0") Packet(toSend).send(self, "fsys", 0xC0000000, self.CONNOBJ.plasmaPacketID)
def __init__(self, showWelcomeMsg=False): dbFileLocation = readFromConfig("database", "db_file_path") if exists(dbFileLocation): if showWelcomeMsg: logger.new_message('Connected to database!', 1) self.connection = sqlite3.connect(dbFileLocation) self.cleanup() else: logger.new_message( 'Database file not found! Initializing database...', 1) self.connection = sqlite3.connect(dbFileLocation) try: self.initializeDatabase() logger.new_message('Database initialized successfully!', 1) except Exception as DBError: logger_err.new_message( 'There is an problem with initializing database!\nAdditional Error Info:\n' + str(DBError), 1) sys.exit(6)
def HandleGetTelemetryToken(self): toSend = Packet().create() toSend.set("PacketData", "TXN", "GetTelemetryToken") tokenbuffer = readFromConfig("connection", "emulator_ip") # Messenger IP tokenbuffer += "," tokenbuffer += str(0) # Messenger Port tokenbuffer += "," tokenbuffer += ",enUS,^Ů™¨Üś·Ć¤¤‰“ťĘ˙…Ź˛ŃĂÖ¬Ś±ďıˇ‚†Ś˛°Äݱ–†Ě›áî°ˇ‚†Ś°ŕŔ†Ě˛ąĘ‰»¦–Ĺ‚ťŠÔ©Ń©Ż„™’´ČŚ–±äೆŚ°îŔáŇĚŰŞÓ€" token = b64encode(tokenbuffer).replace("=", "%3d") toSend.set("PacketData", "telemetryToken", token) toSend.set( "PacketData", "enabled", "CA,MX,PR,US,VI,AD,AF,AG,AI,AL,AM,AN,AO,AQ,AR,AS,AW,AX,AZ,BA,BB,BD,BF,BH,BI,BJ,BM,BN,BO,BR,BS,BT,BV,BW,BY,BZ,CC,CD,CF,CG,CI,CK,CL,CM,CN,CO,CR,CU,CV,CX,DJ,DM,DO,DZ,EC,EG,EH,ER,ET,FJ,FK,FM,FO,GA,GD,GE,GF,GG,GH,GI,GL,GM,GN,GP,GQ,GS,GT,GU,GW,GY,HM,HN,HT,ID,IL,IM,IN,IO,IQ,IR,IS,JE,JM,JO,KE,KG,KH,KI,KM,KN,KP,KR,KW,KY,KZ,LA,LB,LC,LI,LK,LR,LS,LY,MA,MC,MD,ME,MG,MH,ML,MM,MN,MO,MP,MQ,MR,MS,MU,MV,MW,MY,MZ,NA,NC,NE,NF,NG,NI,NP,NR,NU,OM,PA,PE,PF,PG,PH,PK,PM,PN,PS,PW,PY,QA,RE,RS,RW,SA,SB,SC,clntSock,SG,SH,SJ,SL,SM,SN,SO,SR,ST,SV,SY,SZ,TC,TD,TF,TG,TH,TJ,TK,TL,TM,TN,TO,TT,TV,TZ,UA,UG,UM,UY,UZ,VA,VC,VE,VG,VN,VU,WF,WS,YE,YT,ZM,ZW,ZZ" ) toSend.set("PacketData", "filters", "") toSend.set("PacketData", "disabled", "") Packet(toSend).send(self, "acct", 0x80000000, self.CONNOBJ.plasmaPacketID)
def addDefaultEntitlements(self, forUserID): currentTime = strftime('%Y-%m-%dT%H:%MZ') defaultEntitlements = [ ( forUserID, 'NoVetRank', "NFSNAM:PC:NOVETRANK", 0, currentTime, "", "", "ACTIVE", "", ), ( forUserID, '', "ONLINE_ACCESS", 0, currentTime, "", "DR:156691300", "ACTIVE", "", ), ( forUserID, 'AddsVetRank', "NFS:PC:ADDSVETRANK", 0, currentTime, "", "", "ACTIVE", "", ), # sometimes clients don't have this in the packet...whatever ( forUserID, 'NFSPC', 'BETA_ONLINE_ACCESS', 0, currentTime, "", "OFB-BFBC:19121", "ACTIVE", "", ) ] # beta access is nice too (though it doesnt seem to affect anything) if readFromConfig("emulator", "new_players_have_vietnam"): defaultEntitlements.append( (forUserID, 'NFSPC', "NFS:PC:VIETNAM_ACCESS", 0, currentTime, "", "DR:219316800", "ACTIVE", "")) defaultEntitlements.append( (forUserID, 'NFSPC', "NFS:PC:VIETNAM_PDLC", 0, currentTime, "", "DR:219316800", "ACTIVE", "")) if readFromConfig("emulator", "new_players_have_premium"): defaultEntitlements.append( (forUserID, 'NFSPC', "NFS:PC:LimitedEdition", 1, currentTime, "", "OFB-BFBC:19120", "ACTIVE", "")) if readFromConfig("emulator", "new_players_have_specact"): defaultEntitlements.append( (forUserID, 'NFSPC', "NFS:PC:ALLKIT", 0, currentTime, "", "DR:192365600", "ACTIVE", "")) if readFromConfig("emulator", "new_players_are_veterans"): defaultEntitlements.append( (forUserID, 'AddsVetRank', "BF3:PC:ADDSVETRANK", 0, currentTime, "", "OFB-EAST:40873", "ACTIVE", "")) for entitlement in defaultEntitlements: cursor = self.connection.cursor() cursor.execute( "INSERT INTO Entitlements (userID, groupName, entitlementTag, version, grantDate, terminationDate, productId, status, statusReasonCode) VALUES (?,?,?,?,?,?,?,?,?)", entitlement) self.connection.commit() cursor.close()
def MainApp(): Log("Init", "\033[37m").new_message( "Initializing Battlefield Heroes Master Server Emulator...", 0) try: ssl_key = readFromConfig("SSL", "priv_key_path") ssl_cert = readFromConfig("SSL", "cert_file_path") fesl_client_port = int(readFromConfig("connection", "fesl_client_port")) fesl_server_port = int(readFromConfig("connection", "fesl_server_port")) theater_client_port = int( readFromConfig("connection", "theater_client_port")) theater_server_port = int( readFromConfig("connection", "theater_server_port")) http_server_port = int(readFromConfig("connection", "http_server_port")) https_server_port = int( readFromConfig("connection", "https_server_port")) except: Log("Init", "\033[37;41m").new_message( "Fatal Error!\n" "Failed to load certain values in the config.ini, be sure that EVERY " "option has a valid value and try it again.") sys.exit(2) try: Database(True) except Exception as DatabaseError: Log("Database", "\033[37;1;41m").new_message( "Fatal Error! Cannot initialize database!\n\n" "Additional error info:\n" + str(DatabaseError), 0) sys.exit(3) try: SSLContext = ssl.DefaultOpenSSLContextFactory(ssl_key, ssl_cert) Log("Init", "\033[37m").new_message("Successfully created SSL Context!", 2) except Exception as SSLErr: Log("Init", "\033[37;41m").new_message( "Fatal Error!\n" "Failed to create SSL Context!\n" "Make sure that you installed all required modules using\n" "`pip install -r requirements.txt`\n" "Also check if you specified correct SSL Cert and/or key in " "`config.ini`\n " "Additional error info:\n" + str(SSLErr), 0) sys.exit(4) try: factory = Factory() factory.protocol = FeslClient.HANDLER reactor.listenSSL(fesl_client_port, factory, SSLContext) Log("FeslClient", "\033[33;1m").new_message( "Created TCP Socket (now listening on port " + str(fesl_client_port) + ")", 1) except Exception as BindError: Log("Init", "\033[33;1;41m").new_message( "Fatal Error! Cannot bind socket to port: " + str(fesl_client_port) + "\n" "Make sure that this port aren't used by another program!\n\n" "Additional error info:\n" + str(BindError), 0) sys.exit(5) try: factory = Factory() factory.protocol = FeslServer.HANDLER reactor.listenSSL(fesl_server_port, factory, SSLContext) Log("FeslServer", "\033[32;1m").new_message( "Created TCP Socket (now listening on port " + str(fesl_server_port) + ")", 1) except Exception as BindError: Log("Init", "\033[33;1;41m").new_message( "Fatal Error! Cannot bind socket to port: " + str(fesl_server_port) + "\n" "Make sure that this port aren't used by another program!\n\n" "Additional error info:\n" + str(BindError), 0) sys.exit(5) try: factoryTCP = Factory() factoryTCP.protocol = TheaterClient.TCPHandler reactor.listenTCP(theater_client_port, factoryTCP) Log("TheaterClient", "\033[35;1m").new_message( "Created TCP Socket (now listening on port " + str(theater_client_port) + ")", 1) reactor.listenUDP(theater_client_port, TheaterClient.UDPHandler()) Log("TheaterClient", "\033[35;1m").new_message( "Created UDP Socket (now listening on port " + str(theater_client_port) + ")", 1) except Exception as BindError: Log("Init", "\033[35;1;41m").new_message( "Fatal Error! Cannot bind socket to port: " + str(theater_client_port) + "\n" "Make sure that this port aren't used by another program!\n\n" "Additional error info:\n" + str(BindError), 0) sys.exit(5) try: factoryTCP = Factory() factoryTCP.protocol = TheaterServer.TCPHandler reactor.listenTCP(theater_server_port, factoryTCP) Log("TheaterServer", "\033[36;1m").new_message( "Created TCP Socket (now listening on port " + str(theater_server_port) + ")", 1) reactor.listenUDP(theater_server_port, TheaterServer.UDPHandler()) Log("TheaterServer", "\033[36;1m").new_message( "Created UDP Socket (now listening on port " + str(theater_server_port) + ")", 1) except Exception as BindError: Log("Init", "\033[35;1;41m").new_message( "Fatal Error! Cannot bind socket to port: " + str(theater_server_port) + "\n" "Make sure that this port aren't used by another program!\n\n" "Additional error info:\n" + str(BindError), 0) sys.exit(5) try: site = Site(WebServer.Handler()) reactor.listenTCP(http_server_port, site) Log("WebServer", "\033[36m").new_message( "Created TCP Socket (now listening on port " + str(http_server_port) + ")", 1) except Exception as BindError: Log("Init", "\033[35;1;41m").new_message( "Fatal Error! Cannot bind socket to port: " + str(http_server_port) + "\n" "Make sure that this port aren't used by another program!\n\n" "Additional error info:\n" + str(BindError), 0) sys.exit(5) try: site = Site(SecureWebServer.Handler()) reactor.listenSSL(https_server_port, site, SSLContext) Log("WebServer", "\033[36m").new_message( "Created TCP Socket (now listening on port " + str(https_server_port) + ")", 1) except Exception as BindError: Log("Init", "\033[35;1;41m").new_message( "Fatal Error! Cannot bind socket to port: " + str(https_server_port) + "\n" "Make sure that this port aren't used by another program!\n\n" "Additional error info:\n" + str(BindError), 0) sys.exit(5) Log("Init", "\033[37m").new_message( "Finished initialization! Ready for receiving incoming connections...", 0) reactor.run()