示例#1
0
文件: server.c 项目: galaxyeye/bdb
/* 
 * Called by the client to insert data into the databases.  Also can kill this
 * thread if commanded to by the client.
 */
void
TXN_FUNC(TPSVCINFO *msg)
{
  	int ret, i, commit, key_value, data_value;
	DBT key, data;

	memset(&key, 0, sizeof key);
	memset(&data, 0, sizeof data);
	commit = 1;
	++cnt_request;

#ifdef SERVER1
	key_value = data_value = cnt_request + 1;
#else
	key_value = data_value = (rand() % 1000) + 1;
#endif
	data.data = &data_value;
	data.size = sizeof(data_value);
	key.data = &key_value;
	key.size = sizeof(key_value);

	/* Kill the server to see what happens. */
	if (msg->data != NULL) {
	  	pthread_exit(NULL);
	}

	/* Insert data into the tables. */
	if (verbose) {
		printf("put1: key: n");
		printf("put1: data:\n");
	}
	if ((ret = db1->put(db1, NULL, &key, &data, 0)) != 0) {
	        if (ret == DB_LOCK_DEADLOCK) 
			goto abort;
		fprintf(stderr, "%s: %s: Table1->put: %s\n",
		    progname, TXN_STRING, db_strerror(ret));
		goto err;
	}

	if ((ret = db2->put(db2, NULL, &key, &data, 0)) != 0) {
		if (ret == DB_LOCK_DEADLOCK)
			goto abort;
		fprintf(stderr, "%s: %s: Table2->put: %s\n",
		    progname, TXN_STRING, db_strerror(ret));
		goto err;
	}

	/* Returns a commit or abort command to the client. */
	if (verbose)
		printf("%s: %s: commit\n", progname, TXN_STRING);
	tpreturn(TPSUCCESS, 0L, 0, 0L, 0);
	if (0) {
abort:		if (verbose)
			printf("%s: %s: abort\n", progname, TXN_STRING);
		tpreturn(TPSUCCESS, 1L, 0, 0L, 0);
	}
	return;

err:	tpreturn(TPFAIL, 1L, 0, 0L, 0);
}
示例#2
0
/***********************************************************************
    交易: CLIENT_LOGIN
    功能:远程监控客户端连接主监控时调用
    输入参数:
        iHostID(客户端主机ID, 对应WF_HOSTINFO.HOST_ID) 
          --客户端守护进程启动时建议默认根据hostname取ID
        sSysUserName(Unix 用户名)
    返回值:
        iLogID(登录ID; -1登录失败)
        sMsg(错误信息. 当iLogID == -1时有效)
----------------------------------------------------------------------*/
void CLIENT_LOGIN(TPSVCINFO *rqst)
{
    TParseBuff ParaList;
    char *sQqstBuf;
    sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
    int iLen = rqst->len;
    memcpy(sQqstBuf, rqst->data, iLen);
    sQqstBuf[iLen] = 0;
    TrimHeadNull(sQqstBuf,iLen);
    
    int iRet = ParaList.parseBuff(sQqstBuf);
    if (!iRet){
        ParaList.reset();
        ParaList.setLogID(-1); //输入参数不合法,登录失败
        ParaList.addMsg("登录主监控守护时输入参数不合法!");
        ParaList.getBuiltStr(sQqstBuf);
        tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
    }
    
    //lock the signal.
    LockSafe(g_pShmTable->m_iClientLock,0);
    g_pShmTable->ClientReqInfo.m_iHostID = ParaList.getHostID();
    ParaList.getSysUserName(g_pShmTable->ClientReqInfo.m_sSysUserName);
    g_pShmTable->ClientReqInfo.m_iStatus = REQ_CLIENT_LOGIN;
    
    ParaList.reset();
    int iTimeOut = 0;
    while(g_pShmTable->ClientReqInfo.m_iStatus == REQ_CLIENT_LOGIN)
    { //wait...
        usleep(USLEEP_LONG);
        if (iTimeOut++ > TIME_OUT) {
            ParaList.setLogID(-1); //time out,failed
            ParaList.addMsg("登录主监控超时!");
            ParaList.getBuiltStr(sQqstBuf);
            UnlockSafe(g_pShmTable->m_iClientLock,0);
            tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
        }
    }
    
    //主守护进程处理后的状态可能有: 
    //SERVER_ACCEPT MAX_CLIENT_NUM SERVER_REJECT
    if (g_pShmTable->ClientReqInfo.m_iStatus == SERVER_ACCEPT){
        ParaList.setLogID(g_pShmTable->ClientReqInfo.m_iIndex);
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == MAX_CLIENT_NUM)
    {
        ParaList.setLogID(-1);
        ParaList.addMsg("远程守护监控连接达到最大限制!");
    }
    else {
        ParaList.setLogID(-1);
        ParaList.addMsg(g_pShmTable->ClientReqInfo.m_sMsgBuf);
    }
    ParaList.getBuiltStr(sQqstBuf);
    UnlockSafe(g_pShmTable->m_iClientLock,0);
    tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
}
示例#3
0
文件: aaa.c 项目: nawhizz/KAIT
AAA( TPSVCINFO *msg )
{
	char *sndbuf;

	sndbuf = msg->data;

	h_col1 = 0;

	/* EXEC SQL SELECT col1
	INTO :h_col1
	FROM ABC ; */ 

{
 struct sqlexd sqlstm;
 sqlstm.sqlvsn = 10;
 sqlstm.arrsiz = 1;
 sqlstm.sqladtp = &sqladt;
 sqlstm.sqltdsp = &sqltds;
 sqlstm.stmt = "select col1 into :b0  from ABC ";
 sqlstm.iters = (unsigned int  )1;
 sqlstm.offset = (unsigned int  )5;
 sqlstm.selerr = (unsigned short)1;
 sqlstm.cud = sqlcud0;
 sqlstm.sqlest = (unsigned char  *)&sqlca;
 sqlstm.sqlety = (unsigned short)256;
 sqlstm.occurs = (unsigned int  )0;
 sqlstm.sqhstv[0] = (         void  *)&h_col1;
 sqlstm.sqhstl[0] = (unsigned int  )sizeof(int);
 sqlstm.sqhsts[0] = (         int  )0;
 sqlstm.sqindv[0] = (         void  *)0;
 sqlstm.sqinds[0] = (         int  )0;
 sqlstm.sqharm[0] = (unsigned int  )0;
 sqlstm.sqadto[0] = (unsigned short )0;
 sqlstm.sqtdso[0] = (unsigned short )0;
 sqlstm.sqphsv = sqlstm.sqhstv;
 sqlstm.sqphsl = sqlstm.sqhstl;
 sqlstm.sqphss = sqlstm.sqhsts;
 sqlstm.sqpind = sqlstm.sqindv;
 sqlstm.sqpins = sqlstm.sqinds;
 sqlstm.sqparm = sqlstm.sqharm;
 sqlstm.sqparc = sqlstm.sqharc;
 sqlstm.sqpadto = sqlstm.sqadto;
 sqlstm.sqptdso = sqlstm.sqtdso;
 sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}



	if ( sqlca.sqlcode != 0 && sqlca.sqlcode != 1403 ){
		printf( "select failed sqlcode = %d\n",sqlca.sqlcode );
		tpreturn( TPFAIL, sqlca.sqlcode, NULL, 0, 0 );
	}

	printf( "sqlca.sqlcode = %d, col1 = %d\n", sqlca.sqlcode, h_col1);

	tpreturn( TPSUCCESS, sqlca.sqlcode, (char *)sndbuf, sizeof(sndbuf), 0 );
}
示例#4
0
文件: server.c 项目: Pakrik/libdb
/* 
 * This function is called by the client.  Here, on Server 1 data is
 * inserted into table 1 and it returns successfully.  On Server 2 data
 * is inserted into table 2, but then it sleeps for 30 seconds then
 * returns, in order to force a timeout and to make sure that the data
 * is rolled back in both databases. 
 */
