DaemonClient.java
- /*
- * Copyright (C) 2008-2009, Google Inc. and others
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0 which is available at
- * https://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- package org.eclipse.jgit.transport;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.InetAddress;
- import java.net.Socket;
- import java.util.Arrays;
- import java.util.Collection;
- import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
- import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
- /**
- * Active network client of {@link org.eclipse.jgit.transport.Daemon}.
- */
- public class DaemonClient {
- private final Daemon daemon;
- private InetAddress peer;
- private InputStream rawIn;
- private OutputStream rawOut;
- DaemonClient(Daemon d) {
- daemon = d;
- }
- void setRemoteAddress(InetAddress ia) {
- peer = ia;
- }
- /**
- * Get the daemon which spawned this client.
- *
- * @return the daemon which spawned this client.
- */
- public Daemon getDaemon() {
- return daemon;
- }
- /**
- * Get Internet address of the remote client.
- *
- * @return Internet address of the remote client.
- */
- public InetAddress getRemoteAddress() {
- return peer;
- }
- /**
- * Get input stream to read from the connected client.
- *
- * @return input stream to read from the connected client.
- */
- public InputStream getInputStream() {
- return rawIn;
- }
- /**
- * Get output stream to send data to the connected client.
- *
- * @return output stream to send data to the connected client.
- */
- public OutputStream getOutputStream() {
- return rawOut;
- }
- void execute(Socket sock) throws IOException,
- ServiceNotEnabledException, ServiceNotAuthorizedException {
- rawIn = new BufferedInputStream(sock.getInputStream());
- rawOut = new BufferedOutputStream(sock.getOutputStream());
- if (0 < daemon.getTimeout())
- sock.setSoTimeout(daemon.getTimeout() * 1000);
- String cmd = new PacketLineIn(rawIn).readStringRaw();
- Collection<String> extraParameters = null;
- int nulnul = cmd.indexOf("\0\0"); //$NON-NLS-1$
- if (nulnul != -1) {
- extraParameters = Arrays.asList(cmd.substring(nulnul + 2).split("\0")); //$NON-NLS-1$
- }
- 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, extraParameters);
- }
- }