/* * Copyright (c) 2019 TAOS Data, Inc. * * 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 . */ //#define _DEFAULT_SOURCE #include "os.h" #include "tlog.h" #include "trpc.h" #include "tqueue.h" #include int msgSize = 128; int commit = 0; int dataFd = -1; void *qhandle = NULL; void processShellMsg(int numOfMsgs, SRpcMsg *pMsg) { static int num = 0; tTrace("%d shell msgs are received", numOfMsgs); for (int i=0; i=0) { if ( write(dataFd, pMsg->msg, pMsg->msgLen) <0 ) { tPrint("failed to write data file, reason:%s", strerror(errno)); } } void *rsp = rpcMallocCont(msgSize); rpcSendResponse(pMsg->handle, 1, rsp, msgSize); rpcFreeCont(pMsg->msg); pMsg++; } if (commit >=2) { num += numOfMsgs; if ( fsync(dataFd) < 0 ) { tPrint("failed to flush data to file, reason:%s", strerror(errno)); } if (num % 10000 == 0) { tPrint("%d request have been written into disk", num); } } /* SRpcIpSet ipSet; ipSet.numOfIps = 1; ipSet.index = 0; ipSet.port = 7000; ipSet.ip[0] = inet_addr("192.168.0.2"); rpcSendRedirectRsp(ahandle, &ipSet); */ } int retrieveAuthInfo(char *meterId, char *spi, char *encrypt, char *secret, char *ckey) { // app shall retrieve the auth info based on meterID from DB or a data file // demo code here only for simple demo int ret = 0; if (strcmp(meterId, "michael") == 0) { *spi = 1; *encrypt = 0; strcpy(secret, "mypassword"); strcpy(ckey, "key"); } else if (strcmp(meterId, "jeff") == 0) { *spi = 0; *encrypt = 0; } else { ret = -1; // user not there } return ret; } void processRequestMsg(char type, void *pCont, int contLen, void *thandle, int32_t code) { tTrace("request is received, type:%d, contLen:%d", type, contLen); SRpcMsg rpcMsg; rpcMsg.msg = pCont; rpcMsg.msgLen = contLen; rpcMsg.code = code; rpcMsg.handle = thandle; rpcMsg.type = type; taosPutIntoMsgQueue(qhandle, &rpcMsg); } int main(int argc, char *argv[]) { SRpcInit rpcInit; char dataName[20] = "server.data"; memset(&rpcInit, 0, sizeof(rpcInit)); rpcInit.localIp = "0.0.0.0"; rpcInit.localPort = 7000; rpcInit.label = "SER"; rpcInit.numOfThreads = 1; rpcInit.cfp = processRequestMsg; rpcInit.sessions = 1000; rpcInit.idleTime = tsShellActivityTimer*1500; rpcInit.afp = retrieveAuthInfo; for (int i=1; i= 0) { close(dataFd); remove(dataName); } return 0; }