aboutsummaryrefslogtreecommitdiff
path: root/src/main.h
blob: 2f2a7b10e42b807a97f0ef51f0ed1ffe9f9d87ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
 * main.h
 * (c) 2019, Jonas Gunz, jonasgunz.de
 * <Description>
 * License: MIT
*/

#pragma once

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <stdint.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <arpa/inet.h>

#include "misc.h"
#include "log.h"
#include "serial.h"
#include "modem.h"


#define _DEF_MAX_BACKLOG 	20
#define _DEF_PORT 		23
#define _DEF_IP			0
#define _DEF_CONFIG_FILE	"/etc/bbs.conf"

#ifdef _DEBUG
//DEBUG Macros
#warning "Compiling in DEBUG mode"
#define DEBUG_PRINTF( ... ) { \
	printf("%s:%d: ", __FILE__, __LINE__); \ 
	printf(__VA_ARGS__ ); }
#define PRINT_ERROR( str )  { \
	printf("%s:%d: %s: %s\n", __FILE__, __LINE__, str, strerror(errno)); }
#else
//Release Macros
#define DEBUG_PRINTF( ... ) { }
#define PRINT_ERROR( str ) { printf("%s: %s\n", str, strerror(errno)); }
#endif

#define ERROR_HELP( ... ) { \
	printf(__VA_ARGS__); \
	printf("bbs\n-p PORT: telnet port\n-i IP: telnet listen ip\n-s DEVIVE: modem serial device\n-b BAUD: serial baudrate\n-f FILE: use pidfile\n"); \
	exit(1); }

struct prog_params
{
	uint8_t 	telnet;
	uint16_t 	port;
	uint16_t 	backlog;
	char*		ip;
	char** 		run_argv;
	int 		run_argc;

	uint8_t		serial;
	char*		serial_port;
	uint32_t	serial_baudrate;

	uint8_t		fork;
	char*		pidfile;
};

struct prog_params parse_args(int argc, char* argv[]);

void handle_connection(int _socket, struct sockaddr_in _addr, int argc, char* argv[]);

int main(int argc, char* argv[]);

void telnet_server(struct prog_params params);

void dialup_server(struct prog_params params);