/************************************* * 功能: 会话发送 * * 参数: cd: 连接描述符 * * data: 发送数据缓冲区 * * len: 发送数据包长度 * * flags:控制标志 * * 返回值: * * >0 成功 * * <0 失败 * **************************************/ int cslsend(int cd,char *data,long len,long flags) { int i; long test; if ((i=tpsend(cd,data,len,flags,&test))==-1) { if (tperrno==TPEEVENT) { switch ((int)test) { case TPEV_DISCONIMM: return (0-TuxedoErrNo[23].ierrno); case TPEV_SVCERR : return (0-TuxedoErrNo[24].ierrno); case TPEV_SVCFAIL: return (0-TuxedoErrNo[25].ierrno); } } else return(0-TuxedoErrNo[tperrno].ierrno); } else return i; }
/* * Do the test call to the server */ int main(int argc, char** argv) { UBFH *p_ub = (UBFH *)tpalloc("UBF", NULL, 1024); long rsplen; int i; int ret=SUCCEED; double d; double dv = 55.66; int cd; long revent; int received = 0; char tmp[126]; Badd(p_ub, T_STRING_FLD, "THIS IS TEST FIELD 1", 0); Badd(p_ub, T_STRING_FLD, "THIS IS TEST FIELD 2", 0); Badd(p_ub, T_STRING_FLD, "THIS IS TEST FIELD 3", 0); if (FAIL==(cd=tpconnect("CONVSV", (char *)p_ub, 0L, TPRECVONLY))) { NDRX_LOG(log_error, "TESTSV connect failed!: %s", tpstrerror(tperrno)); ret=FAIL; goto out; } /* Recieve the stuff back */ NDRX_LOG(log_debug, "About to tprecv!"); while (SUCCEED==tprecv(cd, (char **)&p_ub, 0L, 0L, &revent)) { received++; NDRX_LOG(log_debug, "MSG RECEIVED OK!"); } /* If we have event, we would like to become recievers if so */ if (TPEEVENT==tperrno) { received++; sprintf(tmp, "CLT: %d", received); Badd(p_ub, T_STRING_FLD, tmp, 0L); if (TPEV_SENDONLY==revent) { int i=0; /* Start the sending stuff now! */ for (i=0; i<100 && SUCCEED==ret; i++) { ret=tpsend(cd, (char *)p_ub, 0L, 0L, &revent); } } } /* Now give the control to the server, so that he could finish up */ if (FAIL==tpsend(cd, NULL, 0L, TPRECVONLY, &revent)) { NDRX_LOG(log_debug, "Failed to give server control!!"); ret=FAIL; goto out; } NDRX_LOG(log_debug, "Get response from tprecv!"); Bfprint(p_ub, stderr); /* Wait for return from server */ ret=tprecv(cd, (char **)&p_ub, 0L, 0L, &revent); NDRX_LOG(log_error, "tprecv failed with revent=%ld", revent); if (FAIL==ret && TPEEVENT==tperrno && TPEV_SVCSUCC==revent) { NDRX_LOG(log_error, "Service finished with TPEV_SVCSUCC!"); ret=SUCCEED; } if (SUCCEED!=tpterm()) { NDRX_LOG(log_error, "tpterm failed with: %s", tpstrerror(tperrno)); ret=FAIL; goto out; } out: return ret; }