def user_info_reply(self, msg): """ Peer code: 16 """ log.add_msg_contents(msg) username = msg.init.target_user self.userinfo.user_info_reply(username, msg)
def get_user_status(self, msg, log_contents=True): """ Server code: 7 """ if log_contents: log.add_msg_contents(msg) if msg.status is None: msg.status = -1 self.user_statuses[msg.user] = msg.status if msg.privileged == 1: self.transfers.add_to_privileged(msg.user) elif msg.privileged == 0: self.transfers.remove_from_privileged(msg.user) self.interests.get_user_status(msg) self.transfers.get_user_status(msg) self.userbrowse.get_user_status(msg) self.userinfo.get_user_status(msg) self.userlist.get_user_status(msg) self.privatechats.get_user_status(msg) self.chatrooms.get_user_status(msg) self.pluginhandler.user_status_notification(msg.user, msg.status, bool(msg.privileged))
def get_peer_address(self, msg): """ Server code: 3 """ log.add_msg_contents(msg) user = msg.user # User seems to be offline, don't update IP if msg.ip_address != "0.0.0.0": # If the IP address changed, make sure our IP block/ignore list reflects this self.network_filter.update_saved_user_ip_filters(user) if self.network_filter.block_unblock_user_ip_callback(user): return if self.network_filter.ignore_unignore_user_ip_callback(user): return country_code = self.geoip.get_country_code(msg.ip_address) self.chatrooms.set_user_country(user, country_code) self.userinfo.set_user_country(user, country_code) self.userlist.set_user_country(user, country_code) # From this point on all paths should call # self.pluginhandler.user_resolve_notification precisely once self.privatechats.private_message_queue_process(user) if user not in self.ip_requested: self.pluginhandler.user_resolve_notification( user, msg.ip_address, msg.port) return self.ip_requested.remove(user) self.pluginhandler.user_resolve_notification(user, msg.ip_address, msg.port, country_code) if country_code: country = " (%(cc)s / %(country)s)" % { 'cc': country_code, 'country': self.geoip.country_code_to_name(country_code) } else: country = "" if msg.ip_address == "0.0.0.0": log.add( _("Cannot retrieve the IP of user %s, since this user is offline" ), user) return log.add( _("IP address of user %(user)s is %(ip)s, port %(port)i%(country)s" ), { 'user': user, 'ip': msg.ip_address, 'port': msg.port, 'country': country })
def message_user(self, msg): """ Server code: 22 """ log.add_msg_contents(msg) log.add_chat(_("Private message from user '%(user)s': %(message)s"), { "user": msg.user, "message": msg.msg }) self.privatechats.message_user(msg)
def connect_to_peer(self, msg): """ Server code: 18 """ log.add_msg_contents(msg) if msg.privileged == 1: self.transfers.add_to_privileged(msg.user) elif msg.privileged == 0: self.transfers.remove_from_privileged(msg.user)
def change_password(msg): """ Server code: 142 """ log.add_msg_contents(msg) password = msg.password config.sections["server"]["passw"] = password config.write_configuration() log.add_important_info( _("Your password has been changed. Password is %s"), password)
def search_request(self, msg): """ Server code: 26, 42 and 120 """ log.add_msg_contents(msg) self.search.process_search_request(msg.searchterm, msg.user, msg.token, direct=True) self.pluginhandler.search_request_notification(msg.searchterm, msg.user, msg.token)
def user_info_request(self, msg): """ Peer code: 15 """ log.add_msg_contents(msg) user = msg.init.target_user ip_address, _port = msg.init.addr request_time = time.time() if user in self.requested_info_times and request_time < self.requested_info_times[ user] + 0.4: # Ignoring request, because it's less than half a second since the # last one by this user return self.requested_info_times[user] = request_time if self.login_username != user: log.add(_("User %(user)s is reading your user info"), {'user': user}) status, reason = self.network_filter.check_user(user, ip_address) if not status: pic = None descr = self.ban_message % reason descr += "\n\n----------------------------------------------\n\n" descr += unescape(config.sections["userinfo"]["descr"]) else: try: userpic = config.sections["userinfo"]["pic"] with open(userpic, 'rb') as file_handle: pic = file_handle.read() except Exception: pic = None descr = unescape(config.sections["userinfo"]["descr"]) totalupl = self.transfers.get_total_uploads_allowed() queuesize = self.transfers.get_upload_queue_size() slotsavail = self.transfers.allow_new_uploads() if config.sections["transfers"]["remotedownloads"]: uploadallowed = config.sections["transfers"]["uploadallowed"] else: uploadallowed = 0 self.queue.append( slskmessages.UserInfoReply(msg.init, descr, pic, totalupl, queuesize, slotsavail, uploadallowed))
def say_chat_room(self, msg): """ Server code: 13 """ log.add_msg_contents(msg) log.add_chat( _("Chat message from user '%(user)s' in room '%(room)s': %(message)s" ), { "user": msg.user, "room": msg.room, "message": msg.msg }) self.chatrooms.say_chat_room(msg)
def add_user(self, msg): """ Server code: 5 """ log.add_msg_contents(msg) self.watched_users.add(msg.user) if msg.userexists and msg.status is None: # Legacy support (Soulfind server) self.queue.append(slskmessages.GetUserStatus(msg.user)) if msg.files is not None: self.get_user_stats(msg, log_contents=False)
def folder_contents_request(self, msg): """ Peer code: 36 """ log.add_msg_contents(msg) init = msg.init ip_address, _port = msg.init.addr username = msg.init.target_user checkuser, reason = self.network_filter.check_user( username, ip_address) if not checkuser: message = self.ban_message % reason self.privatechats.send_automatic_message(username, message) normalshares = self.shares.share_dbs.get("streams") buddyshares = self.shares.share_dbs.get("buddystreams") if checkuser == 1 and normalshares is not None: shares = normalshares elif checkuser == 2 and buddyshares is not None: shares = buddyshares else: shares = {} if checkuser: try: if msg.dir in shares: self.queue.append( slskmessages.FolderContentsResponse( init, msg.dir, shares[msg.dir])) return if msg.dir.rstrip('\\') in shares: self.queue.append( slskmessages.FolderContentsResponse( init, msg.dir, shares[msg.dir.rstrip('\\')])) return except Exception as error: log.add( _("Failed to fetch the shared folder %(folder)s: %(error)s" ), { "folder": msg.dir, "error": error }) self.queue.append( slskmessages.FolderContentsResponse(init, msg.dir, None))
def p_message_user(self, msg): """ Peer code: 22 """ log.add_msg_contents(msg) username = msg.init.target_user if username != msg.user: msg.msg = _( "(Warning: %(realuser)s is attempting to spoof %(fakeuser)s) " ) % { "realuser": username, "fakeuser": msg.user } + msg.msg msg.user = username self.privatechats.message_user(msg)
def login(self, msg): """ Server code: 1 """ log.add_msg_contents(msg) if msg.success: self.logged_in = True self.login_username = msg.username self.set_away_mode(config.sections["server"]["away"]) self.watch_user(msg.username) if msg.ip_address is not None: self.user_ip_address = msg.ip_address self.transfers.server_login() self.search.server_login() self.userbrowse.server_login() self.userinfo.server_login() self.userlist.server_login() self.privatechats.server_login() self.chatrooms.server_login() if self.ui_callback: self.ui_callback.server_login() if msg.banner: log.add(msg.banner) self.interests.server_login() self.shares.send_num_shared_folders_files() self.queue.append( slskmessages.PrivateRoomToggle( config.sections["server"]["private_chatrooms"])) self.pluginhandler.server_connect_notification() else: if msg.reason == "INVALIDPASS": self.ui_callback.invalid_password() return log.add_important_error( _("Unable to connect to the server. Reason: %s"), msg.reason)
def get_shared_file_list(self, msg): """ Peer code: 4 """ log.add_msg_contents(msg) user = msg.init.target_user request_time = time.time() if user in self.requested_share_times and request_time < self.requested_share_times[ user] + 0.4: # Ignoring request, because it's less than half a second since the # last one by this user return self.requested_share_times[user] = request_time log.add(_("User %(user)s is browsing your list of shared files"), {'user': user}) ip_address, _port = msg.init.addr checkuser, reason = self.network_filter.check_user(user, ip_address) if not checkuser: message = self.ban_message % reason self.privatechats.send_automatic_message(user, message) shares_list = None if checkuser == 1: # Send Normal Shares shares_list = self.shares.get_compressed_shares_message("normal") elif checkuser == 2: # Send Buddy Shares shares_list = self.shares.get_compressed_shares_message("buddy") if not shares_list: # Nyah, Nyah shares_list = slskmessages.SharedFileList(msg.init, {}) shares_list.init = msg.init self.queue.append(shares_list)
def get_user_stats(self, msg, log_contents=True): """ Server code: 36 """ if log_contents: log.add_msg_contents(msg) if msg.user == self.login_username: self.transfers.upload_speed = msg.avgspeed self.interests.get_user_stats(msg) self.userinfo.get_user_stats(msg) self.userlist.get_user_stats(msg) self.chatrooms.get_user_stats(msg) stats = { 'avgspeed': msg.avgspeed, 'uploadnum': msg.uploadnum, 'files': msg.files, 'dirs': msg.dirs, } self.pluginhandler.user_stats_notification(msg.user, stats)
def check_privileges(self, msg): """ Server code: 92 """ log.add_msg_contents(msg) mins = msg.seconds // 60 hours = mins // 60 days = hours // 24 if msg.seconds == 0: log.add( _("You have no privileges. Privileges are not required, but allow your downloads " "to be queued ahead of non-privileged users.")) else: log.add( _("%(days)i days, %(hours)i hours, %(minutes)i minutes, %(seconds)i seconds of " "download privileges left."), { 'days': days, 'hours': hours % 24, 'minutes': mins % 60, 'seconds': msg.seconds % 60 }) self.privileges_left = msg.seconds
def private_room_remove_operator(self, msg): """ Server code: 144 """ log.add_msg_contents(msg) self.chatrooms.private_room_remove_operator(msg)
def private_room_toggle(self, msg): """ Server code: 141 """ log.add_msg_contents(msg) self.chatrooms.private_room_toggle(msg)
def add_to_privileged(self, msg): """ Server code: 91 """ """ DEPRECATED """ log.add_msg_contents(msg) self.transfers.add_to_privileged(msg.user)
def private_room_disown(self, msg): """ Server code: 137 """ log.add_msg_contents(msg) self.chatrooms.private_room_disown(msg)
def private_room_removed(self, msg): """ Server code: 140 """ log.add_msg_contents(msg) self.chatrooms.private_room_removed(msg)
def private_room_users(self, msg): """ Server code: 133 """ log.add_msg_contents(msg) self.chatrooms.private_room_users(msg)
def private_room_remove_user(self, msg): """ Server code: 135 """ log.add_msg_contents(msg) self.chatrooms.private_room_remove_user(msg)
def room_ticker_add(self, msg): """ Server code: 114 """ log.add_msg_contents(msg) self.chatrooms.ticker_add(msg)
def room_ticker_remove(self, msg): """ Server code: 115 """ log.add_msg_contents(msg) self.chatrooms.ticker_remove(msg)
def room_ticker_state(self, msg): """ Server code: 113 """ log.add_msg_contents(msg) self.chatrooms.ticker_set(msg)
def item_similar_users(self, msg): """ Server code: 112 """ log.add_msg_contents(msg) self.interests.item_similar_users(msg)
def item_recommendations(self, msg): """ Server code: 111 """ log.add_msg_contents(msg) self.interests.item_recommendations(msg)
def similar_users(self, msg): """ Server code: 110 """ log.add_msg_contents(msg) self.interests.similar_users(msg)
def wishlist_interval(self, msg): """ Server code: 104 """ log.add_msg_contents(msg) self.search.set_wishlist_interval(msg)