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 <string.h>
0035 #include <stdio.h>
0036 #include <stdint.h>
0037 #include <stdlib.h>
0038 #include <memory.h>
0039 #include <errno.h>
0040 #include <dlfcn.h>
0041
0042 #include <atmi.h>
0043 #include <atmi_shm.h>
0044 #include <ndrstandard.h>
0045 #include <ndebug.h>
0046 #include <ndrxdcmn.h>
0047 #include <userlog.h>
0048 #include <xa_cmn.h>
0049 #include <Exfields.h>
0050 #include <ubfutil.h>
0051
0052 #include "tperror.h"
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 exprivate int tplog_compare_set_file(char *new_file)
0067 {
0068 int changed = EXFALSE;
0069 int have_reqfile;
0070 char cur_filename[PATH_MAX];
0071
0072 have_reqfile = tploggetreqfile(cur_filename, sizeof(cur_filename));
0073
0074 if (have_reqfile && 0==strcmp(new_file, cur_filename))
0075 {
0076 NDRX_LOG(log_warn, "Already logging to [%s] - not changing...", cur_filename);
0077 changed=EXFALSE;
0078 }
0079 else
0080 {
0081
0082 tplogsetreqfile_direct(new_file);
0083 changed=EXTRUE;
0084 }
0085
0086 return changed;
0087 }
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 expublic int ndrx_tplogsetreqfile(char **data, char *filename, char *filesvc)
0098 {
0099 int ret = EXSUCCEED;
0100 char btype[16] = {EXEOS};
0101 char stype[16] = {EXEOS};
0102
0103 char ubf_filename[PATH_MAX] = {EXEOS};
0104
0105 int buf_len;
0106 UBFH **p_ub = NULL;
0107
0108
0109
0110
0111
0112
0113 if (NULL!=data && NULL!=*data)
0114 {
0115 if (EXFAIL==ndrx_tptypes(*data, btype, stype))
0116 {
0117 EXFAIL_OUT(ret);
0118 }
0119
0120
0121 if (0==strcmp(btype, "UBF") || 0==strcmp(btype, "FML") ||
0122 0==strcmp(btype, "FML32"))
0123 {
0124 p_ub = (UBFH **)data;
0125 buf_len = sizeof(ubf_filename);
0126
0127 if (Bpres(*p_ub, EX_NREQLOGFILE, 0))
0128 {
0129 if (EXSUCCEED!=Bget(*p_ub, EX_NREQLOGFILE, 0, ubf_filename, &buf_len))
0130 {
0131 NDRX_LOG(log_error, "Failed to get EX_NREQLOGFILE: %s",
0132 Bstrerror(Berror));
0133 ndrx_TPset_error_fmt(TPESYSTEM, "Failed to get EX_NREQLOGFILE: %s",
0134 Bstrerror(Berror));
0135 EXFAIL_OUT(ret);
0136 }
0137
0138
0139
0140 if (NULL!=filename && EXEOS!=filename[0])
0141 {
0142
0143 tplog_compare_set_file(filename);
0144
0145 if (0!=strcmp(ubf_filename, filename))
0146 {
0147
0148 if (EXSUCCEED!=Bchg(*p_ub, EX_NREQLOGFILE, 0, filename, 0L))
0149 {
0150 NDRX_LOG(log_error, "Failed to set EX_NREQLOGFILE: %s",
0151 Bstrerror(Berror));
0152
0153 ndrx_TPset_error_fmt(TPESYSTEM, "Failed to set EX_NREQLOGFILE: %s",
0154 Bstrerror(Berror));
0155
0156 EXFAIL_OUT(ret);
0157 }
0158 }
0159 }
0160 else if (EXEOS!=ubf_filename[0])
0161 {
0162
0163 tplog_compare_set_file(ubf_filename);
0164 }
0165 else
0166 {
0167 NDRX_LOG(log_warn, "Cannot set request log file: "
0168 "no name in buffer, no name in 'filename'!");
0169 ndrx_TPset_error_msg(TPEINVAL, "Cannot set request log file: "
0170 "no name in buffer, no name in 'filename'!");
0171 EXFAIL_OUT(ret);
0172 }
0173 }
0174 else if (NULL!=filename && EXEOS!=filename[0])
0175 {
0176
0177 tplog_compare_set_file(filename);
0178
0179
0180 if (EXSUCCEED!=Bchg(*p_ub, EX_NREQLOGFILE, 0, filename, 0L))
0181 {
0182 NDRX_LOG(log_error, "Failed to set EX_NREQLOGFILE: %s",
0183 Bstrerror(Berror));
0184
0185 ndrx_TPset_error_fmt(TPESYSTEM, "Failed to set EX_NREQLOGFILE: %s",
0186 Bstrerror(Berror));
0187
0188 EXFAIL_OUT(ret);
0189 }
0190 }
0191 else if (NULL!=filesvc && EXEOS!=filesvc[0])
0192 {
0193 long rsplen;
0194 NDRX_LOG(log_debug, "About to call [%s] for new request "
0195 "file log name", filesvc);
0196
0197 if (EXFAIL == tpcall(filesvc, (char *)*data, 0L, (char **)data, &rsplen,TPNOTRAN))
0198 {
0199 NDRX_LOG(log_error, "%s failed: %s", filesvc, tpstrerror(tperrno));
0200
0201 EXFAIL_OUT(ret);
0202 }
0203 else
0204 {
0205
0206
0207
0208 if (EXSUCCEED!=ndrx_tplogsetreqfile(data, filename, NULL))
0209 {
0210 EXFAIL_OUT(ret);
0211 }
0212 }
0213 }
0214 else
0215 {
0216 NDRX_LOG(log_warn, "Cannot set request log file: "
0217 "empty name in buffer, no name in 'filename'!");
0218 ndrx_TPset_error_msg(TPEINVAL, "Cannot set request log file: "
0219 "empty name in buffer, no name in 'filename'!");
0220 EXFAIL_OUT(ret);
0221 }
0222 }
0223 else
0224 {
0225 NDRX_LOG(log_debug, "Buffer no UBF - cannot test request file");
0226 tplog_compare_set_file(filename);
0227 }
0228 }
0229
0230
0231
0232 else if (NULL!=filename && EXEOS!=filename[0])
0233 {
0234
0235 tplog_compare_set_file(filename);
0236 }
0237 else
0238 {
0239 NDRX_LOG(log_warn, "Cannot set request log file: "
0240 "no buffer and no name in 'filename'!");
0241 ndrx_TPset_error_msg(TPEINVAL, "Cannot set request log file: "
0242 "no buffer and no name in 'filename'!");
0243 EXFAIL_OUT(ret);
0244 }
0245
0246 out:
0247 return ret;
0248 }
0249
0250
0251
0252
0253
0254
0255
0256
0257 expublic int ndrx_tploggetbufreqfile(char *data, char *filename, int bufsize)
0258 {
0259 int ret = EXSUCCEED;
0260 char btype[16] = {EXEOS};
0261 char stype[16] = {EXEOS};
0262 UBFH *p_ub;
0263 int buf_len;
0264
0265 if (NULL!=data)
0266 {
0267 if (EXFAIL==ndrx_tptypes(data, btype, stype))
0268 {
0269 EXFAIL_OUT(ret);
0270 }
0271
0272
0273 if (0==strcmp(btype, "UBF") || 0==strcmp(btype, "FML") ||
0274 0==strcmp(btype, "FML32"))
0275 {
0276 p_ub = (UBFH *)data;
0277 buf_len = bufsize;
0278
0279 if (Bpres(p_ub, EX_NREQLOGFILE, 0))
0280 {
0281 if (EXSUCCEED!=Bget(p_ub, EX_NREQLOGFILE, 0, filename, &buf_len))
0282 {
0283 NDRX_LOG(log_error, "Failed to get EX_NREQLOGFILE: %s",
0284 Bstrerror(Berror));
0285 ndrx_TPset_error_fmt(TPENOENT, "Failed to get EX_NREQLOGFILE: %s",
0286 Bstrerror(Berror));
0287 EXFAIL_OUT(ret);
0288 }
0289 }
0290 else
0291 {
0292 ndrx_TPset_error_fmt(TPENOENT, "No file exists: %s",
0293 Bstrerror(Berror));
0294 EXFAIL_OUT(ret);
0295 }
0296 }
0297 else
0298 {
0299 ndrx_TPset_error_fmt(TPEINVAL, "Not UBF buffer: %s",
0300 Bstrerror(Berror));
0301 EXFAIL_OUT(ret);
0302 }
0303 }
0304 else
0305 {
0306 ndrx_TPset_error_fmt(TPEINVAL, "Null buffer: %s",
0307 Bstrerror(Berror));
0308 EXFAIL_OUT(ret);
0309 }
0310
0311
0312 out:
0313 return ret;
0314 }
0315
0316
0317
0318
0319
0320
0321
0322 expublic int ndrx_tplogdelbufreqfile(char *data)
0323 {
0324 int ret = EXSUCCEED;
0325 char btype[16] = {EXEOS};
0326 char stype[16] = {EXEOS};
0327 UBFH *p_ub;
0328
0329 if (NULL!=data)
0330 {
0331 if (EXFAIL==ndrx_tptypes(data, btype, stype))
0332 {
0333 EXFAIL_OUT(ret);
0334 }
0335
0336
0337 if (0==strcmp(btype, "UBF") || 0==strcmp(btype, "FML") ||
0338 0==strcmp(btype, "FML32"))
0339 {
0340 p_ub = (UBFH *)data;
0341
0342 if (Bpres(p_ub, EX_NREQLOGFILE, 0))
0343 {
0344 if (EXSUCCEED!=Bdel(p_ub, EX_NREQLOGFILE, 0))
0345 {
0346 NDRX_LOG(log_error, "Failed to get EX_NREQLOGFILE: %s",
0347 Bstrerror(Berror));
0348 ndrx_TPset_error_fmt(TPENOENT, "Failed to get EX_NREQLOGFILE: %s",
0349 Bstrerror(Berror));
0350 EXFAIL_OUT(ret);
0351 }
0352 }
0353 else
0354 {
0355 ndrx_TPset_error_fmt(TPENOENT, "No file exists: %s",
0356 Bstrerror(Berror));
0357 EXFAIL_OUT(ret);
0358 }
0359 }
0360 else
0361 {
0362 ndrx_TPset_error_fmt(TPEINVAL, "Not UBF buffer: %s",
0363 Bstrerror(Berror));
0364 EXFAIL_OUT(ret);
0365 }
0366 }
0367 else
0368 {
0369 ndrx_TPset_error_fmt(TPEINVAL, "Null buffer: %s",
0370 Bstrerror(Berror));
0371 EXFAIL_OUT(ret);
0372 }
0373
0374 out:
0375 return ret;
0376 }
0377