Merge branch 'v5-stable-elasticsearch' into v5-devel-tmp
[rsyslog.git] / tcpclt.h
1 /* tcpclt.h
2  *
3  * This are the definitions for the TCP based clients class.
4  *
5  * File begun on 2007-07-21 by RGerhards (extracted from syslogd.c)
6  *
7  * Copyright 2007-2012 Adiscon GmbH.
8  *
9  * This file is part of rsyslog.
10  *
11  * Licensed under the Apache License, Version 2.0 (the "License");
12  * you may not use this file except in compliance with the License.
13  * You may obtain a copy of the License at
14  * 
15  *       http://www.apache.org/licenses/LICENSE-2.0
16  *       -or-
17  *       see COPYING.ASL20 in the source distribution
18  * 
19  * Unless required by applicable law or agreed to in writing, software
20  * distributed under the License is distributed on an "AS IS" BASIS,
21  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22  * See the License for the specific language governing permissions and
23  * limitations under the License.
24  */
25 #ifndef TCPCLT_H_INCLUDED
26 #define TCPCLT_H_INCLUDED 1
27
28 #include "obj.h"
29
30 /* the tcpclt object */
31 typedef struct tcpclt_s {
32         BEGINobjInstance;       /**< Data to implement generic object - MUST be the first data element! */
33         TCPFRAMINGMODE tcp_framing;
34         char *prevMsg;
35         short bResendLastOnRecon; /* should the last message be resent on a successful reconnect? */
36         size_t lenPrevMsg;
37         /* session specific callbacks */
38         int iRebindInterval;    /* how often should the send socket be rebound? */
39         int iNumMsgs;           /* number of messages during current "rebind session" */
40         rsRetVal (*initFunc)(void*);
41         rsRetVal (*sendFunc)(void*, char*, size_t);
42         rsRetVal (*prepRetryFunc)(void*);
43 } tcpclt_t;
44
45
46 /* interfaces */
47 BEGINinterface(tcpclt) /* name must also be changed in ENDinterface macro! */
48         rsRetVal (*Construct)(tcpclt_t **ppThis);
49         rsRetVal (*ConstructFinalize)(tcpclt_t __attribute__((unused)) *pThis);
50         rsRetVal (*Destruct)(tcpclt_t **ppThis);
51         int (*Send)(tcpclt_t *pThis, void*pData, char*msg, size_t len);
52         int (*CreateSocket)(struct addrinfo *addrDest);
53         /* set methods */
54         rsRetVal (*SetResendLastOnRecon)(tcpclt_t*, int);
55         rsRetVal (*SetSendInit)(tcpclt_t*, rsRetVal (*)(void*));
56         rsRetVal (*SetSendFrame)(tcpclt_t*, rsRetVal (*)(void*, char*, size_t));
57         rsRetVal (*SetSendPrepRetry)(tcpclt_t*, rsRetVal (*)(void*));
58         rsRetVal (*SetFraming)(tcpclt_t*, TCPFRAMINGMODE framing);
59         /* v3, 2009-07-14*/
60         rsRetVal (*SetRebindInterval)(tcpclt_t*, int iRebindInterval);
61 ENDinterface(tcpclt)
62 #define tcpcltCURR_IF_VERSION 3 /* increment whenever you change the interface structure! */
63
64
65 /* prototypes */
66 PROTOTYPEObj(tcpclt);
67
68 /* the name of our library binary */
69 #define LM_TCPCLT_FILENAME "lmtcpclt"
70
71 #endif /* #ifndef TCPCLT_H_INCLUDED */
72 /* vim:set ai:
73  */