Edit

IABSD.fr/ports/sysutils/tmate/patches/patch-tmate-ssh-client_c

Branch :

  • Show log

    Commit

  • Author : jasper
    Date : 2017-02-16 20:06:03
    Hash : 6f06db64
    Message : import tmate-2.2.1 Instant terminal sharing based on tmux. based on work by Wesley MOUEDINE ASSABY (MAINTAINER) ok aja@

  • sysutils/tmate/patches/patch-tmate-ssh-client_c
  • $OpenBSD: patch-tmate-ssh-client_c,v 1.1.1.1 2017/02/16 20:06:03 jasper Exp $
    
    From fe81322cc4801860c33b1e31970b8f0f6bf603c7 Mon Sep 17 00:00:00 2001
    From: Nicolas Viennot <nicolas@viennot.biz>
    Date: Thu, 21 Apr 2016 16:05:52 -0400
    Subject: [PATCH] Keep alive the socket to make reconnections work properly
    
    From 27169b7c076376718abf98f7a1a6b484bd579314 Mon Sep 17 00:00:00 2001
    From: Nicolas Viennot <nicolas@viennot.biz>
    Date: Sun, 5 Jun 2016 12:54:25 -0400
    Subject: [PATCH] Add missing incldues for FreeBSD
    
    --- tmate-ssh-client.c.orig	Tue Mar 29 05:30:07 2016
    +++ tmate-ssh-client.c	Wed Feb  8 20:14:51 2017
    @@ -1,7 +1,8 @@
    +#include <netinet/in.h>
     #include <sys/socket.h>
     #include <netinet/tcp.h>
     #include <stdio.h>
    -#include <event.h>
    +#include <event2/event.h>
     #include <assert.h>
     
     #include "tmate.h"
    @@ -165,22 +166,48 @@ static void request_passphrase(struct tmate_ssh_client
     	data->password_cb_private = client;
     }
     
    +#define KEEPALIVE_CNT		3
    +#define KEEPALIVE_IDLE		20
    +#define KEEPALIVE_INTVL		10
    +
    +static void setup_socket(int fd)
    +{
    +#define SSO(level, optname, val) ({							\
    +	int _flag = val;								\
    +	if (setsockopt(fd, level, optname, &(_flag), sizeof(int)) < 0) {		\
    +		tmate_warn("setsockopt(" #level ", " #optname ", %d) failed", val);	\
    +	}										\
    +})
    +
    +	SSO(IPPROTO_TCP, TCP_NODELAY, 1);
    +	SSO(SOL_SOCKET, SO_KEEPALIVE, 1);
    +#ifdef TCP_KEEPALIVE
    +	SSO(IPPROTO_TCP, TCP_KEEPALIVE, KEEPALIVE_IDLE);
    +#endif
    +#ifdef TCP_KEEPCNT
    +	SSO(IPPROTO_TCP, TCP_KEEPCNT, KEEPALIVE_CNT);
    +#endif
    +#ifdef TCP_KEEPIDLE
    +	SSO(IPPROTO_TCP, TCP_KEEPIDLE, KEEPALIVE_IDLE);
    +#endif
    +#ifdef TCP_KEEPINTVL
    +	SSO(IPPROTO_TCP, TCP_KEEPINTVL, KEEPALIVE_INTVL);
    +#endif
    +#undef SSO
    +}
    +
     static void init_conn_fd(struct tmate_ssh_client *client)
     {
    +	int fd;
    +
     	if (client->has_init_conn_fd)
     		return;
     
    -	if (ssh_get_fd(client->session) < 0)
    +	if ((fd = ssh_get_fd(client->session)) < 0)
     		return;
     
    -	{
    -	int flag = 1;
    -	setsockopt(ssh_get_fd(client->session), IPPROTO_TCP,
    -		   TCP_NODELAY, &flag, sizeof(flag));
    -	}
    -
    -	event_set(&client->ev_ssh, ssh_get_fd(client->session),
    -		  EV_READ | EV_PERSIST, __on_ssh_client_event, client);
    +	setup_socket(fd);
    +	event_set(&client->ev_ssh, fd, EV_READ | EV_PERSIST, __on_ssh_client_event, client);
     	event_add(&client->ev_ssh, NULL);
     
     	client->has_init_conn_fd = true;