def updatePorterDetails(self, path, username, password): """Provide a new set of porter login information, for when we're in slave mode and the porter changes. If we're currently connected, this won't disconnect - it'll just change the information so that next time we try and connect we'll use the new ones """ if self.type == 'slave': self._porterUsername = username self._porterPassword = password creds = credentials.UsernamePassword(self._porterUsername, self._porterPassword) self._pbclient.startLogin(creds, self._pbclient.medium) # If we've changed paths, we must do some extra work. if path != self._porterPath: self.debug("Changing porter login to use \"%s\"", path) self._porterPath = path self._pbclient.stopTrying() # Stop trying to connect with the # old connector. self._pbclient.resetDelay() reactor.connectWith(fdserver.FDConnector, self._porterPath, self._pbclient, 10, checkPID=False) else: raise errors.WrongStateError( "Can't specify porter details in master mode")
def updatePorterDetails(self, path, username, password): """ Provide a new set of porter login information, for when we're in slave mode and the porter changes. If we're currently connected, this won't disconnect - it'll just change the information so that next time we try and connect we'll use the new ones @param path: new path @param username: new username @param password: new password """ if self.type != 'slave': raise errors.WrongStateError( "Can't specify porter details in master mode") self._porterUsername = username self._porterPassword = password creds = credentials.UsernamePassword(self._porterUsername, self._porterPassword) self._pbclient.startLogin(creds, self.medium) self._updatePath(path)
def do_setup(self): self.have_properties(self.config['properties']) root = self._rootResource if root is None: root = self._getDefaultRootResource() if root is None: raise errors.WrongStateError( "a resource or path property must be set") site = Site(root, self) self._timeoutRequestsCallLater = reactor.callLater( self.REQUEST_TIMEOUT, self._timeoutRequests) # Create statistics handler and start updating ui state self.stats = serverstats.ServerStatistics() updater = StatisticsUpdater(self.uiState, "request-statistics") self.stats.startUpdates(updater) updater = StatisticsUpdater(self.uiState, "provider-statistics") self._fileProviderPlug.startStatsUpdates(updater) self._updateUptime() d = defer.Deferred() if self.type == 'slave': # Streamer is slaved to a porter. if self._singleFile: self._pbclient = porterclient.HTTPPorterClientFactory( site, [self.mountPoint], d) else: self._pbclient = porterclient.HTTPPorterClientFactory( site, [], d, prefixes=[self.mountPoint]) creds = credentials.UsernamePassword(self._porterUsername, self._porterPassword) self._pbclient.startLogin(creds, self._pbclient.medium) self.info("Logging to porter on socketPath %s", self._porterPath) # This will eventually cause d to fire reactor.connectWith(fdserver.FDConnector, self._porterPath, self._pbclient, 10, checkPID=False) else: # File Streamer is standalone. try: self.debug('Going to listen on port %d' % self.port) iface = "" # we could be listening on port 0, in which case we need # to figure out the actual port we listen on self._twistedPort = reactor.listenTCP(self.port, site, interface=iface) self.port = self._twistedPort.getHost().port self.info('Listening on interface %r on port %d', iface, self.port) except error.CannotListenError: t = 'Port %d is not available.' % self.port self.warning(t) m = messages.Error( T_(N_("Network error: TCP port %d is not available."), self.port)) self.addMessage(m) self.setMood(moods.sad) return defer.fail(errors.ComponentSetupHandledError(t)) # fire callback so component gets happy d.callback(None) # we are responsible for setting component happy def setComponentHappy(result): self.httpauth.scheduleKeepAlive() self.setMood(moods.happy) return result d.addCallback(setComponentHappy) return d