def web_socket_transfer_data(request):

    logger.logInfo(NAME + "Server dostal zgloszenie")

    paramsDictionary = {}
    paramsDictionary["SOCKET"] = request.ws_stream
    paramsDictionary["HOME_PATH"] = request.get_options()["PROJECT_LOCATION"]
    methodMapping = {PREPARE: prepare, GLOBAL_COMMIT: globalCommit, GLOBAL_ABORT: globalAbort}
    configReader = ConfigurationReader(
        paramsDictionary["HOME_PATH"] + "ServerSide/config/database_config/database.conf"
    )
    dbParamsDict = configReader.readConfigFile()
    paramsDictionary["DB_PARAMS"] = dbParamsDict
    paramsDictionary["CLIENT_ADDRESS"] = request.connection.remote_ip

    login = request.ws_stream.receive_message()

    password = request.ws_stream.receive_message()

    db = DatabaseConnector(login, password, dbParamsDict["DATABASE"], dbParamsDict["HOST"])

    command = request.ws_stream.receive_message()
    lockFilePath = paramsDictionary["HOME_PATH"] + "ServerSide/config/database_config/dbLock.dat"
    lock = FileLock(lockFilePath, 2, 0.05)
    try:
        while command != EXIT:
            methodMapping[command](paramsDictionary, db, lock)
            command = request.ws_stream.receive_message()
        if lock.is_locked:
            lock.release()
    except Exception, e:
        logger.logError(NAME + e.message)
        if lock.is_locked:
            lock.release()
        return apache.HTTP_OK
Exemple #2
0
def web_socket_transfer_data(request):

	logger.logInfo(NAME+ "Server dostal zgloszenie")

	paramsDictionary = {}
	paramsDictionary["REQUEST"] = request
	paramsDictionary["CLIENT_ADDRESS"]= request.connection.remote_ip
	paramsDictionary["SOCKET"] = request.ws_stream
	paramsDictionary["HOME_PATH"] = request.get_options()["PROJECT_LOCATION"]

	configReader = ConfigurationReader(paramsDictionary["HOME_PATH"]+"ServerSide/config/runParams.conf")
	paramsDictionary["CONFIG_PARAMS"] = configReader.readConfigFile()

	paramsDictionary["SOCKET"].receive_message()

	if paramsDictionary["CLIENT_ADDRESS"] == PARENT_MACHINE_ADDRESS:
		paramsDictionary["SOCKET"].send_message(EXIT)
		return apache.HTTP_OK

	logger.logImportant(NAME+ "Serwer " + paramsDictionary["CLIENT_ADDRESS"] + " probuje nawiazac polaczenie")

	remoteAddress = paramsDictionary["CLIENT_ADDRESS"]

	file = FileProcessor(paramsDictionary["HOME_PATH"]+"ServerSide/config/addresses.conf")
	paramsDictionary["CONNECTION_MODE"] = True
	try:
		file.lockFile()
		addresses = file.readFile()

		for key in addresses:
			logger.logInfo(NAME+ "klucz %s " + key)
			logger.logInfo(NAME+ "adres zdalnej maszyny %s " + remoteAddress)
			logger.logInfo(NAME+ "addresses[key] %s " + addresses[key])
			if key == remoteAddress:
				if addresses[key] == 'F':
					logger.logInfo(NAME+ "znalazl dopasowanie")
					paramsDictionary["SOCKET"].send_message(PONG)
					logger.logInfo(NAME+ "Server odpowiedzial PONG do " + paramsDictionary["CLIENT_ADDRESS"])
					logger.logInfo(NAME+ "proba nawiazania polaczenia z nowododanym serwerem")
					paramsDictionary["CONNECTION"] = Connection(paramsDictionary["HOME_PATH"]+"ServerSide/config/connection_config.conf")
					if paramsDictionary["CONNECTION"].connect(remoteAddress, 80, RESOURCE) != ERROR:
						paramsDictionary["SOCKET"] = paramsDictionary["CONNECTION"]._stream
						paramsDictionary["SOCKET"].send_message(PING)
						paramsDictionary["SOCKET"].receive_message()
						logger.logInfo(NAME+ "nawiazywanie polaczenia z nowododanym serwerem")
						addresses[key] = 'T'
						file.writeToFile(addresses)
						break
				else:
					paramsDictionary["SOCKET"].send_message(EXIT)
					logger.logInfo(NAME+ "Server odpowiedzial EXIT do " + paramsDictionary["CLIENT_ADDRESS"])
					file.unlockFile()
					return apache.HTTP_OK
		file.unlockFile()
	except Exception, e:
		logger.logError(NAME + e.message)
		file.unlockFile()
		return apache.HTTP_OK
