91 lines
2.4 KiB
Python
91 lines
2.4 KiB
Python
import collections
|
|
import hashlib
|
|
import httplib
|
|
import HydrusConstants as HC
|
|
import HydrusData
|
|
import HydrusExceptions
|
|
import HydrusGlobals as HG
|
|
import HydrusNATPunch
|
|
import HydrusServer
|
|
import itertools
|
|
import os
|
|
import Queue
|
|
import random
|
|
import ServerFiles
|
|
import shutil
|
|
import sqlite3
|
|
import sys
|
|
import threading
|
|
import time
|
|
import traceback
|
|
|
|
def DAEMONSaveDirtyObjects( controller ):
|
|
|
|
controller.SaveDirtyObjects()
|
|
|
|
def DAEMONDeleteOrphans( controller ):
|
|
|
|
controller.WriteSynchronous( 'delete_orphans' )
|
|
|
|
def DAEMONGenerateUpdates( controller ):
|
|
|
|
if not HG.server_busy:
|
|
|
|
HG.server_controller.SyncRepositories()
|
|
|
|
|
|
def DAEMONUPnP( controller ):
|
|
|
|
try:
|
|
|
|
local_ip = HydrusNATPunch.GetLocalIP()
|
|
|
|
current_mappings = HydrusNATPunch.GetUPnPMappings()
|
|
|
|
our_mappings = { ( internal_client, internal_port ) : external_port for ( description, internal_client, internal_port, external_ip_address, external_port, protocol, enabled ) in current_mappings }
|
|
|
|
except:
|
|
|
|
return # This IGD probably doesn't support UPnP, so don't spam the user with errors they can't fix!
|
|
|
|
|
|
services = HG.server_controller.GetServices()
|
|
|
|
for service in services:
|
|
|
|
internal_port = service.GetPort()
|
|
upnp_port = service.GetUPnPPort()
|
|
|
|
if ( local_ip, internal_port ) in our_mappings:
|
|
|
|
current_external_port = our_mappings[ ( local_ip, internal_port ) ]
|
|
|
|
if upnp_port is None or upnp_port != current_external_port:
|
|
|
|
HydrusNATPunch.RemoveUPnPMapping( current_external_port, 'TCP' )
|
|
|
|
|
|
|
|
|
|
for service in services:
|
|
|
|
internal_port = service.GetPort()
|
|
upnp_port = service.GetUPnPPort()
|
|
|
|
if upnp_port is not None and ( local_ip, internal_port ) not in our_mappings:
|
|
|
|
external_port = upnp_port
|
|
|
|
protocol = 'TCP'
|
|
|
|
service_type = service.GetServiceType()
|
|
|
|
description = HC.service_string_lookup[ service_type ] + ' at ' + local_ip + ':' + str( internal_port )
|
|
|
|
duration = 3600
|
|
|
|
HydrusNATPunch.AddUPnPMapping( local_ip, internal_port, external_port, protocol, description, duration = duration )
|
|
|
|
|
|
|