32 #include "lixa_trace.h"
40 #ifdef LIXA_TRACE_MODULE
41 # undef LIXA_TRACE_MODULE
43 #define LIXA_TRACE_MODULE LIXA_TRACE_MOD_XTA
48 int multiple_branches)
50 enum Exception { STRDUP_ERROR
55 char *tmp_branch_qualifier = NULL;
57 LIXA_TRACE((
"xta_xid_new: branch_qualifier=%s, multiple_branches=%d\n",
58 branch_qualifier, multiple_branches));
63 if (NULL == (tmp_branch_qualifier = strdup(branch_qualifier)))
68 THROW(G_TRY_MALLOC_ERROR);
72 tmp_branch_qualifier))
75 tmp_branch_qualifier))
78 lixa_xid_set_bqual(tmp_branch_qualifier, tmp_bqual);
80 lixa_xid_create_new(tmp_bqual, &this->xa_xid);
88 case G_TRY_MALLOC_ERROR:
99 if (NULL != tmp_branch_qualifier) {
100 free(tmp_branch_qualifier);
101 tmp_branch_qualifier = NULL;
103 LIXA_TRACE((
"xta_xid_new/excp=%d/"
104 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
112 int ret_value = FALSE;
113 switch (branch_qualifier[0]) {
130 LIXA_TRACE((
"xta_xid_branch_qualifier_is_multibranch: "
131 "branch_qualifier=%s, ret_value=%d\n", branch_qualifier,
140 int ret_value = FALSE;
141 LIXA_TRACE((
"xta_xid_branch_qualifier_set_multibranch: "
142 "branch_qualifier=%s\n", branch_qualifier));
143 switch (branch_qualifier[0]) {
147 branch_qualifier[0] =
'0';
153 branch_qualifier[0] =
'2';
159 branch_qualifier[0] =
'4';
165 branch_qualifier[0] =
'6';
171 branch_qualifier[0] =
'8';
178 branch_qualifier[0] =
'a';
182 branch_qualifier[0] =
'A';
189 branch_qualifier[0] =
'c';
193 branch_qualifier[0] =
'C';
200 branch_qualifier[0] =
'e';
204 branch_qualifier[0] =
'E';
208 LIXA_TRACE((
"xta_xid_branch_qualifier_set_multibranch: "
209 "branch_qualifier[0]='%c' (%s), this is an INTERNAL "
210 "ERROR\n", branch_qualifier[0], branch_qualifier));
212 LIXA_TRACE((
"xta_xid_branch_qualifier_set_multibranch: "
213 "branch_qualifier=%s\n", branch_qualifier));
221 int ret_value = FALSE;
222 LIXA_TRACE((
"xta_xid_branch_qualifier_unset_multibranch: "
223 "branch_qualifier=%s\n", branch_qualifier));
224 switch (branch_qualifier[0]) {
226 branch_qualifier[0] =
'1';
232 branch_qualifier[0] =
'3';
238 branch_qualifier[0] =
'5';
244 branch_qualifier[0] =
'7';
250 branch_qualifier[0] =
'9';
257 branch_qualifier[0] =
'B';
265 branch_qualifier[0] =
'D';
273 branch_qualifier[0] =
'F';
280 LIXA_TRACE((
"xta_xid_branch_qualifier_unset_multibranch: "
281 "branch_qualifier[0]='%c' (%s), this is an INTERNAL "
282 "ERROR\n", branch_qualifier[0], branch_qualifier));
284 LIXA_TRACE((
"xta_xid_branch_qualifier_unset_multibranch: "
285 "branch_qualifier=%s\n", branch_qualifier));
293 enum Exception { G_TRY_MALLOC_ERROR
294 , LIXA_XID_DESERIALIZE_ERROR
299 LIXA_TRACE((
"xta_xid_new_from_string\n"));
304 THROW(G_TRY_MALLOC_ERROR);
306 if (!lixa_xid_deserialize(&this->xa_xid, xid_string))
307 THROW(LIXA_XID_DESERIALIZE_ERROR);
312 case G_TRY_MALLOC_ERROR:
315 case LIXA_XID_DESERIALIZE_ERROR:
330 LIXA_TRACE((
"xta_xid_new_from_string/excp=%d/"
331 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
339 enum Exception { NULL_OBJECT
345 LIXA_TRACE((
"xta_xid_new_from_XID\n"));
353 THROW(G_TRY_MALLOC_ERROR);
355 memcpy(&this->xa_xid, xid,
sizeof(
XID));
363 case G_TRY_MALLOC_ERROR:
378 LIXA_TRACE((
"xta_xid_new_from_XID/excp=%d/"
379 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
387 enum Exception { NULL_OBJECT
393 LIXA_TRACE((
"xta_xid_dup\n"));
400 THROW(G_TRY_MALLOC_ERROR);
402 this->xa_xid = xid->
xa_xid;
410 case G_TRY_MALLOC_ERROR:
425 LIXA_TRACE((
"xta_xid_dup/excp=%d/"
426 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
434 enum Exception { NONE } excp;
437 LIXA_TRACE((
"xta_xid_delete\n"));
451 LIXA_TRACE((
"xta_xid_delete/excp=%d/"
452 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
460 enum Exception { NULL_OBJECT
463 const XID *xa_xid = NULL;
465 LIXA_TRACE((
"xta_xid_get_xa_xid\n"));
484 LIXA_TRACE((
"xta_xid_get_xa_xid/excp=%d/"
485 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
493 enum Exception { NULL_OBJECT
495 , LIXA_XID_SERIALIZE_ERROR
500 LIXA_TRACE((
"xta_xid_to_string\n"));
506 if (NULL == (
string = malloc(
sizeof(lixa_ser_xid_t))))
508 if (!lixa_xid_serialize(&xid->
xa_xid, lsx))
509 THROW(LIXA_XID_SERIALIZE_ERROR);
510 strncpy(
string, lsx,
sizeof(lixa_ser_xid_t));
521 case LIXA_XID_SERIALIZE_ERROR:
530 LIXA_TRACE((
"xta_xid_to_string/excp=%d/"
531 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
539 enum Exception { NONE } excp;
542 LIXA_TRACE((
"xta_xid_reset\n"));
544 lixa_xid_reset(&xid->
xa_xid);
556 LIXA_TRACE((
"xta_xid_reset/excp=%d/"
557 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
564 return lixa_xid_get_gtrid(&xid->
xa_xid, gtrid);
570 return lixa_xid_get_bqual(&xid->
xa_xid, bqual);
576 return lixa_xid_get_formatID(&xid->
xa_xid);
void xta_xid_delete(xta_xid_t *xid)
int xta_xid_branch_qualifier_set_multibranch(char *branch_qualifier)
long xta_xid_get_bqual(const xta_xid_t *xid, char *bqual)
#define LIXA_RC_STRDUP_ERROR
#define LIXA_RC_NULL_OBJECT
#define LIXA_RC_INTERNAL_ERROR
int xta_xid_branch_qualifier_is_multibranch(const char *branch_qualifier)
xta_xid_t * xta_xid_dup(const xta_xid_t *xid)
xta_xid_t * xta_xid_new_from_XID(const XID *xid)
#define LIXA_RC_MALLOC_ERROR
xta_xid_t * xta_xid_new(const char *branch_qualifier, int multiple_branches)
xta_xid_t * xta_xid_new_from_string(const char *xid_string)
const XID * xta_xid_get_xa_xid(const xta_xid_t *xid)
#define LIXA_RC_G_TRY_MALLOC_ERROR
long xta_xid_get_gtrid(const xta_xid_t *xid, char *gtrid)
void xta_xid_reset(xta_xid_t *xid)
int xta_xid_branch_qualifier_unset_multibranch(char *branch_qualifier)
#define LIXA_RC_MALFORMED_XID
char * xta_xid_to_string(const xta_xid_t *xid)
long xta_xid_get_formatID(const xta_xid_t *xid)