Exemple #3
0
def web_socket_transfer_data(request):

	logger.logInfo(NAME+ "Server dostal zgloszenie")

	paramsDictionary = {}
	paramsDictionary["REQUEST"] = request
	paramsDictionary["CLIENT_ADDRESS"]= request.connection.remote_ip
	paramsDictionary["SOCKET"] = request.ws_stream
	paramsDictionary["HOME_PATH"] = request.get_options()["PROJECT_LOCATION"]
	paramsDictionary["CONNECTION_MODE"] = False

	configReader = ConfigurationReader(paramsDictionary["HOME_PATH"]+"ServerSide/config/runParams.conf")
	paramsDictionary["CONFIG_PARAMS"] = configReader.readConfigFile()

	paramsDictionary["SOCKET"].receive_message()
	logger.logInfo(NAME+ "Server otrzymal ping od " + paramsDictionary["CLIENT_ADDRESS"])
	paramsDictionary["SOCKET"].send_message(PONG)
	logger.logInfo(NAME+ "Server odpowiedzial do " + paramsDictionary["CLIENT_ADDRESS"])

	loader = ModulesLoader()
	modules = loader.loadModules(paramsDictionary["HOME_PATH"]+"ServerSide/config/modules.ext")
	paramsDictionary["MODULES"] = modules
	logger.logInfo(NAME+ "Serwer wczytal moduly")

	if modules.has_key("NEW_CONN"):
		for singleModule in modules["NEW_CONN"]:
			singleModule.execute(paramsDictionary, None)

	paramsDictionary["QUEUE"] = Queue.Queue(0)

	logger.logInfo(NAME+ "Serwer rozpoczyna pingowanie")
	listener = ListenSocket(paramsDictionary, modules)
	listener.setDaemon(True)
	listener.start()
	while(True):
		try:
			for singleModule in modules["PERIODIC"]:
				singleModule.execute(paramsDictionary, None)
			time.sleep(int(paramsDictionary["CONFIG_PARAMS"]["singlePeriod"]))
		except Exception, e:
			logger.logError(NAME+ "ERROR w modulach okresowych, zamykanie polaczenia")
			logger.logError(NAME + e.message)
			for singleModule in modules["HOST_DC"]:
				singleModule.execute(paramsDictionary, None)
			logger.logInfo(NAME + "Polaczenie zakonczone")
			return apache.HTTP_OK



			#1000100100000000 - Ping frame in binary with no data
			#1000101000000000 - Pong frame in binary with no data
Exemple #4
0
def web_socket_transfer_data(request):

	logger.logInfo(NAME+ "Server dostal zgloszenie od klienta")

	paramsDictionary = {}
	paramsDictionary["REQUEST"] = request
	paramsDictionary["CLIENT_ADDRESS"]= request.connection.remote_ip
	paramsDictionary["SOCKET"] = request.ws_stream
	paramsDictionary["HOME_PATH"] = request.get_options()["PROJECT_LOCATION"]

	configReader = ConfigurationReader(paramsDictionary["HOME_PATH"]+"ServerSide/config/database_config/database.conf")
	dbParamsDict = configReader.readConfigFile()
	paramsDictionary["DB_PARAMS"] = dbParamsDict

	login = request.ws_stream.receive_message()
	password = request.ws_stream.receive_message()
	paramsDictionary["LOGIN"] = login
	paramsDictionary["PASSWORD"] = password


	db = DatabaseConnector(login, password, dbParamsDict["DATABASE"], dbParamsDict["HOST"])

	if db.initConnection() == ERROR:
		request.ws_stream.send_message("Invalid username or password")
		logger.logError(NAME + "Uzytkownik podal niewlasciwy login lub haslo, zamykanie polaczenia")
		return apache.HTTP_OK
	logger.logInfo(NAME + "polaczenie z baza nawiazane")
	lockFilePath = paramsDictionary["HOME_PATH"]+"ServerSide/config/database_config/dbLock.dat"
	lock = FileLock(lockFilePath)
	while(True):
		try:
			query = request.ws_stream.receive_message()
			if query == CLOSING_MESSAGE:
				db.closeConnection()
				return apache.HTTP_OK
			else:
				logger.logImportant(NAME + "Klient chce wykonac zapytanie " + query)
				lock.acquire()
				output = db.executeSQL(query, paramsDictionary)
				lock.release()
				logger.logImportant(NAME + str(output))
				request.ws_stream.send_message(str(output))

		except Exception, e:
			logger.logError(NAME + "ERROR w trakcie odbierania wiadomosci " + e.message)
			db.closeConnection()
			if lock.is_locked:
				lock.release()
			return apache.HTTP_OK
Exemple #5
0
def web_socket_transfer_data(request):

	logger.logInfo(NAME+ "Server dostal zgloszenie")

	paramsDictionary = {}
	socket = request.ws_stream
	paramsDictionary["HOME_PATH"] = request.get_options()["PROJECT_LOCATION"]

	configReader = ConfigurationReader(paramsDictionary["HOME_PATH"]+"ServerSide/config/database_config/database.conf")
	dbParamsDict = configReader.readConfigFile()

	login = dbParamsDict["DEFAULT_LOGIN"]
	password = dbParamsDict["DEFAULT_PASSWORD"]

	clientVersion = socket.receive_message()
	logger.logInfo(NAME + "client version " + clientVersion)
	lockFilePath = paramsDictionary["HOME_PATH"]+"ServerSide/config/database_config/dbLock.dat"
	lock = FileLock(lockFilePath,3,.05)
	try:
		lock.acquire()
	except Exception, e:
		logger.logError(NAME + e.message)
		socket.send_message(LOCK_ERROR)
		return apache.HTTP_OK
Exemple #6
0
def web_socket_transfer_data(request):
	paramsDictionary = {}
	paramsDictionary["REQUEST"] = request
	paramsDictionary["SOCKET"] = request.ws_stream
	paramsDictionary["HOME_PATH"] = request.get_options()["PROJECT_LOCATION"]

	loader = ModulesLoader()
	modules = loader.loadModules(paramsDictionary["HOME_PATH"]+"ServerSide/config/modules.ext")
	paramsDictionary["MODULES"] = modules
	logger.logInfo(NAME+ "Serwer wczytal moduly")

	configReader = ConfigurationReader(paramsDictionary["HOME_PATH"]+"ServerSide/config/runParams.conf")
	runParams = configReader.readConfigFile()

	if modules.has_key("BEFORE_CONNECT"):
		for singleModule in modules["BEFORE_CONNECT"]:
			singleModule.execute(paramsDictionary, None)

	firstTimeIteration = True
	file = FileProcessor(paramsDictionary["HOME_PATH"]+"ServerSide/config/addresses.conf")

	while True:
		if modules.has_key("BEFORE_CONNECT_PERIODIC"):
			for singleModule in modules["BEFORE_CONNECT_PERIODIC"]:
				singleModule.execute(paramsDictionary, None)
		try:
			file.lockFile()
			addresses = file.readFile()
			file.unlockFile()
			for key in addresses:
				try:
					file.lockFile()
					tempAddresses = file.readFile()
					if( tempAddresses[key] == 'F' ):
						connection = Connection(request.get_options()["PROJECT_LOCATION"]+"ServerSide/config/connection_config.conf")
						if( connection.connect(key,80, RESOURCE) != ERROR ):
							logger.logInfo(NAME+ "Polaczenie z " + key + " nawiazane")
							connection.send_message(PING)
							logger.logInfo(NAME+ "Wysylanie pingu z metody startowej")
							expectedPong = connection.get_message()
							logger.logInfo(NAME + "Oczekiwano PONG, Otrzymano " + expectedPong)
							if expectedPong == PONG:
								logger.logInfo(NAME+ "Metoda startowa otrzymala odpowiedz, zamykanie polaczenia")
								connection._do_closing_handshake()
								logger.logInfo(NAME + "########### polaczenie zakonczone, zapisywanie pliku adresowego")
								tempAddresses[key] = 'T'
								file.writeToFile(tempAddresses)
								logger.logInfo(NAME + "Zapisano zmiany do pliku adresowego")
							else:
								logger.logError(NAME+ "Serwer " + key + " nie odpowiedzial na PING, zrywanie polaczenia")
						else:
							logger.logError(NAME+ "Nie moge polaczyc sie z " + key)
					file.unlockFile()
				except Exception, e:
					logger.logError(NAME + e.message)
					file.unlockFile()
		except Exception, e:
			logger.logError(NAME + e.message)
			file.unlockFile()
			continue
		file.unlockFile()

		if firstTimeIteration == True:
			firstTimeIteration = False
			if modules.has_key("AFTER_CONNECT"):
				for singleModule in modules["AFTER_CONNECT"]:
					singleModule.execute(paramsDictionary, None)

		if modules.has_key("AFTER_CONNECT_PERIODIC"):
			for singleModule in modules["AFTER_CONNECT_PERIODIC"]:
				singleModule.execute(paramsDictionary, None)

		logger.logInfo(NAME+ "Serwer rozpoczyna czeanie na kolejna ture sprawdzania")
		time.sleep(int(runParams["ConnectionCheckPeriod"]))
		logger.logInfo(NAME+ "Serwer wznawia sprawdzanie")
Exemple #7
0
	def __init__(self, configFile):
		self.configFile = configFile
		configReader = ConfigurationReader(self.configFile)
		self.dictionary=configReader.readConfigFile()
		self._socket = None
		self.list=[]
Exemple #8
0
	try:
		if len(addressesToConnect) > 0:
			connection = Connection(homePath + "ServerSide/config/connection_config.conf" )
			for addressToConnect in addressesToConnect:
				if connection.connect(addressToConnect, 80, RESOURCE) != ERROR:
					connection.send_message(dataVersions[LOCALHOST_NAME])
					version = connection.get_message()
					if version != LOCK_ERROR:
						logger.logInfo(NAME + "Polaczony z " + addressToConnect)
						break

			if version == LOCK_ERROR:
				logger.logError(NAME + "Nie mozna zaktualizowac serwera")
				return

			configReader = ConfigurationReader(paramsDictionary["HOME_PATH"]+"ServerSide/config/database_config/database.conf")
			dbParamsDict = configReader.readConfigFile()
			paramsDictionary["DB_PARAMS"] = dbParamsDict

			login = dbParamsDict["DEFAULT_LOGIN"]
			password = dbParamsDict["DEFAULT_PASSWORD"]
		else:
			logger.logError(NAME + "Brak serwerow, od ktorych mozna pobrac aktualne dane")
			return
	except Exception, e:
		logger.logError(NAME + e.message)
		if lock.is_locked:
			lock.release()

	try:
		db = MySQLdb.connect(dbParamsDict["HOST"], login, password, dbParamsDict["DATABASE"])