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
/*
 * 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

S
slguan 已提交
22 23
#include <stdbool.h>
#include <stdint.h>
S
slguan 已提交
24
#include "taosdef.h"
S
slguan 已提交
25

H
hzcheng 已提交
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

typedef struct {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
42 43
  int16_t   index; 
  int16_t   numOfIps;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
44
  uint16_t  port;
45
  uint32_t  ip[TSDB_MAX_MPEERS];
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
46 47
} SRpcIpSet;

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
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
typedef struct {
  char *localIp;      // local IP used
  uint16_t localPort; // local port
  char *label;        // for debug purpose
  int   numOfThreads; // number of threads to handle connections
  int   sessions;     // number of sessions allowed
  int   connType;     // TAOS_CONN_UDP, TAOS_CONN_TCPC, TAOS_CONN_TCPS
  int   idleTime;     // milliseconds, 0 means idle timer is disabled

  // the following is for client security only
  char *meterId;      // meter ID
  char  spi;          // security parameter index
  char  encrypt;      // encrypt algorithm
  char *secret;       // key for authentication
  char *ckey;         // ciphering key

  // call back to process incoming msg
  void (*cfp)(char type, void *pCont, int contLen, void *ahandle, int32_t code);  

  // call back to process notify the ipSet changes
  void (*ufp)(void *ahandle, SRpcIpSet ipSet);

  // call back to retrieve the client auth info 
  int  (*afp)(char *meterId, char *spi, char *encrypt, uint8_t *secret, uint8_t *ckey); 
} SRpcInit;

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
74 75
void *rpcOpen(SRpcInit *pRpc);
void  rpcClose(void *);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
76 77
void *rpcMallocCont(int contLen);
void  rpcFreeCont(void *pCont);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
78
void  rpcSendRequest(void *thandle, SRpcIpSet ipSet, char msgType, void *pCont, int contLen, void *ahandle);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
79 80
void  rpcSendResponse(void *pConn, int32_t code, void *pCont, int contLen);
void  rpcSendRedirectRsp(void *pConn, SRpcIpSet ipSet); 
H
hzcheng 已提交
81 82 83 84 85 86 87


#ifdef __cplusplus
}
#endif

#endif  // TDENGINE_TRPC_H