First semi-functional version.
This commit is contained in:
parent
c33bd6ca4e
commit
0176443560
5 changed files with 37 additions and 13 deletions
6
Makefile
6
Makefile
|
@ -4,7 +4,7 @@ TARGET = moxerver
|
||||||
# special include directories
|
# special include directories
|
||||||
INCDIRS = -I.
|
INCDIRS = -I.
|
||||||
# special library directories
|
# special library directories
|
||||||
LIBDIRS = -L
|
LIBDIRS = -L.
|
||||||
# used libraries
|
# used libraries
|
||||||
#LIBS = -lm
|
#LIBS = -lm
|
||||||
LIBS = -lpthread
|
LIBS = -lpthread
|
||||||
|
@ -20,11 +20,11 @@ HEADERS = $(wildcard *.h)
|
||||||
|
|
||||||
# all objects are built from their .c files and all headers in the directory
|
# all objects are built from their .c files and all headers in the directory
|
||||||
%.o: %.c $(HEADERS)
|
%.o: %.c $(HEADERS)
|
||||||
$(CC) $(CFLAGS) $(LIBS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
# target is built from all object files
|
# target is built from all object files
|
||||||
$(TARGET): $(OBJECTS)
|
$(TARGET): $(OBJECTS)
|
||||||
$(CC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $@
|
$(CC) $(OBJECTS) $(CFLAGS) -o $@
|
||||||
|
|
||||||
|
|
||||||
# support for default, clean and all options
|
# support for default, clean and all options
|
||||||
|
|
2
client.c
2
client.c
|
@ -52,7 +52,7 @@ int client_write(struct client_t *client, char *databuf, int datalen) {
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
/* handle special telnet characters to display them correctly on client */
|
/* handle special telnet characters to display them correctly on client */
|
||||||
telnet_handle_client_write(databuf, &datalen);
|
//telnet_handle_client_write(databuf, &datalen);
|
||||||
|
|
||||||
//TODO let's print received bytes during development phase...
|
//TODO let's print received bytes during development phase...
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,9 +10,9 @@
|
||||||
|
|
||||||
|
|
||||||
/* Global variables used throughout the application */
|
/* Global variables used throughout the application */
|
||||||
struct server_t server;
|
//struct server_t server;
|
||||||
struct client_t client; //TODO working with only 1 client, this can be expanded into a list
|
//struct client_t client; //TODO working with only 1 client, this can be expanded into a list
|
||||||
struct tty_t tty_dev;
|
//struct tty_t tty_dev;
|
||||||
|
|
||||||
/* Prints help message. */
|
/* Prints help message. */
|
||||||
static void usage() {
|
static void usage() {
|
||||||
|
@ -176,9 +176,10 @@ int main(int argc, char *argv[]) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* echo back to client */
|
/* echo back to client */
|
||||||
client_write(&client, client.data, ret);
|
//client_write(&client, client.data, ret);
|
||||||
|
|
||||||
//TODO we should send this data to TTY device here
|
//TODO we should send this data to TTY device here
|
||||||
|
tty_write(&tty_dev, client.data, ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
|
|
|
@ -34,6 +34,9 @@ struct tty_t {
|
||||||
char data[DATA_BUFLEN]; /* buffer for data received from tty */
|
char data[DATA_BUFLEN]; /* buffer for data received from tty */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct server_t server;
|
||||||
|
struct client_t client; //TODO working with only 1 client, this can be expanded into a list
|
||||||
|
struct tty_t tty_dev;
|
||||||
|
|
||||||
/* Sets up the server on specific port, binds to a socket and listens for client connections. */
|
/* Sets up the server on specific port, binds to a socket and listens for client connections. */
|
||||||
int server_setup(struct server_t *server, unsigned int port);
|
int server_setup(struct server_t *server, unsigned int port);
|
||||||
|
|
30
tty.c
30
tty.c
|
@ -1,6 +1,7 @@
|
||||||
#include "moxerver.h"
|
#include "moxerver.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#define TTY_THREAD_TIMEOUT_SEC 30
|
#define TTY_THREAD_TIMEOUT_SEC 30
|
||||||
|
#define TTY_WAIT_TIMEOUT 5 /* seconds for select() timeout in server loop */
|
||||||
#define NAME "tty"
|
#define NAME "tty"
|
||||||
|
|
||||||
/* Opens the tty device and configures it. */
|
/* Opens the tty device and configures it. */
|
||||||
|
@ -61,22 +62,41 @@ int tty_read(struct tty_t *tty_dev) {
|
||||||
|
|
||||||
/* Sends data from a buffer to tty device. */
|
/* Sends data from a buffer to tty device. */
|
||||||
int tty_write(struct tty_t *tty_dev, char *databuf, int datalen) {
|
int tty_write(struct tty_t *tty_dev, char *databuf, int datalen) {
|
||||||
|
write(tty_dev->fd, databuf, datalen);
|
||||||
// databuf should point to client data buffer
|
// databuf should point to client data buffer
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Main thread for reading and writing to tty device */
|
||||||
void *tty_thread_func(void *arg) {
|
void *tty_thread_func(void *arg) {
|
||||||
//int i = 0;
|
//char c;
|
||||||
char c;
|
|
||||||
struct tty_t *tty_dev = (struct tty_t*)arg;
|
struct tty_t *tty_dev = (struct tty_t*)arg;
|
||||||
|
struct timeval tv;
|
||||||
|
ssize_t br = 0;
|
||||||
|
int ret;
|
||||||
|
fd_set read_fds;
|
||||||
|
|
||||||
fprintf(stderr, "[%s] tty thread started with passed argument: %s\n", NAME, tty_dev->path);
|
fprintf(stderr, "[%s] tty thread started with passed argument: %s\n", NAME, tty_dev->path);
|
||||||
|
|
||||||
//while ((i * 10) < TTY_THREAD_TIMEOUT_SEC) {
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
/* setup parameters for select() */
|
||||||
|
tv.tv_sec = TTY_WAIT_TIMEOUT;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
FD_ZERO(&read_fds);
|
||||||
|
FD_SET(tty_dev->fd, &read_fds);
|
||||||
|
|
||||||
|
/* wait with select() */
|
||||||
|
ret = select(tty_dev->fd + 1, &read_fds, NULL, NULL, &tv);
|
||||||
|
|
||||||
|
if (ret > 0 && FD_ISSET(tty_dev->fd, &read_fds)) {
|
||||||
|
br = read(tty_dev->fd, tty_dev->data, DATA_BUFLEN);
|
||||||
|
client_write(&client, tty_dev->data, br);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
//sleep(10);
|
//sleep(10);
|
||||||
if (read(tty_dev->fd, &c, 1) > 0)
|
//if (read(tty_dev->fd, &c, 1) > 0)
|
||||||
printf("%c", c);
|
// printf("%c", c);
|
||||||
|
|
||||||
//fprintf(stderr, "[%s] tty thread reporting ...\n", NAME);
|
//fprintf(stderr, "[%s] tty thread reporting ...\n", NAME);
|
||||||
//i++;
|
//i++;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue