Back to home page

Enduro/X

 
 

    


0001 /*
0002  * This file as per:
0003  *   The Open Group, Technical Standard
0004  *   Distributed Transaction Processing: The XATMI Specification
0005  * !!! Extended for Enduro/X !!!
0006  */
0007 #ifndef __XATMI_H__
0008 #define __XATMI_H__
0009 
0010 #if defined(__cplusplus)
0011 extern "C" {
0012 #endif
0013 
0014 /*---------------------------Includes-----------------------------------*/
0015 #include <ndrx_config.h>
0016 #include <ndrstandard.h>
0017 #include <stdint.h>
0018 #include <sys/types.h>
0019 #include <ubf.h>
0020 #include <xa.h>
0021 /*---------------------------Macros-------------------------------------*/
0022     
0023 /*
0024  * flag bits for C language xatmi routines
0025  */
0026 #define TPNOBLOCK   0x00000001
0027 #define TPSIGRSTRT  0x00000002
0028 #define TPNOREPLY   0x00000004
0029 #define TPNOTRAN    0x00000008
0030 #define TPTRAN      0x00000010
0031 #define TPNOTIME    0x00000020
0032 #define TPABSOLUTE  0x00000040
0033 #define TPGETANY    0x00000080
0034 #define TPNOCHANGE  0x00000100
0035 #define TPCONV      0x00000400
0036 #define TPSENDONLY  0x00000800
0037 #define TPRECVONLY  0x00001000
0038 #define TPACK       0x00002000
0039 /** Software raised service error, any   */
0040 #define TPSOFTERR   0x00020000
0041 /** Suspend current transaction          */
0042 #define TPTRANSUSPEND   0x00040000
0043 /** Soft timout condition -> ret TPETIME */
0044 #define TPSOFTTIMEOUT   0x00080000
0045 /** Simulate that service is not found   */
0046 #define TPSOFTENOENT    0x00100000
0047 /** Don't restore autbuf in srv context  */
0048 #define TPNOAUTBUF      0x00200000
0049 /** RFU, tux compatiblity */
0050 #define RESERVED_BIT1   0x00400000
0051 /** Use regular expressoins for match    */
0052 #define TPREGEXMATCH    0x00800000
0053 /** Do not lookup cache                  */
0054 #define TPNOCACHELOOK   0x01000000
0055 /** Do not save data to cache            */
0056 #define TPNOCACHEADD    0x02000000
0057 /** Do not use cached data               */
0058 #define TPNOCACHEDDATA  0x04000000
0059 /** Do not abort global transaction, even if service failed */
0060 #define TPNOABORT       0x08000000
0061 
0062 #define TPEVSERVICE 0x00000001
0063 #define TPEVQUEUE       0x00000002 /* RFU */
0064 #define TPEVTRAN        0x00000004 /* RFU */
0065 #define TPEVPERSIST 0x00000008
0066 
0067 #define TPEX_NOCHANGE       0x00000004  /**< Reject tpimport with error if 
0068                                                 types does not match*/
0069 #define TPEX_STRING         0x00000008  /**< Export buffer in base64 format */
0070 #define TPIMPEXP_VERSION_MIN    1 /** < import min version */
0071 #define TPIMPEXP_VERSION_MAX    1 /** < import / export max version */
0072 
0073 
0074 #define NDRX_XID_SERIAL_BUFSIZE     48 /**< Serialized size (base64) xid */
0075 #define NDRX_MAX_RMS                32  /**< Number of resource managers supported */
0076 #define TMTXFLAGS_IS_ABORT_ONLY     0x0001 /**< transaction is marked as abort only, used in tmtxflags */
0077 
0078 #define ATMI_XA_TX_INFO_FIELDS      \
0079     short tmtxflags;                   /* See TMTXFLAGS_* */\
0080     char tmxid[NDRX_XID_SERIAL_BUFSIZE+1]; /* tmxid, serialized */\
0081     short tmrmid; /* initial resource manager id */\
0082     short tmnodeid; /* initial node id */\
0083     short tmsrvid; /* initial TM server id */\
0084     char tmknownrms[NDRX_MAX_RMS+1]; /* valid values 1..32-1, 0 - reserved + EOS */
0085 
0086 /** rval in tpreturn - Service failed */
0087 #define TPFAIL      0x00000001
0088 /** rval in tpreturn - Service Succeed */
0089 #define TPSUCCESS   0x00000002
0090 /** rval in tpreturn - Service failed, shutdown requested */
0091 #define TPEXIT      0x08000000
0092 
0093 #define tperrno (*_exget_tperrno_addr())
0094 #define tpurcode (*_exget_tpurcode_addr())
0095 
0096 /*
0097  * error values for tperrno
0098  */
0099 #define TPMINVAL    0   /* no error, min - fix*/ 
0100 #define TPEABORT    1
0101 #define TPEBADDESC  2
0102 #define TPEBLOCK    3
0103 #define TPEINVAL    4
0104 #define TPELIMIT    5
0105 #define TPENOENT    6
0106 #define TPEOS       7
0107 #define TPEPERM     8
0108 #define TPEPROTO    9
0109 #define TPESVCERR   10
0110 #define TPESVCFAIL  11
0111 #define TPESYSTEM   12
0112 #define TPETIME     13
0113 #define TPETRAN     14
0114 #define TPGOTSIG    15
0115 #define TPERMERR    16
0116 #define TPEITYPE    17
0117 #define TPEOTYPE    18
0118 #define TPERELEASE  19
0119 #define TPEHAZARD   20
0120 #define TPEHEURISTIC    21
0121 #define TPEEVENT    22
0122 #define TPEMATCH    23
0123 #define TPEDIAGNOSTIC   24
0124 #define TPEMIB      25    
0125 #define TPERFU26        26      /**< reserved for future use */
0126 #define TPERFU27    27      /**< reserved for future use */
0127 #define TPERFU28    28      /**< reserved for future use */
0128 #define TPERFU29    29      /**< reserved for future use */
0129 #define TPINITFAIL  30
0130 #define TPMAXVAL    30  /**< max error */
0131 
0132 /*
0133  * events returned during conversational communication
0134  */
0135 #define TPEV_DISCONIMM  0x0001
0136 #define TPEV_SVCERR 0x0002
0137 #define TPEV_SVCFAIL    0x0004
0138 #define TPEV_SVCSUCC    0x0008
0139 #define TPEV_SENDONLY   0x0020
0140 
0141     
0142 /* Tpinit flags (RFU) */
0143 #define TPU_MASK    0x00000007
0144 #define TPU_SIG     0x00000001  /* RFU */
0145 #define TPU_DIP     0x00000002
0146 #define TPU_IGN     0x00000004  /* Ignore unsol messages */
0147     
0148 /* for compatibility with Tuxedo */
0149 #define TPSA_FASTPATH   0x00000008
0150 #define TPSA_PROTECTED  0x00000010
0151     
0152 /**
0153  * @defgroup callinfoflags Flags for callinfo handling
0154  * @{
0155  */
0156 
0157 /** Do not raise TPESYSTEM in case if no call info associated, when doing tpgetcallinfo()
0158  * instead return: 0 if data no data found, 1 if data is found, -1 other error
0159  */
0160 #define TPCI_NOEOFERR   0x00000001
0161 
0162 /** @} */ /* end of callinfoflags */
0163 
0164 /**
0165  * @defgroup procgroupflag flags for process group handling XATMI level e.g. tpsgislocked()
0166  * @{
0167  */
0168 #define TPPG_NONSGSUCC    0x00001000 /**< Do not generate error if group is not singleton */
0169 #define TPPG_SGVERIFY     0x00002000 /**< Do node verification, if configured */
0170 #define TPPG_SINGLETON    0x00000020  /**< Set if group is singleton          */
0171 
0172 /** @} */ /* end of callinfoflags */
0173 
0174 /* 
0175  * used by tpconvert()
0176  */
0177 #define TPCONVMAXSTR    512         /**< Max identifier buffer                */
0178 #define TPTOSTRING      0x00000001  /**< convert to string                    */
0179 #define TPCONVCLTID     0x00000002  /**< Convert client id                    */
0180 #define TPCONVTRANID    0x00000004  /**< Convert transaction id               */
0181 #define TPCONVXID       0x00000008  /**< Convert XID (current not supported   */
0182 
0183 /*  Size of TPINIT struct */
0184 #define TPINITNEED(u)   sizeof(TPINIT)
0185 
0186 #define CTXT_PRIV_NONE  0x00000         /**< no context data */
0187 #define CTXT_PRIV_NSTD  0x00001     /**< standard library TLS data */
0188 #define CTXT_PRIV_UBF   0x00002     /**< UBF TLS data */
0189 #define CTXT_PRIV_ATMI  0x00004     /**< ATMI level private data */
0190 #define CTXT_PRIV_TRAN  0x00008         /**< ATMI + Global transaction */
0191 #define CTXT_PRIV_NOCHK 0x00010     /**< Do not check signatures */
0192 #define CTXT_PRIV_IGN   0x00020     /**< Ignore existing context */
0193 
0194 
0195 /* Multi contexting */    
0196 #define TPINVALIDCONTEXT    -1
0197 #define TPSINGLECONTEXT     -2 /**< Not used by Enduro/X */
0198     
0199 #define TPNULLCONTEXT       0 /**< basically NULL pointer */
0200 #define TPMULTICONTEXTS     0x00000040
0201     
0202 /*
0203  * X/Open defined typed buffers
0204  */
0205 #define X_OCTET     "X_OCTET"
0206 #define X_C_TYPE    "X_C_TYPE"
0207 #define X_COMMON    "X_COMMON"
0208 
0209 #define MAXTIDENT                   30      /**< Internal identifed max len   */
0210 #define XATMI_SERVICE_NAME_LENGTH   MAXTIDENT
0211 #define XATMI_TYPE_LEN              8       /**< Max type len                 */
0212 #define XATMI_SUBTYPE_LEN           33      /**< Max sub-type len             */
0213 #define XATMI_EVENT_MAX             42      /**< Max len of event to bcast    */
0214      
0215 #define CONF_NDRX_MAX_SRVIDS_XADMIN 512    /**< max number of server IDs for 
0216                                                xadmin printing in poll mode */
0217     
0218 /* Max calls at the same tame
0219  * This is  used by Call Descritptor check 
0220  */
0221 #ifdef EX_OS_DARWIN
0222 
0223 /* fails to build on libatmi/init.c with 
0224  * - ld error: section __DATA/__thread_bss extends beyond end of file
0225  * thus reduce the array.
0226  */
0227 #define MAX_ASYNC_CALLS         1000
0228 
0229 #else
0230 
0231 #define MAX_ASYNC_CALLS         16384
0232 
0233 #endif
0234 
0235 /** Bigger connection count may slowdown whole system. */
0236 #define MAX_CONNECTIONS         10
0237 
0238 /** this is upper limit for re-looping the cd
0239  * basically the max connection is MAX_CONNECTIONS but with each
0240  * connection we increment the cd until the upper limit.
0241  * The actual CD position is taken by modulus.
0242  * The system call descriptor internally tracks the real cd, and rejects
0243  * the invalid value cd value not with the same exact value
0244  */
0245 #define NDRX_CONV_UPPER_CNT      (MAX_CONNECTIONS*100)
0246     
0247 #define NDRX_EVENT_EXPR_MAX     255
0248 #define NDRX_CACHE_KEY_MAX      16384      /**< Max size of cache key            */
0249 #define NDRX_CACHE_FLAGS_MAX    512        /**< Max flags string size            */
0250     
0251 /* EnduroX system ATMI flags */
0252     
0253 #define SYS_SRV_THREAD          0x00000004 /**< This is new server thread        */
0254     
0255 #define tpadvertise(_SVCNM, _FNADDR) tpadvertise_full(_SVCNM, _FNADDR, #_FNADDR)
0256 
0257 #define NDRX_INTEGRA(X)     __##X##__ /* integration mode*/
0258 
0259 #ifndef _
0260 #define _(X)  X
0261 #endif
0262 
0263 /********************** Queue support  *****************************************/
0264 #define TMQNAMELEN  15
0265 #define TMMSGIDLEN  32
0266 #define TMMSGIDLEN_STR  45 /* TMMSGIDLEN * 1.4 (base64 overhead) */
0267 #define TMCORRIDLEN 32
0268 #define TMCORRIDLEN_STR 45 /* TMMSGIDLEN * 1.4 (base64 overhead) */
0269     
0270 /* structure elements that are valid - set in flags */
0271 #define TPNOFLAGS   0x00000     
0272 #define TPQCORRID   0x00001     /**< set/get correlation id */      
0273 #define TPQFAILUREQ 0x00002     /**< set/get failure queue */       
0274 #define TPQBEFOREMSGID  0x00004     /**< RFU, enqueue before message id */      
0275 #define TPQGETBYMSGIDOLD 0x00008    /**< RFU, deprecated */     
0276 #define TPQMSGID    0x00010     /**< get msgid of enq/deq message */        
0277 #define TPQPRIORITY 0x00020     /**< set/get message priority */        
0278 #define TPQTOP      0x00040     /**< RFU, enqueue at queue top */
0279 #define TPQWAIT     0x00080     /**< RFU, wait for dequeuing */     
0280 #define TPQREPLYQ   0x00100     /**< set/get reply queue */     
0281 #define TPQTIME_ABS 0x00200     /**< RFU, set absolute time */      
0282 #define TPQTIME_REL 0x00400     /**< RFU, set relative time */      
0283 #define TPQGETBYCORRIDOLD 0x00800   /**< deprecated */      
0284 #define TPQPEEK     0x01000     /**< peek */        
0285 #define TPQDELIVERYQOS  0x02000         /**< RFU, delivery quality of service */        
0286 #define TPQREPLYQOS     0x04000         /**< RFU, reply message quality of service */       
0287 #define TPQEXPTIME_ABS  0x08000         /**< RFU, absolute expiration time */       
0288 #define TPQEXPTIME_REL  0x10000         /**< RFU, relative expiration time */       
0289 #define TPQEXPTIME_NONE 0x20000         /**< RFU, never expire */       
0290 #define TPQGETBYMSGID   0x40008     /**< dequeue by msgid */        
0291 #define TPQGETBYCORRID  0x80800     /**< dequeue by corrid */       
0292 #define TPQASYNC        0x100000        /**< Async complete */
0293         
0294 /* Valid flags for the quality of service fileds in the TPQCTLstructure */      
0295 #define TPQQOSDEFAULTPERSIST  0x00001   /**< queue's default persistence policy */      
0296 #define TPQQOSPERSISTENT      0x00002   /**< disk message */        
0297 #define TPQQOSNONPERSISTENT   0x00004   /**< memory message */      
0298 
0299 #define QMEINVAL    -1
0300 #define QMEBADRMID  -2
0301 #define QMENOTOPEN  -3
0302 #define QMETRAN     -4
0303 #define QMEBADMSGID -5
0304 #define QMESYSTEM   -6
0305 #define QMEOS       -7
0306 #define QMEABORTED  -8
0307 #define QMENOTA     QMEABORTED      
0308 #define QMEPROTO    -9
0309 #define QMEBADQUEUE -10
0310 #define QMENOMSG    -11
0311 #define QMEINUSE    -12
0312 #define QMENOSPACE  -13
0313 #define QMERELEASE      -14
0314 #define QMEINVHANDLE    -15
0315 #define QMESHARE        -16
0316 
0317 /* Flags for internal TLS processing 
0318  * for 
0319  * - _tpgetctxt();
0320  * - _tpsetctxt();
0321  */
0322 #define CTXT_PRIV_NONE  0x00000         /**< no context data */
0323 #define CTXT_PRIV_NSTD  0x00001     /**< standard library TLS data */
0324 #define CTXT_PRIV_UBF   0x00002     /**< UBF TLS data */
0325 #define CTXT_PRIV_ATMI  0x00004     /**< ATMI level private data */
0326 #define CTXT_PRIV_TRAN  0x00008         /**< ATMI + Global transaction */
0327 #define CTXT_PRIV_NOCHK 0x00010     /**< Do not check signatures */
0328 #define CTXT_PRIV_IGN   0x00020     /**< Ignore existing context */
0329 
0330 /* tpchkauth() return values */
0331 #define TPNOAUTH         0        /**< RFU: no authentication          */
0332 #define TPSYSAUTH        1        /**< RFU: system authentication          */
0333 #define TPAPPAUTH        2        /**< RFU: system and application authentication  */
0334     
0335 
0336 #define TPUNSOLERR  ndrx_ndrx_tmunsolerr_handler
0337     
0338 /**
0339  * Internal process identifier
0340  */
0341 #define TPMYIDTYP_CLIENT       1 /**< Q identifier is client */
0342 #define TPMYIDTYP_SERVER       2 /**< Q identifier is server */
0343     
0344 
0345 /** flag for ndrx_main_integra: Do not use long jump   */
0346 #define ATMI_SRVLIB_NOLONGJUMP     0x00000001
0347     
0348 /*
0349  * Flag for transaction processing i.e. 
0350  * tpbegin/tpcommit/tpclose/tpopen/tpabort/tpsuspend/tpresume 
0351  */
0352 #define TPTXCOMMITDLOG             0x00000004  /**< Commit decision logged     */
0353 #define TPTXNOOPTIM                0x00000100  /**< No known host optimization */
0354 #define TPTXTMSUSPEND              0x00000200  /**< Use TMSUSPEND (keep assoc) */
0355 
0356 /* Flags to tpscmt() - TP_COMMIT_CONTROL values, for compatibility: */
0357 #define TP_CMT_LOGGED              0x04  /**< return after commit has logged   */
0358 #define TP_CMT_COMPLETE            0x08  /**< return after commit has completed*/
0359 
0360 #define NDRX_DDR_CRITMAX             15          /**< Max len of criterion   */
0361 #define NDRX_DDR_GRP_MAX             15          /**< group code size        */
0362 #define NDRX_DDR_TRANTIMEDFLT        30          /**< Default transaction timeout */
0363 
0364 /*---------------------------Enums--------------------------------------*/
0365 /*---------------------------Typedefs-----------------------------------*/
0366 
0367 /* client/caller identifier */
0368 struct clientid_t
0369 {
0370     /* TODO! see Support #265 for major release scheduled. +1 for EOS */
0371     char    clientdata[NDRX_MAX_ID_SIZE];
0372 };
0373 typedef struct clientid_t CLIENTID;
0374 
0375 /* Transaction ID used by tpsuspend()/tpresume() */
0376 struct tp_tranid_t
0377 {
0378     /* NOTE ! Same fileds from ATMI_XA_TX_INFO_FIELDS some precompilers have issues with
0379     parsing macro */
0380     short tmtxflags;                   /**< See TMTXFLAGS_* */
0381     char tmxid[NDRX_XID_SERIAL_BUFSIZE+1]; /**< tmxid, serialized */
0382     short tmrmid; /**< initial resource manager id */
0383     short tmnodeid; /**< initial node id */
0384     short tmsrvid; /**< initial TM server id */
0385     char tmknownrms[NDRX_MAX_RMS+1]; /**< valid values 1..32-1, 0 - reserved + EOS */
0386     /* END OF ATMI_XA_TX_INFO_FIELDS */
0387     int is_tx_initiator;
0388 };
0389 typedef struct tp_tranid_t TPTRANID;
0390 
0391 
0392 struct tpevctl_t
0393 {
0394     long flags;
0395     char name1[XATMI_SERVICE_NAME_LENGTH+1];
0396     char name2[XATMI_SERVICE_NAME_LENGTH+1];
0397 };
0398 typedef struct tpevctl_t TPEVCTL;
0399 
0400 /*
0401  * service information structure
0402  */
0403 typedef struct
0404 {
0405     char    name[XATMI_SERVICE_NAME_LENGTH+1];
0406     char    *data;
0407     long    len;
0408     long    flags;
0409     int     cd;
0410     long    appkey;
0411     CLIENTID cltid;
0412     char    fname[XATMI_SERVICE_NAME_LENGTH+1]; /**< function name */
0413 } TPSVCINFO;
0414 
0415 struct  tpinfo_t
0416 {
0417     char usrname[MAXTIDENT+2];
0418     char cltname[MAXTIDENT+2];
0419     char passwd[MAXTIDENT+2];
0420     char grpname[MAXTIDENT+2];
0421     long flags;
0422     long datalen;
0423     long data;
0424 };
0425 typedef struct  tpinfo_t TPINIT;
0426 
0427 typedef void* TPCONTEXT_T; /* Enduro/X full context switching handler */
0428 
0429 /* Queue support structure: */
0430 struct tpqctl_t 
0431 {
0432     long flags;         /**< indicates which of the values are set */       
0433     long deq_time;      /**< absolute/relative time for dequeuing */        
0434     long priority;      /**< enqueue priority */        
0435     long diagnostic;    /**< indicates reason for failure */        
0436     char diagmsg[NDRX_QDIAG_MSG_SIZE]; /* diagnostic message */
0437     char msgid[TMMSGIDLEN]; /**< id of message before which to queue */     
0438     char corrid[TMCORRIDLEN];/**< correlation id used to identify message */        
0439     char replyqueue[TMQNAMELEN+1];/**< queue name for reply message */      
0440     char failurequeue[TMQNAMELEN+1];/**< queue name for failure message */      
0441     CLIENTID cltid;     /**< client identifier for originating client */        
0442     long urcode;        /**< application user-return code */        
0443     long appkey;        /**< application authentication client key */       
0444     long delivery_qos;  /**< delivery quality of service  */        
0445     long reply_qos;     /**< reply message quality of service  */       
0446     long exp_time;      /**< expiration time  */        
0447 };      
0448 typedef struct tpqctl_t TPQCTL;
0449 
0450 
0451 struct tpmyid_t
0452 {
0453     char binary_name[MAXTIDENT+2];
0454     pid_t pid;
0455     long contextid;
0456     int nodeid;
0457     int srv_id;
0458     int tpmyidtyp;
0459     int isconv;
0460     int cd; /**< if we run in conversational mode */
0461 };
0462 
0463 typedef struct tpmyid_t TPMYID;
0464 
0465 /* Integration mode API, used by libatmisrvinteg.so: */
0466 
0467 /**
0468  * Advertise table. For tmsvrargs_t must be terminated with NULL/0 entries
0469  */
0470 struct tmdsptchtbl_t
0471 {
0472     char *svcnm;                    /**< Service name                         */
0473     char *funcnm;                   /**< Function name                        */
0474     void (*p_func)(TPSVCINFO *);    /**< Function to run on service invocation*/
0475     long rfu1;                      /**< Reserved 1                           */
0476     long rfu2;                      /**< Reserved 2                           */
0477 };
0478 
0479 /**
0480  * Server startup structure for compatibility mode
0481  * Used by usable by _tmstartserver()
0482  */
0483 struct tmsvrargs_t
0484 {
0485   struct xa_switch_t * xa_switch;   /**< XA Switch                            */
0486   struct tmdsptchtbl_t *svctab;     /**< Service dispatch table               */
0487   long flags;                       /**< Reserved for future use              */
0488   int (*p_tpsvrinit)(int, char **); /**< Server init function                 */
0489   void (*p_tpsvrdone)(void);        /**< callback to server done              */
0490   void * reserved0;                 /**< Reserved for future use              */
0491   void * reserved1;                 /**< Reserved for future use              */
0492   void * reserved2;                 /**< Reserved for future use              */
0493   void * reserved3;                 /**< Reserved for future use              */
0494   void * reserved4;                 /**< Reserved for future use              */
0495   int (*p_tpsvrthrinit)(int, char **); /**< thread init func                  */
0496   void (*p_tpsvrthrdone)(void);        /**< thread done func                  */
0497 };
0498 
0499 #define TPBLK_NEXT  0x0002   /**< Set timout value for next call          */
0500 #define TPBLK_ALL   0x0004   /**< Set timeout value for all calls for thread*/
0501 #define TPBLK__MASK     0x0006  /**< valid flags                              */
0502 /*---------------------------Globals------------------------------------*/
0503 extern NDRX_API int (*G_tpsvrinit__)(int, char **);
0504 extern NDRX_API void (*G_tpsvrdone__)(void);
0505 /** For compatibility: */
0506 extern NDRX_API int _tmbuilt_with_thread_option;
0507 extern NDRX_API struct xa_switch_t tmnull_switch; /**< null switch            */
0508 /*---------------------------Prototypes---------------------------------*/
0509 
0510 /*
0511  * xatmi communication api
0512  */
0513 extern NDRX_API int tpacall(char *svc, char *data, long len, long flags);
0514 extern NDRX_API int tpadvertise_full (char *svc_nm, void (*p_func)(TPSVCINFO *), char *fn_nm);
0515 extern NDRX_API char *tpalloc(char *type, char *subtype, long size);
0516 extern NDRX_API int tpcall(char *svc, char *idata, long ilen, char **odata, long *olen, long flags);
0517 extern NDRX_API int tpcancel(int cd);
0518 extern NDRX_API int tpconnect(char *svc, char *data, long len, long flags);
0519 extern NDRX_API int tpdiscon(int cd);
0520 extern NDRX_API void tpfree(char *ptr);
0521 extern NDRX_API int tpisautobuf (char *buf);
0522 extern NDRX_API int tpgetrply(int *cd, char **data, long *len, long flags);
0523 extern NDRX_API char *tprealloc(char *ptr, long size);
0524 extern NDRX_API int tprecv(int cd, char **data, long *len, long flags, long *revent);
0525 extern NDRX_API void tpreturn(int rval, long rcode, char *data, long len, long flags);
0526 extern NDRX_API int tpsend(int cd, char *data, long len, long flags, long *revent);
0527 extern NDRX_API void tpservice(TPSVCINFO *svcinfo);
0528 extern NDRX_API long tptypes(char *ptr, char *type, char *subtype);
0529 extern NDRX_API int tpunadvertise(char *svcname);
0530 
0531 /* 
0532  * Extension functions
0533  */
0534 extern NDRX_API void tpforward (char *svc, char *data, long len, long flags);
0535 extern NDRX_API void tpexit(void);
0536 extern NDRX_API int tpabort (long flags);
0537 extern NDRX_API int tpscmt(long flags);
0538 extern NDRX_API int tpbegin (unsigned long timeout, long flags);
0539 extern NDRX_API int tpcommit (long flags);
0540 extern NDRX_API int tpconvert (char *str, char *bin, long flags);
0541 extern NDRX_API int tpsuspend (TPTRANID *tranid, long flags);
0542 extern NDRX_API int tpresume (TPTRANID *tranid, long flags);
0543 extern NDRX_API int tpopen (void);
0544 extern NDRX_API int tpclose (void);
0545 extern NDRX_API int tpgetlev (void);
0546 extern NDRX_API char * tpstrerror (int err);
0547 extern NDRX_API int tperrordetail(long flags);
0548 extern NDRX_API char * tpstrerrordetail(int err, long flags);
0549 extern NDRX_API char * tpecodestr(int err);
0550 extern NDRX_API char * tpsrvgetctxdata (void); 
0551 extern NDRX_API char * tpsrvgetctxdata2 (char *p_buf, long *p_len);
0552 extern NDRX_API void tpsrvfreectxdata(char *p_buf);
0553 extern NDRX_API int tpsrvsetctxdata (char *data, long flags);
0554 extern NDRX_API void tpcontinue (void);
0555 extern NDRX_API long tpgetnodeid(void);
0556 extern NDRX_API long tpsubscribe (char *eventexpr, char *filter, TPEVCTL *ctl, long flags);
0557 extern NDRX_API int tpunsubscribe (long subscription, long flags);
0558 extern NDRX_API int tppost (char *eventname, char *data, long len, long flags);
0559 extern NDRX_API int * _exget_tperrno_addr (void);
0560 extern NDRX_API long * _exget_tpurcode_addr (void);
0561 extern NDRX_API int tpinit(TPINIT *tpinfo);
0562 extern NDRX_API int tpappthrinit(TPINIT *tpinfo);
0563 extern NDRX_API int tpchkauth(void);
0564 extern NDRX_API void (*tpsetunsol (void (*disp) (char *data, long len, long flags))) (char *data, long len, long flags);
0565 extern NDRX_API int tpnotify(CLIENTID *clientid, char *data, long len, long flags);
0566 extern NDRX_API int tpbroadcast(char *lmid, char *usrname, char *cltname, char *data,  long len, long flags);
0567 extern NDRX_API int tpchkunsol(void);
0568 
0569 extern NDRX_API int tptoutset(int tout);
0570 extern NDRX_API int tptoutget(void);
0571 extern NDRX_API int tpimport(char *istr, long ilen, char **obuf, long *olen, long flags);
0572 extern NDRX_API int tpexport(char *ibuf, long ilen, char *ostr, long *olen, long flags);
0573 extern NDRX_API void* tpgetconn(void);
0574 extern NDRX_API char *tuxgetenv(char *envname);
0575 extern NDRX_API int tpgetcallinfo(const char *msg, UBFH **cibuf, long flags);
0576 extern NDRX_API int tpsetcallinfo(const char *msg, UBFH *cibuf, long flags);
0577 
0578 /* in external application: */
0579 extern NDRX_API void tpsvrdone(void);
0580 extern NDRX_API int tpsvrinit (int argc, char **argv);
0581 
0582 extern NDRX_API int tpsvrthrinit(int argc, char **argv);
0583 extern NDRX_API void tpsvrthrdone (void);
0584 
0585 /* Poller & timer extension: */
0586 extern NDRX_API int tpext_addpollerfd(int fd, uint32_t events, void *ptr1,
0587         int (*p_pollevent)(int fd, uint32_t events, void *ptr1));
0588 extern NDRX_API int tpext_delpollerfd(int fd);
0589 extern NDRX_API int tpext_addperiodcb(int secs, int (*p_periodcb)(void));
0590 extern NDRX_API int tpext_delperiodcb(void);
0591 extern NDRX_API int tpext_addb4pollcb(int (*p_b4pollcb)(void));
0592 extern NDRX_API int tpext_delb4pollcb(void);
0593 extern NDRX_API int tpterm (void);
0594 extern NDRX_API int tpappthrterm(void);
0595 extern NDRX_API int tpgetsrvid (void);
0596 
0597 /* JSON<->UBF buffer support */
0598 extern NDRX_API int tpjsontoubf(UBFH *p_ub, char *buffer);
0599 extern NDRX_API int tpubftojson(UBFH *p_ub, char *buffer, int bufsize);
0600 
0601 
0602 /* JSON<->VIEW buffer support */
0603 extern NDRX_API int tpviewtojson(char *cstruct, char *view, char *buffer,
0604         int bufsize, long flags);
0605 extern NDRX_API char * tpjsontoview(char *view, char *buffer);
0606 
0607 /* Queue support: */
0608 extern NDRX_API int tpenqueue (char *qspace, char *qname, TPQCTL *ctl, char *data, long len, long flags);
0609 extern NDRX_API int tpdequeue (char *qspace, char *qname, TPQCTL *ctl, char **data, long *len, long flags);
0610 
0611 extern NDRX_API int tpenqueueex (short nodeid, short srvid, char *qname, TPQCTL *ctl, char *data, long len, long flags);
0612 extern NDRX_API int tpdequeueex (short nodeid, short srvid, char *qname, TPQCTL *ctl, char **data, long *len, long flags);
0613 
0614 extern NDRX_API int ndrx_main(int argc, char **argv); /* exported by atmisrvnomain */
0615 extern NDRX_API int ndrx_main_integra(int argc, char** argv, int (*in_tpsvrinit)(int, char **),
0616         void (*in_tpsvrdone)(void), long flags);
0617 
0618 /* for build compatibility: */
0619 extern NDRX_API int _tmstartserver( int argc, char **argv, struct tmsvrargs_t *tmsvrargs);
0620 extern NDRX_API int _tmrunserver(int arg1);
0621 extern NDRX_API struct tmsvrargs_t * _tmgetsvrargs(void);
0622 
0623 /* Contexting/switching TLS for all libs */
0624 extern NDRX_API int tpgetctxt(TPCONTEXT_T *context, long flags);
0625 extern NDRX_API int tpsetctxt(TPCONTEXT_T context, long flags);
0626 
0627 extern NDRX_API TPCONTEXT_T tpnewctxt(int auto_destroy, int auto_set);
0628 extern NDRX_API void tpfreectxt(TPCONTEXT_T context);
0629 
0630 extern int ndrx_tpsetctxt(TPCONTEXT_T context, long flags, long priv_flags);
0631 extern int ndrx_tpgetctxt(TPCONTEXT_T *context, long flags, long priv_flags);
0632     
0633 extern NDRX_API int tplogsetreqfile(char **data, char *filename, char *filesvc);
0634 extern NDRX_API int tploggetbufreqfile(char *data, char *filename, int bufsize);
0635 extern NDRX_API int tplogdelbufreqfile(char *data);
0636 extern NDRX_API void tplogprintubf(int lev, char *title, UBFH *p_ub);
0637 
0638 /* ATMI library TLS: */
0639 extern NDRX_API void * ndrx_atmi_tls_get(long priv_flags);
0640 extern NDRX_API int ndrx_atmi_tls_set(void *data, int flags, long priv_flags);
0641 extern NDRX_API void ndrx_atmi_tls_free(void *data);
0642 extern NDRX_API void * ndrx_atmi_tls_new(void *tls_in, int auto_destroy, int auto_set);
0643 
0644 /* Error code - function for unsol: */
0645 extern NDRX_API void ndrx_ndrx_tmunsolerr_handler(char *data, long len, long flags);
0646 
0647 extern NDRX_API pid_t ndrx_fork(void);
0648 extern NDRX_API void ndrx_atfork_child(void);
0649 extern NDRX_API void ndrx_atfork_parent(void);
0650 extern NDRX_API void ndrx_atfork_prepare(void);
0651 
0652 extern NDRX_API int tpencrypt(char *input, long ilen, char *output, long *olen, long flags);
0653 extern NDRX_API int tpdecrypt(char *input, long ilen, char *output, long *olen, long flags);
0654 
0655 extern NDRX_API int tpsprio(int prio, long flags);
0656 extern NDRX_API int tpgprio(void);
0657 
0658 extern NDRX_API int tpsblktime(int tout,long flags);
0659 extern NDRX_API int tpgblktime(long flags);
0660 
0661 extern NDRX_API long tpsgislocked(int grpno, long flags, long *grp_flags);
0662 
0663 extern NDRX_API struct xa_switch_t* ndrx_xa_sw_get(void);
0664 
0665 #if defined(__cplusplus)
0666 }
0667 #endif
0668 
0669 #endif /* __XATMI_H__ */
0670 
0671 /* vim: set ts=4 sw=4 et cindent: */