void
TXN_FUNC(TPSVCINFO *msg)
{
	DBT data;
	DBT key;
	int ret, val, i;
	DB *db;
	const char *name;
#ifdef SERVER1
	i = 0;
#else
	i = 1;
#endif

	db = dbs[i];
	name = db_names[i];

        val = 1;

	memset(&key, 0, sizeof(key));
	key.data = &val;
	key.size = sizeof(val);
	memset(&data, 0, sizeof(data));
	data.data = &val;
	data.size = sizeof(val);

	if (verbose) {
		printf("put: key in %s: %i\n", val, db_names[0]);
		printf("put: data in %s: %i\n", val, db_names[0]);
	}
	if ((ret = db->put(db, NULL, &key, &data, 0)) != 0) {
		if (ret == DB_LOCK_DEADLOCK)
			goto abort;
		fprintf(stderr, "%s: %s: %s->put: %s\n",
		    progname, TXN_STRING, name, 
		    db_strerror(ret));
		goto err;
	}

        /* Sleep for 30 seconds to force a timeout error. */
#ifdef SERVER2
        sleep(30);
#endif

	tpreturn(TPSUCCESS, 0L, 0, 0L, 0);
        if (0) {
abort:		if (verbose)
			printf("%s: %s: abort\n", progname, TXN_STRING);
		tpreturn(TPSUCCESS, 1L, 0, 0L, 0);
	}
	return;
err:
	tpreturn(TPFAIL, 0L, 0, 0L, 0);
}
示例#5
0
void
read_db1(TPSVCINFO *msg)
{
	int ret, db_num, commit, key_value;
	DBT key, data;
	DB *db;

	db = dbs[0];
	memset(&key, 0, sizeof key);
	memset(&data, 0, sizeof data);
	commit = 1;

	db_num = key_value = KEY_VALUE;
	key.data = &key_value;
	key.size = sizeof(key_value);
	data.flags = DB_DBT_MALLOC;

	/* Insert data into the tables. */
	if (verbose) {
		printf("get: key: %i ", key_value);
		printf("get: data.\n");
	}
	/* Get data from the table. */
	if ((ret = db->get(db, NULL, &key, &data, 0)) != 0) {
		if (ret == DB_LOCK_DEADLOCK || 
		    ret == DB_LOCK_NOTGRANTED)
			goto abort;
		fprintf(stderr, "%s: %s: %s->get: %s\n",
		    progname, READ_STRING, db_names[0], 
		    db_strerror(ret));
		goto err;
	}
	if (data.data != NULL)
		free(data.data);

	/* Returns a commit or abort command to the client. */
	if (verbose)
		printf("%s: %s: commit\n", progname, READ_STRING);
	tpreturn(TPSUCCESS, 0L, 0, 0L, 0);
	if (0) {
abort:		if (verbose)
			printf("%s: %s: abort\n", progname, READ_STRING);
		tpreturn(TPSUCCESS, 1L, 0, 0L, 0);
	}
	return;

err:	tpreturn(TPFAIL, 1L, 0, 0L, 0);
}
示例#6
0
void
write_db1(TPSVCINFO *msg)
{
	int ret, commit, key_value, data_value;
	DBT key, data;
	DB *db;

	db = dbs[0];
	memset(&key, 0, sizeof key);
	memset(&data, 0, sizeof data);
	commit = 1;

	key_value = data_value = KEY_VALUE;
	data.data = &data_value;
	data.size = sizeof(data_value);
	key.data = &key_value;
	key.size = sizeof(key_value);

	/* Insert data into the tables. */
	if (verbose) {
		printf("put: key: %i ", key_value);
		printf("put: data: %i\n", data_value);
	}
	/* Insert data into the tables. */
	if ((ret = db->put(db, NULL, &key, 
	    &data, 0)) != 0) {
		if (ret == DB_LOCK_DEADLOCK || 
		    ret == DB_LOCK_NOTGRANTED)
			goto abort;
		fprintf(stderr, "%s: %s: %s->put: %s\n",
		    progname, WRITE_STRING, db_names[0], 
		    db_strerror(ret));
		goto err;
	}

	/* Returns a commit or abort command to the client. */
	if (verbose)
		printf("%s: %s: commit\n", progname, WRITE_STRING);
	tpreturn(TPSUCCESS, 0L, 0, 0L, 0);
	if (0) {
abort:		if (verbose)
			printf("%s: %s: abort\n", progname, WRITE_STRING);
		tpreturn(TPSUCCESS, 1L, 0, 0L, 0);
	}
	return;

err:	tpreturn(TPFAIL, 1L, 0, 0L, 0);
}
示例#7
0
/*
 * This is test service!
 */
void TESTSVFN (TPSVCINFO *p_svc)
{
    int ret=SUCCEED;

    char *str = "THIS IS TEST - OK!";

    UBFH *p_ub = (UBFH *)p_svc->data;

    NDRX_LOG(log_debug, "TESTSVFN got call");

    /* Just print the buffer */
    Bprint(p_ub);
    if (NULL==(p_ub = (UBFH *)tprealloc((char *)p_ub, 4096))) /* allocate some stuff for more data to put in  */
    {
        ret=FAIL;
        goto out;
    }

    if (FAIL==Bchg(p_ub, T_STRING_FLD, 0, (char *)str, 0))
    {
        ret=FAIL;
        goto out;
    }

out:
    tpreturn(  ret==SUCCEED?TPSUCCESS:TPFAIL,
                0L,
                (char *)p_ub,
                0L,
                0L);
}
void NBFEXAMPLE(TPSVCINFO * svcinfo) {
	char* buf = svcinfo->data;
	int rc = 0;

	char name[16];
	long id;
	int  len = 16;

	rc = btgetattribute(buf, (char*)"name", 0, (char*) name, &len);
	if(rc == 0) {
		btlogger((char*) "get name value is %s", name);
	}

	len = 0;
	rc = btgetattribute(buf, (char*)"id", 0, (char*)&id, &len);
	if(rc == 0) {
		btlogger((char*) "get id value is %d", id);
	}

	btlogger((char*)"remove attr");
	rc = btdelattribute(buf, (char*)"name", 0);
	if(rc == 0) {
		btlogger((char*) "remove name");
	}

	id = 1234;
	rc = btsetattribute(&buf, (char*)"id", 0, (char*)&id, sizeof(id));
	if(rc == 0) {
		btlogger((char*) "set id value to 1234");
	}

	tpreturn(TPSUCCESS, 0, buf, strlen(buf), 0);
}
示例#9
0
void BAR(TPSVCINFO * svcinfo)
#endif
{
	test_req_t *req = (test_req_t *) svcinfo->data;
	test_req_t *resp = (test_req_t *) tpalloc((char*) "X_C_TYPE", (char*) "test_req", 0);
	product_t *p = products;

	btlogger_debug( "TxLog %s service %s running", __FUNCTION__, TXTEST_SVC_NAME);
	resp->status = -1;

	inject_fault(O_XA_COMMIT, req->txtype);

	for (p = products; p->id != -1; p++) {
		if (req->prod == p->id) {
			int rv;
			strncpy(req->db, p->dbname, sizeof(req->db));
			btlogger_debug("TxLog Service %s %4d: prod=%8s (id=%d) op=%c tx=0x%x data=%s", TXTEST_SVC_NAME,
					req->id, p->pname, p->id, req->op, req->txtype, req->data);
			rv = p->access(req, resp);
			btlogger_debug("TxLog Service %s %4d: resp->status=%d rv=%d", TXTEST_SVC_NAME, req->id, resp->status, rv);

			break;
		}
	}

	tpreturn(TPSUCCESS, resp->status, (char *) resp, sizeof (test_req_t), 0);
}
示例#10
0
void TEST4_2ND (TPSVCINFO *p_svc)
{
    int ret=SUCCEED;

    static double d = 11.66;

    UBFH *p_ub = (UBFH *)p_svc->data;

    NDRX_LOG(log_debug, "TESTSVFN got call");

    /* Just print the buffer */
    Bprint(p_ub);
    if (NULL==(p_ub = (UBFH *)tprealloc((char *)p_ub, 4096))) /* allocate some stuff for more data to put in  */
    {
        ret=FAIL;
        goto out;
    }

    d+=1;

    if (FAIL==Badd(p_ub, T_DOUBLE_2_FLD, (char *)&d, 0))
    {
        ret=FAIL;
        goto out;
    }

out:
    tpreturn(  ret==SUCCEED?TPSUCCESS:TPFAIL,
                0L,
                (char *)p_ub,
                0L,
                0L);
}
示例#11
0
文件: atmisv21.c 项目: zhfeng/endurox
void NOTRANFAIL(TPSVCINFO *p_svc)
{
    UBFH *p_ub = (UBFH *)p_svc->data;

    if (tpgetlev())
    {
        NDRX_LOG(log_error, "TESTERROR: SHOULD NOT BE IN TRNASACTION!");
    }
    
    tpreturn (TPFAIL, 0L, (char *)p_ub, 0L, 0L);
}
示例#12
0
void FOOAPP(TPSVCINFO * svcinfo) {
	char* buffer;
	int sendlen;

	btlogger((char*) "bar called  - svc: %s data %s len: %d flags: %d",
			svcinfo->name, svcinfo->data, svcinfo->len, svcinfo->flags);

	sendlen = 15;
	buffer = tpalloc("X_OCTET", 0, sendlen);
	strcpy(buffer, "BAR SAYS HELLO");

	tpreturn(TPSUCCESS, 0, buffer, sendlen, 0);
}
示例#13
0
/**
 * Service entry
 * @return SUCCEED/FAIL
 */
void USERREGSV (TPSVCINFO *p_svc)
{
    int ret = SUCCEED;
    int rsp = 0;
    Message_t msg;
    long len;
    char * buf = p_svc->data;

    memset(&msg, 0, sizeof(msg));
    
    /* allocate some stuff for more data to put in  */
    
    len = tptypes(p_svc->data, NULL, NULL) + 1024;
    
    if (NULL==(buf = tprealloc(buf, len)))
    {
	TP_LOG(log_error, "Failed reallocate buffer to size %d: %s", 
                len, tpstrerror(tperrno));
	ret=FAIL;
	goto out;
    }

    if (SUCCEED != parse_msg(&msg, buf, len))
    {
	TP_LOG(log_error, "Failed to parse msg");
	ret=FAIL;
	goto out;
	    
    }
    
    msg.rsp.rspstatus = 100;
    strcpy(msg.rsp.rsprspmsg, "User successfully registered");
    
    if(SUCCEED != msg_build(&msg, &buf, &len))
    {
	TP_LOG(log_error, "Failed to build msg");
	ret=FAIL;
	goto out;
    }

out:

    tpreturn(  ret==SUCCEED?TPSUCCESS:TPFAIL,
            0L,
            buf,
            0L,
            0L);


}
示例#14
0
/**
 * Advertise the service.
 * @param p_svc
 */
void DOADV(TPSVCINFO *p_svc)
{
    int ret=SUCCEED;
    UBFH *p_ub = (UBFH *)p_svc->data;
	
    /* Advertise test service */
    ret=tpadvertise("TESTSVFN", TESTSVFN);

    tpreturn(  ret==SUCCEED?TPSUCCESS:TPFAIL,
                0L,
                (char *)p_ub,
                0L,
                0L);
}
示例#15
0
文件: atmisv21.c 项目: zhfeng/endurox
void RUNTX(TPSVCINFO *p_svc)
{
    int first=1;
    UBFH *p_ub = (UBFH *)p_svc->data;
    char buf[1024];

    p_ub = (UBFH *)tprealloc ((char *)p_ub, Bsizeof (p_ub) + 4096);

    if (SUCCEED!=Bget(p_ub, T_STRING_FLD, 0, buf, 0))
    {
        NDRX_LOG(log_error, "TESTERROR: Failed to get T_STRING_FLD: %s",
                                          Bstrerror(Berror));
        tpreturn (TPFAIL, 0L, NULL, 0L, 0L);
    }
    
    if (SUCCEED!=__write_to_tx_file(buf))
    {
        NDRX_LOG(log_error, "TESTERROR: Failed to call __write_to_tx_file()");
        tpreturn (TPFAIL, 0L, NULL, 0L, 0L);
    }
    
    /* Return OK */
    tpreturn (TPSUCCESS, 0L, (char *)p_ub, 0L, 0L);
}
示例#16
0
/**
 * This will check the client id for first & second call,
 * - odd calls must match with odd client id
 * - even calls must match the even client id
 */
void TESTSVFN (TPSVCINFO *p_svc)
{
    int ret=SUCCEED;
    UBFH *p_ub = (UBFH *)p_svc->data;
    static int call_num = 0;
    
    NDRX_LOG(log_debug, "TESTSVFN got call from client [%s]", 
            p_svc->cltid.clientdata);
    
    if (call_num < 2)
    {
        strcpy(M_cltid[call_num].clientdata, p_svc->cltid.clientdata);
    }
    else
    {
        NDRX_LOG(log_debug, "call_num = %d, mod %d, mods [%s] vs [%s]", 
                call_num, call_num %2, M_cltid[call_num %2].clientdata,
                p_svc->cltid.clientdata);
        
        if (0!=strcmp(M_cltid[call_num%2].clientdata, p_svc->cltid.clientdata))
        {
            NDRX_LOG(log_error, "TESTERROR: call_num = %d, mod %d, "
                    "mods [%s] vs [%s] - not equal!", 
                    call_num, call_num %2, M_cltid[call_num %2].clientdata,
                    p_svc->cltid.clientdata);
            
            FAIL_OUT(ret);
        }
    }
    
out:
    call_num++;
    tpreturn(  ret==SUCCEED?TPSUCCESS:TPFAIL,
                0L,
                (char *)p_ub,
                0L,
                0L);
}
示例#17
0
/*************************************
 *  功能: 同步应答                   *
 *  参数:   rval: 处理结果标志      * 
 *          rcode:返回代码          *
 *          data: 返回的数据包      *
 *          len:  返回的数据包长度  *
 *  返回值:                         *
 *          无                       *
**************************************/
int cslreturn_common(int rval,long rcode,char *data,long len)
{
	tpreturn(rval,rcode,data,len,(long)0);
	return 0;	
}
示例#18
0
/***********************************************************************
    交易: SEND_REMOTEMSG
    功能:远程监控发送一个应用程序状态和输出信息到主监控
    输入参数:
        iLogID(登录ID)
        iHostID(主机ID)
        iProecessID
        iProcessCnt
        cState(进程状态)
        iMainGuardIndex
        <sMsg=str_msg>...
    返回值:
        iResult(0-失败, 1-成功)
----------------------------------------------------------------------*/
void SEND_REMOTEMSG(TPSVCINFO *rqst)
{
    TParseBuff ParaList;
    char *sQqstBuf;
    sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
    int iLen = rqst->len;
    memcpy(sQqstBuf, rqst->data, iLen);
    sQqstBuf[iLen] = 0;
    TrimHeadNull(sQqstBuf,iLen);
    
    int iRet = ParaList.parseBuff(sQqstBuf);
    if (!iRet){
        ParaList.reset();
        ParaList.setResult(0); //输入参数不合法
        ParaList.addMsg("输入参数不合法!");
        ParaList.getBuiltStr(sQqstBuf);
        tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
    }
    
    //lock the signal.
    LockSafe(g_pShmTable->m_iClientLock,0);
    g_pShmTable->ClientReqInfo.m_iHostID = ParaList.getHostID();
    g_pShmTable->ClientReqInfo.m_iIndex = ParaList.getLogID();
    //g_pShmTable->ClientReqInfo.m_cState = ParaList.getState();
    //strcpy(g_pShmTable->ClientReqInfo.m_sMsgBuf,ParaList.getBuiltMsg());
    strcpy(g_pShmTable->ClientReqInfo.m_sMsgBuf,sQqstBuf);
    
    g_pShmTable->ClientReqInfo.m_iStatus = REQ_SEND_REMOTEMSG;

    ParaList.reset();
    int iTimeOut = 0;    
    while(g_pShmTable->ClientReqInfo.m_iStatus == REQ_SEND_REMOTEMSG)
    { //wait...
        usleep(USLEEP_LONG);
        if (iTimeOut++ > TIME_OUT) { 
            ParaList.setResult(0); //time out,failed
            ParaList.addMsg("输出消息超时!");            
            ParaList.getBuiltStr(sQqstBuf);            
            UnlockSafe(g_pShmTable->m_iClientLock,0);
            tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
        }
    }
    
    //主守护进程处理后的状态可能有:
    // CLIENT_LOG_DEAD REMOTEMSG_SENT
    if (g_pShmTable->ClientReqInfo.m_iStatus == REMOTEMSG_SENT)
    {
        ParaList.setResult(1);
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == CLIENT_LOG_DEAD) {
        ParaList.setResult(0);
        ParaList.addMsg("client log dead.");
    }
    else {
        ParaList.setResult(0);
        ParaList.addMsg("Failed. Unknown reason.");
    }
    ParaList.getBuiltStr(sQqstBuf);
    UnlockSafe(g_pShmTable->m_iClientLock,0);
    tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);    
}
示例#19
0
/***********************************************************************
    交易: ACK_COMMAND
    功能:返回指令执行后的结果信息(在GET_COMMAND后调用)
    输入参数:
        iLogID(登录ID)
        iHostID(主机ID)
        iProcessID(指令操作的进程ID)
        iOperation(指令动作) (1-start, 2-stop, 3-ChangeStatus, 4-Refresh)
        iResult(0-失败, 1-成功) 指令的执行情况
        sMsg(指令执行返回的文本信息)
    返回值:
        iResult(0-失败, 1-成功) 交易的执行情况
        //iMainGuardIndex(当指令为启动指令时,标识远程应用进程在主监控守护主机AppInfo中的下标)
        sMsg (失败原因)
----------------------------------------------------------------------*/
void ACK_COMMAND(TPSVCINFO *rqst)
{
    TParseBuff ParaList;
    char *sQqstBuf;
    sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
    int iLen = rqst->len;
    memcpy(sQqstBuf, rqst->data, iLen);
    sQqstBuf[iLen] = 0;
    TrimHeadNull(sQqstBuf,iLen);
    
    int iRet = ParaList.parseBuff(sQqstBuf);
    if (!iRet){
        ParaList.reset();
        ParaList.setResult(0); //输入参数不合法
        ParaList.addMsg("输入参数不合法!");
        ParaList.getBuiltStr(sQqstBuf);
        tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
    }
    
    //lock the signal.
    LockSafe(g_pShmTable->m_iClientLock,0);
    g_pShmTable->ClientReqInfo.m_iHostID = ParaList.getHostID();
    g_pShmTable->ClientReqInfo.m_iIndex = ParaList.getLogID();
    g_pShmTable->ClientReqInfo.m_iProcessID = ParaList.getProcessID();
    g_pShmTable->ClientReqInfo.m_iResult = ParaList.getResult();
    g_pShmTable->ClientReqInfo.m_iOperation = ParaList.getOperation();
    strcpy(g_pShmTable->ClientReqInfo.m_sMsgBuf,ParaList.getMsg());
    
    g_pShmTable->ClientReqInfo.m_iStatus = REQ_ACK_COMMAND;
    
    ParaList.reset();
    int iTimeOut = 0;
    while(g_pShmTable->ClientReqInfo.m_iStatus == REQ_ACK_COMMAND)
    { //wait...
        usleep(USLEEP_LONG);
        if (iTimeOut++ > TIME_OUT) { 
            ParaList.setResult(0); //time out,failed
            ParaList.addMsg("返回指令执行结果超时!");            
            ParaList.getBuiltStr(sQqstBuf);            
            UnlockSafe(g_pShmTable->m_iClientLock,0);
            tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
        }
    }
    
    //主守护进程处理后的状态可能有:
    // CLIENT_LOG_DEAD ACK_COMMAND_END
    if (g_pShmTable->ClientReqInfo.m_iStatus == ACK_COMMAND_END)
    {
        ParaList.setResult(1);
        //ParaList.setMainGuardIndex(g_pShmTable->ClientReqInfo.m_iMainGuardIndex);
        //ParaList.addMsg("已获取到iMainGuardIndex");
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == CLIENT_LOG_DEAD) {
        ParaList.setResult(0);
        ParaList.addMsg("client log dead.");
    }
    else {
        ParaList.setResult(0);
        ParaList.addMsg("Failed. Unknown reason.");
    }
    ParaList.getBuiltStr(sQqstBuf);
    
    TWfLog::log(0,"server_client send ACK_COMMAND_END msg:%s",sQqstBuf);
    
    UnlockSafe(g_pShmTable->m_iClientLock,0);
    tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
}
示例#20
0
/***********************************************************************
    交易: GET_COMMAND
    功能:远程监控客户端获取其需要执行的指令时调用
    输入参数:
        iLogID(登录ID)
        iHostID(主机ID)
    返回值:
        iResult    (0-失败, 1-有操作指令, 2-当前无指令)
        iOperation (1-start, 2-stop, 3-ChangeStatus, 4-Refresh)
        iProcessID (指令操作的进程号)
        iStaffID
        iPlanID
        cState
        sMsg (iResult=0时存放失败信息; )
----------------------------------------------------------------------*/
void GET_COMMAND(TPSVCINFO *rqst)
{
    TParseBuff ParaList;
    char *sQqstBuf;
    sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
		
    int iLen = rqst->len;
    memcpy(sQqstBuf, rqst->data, iLen);
    sQqstBuf[iLen] = 0;
    TrimHeadNull(sQqstBuf,iLen);
    
    DEFINE_QUERY(qry);
    qry.commit();
		qry.close();
		
    int iRet = ParaList.parseBuff(sQqstBuf);
    if (!iRet){
        ParaList.reset();
        ParaList.setResult(0);
        ParaList.addMsg("输入参数不合法!");
        ParaList.getBuiltStr(sQqstBuf);
        tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
    }
    
    //lock signal
    LockSafe(g_pShmTable->m_iClientLock,0);
    g_pShmTable->ClientReqInfo.m_iHostID = ParaList.getHostID();
    g_pShmTable->ClientReqInfo.m_iIndex = ParaList.getLogID();
    g_pShmTable->ClientReqInfo.m_iStatus = REQ_GET_COMMAND;
    
    ParaList.reset();
    int iTimeOut = 0;
    while(g_pShmTable->ClientReqInfo.m_iStatus == REQ_GET_COMMAND)
    { //wait...
        usleep(USLEEP_LONG);
        if (iTimeOut++ > TIME_OUT) { 
            ParaList.setResult(0); //time out
            ParaList.addMsg("获取指令超时!");            
            ParaList.getBuiltStr(sQqstBuf);            
            UnlockSafe(g_pShmTable->m_iClientLock,0);
            tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
        }
    }
    
    //主守护进程处理后的状态可能有:
    //REQ_COMMAND_RECV CLIENT_LOG_DEAD REQ_NO_COMMAND
    if (g_pShmTable->ClientReqInfo.m_iStatus == REQ_COMMAND_RECV){
        ParaList.setResult(1);
        ParaList.setOperation(g_pShmTable->ClientReqInfo.m_iOperation);
        ParaList.setProcessID(g_pShmTable->ClientReqInfo.m_iProcessID);
        ParaList.setStaffID(g_pShmTable->ClientReqInfo.m_iStaffID);
        ParaList.setPlanID(g_pShmTable->ClientReqInfo.m_iPlanID);
        ParaList.setState(g_pShmTable->ClientReqInfo.m_cState);
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == CLIENT_LOG_DEAD){
        ParaList.setResult(0);
        ParaList.addMsg("Err: CLIENT_LOG_DEAD");
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == REQ_NO_COMMAND){
        ParaList.setResult(2);
    }
    else {
        ParaList.setResult(0);
        ParaList.addMsg("Err: Unknown reason.");
    }
    ParaList.getBuiltStr(sQqstBuf);
    UnlockSafe(g_pShmTable->m_iClientLock,0);
    tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
}
示例#21
0
void P_GET_TRANSINFO(TPSVCINFO *rqst)
{
	long drawID = 0;
	int iRet = 0;
	char swsnaddr[30];
	char *allrcvbuf = NULL;
	char *rcvbuf = NULL;
	FBFR32 *sendbuf;
	FBFR32 *recvbuf;
	
	char *sendstring;
	char *sendbuf2=NULL;
	int iLen = rqst->len;
	long  i;
	sendstring = new char[iLen];
	memset(sendstring,'\0',iLen);
	sendbuf2 = (char *) tpalloc("STRING", NULL, MAX_CMAMSG_LEN);

	//char *sendbuf = NULL;
	long lRecLen = 0;
	string s_rcvbuff;
	char cRouteKey[30];
	char tmpBuff[30];

	
	memset(swsnaddr,0,sizeof(swsnaddr));
	allrcvbuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
	//rcvbuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
	
	if ((sendbuf = (FBFR32 *)tpalloc("FML32",NULL,MAX_CMAMSG_LEN)) == NULL)
	{
		sprintf(sendbuf2,"<iResult=1><sMsg=sendbuf err>");
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
	
	if ((recvbuf = (FBFR32 *)tpalloc("FML32",NULL,MAX_CMAMSG_LEN)) == NULL)
	{
		sprintf(sendbuf2,"<iResult=1><sMsg=recvbuf err>");
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}

	//sendbuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
	memset(sendstring,0,MAX_CMAMSG_LEN);
	s_rcvbuff.clear();
	
	memcpy(sendstring, rqst->data, iLen);
	sendstring[iLen] = 0;
	TrimHeadNull(sendstring,iLen);
	::PETRI::P_RECVBUFF.reset();
	::PETRI::P_RECVBUFF.parseBuff(sendstring);
	drawID = (long) ::PETRI::P_RECVBUFF.getDrawID();
	
	vector<long> transList;
	transList.clear();
	TOCIQuery query (::PETRI::P_DB.getDB());

	try {
		string sql = "SELECT TRANSITION_ID FROM P_TRANSITION_ATTR WHERE DRAW_ID= :DRAWID AND EXE_STATE = 'R'";
		query.close();
		query.setSQL(sql.c_str());
		query.setParameter("DRAWID",drawID);
		query.open();
		while(query.next()) {
			transList.push_back(query.field(0).asLong());
		}
		query.close();
		query.commit();
	} catch (TOCIException& toe) {
		query.close();
		query.commit();
		sprintf(sendbuf2,"<iResult=1><sMsg=Get Transition of The Draw Error! %s>",toe.getErrMsg());
		tpfree(rcvbuf);
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	} catch (...) {
		query.close();
		query.commit();
		sprintf(sendbuf2,"<iResult=1><sMsg=Get Transition of The Draw Error!> other error");
		tpfree(rcvbuf);
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	};

	if (0 == transList.size()){
		memset(sendbuf2,0,MAX_CMAMSG_LEN);
		tpfree(rcvbuf);
		tpfree((char *)sendbuf);
		query.commit();
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
	
	for (int idx = 0;idx <transList.size();idx ++ ) {

	try {
		string sql = "select b.wsnaddr from P_TRANSITION_HOST_INFO a, WF_HOST_WSNADDR b where a.wsnaddr_id = b.wsnaddr_id and a.transition_id = :TRANSID";			
		query.close();
		query.setSQL(sql.c_str());
		query.setParameter("TRANSID",transList[idx]);
		query.open();
		while(query.next()) {
			strcpy( swsnaddr,query.field(0).asString() );
		}
		query.close();
		
		string sql2 = "select HOST_AREA||HOST_DOMAIN from P_TRANSITION_HOST_INFO where transition_id = :TRANSID";
		query.close();
		query.setSQL(sql2.c_str());
		query.setParameter("TRANSID",transList[idx]);
		query.open();
		while(query.next()) {
			strcpy( tmpBuff,query.field(0).asString());
		}
		query.close();
		query.commit();
	}catch (TOCIException & toe){
		sprintf(sendbuf2,"<iResult=1><lTransitionID=%ld><sMsg=get WSNADDR err:%s>",transList[idx],toe.getErrMsg());
		query.close();
		query.commit();
	} catch(...) {
		sprintf(sendbuf2,"<iResult=1><lTransitionID=%ld><sMsg=get WSNADDR other err>",transList[idx]);
		query.close();
		query.commit();
	}
	if(0 == swsnaddr[0]){
		sprintf(sendbuf2,"<iResult=1><lTransitionID=%ld><sMsg=Transition have no WSNADDR >",transList[idx]);
	}
/*
	iRet = setenv("WSNADDR",swsnaddr,1);
	if( -1 == iRet){
		sprintf(rcvbuf,"<iResult=1><lTransitionID=%ld><sMsg=set WSNADDR fail>",transList[idx]);
	};
*/
	sprintf(sendbuf2,"<lTransitionID=%ld>%s\0",transList[idx],sendstring);
	
	strcpy(cRouteKey, tmpBuff);		
	//iRet = cslfput(&sendbuf,ROUTE_KEY,0,cRouteKey);
	//iRet = Fchg32(&sendbuf,ROUTE_KEY,0,(char*)cRouteKey,(FLDLEN32)10);
	strcpy(cRouteKey, tmpBuff);		
	iRet = Fchg32(sendbuf,ROUTE_KEY,0,(char *)cRouteKey,0);
	//iRet = Fchg32((FBFR32*)(&sendbuf),ROUTE_KEY,0,(char*)cRouteKey,(FLDLEN32)20);
	if(iRet < 0)
	{
		userlog("cRouteKey=[%s],iRet=[%d]",cRouteKey,iRet);
		sprintf(sendbuf2,"<iResult=1><sMsg=cslfput to ROUTE_KEY is error>\0");
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
		
	iRet = Fchg32(sendbuf,SEND_STRING,0,(char *)sendbuf2,0);
	if(iRet < 0)
	{
		userlog("sendstring=[%s],iRet=[%d]",sendstring,iRet);

		sprintf(sendbuf2,"<iResult=1><sMsg=cslfput to SEND_STRING is error>\0");
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
		

	
	iRet = tpcall("P_G_T_LOCAL",(char *)sendbuf,0,(char **)&recvbuf,&lRecLen,0);  


    if (iRet < 0){
		sprintf(sendbuf2,"<iResult=1><lTransitionID=%ld><sMsg=call localsvc err,tperrno:%d>\0",transList[idx],tperrno);
	}
	userlog(sendbuf2);
	s_rcvbuff = s_rcvbuff + "$" + sendbuf2;
	}
	
	sprintf (allrcvbuf,"%s\0",s_rcvbuff.c_str());
	tpfree((char *)sendbuf);
	tpfree((char *)rcvbuf);
	
	tpreturn(TPSUCCESS,0L,allrcvbuf,MAX_CMAMSG_LEN,0L);
	
}
示例#22
0
void P_CHANGE_STATUS(TPSVCINFO *rqst)
{
	long ltransID=0;
	int iRet=0;
	char swsnaddr[30];
	FBFR32 *sendbuf;
	FBFR32 *recvbuf;
	
	char *sendstring;
	char *sendbuf2=NULL;
	int iLen = rqst->len;
	long  i;
	sendstring = new char[iLen];
	memset(sendstring,'\0',iLen);
	sendbuf2 = (char *) tpalloc("STRING", NULL, MAX_CMAMSG_LEN);
	
	//char *rcvbuf = NULL;
	//char *sendbuf = NULL;
	long lRecLen = 0;
	char cRouteKey[30];
	char tmpBuff[30];
	memset(swsnaddr,0,sizeof(swsnaddr));
	//rcvbuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
	//sendbuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
	if ((sendbuf = (FBFR32 *)tpalloc("FML32",NULL,MAX_CMAMSG_LEN)) == NULL)
	{
		sprintf(sendbuf2,"<iResult=1><sMsg=sendbuf err>");
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
	
	if ((recvbuf = (FBFR32 *)tpalloc("FML32",NULL,MAX_CMAMSG_LEN)) == NULL)
	{
		sprintf(sendbuf2,"<iResult=1><sMsg=recvbuf err>");
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
	
	//int iLen = rqst->len;
	memcpy(sendstring, rqst->data, iLen);
	sendstring[iLen] = 0;
	TrimHeadNull(sendstring,iLen);
	::PETRI::P_RECVBUFF.reset();
	::PETRI::P_RECVBUFF.parseBuff(sendstring);
	ltransID = ::PETRI::P_RECVBUFF.getTransitionID();
	
	TOCIQuery query (::PETRI::P_DB.getDB());
	try {
		string sql = "select b.wsnaddr from P_TRANSITION_HOST_INFO a, WF_HOST_WSNADDR b where a.wsnaddr_id = b.wsnaddr_id and a.transition_id = :TRANSID";					
		query.close();
		query.setSQL(sql.c_str());
		query.setParameter("TRANSID",ltransID);
		query.open();
		while(query.next()) {
			strcpy( swsnaddr,query.field(0).asString() );
		}
		query.close();

		string sql2 = "select HOST_AREA||HOST_DOMAIN from P_TRANSITION_HOST_INFO where transition_id = :TRANSID";
		query.close();
		query.setSQL(sql2.c_str());
		query.setParameter("TRANSID",ltransID);
		query.open();
		while(query.next()) {
			strcpy( tmpBuff,query.field(0).asString());
		}
		query.close();
		query.commit();
		
	}catch (TOCIException & toe){
		sprintf(sendbuf2,"<iResult=1><sMsg=get WSNADDR err:%s>",toe.getErrMsg());
		query.close();
		query.commit();
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	} catch(...) {
		sprintf(sendbuf2,"<iResult=1><sMsg=get WSNADDR other err>");
		query.close();
		query.commit();
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
	if(0 == swsnaddr[0]){
		sprintf(sendbuf2,"<iResult=1><sMsg=Transition have no WSNADDR >");
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
/*
	iRet = setenv("WSNADDR",swsnaddr,1);
	if( -1 == iRet){
		sprintf(rcvbuf,"<iResult=1><sMsg=set WSNADDR fail>");
		tpfree(sendbuf);
		tpreturn(TPSUCCESS,0L,rcvbuf,strlen(rcvbuf),0L);
	};
	*/
	strcpy(cRouteKey, tmpBuff);		
	//iRet = Fchg32(&sendbuf,ROUTE_KEY,0,(char*)cRouteKey,(FLDLEN32)10);
	iRet = Fchg32(sendbuf,ROUTE_KEY,0,(char *)cRouteKey,0);
	if(iRet < 0)
	{
		userlog("cRouteKey=[%s],iRet=[%d]",cRouteKey,iRet);
		sprintf(sendbuf2,"<iResult=1><sMsg=cslfput to ROUTE_KEY is error>");
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
	
	iRet = Fchg32(sendbuf,SEND_STRING,0,(char *)sendstring,0);
	if(iRet < 0)
	{
		userlog("sendstring=[%s],iRet=[%d]",sendstring,iRet);

		sprintf(sendbuf2,"<iResult=1><sMsg=cslfput to SEND_STRING is error>");
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
	
	
	iRet = tpcall("P_C_S_LOCAL",(char *)sendbuf,0,(char **)&recvbuf,&lRecLen,0);   
    if (iRet < 0){
		sprintf(sendbuf2,"<iResult=1><sMsg=call localsvc err,tperrno:%d>",tperrno);
		tpfree((char *)sendbuf);
		tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	}
	
	tpfree((char *)sendbuf);
	sprintf(sendbuf2,"<iResult=0><sMsg=you tpcall  success>");
	tpreturn(TPSUCCESS,0L,sendbuf2,MAX_CMAMSG_LEN,0L);
	
}
示例#23
0
    void P_C_S_LOCAL(TPSVCINFO *rqst)
    {
        char *sQqstBuf;
        //sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
        //int iLen = rqst->len;
        //memcpy(sQqstBuf, rqst->data, iLen);

        sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
        int iRet = 0;
        FBFR32  *recvbuf = NULL;
        //recvbuf=(FBFR32 *) tpalloc("FML32",NULL,MAX_CMAMSG_LEN);

        FBFR32  *sendbuf = NULL;
        sendbuf=(FBFR32 *)tpalloc("FML32",NULL,MAX_CMAMSG_LEN);

        int iLen = rqst->len;
        //memcpy(sQqstBuf, rqst->data, iLen);
        //memcpy(recvbuf, rqst->data, iLen);
        recvbuf=(FBFR32 *)rqst->data;

        Fget32(recvbuf, SEND_STRING, 0, sQqstBuf, 0);



        //sQqstBuf[iLen] = 0;
        TrimHeadNull(sQqstBuf,iLen);


        ::PETRI::P_CMDMSG->mtype = (long)pid;
        sprintf(::PETRI::P_CMDMSG->mbody,"<iNeedAck=1>%s\0",sQqstBuf);
        while ( ::PETRI::P_MQ.ackMQ.receive(pid) ) {
            userlog("%ld,%s\n",::PETRI::P_ACKMSG->mtype,::PETRI::P_ACKMSG->mbody);
        };
        if(!(::PETRI::P_MQ.cmdMQ.send())) {
            tpfree((char *)recvbuf);
            memset(sQqstBuf,0,MAX_CMAMSG_LEN);
            strcpy(sQqstBuf,"<iResult=1><sMsg=MQ Send Fail>");
            iRet = Fchg32(recvbuf,SEND_STRING,0,(char *)sQqstBuf,0);
            if( iRet > 0 )
                tpreturn(TPSUCCESS,0L,(char *)recvbuf,strlen(sQqstBuf),0L);
            else
                userlog("P_F_LOCAL Error sQqstBuf!");
        }
        int iTime=0;
        bool ifAck = false;

        while ( iTime++ < WAIT_TIME ) {
            if (::PETRI::P_MQ.ackMQ.receive(pid)) {
                ifAck = true;
                break;
            }
            sleep(1);
        }

        if (ifAck) {
            strcpy(sQqstBuf,::PETRI::P_ACKMSG->mbody);
            userlog(::PETRI::P_ACKMSG->mbody);
        }
        /*
        else {
        	while ( ::PETRI::P_MQ.cmdMQ.receive(pid) ){};
        	strcpy(sQqstBuf,"<iResult=1><sMsg=schd order send OK,wait result timeOut>");
        }
        */
        //strcpy(sQqstBuf,"OK");
        //tpfree((char *)recvbuf);
        char sTemp[10]="OK";
        //iRet = Fchg32(recvbuf,SEND_STRING,0,(char *)sQqstBuf,0);
        iRet = Fchg32(sendbuf,SEND_STRING,0,(char *)sTemp,0);
        userlog("iRet=[%d]",iRet);
        tpreturn(TPSUCCESS,0L,(char *)sendbuf,MAX_CMAMSG_LEN,0);


        //tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);



    }
示例#24
0
void login(TPSVCINFO *rqst)
{

	tpreturn(TPSUCCESS,0,rqst->data,0L,0);
}