gen_sockets.c
author viric@llimona
Mon, 24 Sep 2007 13:59:40 +0200
changeset 38 f1e581c862d5
parent 37 b0588bddef91
child 53 07500c5c53cb
permissions -rw-r--r--
Improved help. Moving to 0.2.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
     1
#include <unistd.h>
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
     2
#include <stdlib.h>
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
     3
#include <assert.h>
36
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
     4
#include <string.h>
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
     5
#include <sys/socket.h>
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
     6
#include "main.h"
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
     7
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
     8
char *stream_buffer = 0;
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents: 21
diff changeset
     9
char *ostream_buffer = 0;
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    10
int stream_buffer_size;
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents: 21
diff changeset
    11
int ostream_buffer_size;
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    12
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents: 21
diff changeset
    13
void init_stream_buffers()
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    14
{
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    15
    if (stream_buffer == 0)
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    16
    {
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    17
        assert(command_line.buffer_size > 0);
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    18
        stream_buffer_size = command_line.buffer_size;
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents: 21
diff changeset
    19
        ostream_buffer_size = command_line.buffer_size;
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    20
        stream_buffer = (char *) malloc(stream_buffer_size);
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents: 21
diff changeset
    21
        ostream_buffer = (char *) malloc(ostream_buffer_size);
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    22
    }
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents:
diff changeset
    23
}
36
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    24
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    25
static void send_xterm_resize_string_to_socket(int s)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    26
{
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    27
    char *term;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    28
    term = getenv("TERM");
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    29
    /* I prefer it to send the xterm string always. */
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    30
    if (1 || term == 0 || strcmp(term, "xterm") == 0)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    31
    {
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    32
        char *xterm_str;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    33
        xterm_str = get_xterm_resize_string();
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    34
          hex_dump("xterm_resize", xterm_str, strlen(xterm_str));
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    35
        send(s, xterm_str, strlen(xterm_str), 0);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    36
    }
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    37
}
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    38
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    39
static void telnet_send_noecho(int s)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    40
{
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    41
  char seq[] = { 255 /*IAC*/, 251 /*WILL*/, 1 /*ECHO*/ };
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    42
  hex_dump("telnet_send_noecho", seq, sizeof seq);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    43
  send(s, seq, sizeof seq, 0);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    44
}
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    45
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    46
static void telnet_send_suppress_go_ahead(int s)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    47
{
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    48
  char seq[] = { 255 /*IAC*/, 251 /*WILL*/, 3 /*ECHO*/ };
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    49
  hex_dump("telnet_send_suppress_go_ahead", seq, sizeof seq);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    50
  send(s, seq, sizeof seq, 0);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    51
}
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    52
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    53
void welcome_new_client_socket(int s)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    54
{
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    55
    if (command_line.s_param.run_in_subterminal)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    56
    {
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    57
        telnet_send_noecho(s);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    58
        telnet_send_suppress_go_ahead(s);
37
b0588bddef91 Option for xterm resizing. Over max connections, close() at once.
viric@llimona
parents: 36
diff changeset
    59
    }
b0588bddef91 Option for xterm resizing. Over max connections, close() at once.
viric@llimona
parents: 36
diff changeset
    60
    if (command_line.s_param.send_xterm_resize)
36
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    61
        send_xterm_resize_string_to_socket(s);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    62
}