trpc.h 2.8 KB
Newer Older
H
hzcheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * This program is free software: you can use, redistribute, and/or modify
 * it under the terms of the GNU Affero General Public License, version 3
 * or later ("AGPL"), as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
#ifndef TDENGINE_TRPC_H
#define TDENGINE_TRPC_H

#ifdef __cplusplus
extern "C" {
#endif

#include "taosmsg.h"
#include "tsched.h"
S
slguan 已提交
24
#include "tglobalcfg.h"
H
hzcheng 已提交
25 26 27 28 29 30 31 32

#define TAOS_CONN_UDPS     0
#define TAOS_CONN_UDPC     1
#define TAOS_CONN_TCPS     2
#define TAOS_CONN_TCPC     3
#define TAOS_CONN_HTTPS    4
#define TAOS_CONN_HTTPC    5

33 34 35 36
#define TAOS_SOCKET_TYPE_NAME_TCP  "tcp"
#define TAOS_SOCKET_TYPE_NAME_UDP  "udp"

#define TAOS_CONN_SOCKET_TYPE_S()  ((strcasecmp(tsSocketType, TAOS_SOCKET_TYPE_NAME_UDP) == 0)? TAOS_CONN_UDPS:TAOS_CONN_TCPS)
S
slguan 已提交
37
#define TAOS_CONN_SOCKET_TYPE_C()  ((strcasecmp(tsSocketType, TAOS_SOCKET_TYPE_NAME_UDP) == 0)? TAOS_CONN_UDPC:TAOS_CONN_TCPC)
38

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
39
extern int tsRpcHeadSize;
H
hzcheng 已提交
40 41 42

typedef struct {
  char *localIp;                        // local IP used
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
43
  uint16_t localPort;                   // local port
H
hzcheng 已提交
44 45
  char *label;                          // for debug purpose
  int   numOfThreads;                   // number of threads to handle connections
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
46
  void *(*fp)(char type, void *pCont, int contLen, void *handle, int index);  // function to process the incoming msg
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
47
  int   sessions;                       // number of sessions allowed
H
hzcheng 已提交
48 49
  int   connType;                       // TAOS_CONN_UDP, TAOS_CONN_TCPC, TAOS_CONN_TCPS
  int   idleTime;                       // milliseconds, 0 means idle timer is disabled
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
50 51 52 53 54 55
  char *meterId;   // meter ID
  char  spi;       // security parameter index
  char  encrypt;   // encrypt algorithm
  char *secret;    // key for authentication
  char *ckey;      // ciphering key
  int   (*afp) (char *meterId, char *spi, char *encrypt, uint8_t *secret, uint8_t *ckey); // call back to retrieve auth info
H
hzcheng 已提交
56 57 58
} SRpcInit;

typedef struct {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
59 60
  int16_t   index; 
  int16_t   numOfIps;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
61 62
  uint16_t  port;
  char      ipStr[TSDB_MAX_MPEERS][40];
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
63 64 65 66
} SRpcIpSet;

void *rpcOpen(SRpcInit *pRpc);
void  rpcClose(void *);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
67 68
void *rpcMallocCont(int contLen);
void  rpcFreeCont(void *pCont);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
69 70 71
void  rpcSendRequest(void *thandle, SRpcIpSet ipSet, char msgType, void *pCont, int contLen, void *ahandle);
void  rpcSendResponse(void *pConn, void *pCont, int contLen);
void  rpcSendSimpleRsp(void *pConn, int32_t code);
H
hzcheng 已提交
72 73 74 75 76 77 78


#ifdef __cplusplus
}
#endif

#endif  // TDENGINE_TRPC_H