author | viric@llimona |
Mon, 24 Sep 2007 13:59:40 +0200 | |
changeset 38 | f1e581c862d5 |
parent 36 | da427c23d755 |
child 43 | 625794738afc |
permissions | -rw-r--r-- |
21 | 1 |
#include <sys/un.h> |
2 |
#include <sys/socket.h> |
|
24 | 3 |
#include <unistd.h> |
21 | 4 |
#include <assert.h> |
5 |
||
6 |
#include "main.h" |
|
24 | 7 |
#include "handlers.h" |
36
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
8 |
#include "filter.h" |
21 | 9 |
|
24 | 10 |
static int conn_socket = -1; |
11 |
||
36
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
12 |
extern struct FilterRules *client_fr; |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
13 |
|
24 | 14 |
void c_unix_connect_socket() |
21 | 15 |
{ |
16 |
struct sockaddr_un addr; |
|
17 |
int res; |
|
18 |
||
19 |
assert(command_line.unix_path != 0); |
|
24 | 20 |
assert(conn_socket == -1); |
21 | 21 |
|
24 | 22 |
conn_socket = socket(AF_UNIX, SOCK_STREAM, 0); |
23 |
if (conn_socket == -1) |
|
21 | 24 |
error("Cannot create the unix connect socket in the client"); |
25 |
||
26 |
addr.sun_family = AF_UNIX; |
|
27 |
strncpy(addr.sun_path, command_line.unix_path, sizeof(addr.sun_path)); |
|
28 |
||
24 | 29 |
res = connect(conn_socket, (struct sockaddr *) &addr, sizeof(addr)); |
21 | 30 |
if (res == -1) |
31 |
error("Cannot connect to %s", command_line.unix_path); |
|
32 |
} |
|
23 | 33 |
|
34 |
void c_unix_prepare_read_fdset(fd_set *read_set, int *maxfd) |
|
35 |
{ |
|
24 | 36 |
FD_SET(conn_socket, read_set); /* For reading other side's close() */ |
37 |
*maxfd = max(*maxfd, conn_socket); |
|
23 | 38 |
} |
39 |
||
24 | 40 |
/* Send -1 on eof */ |
41 |
int c_unix_process_read_fdset(fd_set *read_set) |
|
23 | 42 |
{ |
24 | 43 |
int res; |
44 |
if (FD_ISSET(conn_socket, read_set)) |
|
45 |
{ |
|
36
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
46 |
int olen; |
24 | 47 |
res = read(conn_socket, stream_buffer, stream_buffer_size); |
48 |
if (res == 0) /* EOF */ |
|
36
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
49 |
{ |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
50 |
filter_flush(client_fr, ostream_buffer, &olen); |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
51 |
if (olen > 0) |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
52 |
send_to_client_stdout(ostream_buffer, olen); |
24 | 53 |
return -1; |
36
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
54 |
} |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
55 |
hex_dump("recv_unix_client",stream_buffer, res); |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
56 |
|
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
57 |
filter_stream(client_fr, ostream_buffer, &olen, stream_buffer, |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
58 |
res); |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
59 |
if (olen > 0) |
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
60 |
send_to_client_stdout(ostream_buffer, olen); |
24 | 61 |
} |
62 |
return 0; |
|
23 | 63 |
} |
24 | 64 |
|
65 |
void c_unix_send(const char *buf, int len) |
|
66 |
{ |
|
36
da427c23d755
Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents:
24
diff
changeset
|
67 |
hex_dump("send_unix_client",buf, len); |
24 | 68 |
write(conn_socket, stream_buffer, len); |
69 |
} |