2003-09-13 22:34:30 +02:00
|
|
|
/*
|
|
|
|
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
|
|
|
*
|
|
|
|
* conn.h - connections management procedures
|
|
|
|
*
|
2015-02-25 11:33:57 +01:00
|
|
|
* Copyright (c) 2002-2003, 2013, Victor Antonovich (v.antonovich@gmail.com)
|
2013-11-18 09:57:00 +01:00
|
|
|
*
|
2003-09-13 22:34:30 +02:00
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
2013-11-18 09:57:00 +01:00
|
|
|
*
|
2003-09-13 22:34:30 +02:00
|
|
|
* - Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
2013-11-18 09:57:00 +01:00
|
|
|
*
|
2003-09-13 22:34:30 +02:00
|
|
|
* - Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
2013-11-18 09:57:00 +01:00
|
|
|
*
|
2003-09-13 22:34:30 +02:00
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
|
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*
|
2015-02-25 11:33:57 +01:00
|
|
|
* $Id: conn.h,v 1.3 2015/02/25 10:33:57 kapyar Exp $
|
2003-09-13 22:34:30 +02:00
|
|
|
*/
|
2013-11-18 09:57:00 +01:00
|
|
|
|
2003-09-13 22:34:30 +02:00
|
|
|
#ifndef _CONN_H
|
|
|
|
#define _CONN_H
|
|
|
|
|
|
|
|
#include "globals.h"
|
|
|
|
#include "cfg.h"
|
|
|
|
#include "sock.h"
|
|
|
|
#include "modbus.h"
|
|
|
|
#include "sig.h"
|
|
|
|
#ifdef LOG
|
|
|
|
#include "log.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
2013-11-18 09:57:00 +01:00
|
|
|
* Default values
|
2003-09-13 22:34:30 +02:00
|
|
|
*/
|
|
|
|
#define DEFAULT_SERVERPORT 502
|
|
|
|
#define DEFAULT_MAXCONN 32
|
|
|
|
#define DEFAULT_MAXTRY 3
|
|
|
|
#define DEFAULT_RQSTPAUSE 100
|
2016-04-25 17:17:11 +02:00
|
|
|
#define DEFAULT_RESPWAIT 500
|
2003-09-13 22:34:30 +02:00
|
|
|
#define DEFAULT_CONNTIMEOUT 60
|
|
|
|
|
2017-11-29 11:39:40 +01:00
|
|
|
/* Max simultaneous TCP connections to server */
|
|
|
|
#ifndef MAX_MAXCONN
|
|
|
|
# define MAX_MAXCONN 128
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Max RTU device request retries */
|
|
|
|
#ifndef MAX_MAXTRY
|
|
|
|
# define MAX_MAXTRY 15
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Max RTU device pause between requests, in msecs */
|
|
|
|
#ifndef MAX_RQSTPAUSE
|
|
|
|
# define MAX_RQSTPAUSE 10000
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Max RTU device response wait, in msecs */
|
|
|
|
#ifndef MAX_RESPWAIT
|
|
|
|
# define MAX_RESPWAIT 10000
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Max connection timeout, in secs */
|
|
|
|
#ifndef MAX_CONNTIMEOUT
|
|
|
|
# define MAX_CONNTIMEOUT 1000
|
|
|
|
#endif
|
|
|
|
|
2003-09-13 22:34:30 +02:00
|
|
|
#define CRCSIZE 2 /* size (in bytes) of CRC */
|
|
|
|
#define HDRSIZE 6 /* size (in bytes) of header */
|
|
|
|
#define BUFSIZE 256 /* size (in bytes) of MODBUS data */
|
|
|
|
#define RQSTSIZE (HDRSIZE + BUFSIZE - 2) /* size (in bytes) of MODBUS request */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Client connection FSM states
|
|
|
|
*/
|
|
|
|
#define CONN_HEADER 0
|
|
|
|
#define CONN_RQST 1
|
|
|
|
#define CONN_TTY 2
|
|
|
|
#define CONN_RESP 3
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Client connection related data storage structure
|
|
|
|
*/
|
|
|
|
typedef struct conn_t
|
|
|
|
{
|
|
|
|
struct conn_t *prev; /* linked list previous connection */
|
|
|
|
struct conn_t *next; /* linked list next connection */
|
|
|
|
int sd; /* socket descriptor */
|
|
|
|
int state; /* current state */
|
|
|
|
int timeout; /* timeout value, secs */
|
|
|
|
struct sockaddr_in sockaddr; /* connection structure */
|
|
|
|
int ctr; /* counter of data in the buffer */
|
|
|
|
unsigned char buf[HDRSIZE + BUFSIZE]; /* data buffer */
|
|
|
|
} conn_t;
|
|
|
|
|
|
|
|
/* prototypes */
|
|
|
|
int conn_init(void);
|
|
|
|
void conn_loop(void);
|
|
|
|
void conn_open(void);
|
|
|
|
conn_t *conn_close(conn_t *conn);
|
|
|
|
|
|
|
|
#endif /* _CONN_H */
|