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 <stdlib.h>
0037
0038 #include <ndrstandard.h>
0039 #include <ndebug.h>
0040 #include <atmi.h>
0041 #include <tmenv.h>
0042
0043 #include <xa.h>
0044
0045 #include "atmi_tls.h"
0046
0047
0048
0049
0050
0051
0052 exprivate MUTEX_LOCKDECL(M_init);
0053
0054
0055
0056 expublic int ndrx_nul_xa_open_entry_stat(char *xa_info, int rmid, long flags);
0057 expublic int ndrx_nul_xa_close_entry_stat(char *xa_info, int rmid, long flags);
0058 expublic int ndrx_nul_xa_start_entry_stat(XID *xid, int rmid, long flags);
0059 expublic int ndrx_nul_xa_end_entry_stat(XID *xid, int rmid, long flags);
0060 expublic int ndrx_nul_xa_rollback_entry_stat(XID *xid, int rmid, long flags);
0061 expublic int ndrx_nul_xa_prepare_entry_stat(XID *xid, int rmid, long flags);
0062 expublic int ndrx_nul_xa_commit_entry_stat(XID *xid, int rmid, long flags);
0063 expublic int ndrx_nul_xa_recover_entry_stat(XID *xid, long count, int rmid, long flags);
0064 expublic int ndrx_nul_xa_forget_entry_stat(XID *xid, int rmid, long flags);
0065 expublic int ndrx_nul_xa_complete_entry_stat(int *handle, int *retval, int rmid, long flags);
0066
0067 expublic int ndrx_nul_xa_open_entry(struct xa_switch_t *sw, char *xa_info, int rmid, long flags);
0068 expublic int ndrx_nul_xa_close_entry(struct xa_switch_t *sw, char *xa_info, int rmid, long flags);
0069 expublic int ndrx_nul_xa_start_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags);
0070 expublic int ndrx_nul_xa_end_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags);
0071 expublic int ndrx_nul_xa_rollback_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags);
0072 expublic int ndrx_nul_xa_prepare_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags);
0073 expublic int ndrx_nul_xa_commit_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags);
0074 expublic int ndrx_nul_xa_recover_entry(struct xa_switch_t *sw, XID *xid, long count, int rmid, long flags);
0075 expublic int ndrx_nul_xa_forget_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags);
0076 expublic int ndrx_nul_xa_complete_entry(struct xa_switch_t *sw, int *handle, int *retval, int rmid, long flags);
0077
0078 struct xa_switch_t tmnull_switch =
0079 {
0080 .name = "tmnull_switch",
0081 .flags = TMNOFLAGS,
0082 .version = 0,
0083 .xa_open_entry = ndrx_nul_xa_open_entry_stat,
0084 .xa_close_entry = ndrx_nul_xa_close_entry_stat,
0085 .xa_start_entry = ndrx_nul_xa_start_entry_stat,
0086 .xa_end_entry = ndrx_nul_xa_end_entry_stat,
0087 .xa_rollback_entry = ndrx_nul_xa_rollback_entry_stat,
0088 .xa_prepare_entry = ndrx_nul_xa_prepare_entry_stat,
0089 .xa_commit_entry = ndrx_nul_xa_commit_entry_stat,
0090 .xa_recover_entry = ndrx_nul_xa_recover_entry_stat,
0091 .xa_forget_entry = ndrx_nul_xa_forget_entry_stat,
0092 .xa_complete_entry = ndrx_nul_xa_complete_entry_stat
0093 };
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103 expublic int ndrx_nul_xa_open_entry(struct xa_switch_t *sw, char *xa_info, int rmid, long flags)
0104 {
0105 static int first = EXTRUE;
0106
0107
0108 if (first)
0109 {
0110 MUTEX_LOCK_V(M_init);
0111 if (first)
0112 {
0113 ndrx_xa_nosuspend(EXTRUE);
0114 first=EXFALSE;
0115 }
0116 MUTEX_UNLOCK_V(M_init);
0117 }
0118
0119 if (G_atmi_tls->tmnull_is_open)
0120 {
0121 NDRX_LOG(log_error, "xa_open_entry() - already open!");
0122 return XAER_RMERR;
0123 }
0124
0125 G_atmi_tls->tmnull_is_open = EXTRUE;
0126 G_atmi_tls->tmnull_rmid = rmid;
0127
0128 return XA_OK;
0129 }
0130
0131
0132
0133
0134
0135
0136
0137
0138 expublic int ndrx_nul_xa_close_entry(struct xa_switch_t *sw, char *xa_info, int rmid, long flags)
0139 {
0140 NDRX_LOG(log_info, "xa_close_entry() called");
0141
0142 G_atmi_tls->tmnull_is_open = EXFALSE;
0143 return XA_OK;
0144 }
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155 expublic int ndrx_nul_xa_start_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags)
0156 {
0157 if (!G_atmi_tls->tmnull_is_open)
0158 {
0159 NDRX_LOG(log_error, "xa_start_entry() - XA not open!");
0160 return XAER_RMERR;
0161 }
0162
0163 return XA_OK;
0164 }
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174 expublic int ndrx_nul_xa_end_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags)
0175 {
0176 if (!G_atmi_tls->tmnull_is_open)
0177 {
0178 NDRX_LOG(log_error, "xa_end_entry() - XA not open!");
0179 return XAER_RMERR;
0180 }
0181
0182 out:
0183
0184 return XA_OK;
0185 }
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195 expublic int ndrx_nul_xa_rollback_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags)
0196 {
0197 if (!G_atmi_tls->tmnull_is_open)
0198 {
0199 NDRX_LOG(log_error, "xa_rollback_entry() - XA not open!");
0200 return XAER_RMERR;
0201 }
0202
0203 return XA_OK;
0204 }
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214 expublic int ndrx_nul_xa_prepare_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags)
0215 {
0216 if (!G_atmi_tls->tmnull_is_open)
0217 {
0218 NDRX_LOG(log_error, "xa_prepare_entry() - XA not open!");
0219 return XAER_RMERR;
0220 }
0221
0222 return XA_OK;
0223 }
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233 expublic int ndrx_nul_xa_commit_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags)
0234 {
0235 if (!G_atmi_tls->tmnull_is_open)
0236 {
0237 NDRX_LOG(log_error, "xa_commit_entry() - XA not open!");
0238 return XAER_RMERR;
0239 }
0240
0241 return XA_OK;
0242 }
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253 expublic int ndrx_nul_xa_recover_entry(struct xa_switch_t *sw, XID *xid, long count, int rmid, long flags)
0254 {
0255 if (!G_atmi_tls->tmnull_is_open)
0256 {
0257 NDRX_LOG(log_error, "xa_recover_entry() - XA not open!");
0258 return XAER_RMERR;
0259 }
0260
0261 return 0;
0262 }
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272 expublic int ndrx_nul_xa_forget_entry(struct xa_switch_t *sw, XID *xid, int rmid, long flags)
0273 {
0274 if (!G_atmi_tls->tmnull_is_open)
0275 {
0276 NDRX_LOG(log_error, "xa_forget_entry() - XA not open!");
0277 return XAER_RMERR;
0278 }
0279
0280 NDRX_LOG(log_error, "xa_forget_entry() - not implemented!!");
0281 return XA_OK;
0282 }
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293 expublic int ndrx_nul_xa_complete_entry(struct xa_switch_t *sw, int *handle, int *retval, int rmid, long flags)
0294 {
0295 if (!G_atmi_tls->tmnull_is_open)
0296 {
0297 NDRX_LOG(log_error, "xa_complete_entry() - XA not open!");
0298 return XAER_RMERR;
0299 }
0300
0301 NDRX_LOG(log_error, "xa_complete_entry() - not using!!");
0302 return XAER_RMERR;
0303 }
0304
0305
0306
0307 expublic int ndrx_nul_xa_open_entry_stat( char *xa_info, int rmid, long flags)
0308 {
0309 return ndrx_nul_xa_open_entry(&tmnull_switch, xa_info, rmid, flags);
0310 }
0311 expublic int ndrx_nul_xa_close_entry_stat(char *xa_info, int rmid, long flags)
0312 {
0313 return ndrx_nul_xa_close_entry(&tmnull_switch, xa_info, rmid, flags);
0314 }
0315 expublic int ndrx_nul_xa_start_entry_stat(XID *xid, int rmid, long flags)
0316 {
0317 return ndrx_nul_xa_start_entry(&tmnull_switch, xid, rmid, flags);
0318 }
0319
0320 expublic int ndrx_nul_xa_end_entry_stat(XID *xid, int rmid, long flags)
0321 {
0322 return ndrx_nul_xa_end_entry(&tmnull_switch, xid, rmid, flags);
0323 }
0324 expublic int ndrx_nul_xa_rollback_entry_stat(XID *xid, int rmid, long flags)
0325 {
0326 return ndrx_nul_xa_rollback_entry(&tmnull_switch, xid, rmid, flags);
0327 }
0328 expublic int ndrx_nul_xa_prepare_entry_stat(XID *xid, int rmid, long flags)
0329 {
0330 return ndrx_nul_xa_prepare_entry(&tmnull_switch, xid, rmid, flags);
0331 }
0332
0333 expublic int ndrx_nul_xa_commit_entry_stat(XID *xid, int rmid, long flags)
0334 {
0335 return ndrx_nul_xa_commit_entry(&tmnull_switch, xid, rmid, flags);
0336 }
0337
0338 expublic int ndrx_nul_xa_recover_entry_stat(XID *xid, long count, int rmid, long flags)
0339 {
0340 return ndrx_nul_xa_recover_entry(&tmnull_switch, xid, count, rmid, flags);
0341 }
0342 expublic int ndrx_nul_xa_forget_entry_stat(XID *xid, int rmid, long flags)
0343 {
0344 return ndrx_nul_xa_forget_entry(&tmnull_switch, xid, rmid, flags);
0345 }
0346 expublic int ndrx_nul_xa_complete_entry_stat(int *handle, int *retval, int rmid, long flags)
0347 {
0348 return ndrx_nul_xa_complete_entry(&tmnull_switch, handle, retval, rmid, flags);
0349 }
0350
0351