예제 #1
0
 def validate(pkt, protocol):
     if not isinstance(pkt.clientversion, (int, unicode)):
         raise NetworkException("Invalid datatype: clientversion")
     if pkt.mapname is not None and not isinstance(pkt.mapname, unicode):
         raise NetworkException("Invalid datatype: mapname")
     if pkt.maxplayers is not None and not isinstance(pkt.maxplayers, int):
         raise NetworkException("Invalid datatype: maxplayers")
예제 #2
0
    def validate(pkt, protocol):
        if not isinstance(pkt.clientversion, unicode):
            raise NetworkException("Invalid datatype: clientversion")
        if not pkt.clientversion:
            raise SoftNetworkException("Invalid client version")

        if protocol == 0:
            pkt.clientid = uuid.uuid4().hex
        if not isinstance(pkt.clientid, str):
            raise NetworkException("Invalid datatype: clientid")
        if len(pkt.clientid) != 32:
            raise SoftNetworkException("Invalid unique player ID")

        if not isinstance(pkt.playername, unicode):
            raise NetworkException("Invalid datatype: playername")
        if not pkt.playername:
            raise SoftNetworkException("Your player name cannot be empty")

        if protocol == 0:
            # hardcoded playercolor
            pkt.playercolor = 1
        else:
            if not isinstance(pkt.playercolor, int):
                raise NetworkException("Invalid datatype: playercolor")
            if pkt.playercolor < 1:
                raise SoftNetworkException("Your color is invalid")

        if not isinstance(pkt.name, unicode):
            raise NetworkException("Invalid datatype: name")
        if not pkt.name:
            pkt.name = u"Unnamed Game"

        if not isinstance(pkt.mapname, unicode):
            raise NetworkException("Invalid datatype: mapname")
        if not pkt.mapname:
            raise SoftNetworkException(
                "You can't run a game with an empty mapname")

        if not isinstance(pkt.maxplayers, int):
            raise NetworkException("Invalid datatype: maxplayers")

        if protocol == 0:
            if pkt.load is None:
                pkt.maphash = ""
            elif isinstance(pkt.load, str):
                pkt.maphash = pkt.load
        if not isinstance(pkt.maphash, str):
            raise NetworkException("Invalid datatype: maphash")

        if not isinstance(pkt.password, str):
            raise NetworkException("Invalid datatype: password")
예제 #3
0
def unserialize(data, validate=False, protocol=0):
	mypacket = SafeUnpickler.loads(data)
	if validate:
		if not inspect.isfunction(mypacket.validate):
			raise NetworkException("Attempt to override packet.validate()")
		if mypacket.__class__.maxpacketsize > 0 and len(data) > mypacket.__class__.maxpacketsize:
			raise PacketTooLarge("packet={}, length={:d})".format(mypacket.__class__.__name__, len(data)))
		mypacket.__class__.validate(mypacket, protocol)
	return mypacket
예제 #4
0
    def validate(pkt, protocol):
        if not isinstance(pkt.uuid, str):
            raise NetworkException("Invalid datatype: uuid")
        if len(pkt.uuid) != 32:
            raise SoftNetworkException("Invalid game UUID")

        if not isinstance(pkt.clientversion, unicode):
            raise NetworkException("Invalid datatype: clientversion")
        if not len(pkt.clientversion):
            raise SoftNetworkException("Invalid client version")

        if protocol == 0:
            pkt.clientid = uuid.uuid4().hex
        if not isinstance(pkt.clientid, str):
            raise NetworkException("Invalid datatype: clientid")
        if len(pkt.clientid) != 32:
            raise SoftNetworkException("Invalid unique player ID")

        if not isinstance(pkt.playername, unicode):
            raise NetworkException("Invalid datatype: playername")
        if not len(pkt.playername):
            raise SoftNetworkException("Your player name cannot be empty")

        if protocol == 0:
            # assign playercolor in packet handler
            pkt.playercolor = None
        else:
            if not isinstance(pkt.playercolor, int):
                raise NetworkException("Invalid datatype: playercolor")
            if pkt.playercolor < 1:
                raise SoftNetworkException("Your color is invalid")

        if not isinstance(pkt.password, str):
            raise NetworkException("Invalid datatype: password")

        if not isinstance(pkt.fetch, bool):
            raise NetworkException("Invalid datatype: fetch")
예제 #5
0
 def validate(pkt, protocol):
     if not isinstance(pkt.data, str):
         raise NetworkException("Invalid datatype: data")
예제 #6
0
 def validate(pkt, protocol):
     if hasattr(pkt, 'lang'):
         if not isinstance(pkt.lang, str):
             raise NetworkException("Invalid datatype: lang")
         if not len(pkt.lang):
             raise SoftNetworkException("Invalid language property")
예제 #7
0
 def validate(pkt, protocol):
     if not isinstance(pkt.kicksid, str):
         raise NetworkException("Invalid datatype: player sid")
     if len(pkt.kicksid) != 32:
         raise SoftNetworkException("Invalid player sid")
예제 #8
0
 def validate(pkt, protocol):
     if not isinstance(pkt.playercolor, int):
         raise NetworkException("Invalid datatype: playercolor")
     if pkt.playercolor < 1:
         raise SoftNetworkException("Your color is invalid")
예제 #9
0
 def validate(pkt, protocol):
     if not isinstance(pkt.playername, unicode):
         raise NetworkException("Invalid datatype: playername")
     if not len(pkt.playername):
         raise SoftNetworkException("You must have a non empty name")
예제 #10
0
 def validate(pkt, protocol):
     if not isinstance(pkt.chatmsg, unicode):
         raise NetworkException("Invalid datatype: chatmsg")
     if not len(pkt.chatmsg):
         raise SoftNetworkException("Chat message cannot be empty")
예제 #11
0
	def validate(pkt, protocol):
		if not isinstance(pkt.errorstr, str):
			raise NetworkException("Invalid datatype: errorstr")