private void buildAndStartDaemon() { daemonService = new Daemon( new InetSocketAddress( DAEMON_HOST, DAEMON_PORT ) ); daemonService.getService( "git-receive-pack" ).setEnabled( DAEMON_UPLOAD ); daemonService.setRepositoryResolver( new RepositoryResolverImpl() ); daemonService.setReceivePackFactory( new ReceivePackFactory<DaemonClient>() { @Override public ReceivePack create( final DaemonClient req, daemonService.start(); } catch ( java.io.IOException e ) { throw new IOException( e );
public UploadPack create( DaemonClient req, Repository db ) throws ServiceNotEnabledException, ServiceNotAuthorizedException { UploadPack up = new UploadPack( db ); up.setTimeout( getTimeout() ); up.setPackConfig( getPackConfig() ); return up; } };
public void run() { while ( isRunning() ) { try { startClient( listenSock.accept() ); } catch ( InterruptedIOException e ) { // Test again to see if we should keep accepting. } catch ( IOException e ) { break; } } try { if ( !listenSock.isClosed() ) { listenSock.close(); } } catch ( IOException err ) { // } finally { synchronized ( Daemon.this ) { acceptThread = null; } } } };
void execute( final Socket sock ) throws IOException, ServiceNotEnabledException, ServiceNotAuthorizedException { rawIn = new BufferedInputStream( sock.getInputStream() ); rawOut = new SafeBufferedOutputStream( sock.getOutputStream() ); if ( 0 < daemon.getTimeout() ) { sock.setSoTimeout( daemon.getTimeout() * 1000 ); } String cmd = new PacketLineIn( rawIn ).readStringRaw(); final int nul = cmd.indexOf( '\0' ); if ( nul >= 0 ) { // Newer clients hide a "host" header behind this byte. // Currently we don't use it for anything, so we ignore // this portion of the command. // cmd = cmd.substring( 0, nul ); } final DaemonService srv = getDaemon().matchService( cmd ); if ( srv == null ) { return; } sock.setSoTimeout( 0 ); srv.execute( this, cmd ); } }
public ReceivePack create( DaemonClient req, Repository db ) throws ServiceNotEnabledException, ServiceNotAuthorizedException { ReceivePack rp = new ReceivePack( db ); InetAddress peer = req.getRemoteAddress(); String host = peer.getCanonicalHostName(); if ( host == null ) { host = peer.getHostAddress(); } String name = "anonymous"; String email = name + "@" + host; rp.setRefLogIdent( new PersonIdent( name, email ) ); rp.setTimeout( getTimeout() ); return rp; } };
void execute( final DaemonClient client, final String commandLine ) throws IOException, ServiceNotEnabledException, ServiceNotAuthorizedException { final String name = commandLine.substring( command.length() + 1 ); Repository db; try { db = client.getDaemon().openRepository( client, name ); } catch ( ServiceMayNotContinueException e ) { // An error when opening the repo means the client is expecting a ref // advertisement, so use that style of error. PacketLineOut pktOut = new PacketLineOut( client.getOutputStream() ); pktOut.writeString( "ERR " + e.getMessage() + "\n" ); db = null; } if ( db == null ) { return; } try { if ( isEnabledFor( db ) ) { execute( client, db ); } } finally { db.close(); } }
if ( DAEMON_ENABLED && daemonService != null && !daemonService.isRunning() ) { buildAndStartDaemon();