trpc.h 3.0 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

26 27
#define TAOS_CONN_SERVER   0
#define TAOS_CONN_CLIENT   1
28

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
29
extern int tsRpcHeadSize;
H
hzcheng 已提交
30

31
typedef struct SRpcIpSet {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
32 33
  int8_t    inUse; 
  int8_t    numOfIps;
J
jtao1735 已提交
34 35
  uint16_t  port[TSDB_MAX_REPLICA];
  char      fqdn[TSDB_MAX_REPLICA][TSDB_FQDN_LEN];
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
36 37
} SRpcIpSet;

38 39 40 41 42
typedef struct SRpcCorIpSet {
  int32_t version; 
  SRpcIpSet ipSet; 
} SRpcCorIpSet;

43
typedef struct SRpcConnInfo {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
44 45 46
  uint32_t  clientIp;
  uint16_t  clientPort;
  uint32_t  serverIp;
S
slguan 已提交
47
  char      user[TSDB_USER_LEN];
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
48 49
} SRpcConnInfo;

50
typedef struct SRpcMsg {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
51
  uint8_t msgType;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
52 53 54
  void   *pCont;
  int     contLen;
  int32_t code;
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
55 56
  void   *handle;   // rpc handle returned to app
  void   *ahandle;  // app handle set by client
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
57 58
} SRpcMsg;

59
typedef struct SRpcInit {
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
60
  uint16_t localPort; // local port
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
61 62 63 64 65
  char  *label;        // for debug purpose
  int    numOfThreads; // number of threads to handle connections
  int    sessions;     // number of sessions allowed
  int8_t connType;     // TAOS_CONN_UDP, TAOS_CONN_TCPC, TAOS_CONN_TCPS
  int    idleTime;     // milliseconds, 0 means idle timer is disabled
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
66

67
  // the following is for client app ecurity only
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
68
  char *user;         // user name
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
69 70 71 72 73
  char  spi;          // security parameter index
  char  encrypt;      // encrypt algorithm
  char *secret;       // key for authentication
  char *ckey;         // ciphering key

74
  // call back to process incoming msg, code shall be ignored by server app
J
jtao1735 已提交
75
  void (*cfp)(SRpcMsg *, SRpcIpSet *);  
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
76

77
  // call back to retrieve the client auth info, for server app only 
S
slguan 已提交
78
  int  (*afp)(char *tableId, char *spi, char *encrypt, char *secret, char *ckey);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
79 80
} SRpcInit;

J
Jeff Tao 已提交
81
void *rpcOpen(const SRpcInit *pRpc);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
82
void  rpcClose(void *);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
83 84
void *rpcMallocCont(int contLen);
void  rpcFreeCont(void *pCont);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
85
void *rpcReallocCont(void *ptr, int contLen);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
86
void  rpcSendRequest(void *thandle, const SRpcIpSet *pIpSet, SRpcMsg *pMsg);
J
Jeff Tao 已提交
87 88
void  rpcSendResponse(const SRpcMsg *pMsg);
void  rpcSendRedirectRsp(void *pConn, const SRpcIpSet *pIpSet); 
89
int   rpcGetConnInfo(void *thandle, SRpcConnInfo *pInfo);
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
90
void  rpcSendRecv(void *shandle, SRpcIpSet *pIpSet, SRpcMsg *pReq, SRpcMsg *pRsp);
91
int   rpcReportProgress(void *pConn, char *pCont, int contLen);
92
void  rpcCancelRequest(void *pContext);
H
hzcheng 已提交
93 94 95 96 97 98

#ifdef __cplusplus
}
#endif

#endif  // TDENGINE_TRPC_H