0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 #include <stdio.h>
0035 #include <stdlib.h>
0036 #include <ndebug.h>
0037 #include <atmi.h>
0038 #include <ndrstandard.h>
0039 #include <ubf.h>
0040 #include <test.fd.h>
0041 #include <string.h>
0042 #include <unistd.h>
0043 #include "test67.h"
0044 #include <libpq-fe.h>
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057 int shared_svc_func(TPSVCINFO *p_svc)
0058 {
0059 int ret=EXSUCCEED;
0060 char testbuf[1024];
0061 UBFH *p_ub = (UBFH *)p_svc->data;
0062 PGresult* res;
0063 PGconn *conn;
0064 const char *const values[] = {testbuf};
0065
0066 tplogprintubf(log_debug, "Got UBF", p_ub);
0067
0068 if (EXFAIL==CBget(p_ub, T_LONG_FLD, 0, testbuf, 0, BFLD_STRING))
0069 {
0070 NDRX_LOG(log_error, "TESTERROR: Failed to get T_LONG_FLD: %s",
0071 Bstrerror(Berror));
0072 EXFAIL_OUT(ret);
0073 }
0074
0075 conn = (PGconn *)tpgetconn();
0076
0077 if (NULL==conn)
0078 {
0079 NDRX_LOG(log_error, "TESTERROR: Failed to get connection: %s",
0080 tpstrerror(tperrno));
0081 EXFAIL_OUT(ret);
0082 }
0083
0084 res = PQexecParams(conn,
0085 "INSERT INTO EXTEST(userid) VALUES ($1)",
0086 1,
0087 NULL,
0088 values,
0089 NULL,
0090 NULL,
0091 0);
0092
0093 if (PQresultStatus(res) != PGRES_COMMAND_OK)
0094 {
0095 NDRX_LOG(log_error, "SELECT failed: %s", PQerrorMessage(conn));
0096 PQclear(res);
0097 EXFAIL_OUT(ret);
0098 }
0099
0100 out:
0101 return ret;
0102 }
0103
0104
0105
0106
0107
0108 void TESTSV (TPSVCINFO *p_svc)
0109 {
0110 int ret;
0111 ret = shared_svc_func(p_svc);
0112
0113 tpreturn( ret==EXSUCCEED?TPSUCCESS:TPFAIL,
0114 0L,
0115 p_svc->data,
0116 0L,
0117 0L);
0118 }
0119
0120
0121
0122
0123 void TOUTSV (TPSVCINFO *p_svc)
0124 {
0125 int ret=EXSUCCEED;
0126 UBFH *p_ub = (UBFH *)p_svc->data;
0127
0128 sleep(60);
0129
0130 out:
0131 tpreturn( ret==EXSUCCEED?TPSUCCESS:TPFAIL,
0132 0L,
0133 (char *)p_ub,
0134 0L,
0135 0L);
0136 }
0137
0138
0139
0140
0141 void FAILSV (TPSVCINFO *p_svc)
0142 {
0143 int ret;
0144
0145
0146 ret = shared_svc_func(p_svc);
0147
0148
0149 tpreturn( TPFAIL,
0150 0L,
0151 p_svc->data,
0152 0L,
0153 0L);
0154 }
0155
0156
0157
0158
0159 int NDRX_INTEGRA(tpsvrinit)(int argc, char **argv)
0160 {
0161 int ret = EXSUCCEED;
0162 NDRX_LOG(log_debug, "tpsvrinit called");
0163
0164
0165
0166
0167 if (EXSUCCEED!=tpopen())
0168 {
0169 NDRX_LOG(log_error, "Failed to tpopen: %s", tpstrerror(tperrno));
0170 EXFAIL_OUT(ret);
0171 }
0172
0173 if (EXSUCCEED!=tpadvertise("TESTSV", TESTSV))
0174 {
0175 NDRX_LOG(log_error, "Failed to initialise TESTSV: %s", tpstrerror(tperrno));
0176 EXFAIL_OUT(ret);
0177 }
0178 else if (EXSUCCEED!=tpadvertise("TOUTSV", TOUTSV))
0179 {
0180 NDRX_LOG(log_error, "Failed to initialise TOUTSV: %s", tpstrerror(tperrno));
0181 EXFAIL_OUT(ret);
0182 }
0183 else if (EXSUCCEED!=tpadvertise("FAILSV", FAILSV))
0184 {
0185 NDRX_LOG(log_error, "Failed to initialise FAILSV: %s", tpstrerror(tperrno));
0186 EXFAIL_OUT(ret);
0187 }
0188
0189
0190 out:
0191 return ret;
0192 }
0193
0194
0195
0196
0197 void NDRX_INTEGRA(tpsvrdone)(void)
0198 {
0199 NDRX_LOG(log_debug, "tpsvrdone called");
0200 tpclose();
0201 }
0202
0203