mirror of https://github.com/wb2osz/direwolf.git
KISS over TCP behaved strangely with multiple client apps attached.
This commit is contained in:
parent
2328ecdf55
commit
99d4d904b2
21
aclients.c
21
aclients.c
|
@ -549,12 +549,7 @@ static void * client_thread_net (void *arg)
|
||||||
|
|
||||||
mon_cmd.kind_lo = 'k';
|
mon_cmd.kind_lo = 'k';
|
||||||
|
|
||||||
#if __WIN32__
|
SOCK_SEND (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd));
|
||||||
send (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd), 0);
|
|
||||||
#else
|
|
||||||
err = write (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print all of the monitored packets.
|
* Print all of the monitored packets.
|
||||||
|
@ -563,14 +558,10 @@ static void * client_thread_net (void *arg)
|
||||||
while (1) {
|
while (1) {
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
#if __WIN32__
|
n = SOCK_RECV (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd));
|
||||||
n = recv (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd), 0);
|
|
||||||
#else
|
|
||||||
n = read (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (n != sizeof(mon_cmd)) {
|
if (n != sizeof(mon_cmd)) {
|
||||||
printf ("Read error, client %d received %d command bytes.\n", my_index, n);
|
printf ("Read error, client %d received %d command bytes. Terminating.\n", my_index, n);
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,11 +572,7 @@ static void * client_thread_net (void *arg)
|
||||||
assert (mon_cmd.data_len >= 0 && mon_cmd.data_len < (int)(sizeof(data)));
|
assert (mon_cmd.data_len >= 0 && mon_cmd.data_len < (int)(sizeof(data)));
|
||||||
|
|
||||||
if (mon_cmd.data_len > 0) {
|
if (mon_cmd.data_len > 0) {
|
||||||
#if __WIN32__
|
n = SOCK_RECV (server_sock, data, mon_cmd.data_len);
|
||||||
n = recv (server_sock, data, mon_cmd.data_len, 0);
|
|
||||||
#else
|
|
||||||
n = read (server_sock, data, mon_cmd.data_len);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (n != mon_cmd.data_len) {
|
if (n != mon_cmd.data_len) {
|
||||||
printf ("Read error, client %d received %d data bytes.\n", my_index, n);
|
printf ("Read error, client %d received %d data bytes.\n", my_index, n);
|
||||||
|
|
|
@ -850,7 +850,7 @@ int audio_get (int a)
|
||||||
|
|
||||||
assert (A->udp_sock > 0);
|
assert (A->udp_sock > 0);
|
||||||
|
|
||||||
res = recv (A->udp_sock, A->stream_data, SDR_UDP_BUF_MAXLEN, 0);
|
res = SOCK_RECV (A->udp_sock, A->stream_data, SDR_UDP_BUF_MAXLEN);
|
||||||
if (res <= 0) {
|
if (res <= 0) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("Can't read from udp socket, errno %d", WSAGetLastError());
|
dw_printf ("Can't read from udp socket, errno %d", WSAGetLastError());
|
||||||
|
|
12
direwolf.h
12
direwolf.h
|
@ -249,6 +249,18 @@ typedef pthread_mutex_t dw_mutex_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Formerly used write/read on Linux, for some forgotten reason,
|
||||||
|
// but always using send/recv makes more sense.
|
||||||
|
// Need option to prevent a SIGPIPE signal on Linux. (added for 1.5 beta 2)
|
||||||
|
|
||||||
|
#if __WIN32__
|
||||||
|
#define SOCK_SEND(s,data,size) send(s,data,size,0)
|
||||||
|
#else
|
||||||
|
#define SOCK_SEND(s,data,size) send(s,data,size, MSG_NOSIGNAL)
|
||||||
|
#endif
|
||||||
|
#define SOCK_RECV(s,data,size) recv(s,data,size,0)
|
||||||
|
|
||||||
|
|
||||||
/* Platform differences for string functions. */
|
/* Platform differences for string functions. */
|
||||||
|
|
||||||
|
|
||||||
|
|
10
igate.c
10
igate.c
|
@ -1266,7 +1266,7 @@ static void send_msg_to_server (const char *imsg, int imsg_len)
|
||||||
|
|
||||||
|
|
||||||
#if __WIN32__
|
#if __WIN32__
|
||||||
err = send (igate_sock, stemp, stemp_len, 0);
|
err = SOCK_SEND (igate_sock, stemp, stemp_len);
|
||||||
if (err == SOCKET_ERROR)
|
if (err == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
@ -1277,7 +1277,7 @@ static void send_msg_to_server (const char *imsg, int imsg_len)
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
err = write (igate_sock, stemp, stemp_len);
|
err = SOCK_SEND (igate_sock, stemp, stemp_len);
|
||||||
if (err <= 0)
|
if (err <= 0)
|
||||||
{
|
{
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
@ -1319,11 +1319,7 @@ static int get1ch (void)
|
||||||
// TODO: might read complete packets and unpack from own buffer
|
// TODO: might read complete packets and unpack from own buffer
|
||||||
// rather than using a system call for each byte.
|
// rather than using a system call for each byte.
|
||||||
|
|
||||||
#if __WIN32__
|
n = SOCK_RECV (igate_sock, (char*)(&ch), 1);
|
||||||
n = recv (igate_sock, (char*)(&ch), 1, 0);
|
|
||||||
#else
|
|
||||||
n = read (igate_sock, &ch, 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (n == 1) {
|
if (n == 1) {
|
||||||
#if DEBUG9
|
#if DEBUG9
|
||||||
|
|
4
kiss.c
4
kiss.c
|
@ -220,8 +220,8 @@ void kisspt_init (struct misc_config_s *mc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
text_color_set(DW_COLOR_INFO);
|
//text_color_set(DW_COLOR_INFO);
|
||||||
dw_printf ("Use -p command line option to enable KISS pseudo terminal.\n");
|
//dw_printf ("Use -p command line option to enable KISS pseudo terminal.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
92
kissnet.c
92
kissnet.c
|
@ -208,7 +208,7 @@ void kissnet_init (struct misc_config_s *mc)
|
||||||
pthread_t cmd_listen_tid[MAX_NET_CLIENTS];
|
pthread_t cmd_listen_tid[MAX_NET_CLIENTS];
|
||||||
int e;
|
int e;
|
||||||
#endif
|
#endif
|
||||||
int kiss_port = mc->kiss_port;
|
int kiss_port = mc->kiss_port; /* default 8001 but easily changed. */
|
||||||
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
@ -258,14 +258,16 @@ void kissnet_init (struct misc_config_s *mc)
|
||||||
cmd_listen_th[client] = (HANDLE)_beginthreadex (NULL, 0, kissnet_listen_thread, (void*)client, 0, NULL);
|
cmd_listen_th[client] = (HANDLE)_beginthreadex (NULL, 0, kissnet_listen_thread, (void*)client, 0, NULL);
|
||||||
if (cmd_listen_th[client] == NULL) {
|
if (cmd_listen_th[client] == NULL) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("Could not create KISS socket command listening thread\n");
|
dw_printf ("Could not create KISS command listening thread for client %d\n", client);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
e = pthread_create (&(cmd_listen_tid[client]), NULL, kissnet_listen_thread, NULL);
|
e = pthread_create (&(cmd_listen_tid[client]), NULL, kissnet_listen_thread, (void *)(long)client);
|
||||||
if (e != 0) {
|
if (e != 0) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
perror("Could not create KISS socket command listening thread");
|
dw_printf ("Could not create KISS command listening thread for client %d\n", client);
|
||||||
|
// Replace add perror with better message handling.
|
||||||
|
perror("");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -589,6 +591,10 @@ void kissnet_send_rec_packet (int chan, int kiss_cmd, unsigned char *fbuf, int f
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("KISS TCP: Something unexpected from client application.\n");
|
dw_printf ("KISS TCP: Something unexpected from client application.\n");
|
||||||
dw_printf ("Is client app treating this like an old TNC with command mode?\n");
|
dw_printf ("Is client app treating this like an old TNC with command mode?\n");
|
||||||
|
dw_printf ("This can be caused by the application sending commands to put a\n");
|
||||||
|
dw_printf ("traditional TNC into KISS mode. It is usually a harmless warning.\n");
|
||||||
|
dw_printf ("For best results, configure for a KISS-only TNC to avoid this.\n");
|
||||||
|
dw_printf ("In the case of APRSISCE/32, use \"Simply(KISS)\" rather than \"KISS.\"\n");
|
||||||
|
|
||||||
flen = strlen((char*)fbuf);
|
flen = strlen((char*)fbuf);
|
||||||
if (kiss_debug) {
|
if (kiss_debug) {
|
||||||
|
@ -623,21 +629,21 @@ void kissnet_send_rec_packet (int chan, int kiss_cmd, unsigned char *fbuf, int f
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __WIN32__
|
#if __WIN32__
|
||||||
err = send (client_sock[client], (char*)kiss_buff, kiss_len, 0);
|
err = SOCK_SEND(client_sock[client], (char*)kiss_buff, kiss_len);
|
||||||
if (err == SOCKET_ERROR)
|
if (err == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("\nError %d sending message to KISS client application. Closing connection.\n\n", WSAGetLastError());
|
dw_printf ("\nError %d sending message to KISS client %d application. Closing connection.\n\n", WSAGetLastError(), client);
|
||||||
closesocket (client_sock[client]);
|
closesocket (client_sock[client]);
|
||||||
client_sock[client] = -1;
|
client_sock[client] = -1;
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
err = write (client_sock[client], kiss_buff, kiss_len);
|
err = SOCK_SEND (client_sock[client], kiss_buff, kiss_len);
|
||||||
if (err <= 0)
|
if (err <= 0)
|
||||||
{
|
{
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("\nError sending message to KISS client application. Closing connection.\n\n");
|
dw_printf ("\nError sending message to KISS client %d application. Closing connection.\n\n", client);
|
||||||
close (client_sock[client]);
|
close (client_sock[client]);
|
||||||
client_sock[client] = -1;
|
client_sock[client] = -1;
|
||||||
}
|
}
|
||||||
|
@ -649,63 +655,6 @@ void kissnet_send_rec_packet (int chan, int kiss_cmd, unsigned char *fbuf, int f
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Name: read_from_socket
|
|
||||||
*
|
|
||||||
* Purpose: Read from socket until we have desired number of bytes.
|
|
||||||
*
|
|
||||||
* Inputs: fd - file descriptor.
|
|
||||||
* ptr - address where data should be placed.
|
|
||||||
* len - desired number of bytes.
|
|
||||||
*
|
|
||||||
* Description: Just a wrapper for the "read" system call but it should
|
|
||||||
* never return fewer than the desired number of bytes.
|
|
||||||
*
|
|
||||||
* Not really needed for KISS because we are dealing with
|
|
||||||
* a stream of bytes rather than message blocks.
|
|
||||||
*
|
|
||||||
*--------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static int read_from_socket (int fd, char *ptr, int len)
|
|
||||||
{
|
|
||||||
int got_bytes = 0;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
text_color_set(DW_COLOR_DEBUG);
|
|
||||||
dw_printf ("read_from_socket (%d, %p, %d)\n", fd, ptr, len);
|
|
||||||
#endif
|
|
||||||
while (got_bytes < len) {
|
|
||||||
int n;
|
|
||||||
|
|
||||||
#if __WIN32__
|
|
||||||
n = recv (fd, ptr + got_bytes, len - got_bytes, 0);
|
|
||||||
#else
|
|
||||||
n = read (fd, ptr + got_bytes, len - got_bytes);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//Would be useful to have more detailed explanation from the error code.
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
text_color_set(DW_COLOR_DEBUG);
|
|
||||||
dw_printf ("read_from_socket: n = %d\n", n);
|
|
||||||
#endif
|
|
||||||
if (n <= 0) {
|
|
||||||
return (n);
|
|
||||||
}
|
|
||||||
|
|
||||||
got_bytes += n;
|
|
||||||
}
|
|
||||||
assert (got_bytes >= 0 && got_bytes <= len);
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
text_color_set(DW_COLOR_DEBUG);
|
|
||||||
dw_printf ("read_from_socket: return %d\n", got_bytes);
|
|
||||||
#endif
|
|
||||||
return (got_bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------
|
/*-------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* Name: kissnet_listen_thread
|
* Name: kissnet_listen_thread
|
||||||
|
@ -739,7 +688,7 @@ static int kiss_get (int client)
|
||||||
|
|
||||||
/* Just get one byte at a time. */
|
/* Just get one byte at a time. */
|
||||||
|
|
||||||
n = read_from_socket (client_sock[client], (char *)(&ch), 1);
|
n = SOCK_RECV (client_sock[client], (char *)(&ch), 1);
|
||||||
|
|
||||||
if (n == 1) {
|
if (n == 1) {
|
||||||
#if DEBUG9
|
#if DEBUG9
|
||||||
|
@ -759,7 +708,7 @@ static int kiss_get (int client)
|
||||||
}
|
}
|
||||||
|
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("\nError reading KISS byte from client application %d. Closing connection.\n\n", client);
|
dw_printf ("\nKISS client application %d has gone away.\n\n", client);
|
||||||
#if __WIN32__
|
#if __WIN32__
|
||||||
closesocket (client_sock[client]);
|
closesocket (client_sock[client]);
|
||||||
#else
|
#else
|
||||||
|
@ -775,13 +724,14 @@ static THREAD_F kissnet_listen_thread (void *arg)
|
||||||
{
|
{
|
||||||
unsigned char ch;
|
unsigned char ch;
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
text_color_set(DW_COLOR_DEBUG);
|
|
||||||
dw_printf ("kissnet_listen_thread ( socket = %d )\n", client_sock);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int client = (int)(long)arg;
|
int client = (int)(long)arg;
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
text_color_set(DW_COLOR_DEBUG);
|
||||||
|
dw_printf ("kissnet_listen_thread ( client = %d, socket fd = %d )\n", client, client_sock[client]);
|
||||||
|
#endif
|
||||||
|
|
||||||
assert (client >= 0 && client < MAX_NET_CLIENTS);
|
assert (client >= 0 && client < MAX_NET_CLIENTS);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -90,12 +90,6 @@ static THREAD_F tnc_listen_serial (void *arg);
|
||||||
static void send_to_kiss_tnc (int chan, int cmd, char *data, int dlen);
|
static void send_to_kiss_tnc (int chan, int cmd, char *data, int dlen);
|
||||||
static void hex_dump (unsigned char *p, int len);
|
static void hex_dump (unsigned char *p, int len);
|
||||||
|
|
||||||
// Formerly used write/read on Linux, for some forgotten reason,
|
|
||||||
// but making them the same seems to make more sense.
|
|
||||||
#define SOCK_SEND(s,data,size) send(s,data,size,0)
|
|
||||||
#define SOCK_RECV(s,data,size) recv(s,data,size,0)
|
|
||||||
|
|
||||||
|
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
static void usage2(void);
|
static void usage2(void);
|
||||||
|
|
||||||
|
@ -809,6 +803,9 @@ void kiss_process_msg (unsigned char *kiss_msg, int kiss_len, int debug, int cli
|
||||||
|
|
||||||
ax25_safe_print ((char *)pinfo, info_len, 0);
|
ax25_safe_print ((char *)pinfo, info_len, 0);
|
||||||
dw_printf ("\n");
|
dw_printf ("\n");
|
||||||
|
#if __WIN32__
|
||||||
|
fflush (stdout);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add to receive queue directory if specified.
|
* Add to receive queue directory if specified.
|
||||||
|
|
32
server.c
32
server.c
|
@ -491,14 +491,16 @@ void server_init (struct audio_s *audio_config_p, struct misc_config_s *mc)
|
||||||
cmd_listen_th[client] = (HANDLE)_beginthreadex (NULL, 0, cmd_listen_thread, (void*)client, 0, NULL);
|
cmd_listen_th[client] = (HANDLE)_beginthreadex (NULL, 0, cmd_listen_thread, (void*)client, 0, NULL);
|
||||||
if (cmd_listen_th[client] == NULL) {
|
if (cmd_listen_th[client] == NULL) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("Could not create AGW command listening thread\n");
|
dw_printf ("Could not create AGW command listening thread for client %d\n", client);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
e = pthread_create (&cmd_listen_tid[client], NULL, cmd_listen_thread, (void *)(long)client);
|
e = pthread_create (&cmd_listen_tid[client], NULL, cmd_listen_thread, (void *)(long)client);
|
||||||
if (e != 0) {
|
if (e != 0) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
perror("Could not create AGW command listening thread");
|
dw_printf ("Could not create AGW command listening thread for client %d\n", client);
|
||||||
|
// Replace add perror with better message handling.
|
||||||
|
perror("");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -816,7 +818,7 @@ void server_send_rec_packet (int chan, packet_t pp, unsigned char *fbuf, int fl
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __WIN32__
|
#if __WIN32__
|
||||||
err = send (client_sock[client], (char*)(&agwpe_msg), sizeof(agwpe_msg.hdr) + netle2host(agwpe_msg.hdr.data_len_NETLE), 0);
|
err = SOCK_SEND (client_sock[client], (char*)(&agwpe_msg), sizeof(agwpe_msg.hdr) + netle2host(agwpe_msg.hdr.data_len_NETLE));
|
||||||
if (err == SOCKET_ERROR)
|
if (err == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
@ -827,7 +829,7 @@ void server_send_rec_packet (int chan, packet_t pp, unsigned char *fbuf, int fl
|
||||||
dlq_client_cleanup (client);
|
dlq_client_cleanup (client);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
err = write (client_sock[client], &agwpe_msg, sizeof(agwpe_msg.hdr) + netle2host(agwpe_msg.hdr.data_len_NETLE));
|
err = SOCK_SEND (client_sock[client], &agwpe_msg, sizeof(agwpe_msg.hdr) + netle2host(agwpe_msg.hdr.data_len_NETLE));
|
||||||
if (err <= 0)
|
if (err <= 0)
|
||||||
{
|
{
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
@ -921,7 +923,7 @@ void server_send_rec_packet (int chan, packet_t pp, unsigned char *fbuf, int fl
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __WIN32__
|
#if __WIN32__
|
||||||
err = send (client_sock[client], (char*)(&agwpe_msg), sizeof(agwpe_msg.hdr) + netle2host(agwpe_msg.hdr.data_len_NETLE), 0);
|
err = SOCK_SEND (client_sock[client], (char*)(&agwpe_msg), sizeof(agwpe_msg.hdr) + netle2host(agwpe_msg.hdr.data_len_NETLE));
|
||||||
if (err == SOCKET_ERROR)
|
if (err == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
@ -932,7 +934,7 @@ void server_send_rec_packet (int chan, packet_t pp, unsigned char *fbuf, int fl
|
||||||
dlq_client_cleanup (client);
|
dlq_client_cleanup (client);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
err = write (client_sock[client], &agwpe_msg, sizeof(agwpe_msg.hdr) + netle2host(agwpe_msg.hdr.data_len_NETLE));
|
err = SOCK_SEND (client_sock[client], &agwpe_msg, sizeof(agwpe_msg.hdr) + netle2host(agwpe_msg.hdr.data_len_NETLE));
|
||||||
if (err <= 0)
|
if (err <= 0)
|
||||||
{
|
{
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
@ -1145,14 +1147,7 @@ static int read_from_socket (int fd, char *ptr, int len)
|
||||||
while (got_bytes < len) {
|
while (got_bytes < len) {
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
#if __WIN32__
|
n = SOCK_RECV (fd, ptr + got_bytes, len - got_bytes);
|
||||||
|
|
||||||
//TODO: any flags for send/recv?
|
|
||||||
|
|
||||||
n = recv (fd, ptr + got_bytes, len - got_bytes, 0);
|
|
||||||
#else
|
|
||||||
n = read (fd, ptr + got_bytes, len - got_bytes);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
text_color_set(DW_COLOR_DEBUG);
|
text_color_set(DW_COLOR_DEBUG);
|
||||||
|
@ -1195,10 +1190,7 @@ static void send_to_client (int client, void *reply_p)
|
||||||
{
|
{
|
||||||
struct agwpe_s *ph;
|
struct agwpe_s *ph;
|
||||||
int len;
|
int len;
|
||||||
#if __WIN32__
|
|
||||||
#else
|
|
||||||
int err;
|
int err;
|
||||||
#endif
|
|
||||||
|
|
||||||
ph = (struct agwpe_s *) reply_p; // Replies are often hdr + other stuff.
|
ph = (struct agwpe_s *) reply_p; // Replies are often hdr + other stuff.
|
||||||
|
|
||||||
|
@ -1216,12 +1208,8 @@ static void send_to_client (int client, void *reply_p)
|
||||||
debug_print (TO_CLIENT, client, ph, len);
|
debug_print (TO_CLIENT, client, ph, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __WIN32__
|
err = SOCK_SEND (client_sock[client], (char*)(ph), len);
|
||||||
send (client_sock[client], (char*)(ph), len, 0);
|
|
||||||
#else
|
|
||||||
err = write (client_sock[client], ph, len);
|
|
||||||
(void)err;
|
(void)err;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
31
ttcalc.c
31
ttcalc.c
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
//
|
//
|
||||||
// This file is part of Dire Wolf, an amateur radio packet TNC.
|
// This file is part of Dire Wolf, an amateur radio packet TNC.
|
||||||
//
|
//
|
||||||
|
@ -108,11 +107,10 @@ int main (int argc, char *argv[])
|
||||||
char data[1024];
|
char data[1024];
|
||||||
char hostname[30] = "localhost";
|
char hostname[30] = "localhost";
|
||||||
char port[10] = "8000";
|
char port[10] = "8000";
|
||||||
|
int err;
|
||||||
|
|
||||||
#if __WIN32__
|
#if __WIN32__
|
||||||
#else
|
#else
|
||||||
int err;
|
|
||||||
|
|
||||||
setlinebuf (stdout);
|
setlinebuf (stdout);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -142,13 +140,8 @@ int main (int argc, char *argv[])
|
||||||
|
|
||||||
mon_cmd.kind_lo = 'k';
|
mon_cmd.kind_lo = 'k';
|
||||||
|
|
||||||
#if __WIN32__
|
err = SOCK_SEND (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd));
|
||||||
send (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd), 0);
|
|
||||||
#else
|
|
||||||
err = write (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd));
|
|
||||||
(void)err;
|
(void)err;
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Print all of the monitored packets.
|
* Print all of the monitored packets.
|
||||||
|
@ -157,11 +150,7 @@ int main (int argc, char *argv[])
|
||||||
while (1) {
|
while (1) {
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
#if __WIN32__
|
n = SOCK_RECV (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd));
|
||||||
n = recv (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd), 0);
|
|
||||||
#else
|
|
||||||
n = read (server_sock, (char*)(&mon_cmd), sizeof(mon_cmd));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (n != sizeof(mon_cmd)) {
|
if (n != sizeof(mon_cmd)) {
|
||||||
printf ("Read error, received %d command bytes.\n", n);
|
printf ("Read error, received %d command bytes.\n", n);
|
||||||
|
@ -171,14 +160,10 @@ int main (int argc, char *argv[])
|
||||||
assert (mon_cmd.data_len >= 0 && mon_cmd.data_len < (int)(sizeof(data)));
|
assert (mon_cmd.data_len >= 0 && mon_cmd.data_len < (int)(sizeof(data)));
|
||||||
|
|
||||||
if (mon_cmd.data_len > 0) {
|
if (mon_cmd.data_len > 0) {
|
||||||
#if __WIN32__
|
n = SOCK_RECV (server_sock, data, mon_cmd.data_len);
|
||||||
n = recv (server_sock, data, mon_cmd.data_len, 0);
|
|
||||||
#else
|
|
||||||
n = read (server_sock, data, mon_cmd.data_len);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (n != mon_cmd.data_len) {
|
if (n != mon_cmd.data_len) {
|
||||||
printf ("Read error, client received %d data bytes when %d expected.\n", n, mon_cmd.data_len);
|
printf ("Read error, client received %d data bytes when %d expected. Terminating.\n", n, mon_cmd.data_len);
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -254,11 +239,7 @@ int main (int argc, char *argv[])
|
||||||
xmit_raw.hdr.kind_lo = 'K';
|
xmit_raw.hdr.kind_lo = 'K';
|
||||||
xmit_raw.hdr.data_len = 1 + ax25_pack (reply_pp, xmit_raw.frame);
|
xmit_raw.hdr.data_len = 1 + ax25_pack (reply_pp, xmit_raw.frame);
|
||||||
|
|
||||||
#if __WIN32__
|
err = SOCK_SEND (server_sock, (char*)(&xmit_raw), sizeof(xmit_raw.hdr)+xmit_raw.hdr.data_len);
|
||||||
send (server_sock, (char*)(&xmit_raw), sizeof(xmit_raw.hdr)+xmit_raw.hdr.data_len, 0);
|
|
||||||
#else
|
|
||||||
err = write (server_sock, (char*)(&xmit_raw), sizeof(xmit_raw.hdr)+xmit_raw.hdr.data_len);
|
|
||||||
#endif
|
|
||||||
ax25_delete (reply_pp);
|
ax25_delete (reply_pp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue