Example #1
0
def prepare(paramsDictionary, db, lock):
    logger.logInfo(NAME + "Prepare")
    try:
        socket = paramsDictionary["SOCKET"]
        command = socket.receive_message()
        paramsDictionary["COMMAND"] = command
        logger.logInfo(NAME + "Wezel otrzymal komende do wykonania " + command)
        if db.initConnection() == ERROR:
            logger.logError(NAME + "Nie moge polaczyc sie z baza danych")
            socket.send_message(ABORT)
            if lock.is_locked:
                lock.release()
            return
        lock.acquire()
        if lock.is_locked == False:
            logger.logError(NAME + "Nie moge zalozyc blokady")
            socket.send_message(ABORT)
            lock.release()
            return
        if db.executeQueryWithoutTransaction(command) != OK_CODE:
            socket.send_message(ABORT)
            logger.logError(NAME + "Nie moge wykonac polecenia")
            lock.release()
            return
        logger.logImportant(NAME + "Uczestnik jest gotowy do zaakceptowania operacji")
        socket.send_message(READY_COMMIT)
        return
    except Exception, e:
        logger.logError(NAME + e.message)
        if lock.is_locked:
            lock.release()
Example #2
0
def execute(paramsDictionary, message):
	remoteAddress = paramsDictionary["CLIENT_ADDRESS"]

	logger.logImportant(NAME+ "Wykryto probe nawiazania polaczenia od " + remoteAddress)
	file = FileProcessor(paramsDictionary["HOME_PATH"]+"ServerSide/config/addresses.conf")
	paramsDictionary["CONNECTION_MODE"] = False
	try:
		file.lockFile()
		addresses = file.readFile()
		for key in addresses:
			logger.logInfo(NAME+ "klucz %s", key)
			logger.logInfo(NAME+ "adres serwera zdalnego %s", remoteAddress)
			logger.logInfo(NAME+ "addresses[key] %s", addresses[key])
			if key == remoteAddress:
				logger.logInfo(NAME+ "znalazl dopasowanie")
				if( addresses[key] != 'T' ):
					logger.logInfo(NAME+ "proba nawiazania polaczenia z nowododanym serwerem")
					paramsDictionary["CONNECTION"] = Connection(paramsDictionary["HOME_PATH"]+"ServerSide/config/ping_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.logImportant(NAME+ "Polaczenie z " + remoteAddress + " nawiazane")
						addresses[key] = 'T'
						file.writeToFile(addresses)
						paramsDictionary["CONNECTION_MODE"] = True
				break
	except Exception, e:
		logger.logError(NAME + e.message)
		file.unlockFile()
Example #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"]

	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
Example #4
0
def globalAbort(paramsDictionary, db, lock):
    try:
        socket = paramsDictionary["SOCKET"]
        logger.logImportant(NAME + "Orzymano polecenie GLOBAL_ABORT")
        db.executeQueryWithoutTransaction(ROLLBACK)
        ticket = socket.receive_message()
        TicketUtil.skipTicket(ticket)
        socket.send_message(OK)
        if lock.is_locked:
            lock.release()
    except Exception, e:
        logger.logError(NAME + e.message)
        if lock.is_locked:
            lock.release()
Example #5
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
Example #6
0
def authConnectionMode(paramsDictionary):
	remoteAddress = paramsDictionary["CLIENT_ADDRESS"]
	logger.logInfo(NAME + "Uwierzytelnianie serwera " + remoteAddress)
	socket = paramsDictionary["SOCKET"]
	homePath = paramsDictionary["HOME_PATH"]
	logger.logInfo(NAME + "przed wyslaniem zapytania o haslo")
	socket.send_message(GET_PASSWORD)
	logger.logInfo(NAME + "Oczekiwanie na haslo od serwera")
	password = socket.receive_message()

	logger.logInfo(NAME + "Otrzymano haslo od " + remoteAddress)
	processor = FileProcessor(homePath+"ServerSide/config/pass/all_to_me.pass")
	passwords = processor.readFile()
	logger.logInfo(NAME + "spodziewane haslo " + passwords[remoteAddress] + " otrzymano " + password )
	if(passwords[remoteAddress] == password ):
		logger.logImportant(NAME + "Serwer " + remoteAddress + " uwierzytelniony")

		socket.send_message(PASSWORD_OK)

		logger.logInfo(NAME + "czekam na zapytanie o haslo")

		message = socket.receive_message()

		if  message == GET_PASSWORD:
			processor = FileProcessor(homePath+"ServerSide/config/pass/me_to_all.pass")
			passwords = processor.readFile()
			logger.logInfo(NAME + "Wysylam swoje haslo do " + remoteAddress)

			socket.send_message(passwords[remoteAddress])

			message = socket.receive_message()

		if message == PASSWORD_OK:
			logger.logInfo(NAME + "Haslo zaakceptowane przez " + remoteAddress)
			pass
		else:
			logger.logError(NAME + "Haslo pzeslane przez " + remoteAddress + " niezgodne, zamykanie polaczenia")
			paramsDictionary["CONNECTION"]._socket.close()
	else:
		logger.logError(NAME + "Haslo pzeslane przez " + remoteAddress + " niezgodne, zamykanie polaczenia")
		socket.send_message(WRONG_PASSWORD)
		paramsDictionary["CONNECTION"]._socket.close()
Example #7
0
def globalCommit(paramsDictionary, db, lock):
    try:
        socket = paramsDictionary["SOCKET"]
        servers = socket.receive_message()
        logger.logInfo(NAME + "Mam serwery " + servers)
        servers = servers.split(":")
        servers.append(paramsDictionary["CLIENT_ADDRESS"])
        logger.logImportant(NAME + "Uczestnik zaakceptowal operacje")
        db.executeQueryWithoutTransaction(generateInsertToDataVersions(paramsDictionary))
        db.executeQueryWithoutTransaction(COMMIT)
        insertNewDataVersions(servers, paramsDictionary)
        ticket = socket.receive_message()
        TicketUtil.setNextExpectedTicket(ticket)
        socket.send_message(OK)
        if lock.is_locked:
            lock.release()
    except Exception, e:
        logger.logError(NAME + e.message)
        if lock.is_locked:
            lock.release()
Example #8
0
def execute(paramsDictionary, message):
	remoteAddress = paramsDictionary["CLIENT_ADDRESS"]
	logger.logImportant(NAME+ "Wykryto odlaczenie serwera " + remoteAddress)
	file = FileProcessor(paramsDictionary["HOME_PATH"]+"ServerSide/config/addresses.conf")
	if( paramsDictionary["CONNECTION_MODE"] == True ):
		paramsDictionary["CONNECTION"]._socket.close()
	logger.logInfo(NAME+ "Proba zapisu do pliku adresowego")
	writeOk = False
	while writeOk != True:
		try:
			file.lockFile()
			logger.logInfo(NAME + "Plik adresowy zablokowany")
			writeOk = True
			addresses = file.readFile()
			addresses[paramsDictionary["CLIENT_ADDRESS"]] = 'F'
			file.writeToFile(addresses)
			file.unlockFile()
			logger.logInfo(NAME+ "Plik adresowy zaktualizowany")
			if file.lock.is_locked:
				file.unlockFile()
		except Exception, e:
			logger.logError(NAME + "Nie mozna zablokowac pliku adresowego, czekanie bedzie wznowione")
Example #9
0
		logger.logError(NAME + e.message)
		file.unlockFile()
		return apache.HTTP_OK

	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.logImportant(NAME+ "Polaczenie z " + paramsDictionary["CLIENT_ADDRESS"] + " nawiazane")
	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 cyklicznych, zamykanie polaczenia")
			logger.logError(NAME + e.message)
			for singleModule in modules["HOST_DC"]:
				singleModule.execute(paramsDictionary, None)
			return apache.HTTP_OK
Example #10
0
			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"])
		cursor = db.cursor()
		logger.logImportant(NAME + "Rozpoczynanie uspojniania danych")
		while version != END_MESSAGE:
			command = connection.get_message()
			logger.logImportant(NAME + "Wykonuje: " + command )
			cursor.execute(command)

			command = command.replace('\'', '\\\'')
			logger.logInfo(NAME + "Komenda po transformacji " + command)
			insert = "INSERT INTO " +  dbParamsDict["versionsTableName"] + " VALUES(" + str(version) + ",\'" + command + "\')"

			logger.logInfo(NAME + "Wykonuje: " + insert)
			cursor.execute(insert)
			logger.logInfo(NAME + "wykonano inserta")
			currentVersion = version
			version = connection.get_message()
		logger.logInfo(NAME + "zamykanie polaczenia z baza danych")