⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbixs.h

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 H
📖 第 1 页 / 共 2 页
字号:
#define DBIcf_MultiThread 0x000800	/* allow multiple threads to enter	*/#define DBIcf_HandleSetErr 0x001000	/* has coderef HandleSetErr attribute	*/#define DBIcf_ShowErrorStatement  0x002000   /* include Statement in error	*/#define DBIcf_BegunWork   0x004000	/* between begin_work & commit/rollback */#define DBIcf_HandleError 0x008000	/* has coderef in HandleError attribute */#define DBIcf_Profile     0x010000	/* profile activity on this handle      */#define DBIcf_TaintIn     0x020000	/* check inputs for taintedness */#define DBIcf_TaintOut    0x040000	/* taint outgoing data */#define DBIcf_Executed    0x080000	/* do/execute called since commit/rollb */#define DBIcf_PrintWarn   0x100000	/* warn() on warning (err="0")		*/#define DBIcf_Callbacks   0x200000	/* has Callbacks attribute hash		*//* NOTE: new flags may require clone() to be updated */#define DBIcf_INHERITMASK		/* what NOT to pass on to children */	\  (U32)( DBIcf_COMSET | DBIcf_IMPSET | DBIcf_ACTIVE | DBIcf_IADESTROY		\  | DBIcf_AutoCommit | DBIcf_BegunWork | DBIcf_Executed | DBIcf_Callbacks )/* general purpose bit setting and testing macros			*/#define DBIbf_is( bitset,flag)		((bitset) &   (flag))#define DBIbf_has(bitset,flag)		DBIbf_is(bitset, flag) /* alias for _is */#define DBIbf_on( bitset,flag)		((bitset) |=  (flag))#define DBIbf_off(bitset,flag)		((bitset) &= ~(flag))#define DBIbf_set(bitset,flag,on)	((on) ? DBIbf_on(bitset, flag) : DBIbf_off(bitset,flag))/* as above, but specifically for DBIc_FLAGS imp flags (except ACTIVE)	*/#define DBIc_is(imp, flag)	DBIbf_is( DBIc_FLAGS(imp), flag)#define DBIc_has(imp,flag)	DBIc_is(imp, flag) /* alias for DBIc_is */#define DBIc_on(imp, flag)	DBIbf_on( DBIc_FLAGS(imp), flag)#define DBIc_off(imp,flag)	DBIbf_off(DBIc_FLAGS(imp), flag)#define DBIc_set(imp,flag,on)	DBIbf_set(DBIc_FLAGS(imp), flag, on)#define DBIc_COMSET(imp)	DBIc_is(imp, DBIcf_COMSET)#define DBIc_COMSET_on(imp)	DBIc_on(imp, DBIcf_COMSET)#define DBIc_COMSET_off(imp)	DBIc_off(imp,DBIcf_COMSET)#define DBIc_IMPSET(imp)	DBIc_is(imp, DBIcf_IMPSET)#define DBIc_IMPSET_on(imp)	DBIc_on(imp, DBIcf_IMPSET)#define DBIc_IMPSET_off(imp)	DBIc_off(imp,DBIcf_IMPSET)#define DBIc_ACTIVE(imp)	(DBIc_FLAGS(imp) &   DBIcf_ACTIVE)#define DBIc_ACTIVE_on(imp)	/* adjust parent's active kid count */	\    do {								\	imp_xxh_t *ph_com = DBIc_PARENT_COM(imp);			\	if (!DBIc_ACTIVE(imp) && ph_com && !dirty			\		&& ++DBIc_ACTIVE_KIDS(ph_com) > DBIc_KIDS(ph_com))	\	    croak("panic: DBI active kids (%ld) > kids (%ld)",		\		DBIc_ACTIVE_KIDS(ph_com), DBIc_KIDS(ph_com));		\	DBIc_FLAGS(imp) |=  DBIcf_ACTIVE;				\    } while(0)#define DBIc_ACTIVE_off(imp)	/* adjust parent's active kid count */	\    do {								\	imp_xxh_t *ph_com = DBIc_PARENT_COM(imp);			\	if (DBIc_ACTIVE(imp) && ph_com && !dirty			\		&& (--DBIc_ACTIVE_KIDS(ph_com) > DBIc_KIDS(ph_com)	\		   || DBIc_ACTIVE_KIDS(ph_com) < 0) )			\	    croak("panic: DBI active kids (%ld) < 0 or > kids (%ld)",	\		DBIc_ACTIVE_KIDS(ph_com), DBIc_KIDS(ph_com));		\	DBIc_FLAGS(imp) &= ~DBIcf_ACTIVE;				\    } while(0)#define DBIc_IADESTROY(imp)	(DBIc_FLAGS(imp) &   DBIcf_IADESTROY)#define DBIc_IADESTROY_on(imp)	(DBIc_FLAGS(imp) |=  DBIcf_IADESTROY)#define DBIc_IADESTROY_off(imp)	(DBIc_FLAGS(imp) &= ~DBIcf_IADESTROY)#define DBIc_WARN(imp)   	(DBIc_FLAGS(imp) &   DBIcf_WARN)#define DBIc_WARN_on(imp)	(DBIc_FLAGS(imp) |=  DBIcf_WARN)#define DBIc_WARN_off(imp)	(DBIc_FLAGS(imp) &= ~DBIcf_WARN)#define DBIc_COMPAT(imp)   	(DBIc_FLAGS(imp) &   DBIcf_COMPAT)#define DBIc_COMPAT_on(imp)	(DBIc_FLAGS(imp) |=  DBIcf_COMPAT)#define DBIc_COMPAT_off(imp)	(DBIc_FLAGS(imp) &= ~DBIcf_COMPAT)#ifdef IN_DBI_XS		/* get Handle Common Data Structure	*/#define DBIh_COM(h)         	(dbih_getcom2(aTHX_ h, 0))#else#define DBIh_COM(h)         	(DBIS->getcom(h))#define neatsvpv(sv,len)       	(DBIS->neat_svpv(sv,len))#endif/* --- Implementors Private Data Support --- */#define D_impdata(name,type,h)	type *name = (type*)(DBIh_COM(h))#define D_imp_drh(h) D_impdata(imp_drh, imp_drh_t, h)#define D_imp_dbh(h) D_impdata(imp_dbh, imp_dbh_t, h)#define D_imp_sth(h) D_impdata(imp_sth, imp_sth_t, h)#define D_imp_xxh(h) D_impdata(imp_xxh, imp_xxh_t, h)#define D_imp_from_child(name,type,child)	\				type *name = (type*)(DBIc_PARENT_COM(child))#define D_imp_drh_from_dbh D_imp_from_child(imp_drh, imp_drh_t, imp_dbh)#define D_imp_dbh_from_sth D_imp_from_child(imp_dbh, imp_dbh_t, imp_sth)#define DBI_IMP_SIZE(n,s) sv_setiv(perl_get_sv((n), GV_ADDMULTI), (s)) /* XXX *//* --- Event Support (VERY LIABLE TO CHANGE) --- */#define DBIh_EVENTx(h,t,a1,a2)	/* deprecated XXX */ &PL_sv_no#define DBIh_EVENT0(h,t)	DBIh_EVENTx((h), (t), &PL_sv_undef, &PL_sv_undef)#define DBIh_EVENT1(h,t, a1)	DBIh_EVENTx((h), (t), (a1),         &PL_sv_undef)#define DBIh_EVENT2(h,t, a1,a2)	DBIh_EVENTx((h), (t), (a1),         (a2))#define ERROR_event	"ERROR"#define WARN_event	"WARN"#define MSG_event	"MESSAGE"#define DBEVENT_event	"DBEVENT"#define UNKNOWN_event	"UNKNOWN"#define DBIh_SET_ERR_SV(h,i, err, errstr, state, method) \	(DBIc_DBISTATE(i)->set_err_sv(h,i, err, errstr, state, method))#define DBIh_SET_ERR_CHAR(h,i, err_c, err_i, errstr, state, method) \	(DBIc_DBISTATE(i)->set_err_char(h,i, err_c, err_i, errstr, state, method))/* --- Handy Macros --- */#define DBIh_CLEAR_ERROR(imp_xxh) (void)( \	(void)SvOK_off(DBIc_ERR(imp_xxh)),    	\	(void)SvOK_off(DBIc_ERRSTR(imp_xxh)),	\	(void)SvOK_off(DBIc_STATE(imp_xxh))	\    )/* --- DBI State Structure --- */struct dbistate_st {#define DBISTATE_VERSION  94	/* Must change whenever dbistate_t does	*/    /* this must be the first member in structure			*/    void (*check_version) _((const char *name,		int dbis_cv, int dbis_cs, int need_dbixs_cv,		int drc_s, int dbc_s, int stc_s, int fdc_s));    /* version and size are used to check for DBI/DBD version mis-match	*/    U16 version;	/* version of this structure			*/    U16 size;    U16 xs_version;	/* version of the overall DBIXS / DBD interface	*/    U16 spare_pad;    I32 debug;    PerlIO *logfp;    /* pointers to DBI functions which the DBD's will want to use	*/    char      * (*neat_svpv)	_((SV *sv, STRLEN maxlen));    imp_xxh_t * (*getcom)	_((SV *h));	/* see DBIh_COM macro	*/    void        (*clearcom)	_((imp_xxh_t *imp_xxh));    SV        * (*event)	_((SV *h, const char *name, SV*, SV*));    int         (*set_attr_k)	_((SV *h, SV *keysv, int dbikey, SV *valuesv));    SV        * (*get_attr_k)	_((SV *h, SV *keysv, int dbikey));    AV        * (*get_fbav)	_((imp_sth_t *imp_sth));    SV        * (*make_fdsv)	_((SV *sth, const char *imp_class, STRLEN imp_size, const char *col_name));    int         (*bind_as_num)	_((int sql_type, int p, int s, int *t, void *v));    I32         (*hash)		_((const char *string, long i));    SV        * (*preparse)	_((SV *sth, char *statement, IV ps_return, IV ps_accept, void *foo));    SV *neatsvpvlen;		/* only show dbgpvlen chars when debugging pv's	*/    PerlInterpreter * thr_owner;	/* thread that owns this dbistate	*/    int         (*logmsg)	_((imp_xxh_t *imp_xxh, const char *fmt, ...));    int         (*set_err_sv)	_((SV *h, imp_xxh_t *imp_xxh, SV   *err, SV   *errstr, SV   *state, SV   *method));    int         (*set_err_char) _((SV *h, imp_xxh_t *imp_xxh, const char *err, IV err_i, const char *errstr, const char *state, const char *method));    int         (*bind_col)     _((SV *sth, SV *col, SV *ref, SV *attribs));    IO *logfp_ref;	/* DAA keep ptr to filehandle for refcounting */    /* WARNING: Only add new structure members here, and reduce pad2 to keep */    /* the memory footprint exactly the same */    void *pad2[4];};/* macros for backwards compatibility */#define set_attr(h, k, v)	set_attr_k(h, k, 0, v)#define get_attr(h, k)		get_attr_k(h, k, 0)#define DBISTATE_PERLNAME "DBI::_dbistate"#define DBISTATE_ADDRSV   (perl_get_sv(DBISTATE_PERLNAME, 0x05))#define DBILOGFP	(DBIS->logfp)#ifdef IN_DBI_XS#define DBILOGMSG	(dbih_logmsg)#else#define DBILOGMSG	(DBIS->logmsg)#endif/* --- perl object (ActiveState) / multiplicity hooks and hoops --- *//* note that USE_ITHREADS implies MULTIPLICITY                      */#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || defined(PERL_CAPI)# define DBISTATE_DECLARE typedef int dummy_dbistate /* keep semicolon from feeling lonely */# define DBISTATE_ASSIGN(st)# define DBISTATE_INIT# undef DBIS# define DBIS (*(INT2PTR(dbistate_t**, &SvIVX(DBISTATE_ADDRSV))))/* 'dbis' is temp for bad drivers using 'dbis' instead of 'DBIS' */# define dbis (*(INT2PTR(dbistate_t**, &SvIVX(DBISTATE_ADDRSV))))#else	/* plain and simple non perl object / multiplicity case */# define DBISTATE_DECLARE	static dbistate_t *DBIS# define DBISTATE_ASSIGN(st)	(DBIS = (st))# define DBISTATE_INIT_DBIS	DBISTATE_ASSIGN(INT2PTR(dbistate_t*, SvIV(DBISTATE_ADDRSV)))# define DBISTATE_INIT {	/* typically use in BOOT: of XS file	*/    \    DBISTATE_INIT_DBIS;	\    if (DBIS == NULL)	\	croak("Unable to get DBI state from %s at %p. DBI not loaded.", DBISTATE_PERLNAME, DBISTATE_ADDRSV); \    DBIS->check_version(__FILE__, DBISTATE_VERSION, sizeof(*DBIS), NEED_DBIXS_VERSION, \		sizeof(dbih_drc_t), sizeof(dbih_dbc_t), sizeof(dbih_stc_t), sizeof(dbih_fdc_t) \    ); \}#endif/* --- Assorted Utility Macros	--- */#define DBD_ATTRIB_OK(attribs)	/* is this a usable attrib value */	\	(attribs && SvROK(attribs) && SvTYPE(SvRV(attribs))==SVt_PVHV)/* If attribs value supplied then croak if it's not a hash ref.		*//* Also map undef to Null. Should always be called to pre-process the	*//* attribs value. One day we may add some extra magic in here.		*/#define DBD_ATTRIBS_CHECK(func, h, attribs)	\    if ((attribs) && SvOK(attribs)) {		\	if (!SvROK(attribs) || SvTYPE(SvRV(attribs))!=SVt_PVHV)		\	    croak("%s->%s(...): attribute parameter '%s' is not a hash ref",	\		    SvPV_nolen(h), func, SvPV_nolen(attribs));		\    } else (attribs) = Nullsv#define DBD_ATTRIB_GET_SVP(attribs, key,klen)			\	(DBD_ATTRIB_OK(attribs)					\	    ? hv_fetch((HV*)SvRV(attribs), key,klen, 0)		\	    : (SV **)Nullsv)#define DBD_ATTRIB_GET_IV(attribs, key,klen, svp, var)			\	if ((svp=DBD_ATTRIB_GET_SVP(attribs, key,klen)) != NULL)	\	    var = SvIV(*svp)#define DBD_ATTRIB_GET_BOOL(attribs, key,klen, svp, var)		\	if ((svp=DBD_ATTRIB_GET_SVP(attribs, key,klen)) != NULL)	\	    var = SvTRUE(*svp)#define DBD_ATTRIB_TRUE(attribs, key,klen, svp)				\	(  ((svp=DBD_ATTRIB_GET_SVP(attribs, key,klen)) != NULL)	\	    ? SvTRUE(*svp) : 0 )#define DBD_ATTRIB_GET_PV(attribs, key,klen, svp, dflt)			\	(((svp=DBD_ATTRIB_GET_SVP(attribs, key,klen)) != NULL)		\	    ? SvPV_nolen(*svp) : (dflt))#define DBD_ATTRIB_DELETE(attribs, key, klen)			\	hv_delete((HV*)attribs, key, klen, G_DISCARD)#endif /* DBIXS_VERSION *//* end of DBIXS.h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -