📄 ct.c
字号:
CS_RETCODE ct_compute_info(CS_COMMAND *cmd, CS_INT type, CS_INT colnum, CS_VOID *buffer, CS_INT buflen, CS_INT *outlen){ tdsdump_log(TDS_DBG_FUNC, "%L inside ct_compute_info()\n"); return CS_SUCCEED;}CS_RETCODE ct_get_data(CS_COMMAND *cmd, CS_INT item, CS_VOID *buffer, CS_INT buflen, CS_INT *outlen){ tdsdump_log(TDS_DBG_FUNC, "%L inside ct_get_data()\n"); return CS_SUCCEED;}CS_RETCODE ct_send_data(CS_COMMAND *cmd, CS_VOID *buffer, CS_INT buflen){ tdsdump_log(TDS_DBG_FUNC, "%L inside ct_send_data()\n"); return CS_SUCCEED;}CS_RETCODE ct_data_info(CS_COMMAND *cmd, CS_INT action, CS_INT colnum,CS_IODESC *iodesc){ tdsdump_log(TDS_DBG_FUNC, "%L inside ct_data_info()\n"); return CS_SUCCEED;}CS_RETCODE ct_capability(CS_CONNECTION *con, CS_INT action, CS_INT type, CS_INT capability, CS_VOID *value){TDSLOGIN *login;unsigned char *mask; tdsdump_log(TDS_DBG_FUNC, "%L inside ct_capability()\n"); login = (TDSLOGIN *) con->tds_login; mask = login->capabilities; if (action==CS_SET && type==CS_CAP_RESPONSE) { if (*((CS_BOOL *)value)==CS_TRUE) { switch(capability) { case CS_DATA_NOBOUNDARY: mask[13]|=0x01;break; case CS_DATA_NOTDSDEBUG: mask[13]|=0x02;break; case CS_RES_NOSTRIPBLANKS: mask[13]|=0x04;break; case CS_DATA_NOINT8: mask[13]|=0x08;break; case CS_DATA_NOINTN: mask[14]|=0x01;break; case CS_DATA_NODATETIMEN: mask[14]|=0x02;break; case CS_DATA_NOMONEYN: mask[14]|=0x04;break; case CS_CON_NOOOB: mask[14]|=0x08;break; case CS_CON_NOINBAND: mask[14]|=0x10;break; case CS_PROTO_NOTEXT: mask[14]|=0x20;break; case CS_PROTO_NOBULK: mask[14]|=0x40;break; case CS_DATA_NOSENSITIVITY: mask[14]|=0x80;break; case CS_DATA_NOFLT4: mask[15]|=0x01;break; case CS_DATA_NOFLT8: mask[15]|=0x02;break; case CS_DATA_NONUM: mask[15]|=0x04;break; case CS_DATA_NOTEXT: mask[15]|=0x08;break; case CS_DATA_NOIMAGE: mask[15]|=0x10;break; case CS_DATA_NODEC: mask[15]|=0x20;break; case CS_DATA_NOLCHAR: mask[15]|=0x40;break; case CS_DATA_NOLBIN: mask[15]|=0x80;break; case CS_DATA_NOCHAR: mask[16]|=0x01;break; case CS_DATA_NOVCHAR: mask[16]|=0x02;break; case CS_DATA_NOBIN: mask[16]|=0x04;break; case CS_DATA_NOVBIN: mask[16]|=0x08;break; case CS_DATA_NOMNY8: mask[16]|=0x10;break; case CS_DATA_NOMNY4: mask[16]|=0x20;break; case CS_DATA_NODATE8: mask[16]|=0x40;break; case CS_DATA_NODATE4: mask[16]|=0x80;break; case CS_RES_NOMSG: mask[17]|=0x02;break; case CS_RES_NOEED: mask[17]|=0x04;break; case CS_RES_NOPARAM: mask[17]|=0x08;break; case CS_DATA_NOINT1: mask[17]|=0x10;break; case CS_DATA_NOINT2: mask[17]|=0x20;break; case CS_DATA_NOINT4: mask[17]|=0x40;break; case CS_DATA_NOBIT: mask[17]|=0x80;break; } } else { switch(capability) { case CS_DATA_NOBOUNDARY: mask[13]&=(!0x01);break; case CS_DATA_NOTDSDEBUG: mask[13]&=(!0x02);break; case CS_RES_NOSTRIPBLANKS: mask[13]&=(!0x04);break; case CS_DATA_NOINT8: mask[13]&=(!0x08);break; case CS_DATA_NOINTN: mask[14]&=(!0x01);break; case CS_DATA_NODATETIMEN: mask[14]&=(!0x02);break; case CS_DATA_NOMONEYN: mask[14]&=(!0x04);break; case CS_CON_NOOOB: mask[14]&=(!0x08);break; case CS_CON_NOINBAND: mask[14]&=(!0x10);break; case CS_PROTO_NOTEXT: mask[14]&=(!0x20);break; case CS_PROTO_NOBULK: mask[14]&=(!0x40);break; case CS_DATA_NOSENSITIVITY: mask[14]&=(!0x80);break; case CS_DATA_NOFLT4: mask[15]&=(!0x01);break; case CS_DATA_NOFLT8: mask[15]&=(!0x02);break; case CS_DATA_NONUM: mask[15]&=(!0x04);break; case CS_DATA_NOTEXT: mask[15]&=(!0x08);break; case CS_DATA_NOIMAGE: mask[15]&=(!0x10);break; case CS_DATA_NODEC: mask[15]&=(!0x20);break; case CS_DATA_NOLCHAR: mask[15]&=(!0x40);break; case CS_DATA_NOLBIN: mask[15]&=(!0x80);break; case CS_DATA_NOCHAR: mask[16]&=(!0x01);break; case CS_DATA_NOVCHAR: mask[16]&=(!0x02);break; case CS_DATA_NOBIN: mask[16]&=(!0x04);break; case CS_DATA_NOVBIN: mask[16]&=(!0x08);break; case CS_DATA_NOMNY8: mask[16]&=(!0x10);break; case CS_DATA_NOMNY4: mask[16]&=(!0x20);break; case CS_DATA_NODATE8: mask[16]&=(!0x40);break; case CS_DATA_NODATE4: mask[16]&=(!0x80);break; case CS_RES_NOMSG: mask[17]&=(!0x02);break; case CS_RES_NOEED: mask[17]&=(!0x04);break; case CS_RES_NOPARAM: mask[17]&=(!0x08);break; case CS_DATA_NOINT1: mask[17]&=(!0x10);break; case CS_DATA_NOINT2: mask[17]&=(!0x20);break; case CS_DATA_NOINT4: mask[17]&=(!0x40);break; case CS_DATA_NOBIT: mask[17]&=(!0x80);break; } } } else if (action==CS_GET && type==CS_CAP_RESPONSE) { switch (capability) { case CS_DATA_NOBOUNDARY: *((CS_BOOL *)value)=mask[13]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOTDSDEBUG: *((CS_BOOL *)value)=mask[13]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_RES_NOSTRIPBLANKS: *((CS_BOOL *)value)=mask[13]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOINT8: *((CS_BOOL *)value)=mask[13]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOINTN: *((CS_BOOL *)value)=mask[14]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NODATETIMEN: *((CS_BOOL *)value)=mask[14]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOMONEYN: *((CS_BOOL *)value)=mask[14]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_CON_NOOOB: *((CS_BOOL *)value)=mask[14]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_CON_NOINBAND: *((CS_BOOL *)value)=mask[14]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_PROTO_NOTEXT: *((CS_BOOL *)value)=mask[14]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_PROTO_NOBULK: *((CS_BOOL *)value)=mask[14]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOSENSITIVITY: *((CS_BOOL *)value)=mask[14]&0x80 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOFLT4: *((CS_BOOL *)value)=mask[15]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOFLT8: *((CS_BOOL *)value)=mask[15]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NONUM: *((CS_BOOL *)value)=mask[15]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOTEXT: *((CS_BOOL *)value)=mask[15]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOIMAGE: *((CS_BOOL *)value)=mask[15]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NODEC: *((CS_BOOL *)value)=mask[15]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOLCHAR: *((CS_BOOL *)value)=mask[15]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOLBIN: *((CS_BOOL *)value)=mask[15]&0x80 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOCHAR: *((CS_BOOL *)value)=mask[16]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOVCHAR: *((CS_BOOL *)value)=mask[16]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOBIN: *((CS_BOOL *)value)=mask[16]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOVBIN: *((CS_BOOL *)value)=mask[16]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOMNY8: *((CS_BOOL *)value)=mask[16]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOMNY4: *((CS_BOOL *)value)=mask[16]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NODATE8: *((CS_BOOL *)value)=mask[16]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NODATE4: *((CS_BOOL *)value)=mask[16]&0x80 ? CS_TRUE : CS_FALSE;break; case CS_RES_NOMSG: *((CS_BOOL *)value)=mask[17]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_RES_NOEED: *((CS_BOOL *)value)=mask[17]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_RES_NOPARAM: *((CS_BOOL *)value)=mask[17]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOINT1: *((CS_BOOL *)value)=mask[17]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOINT2: *((CS_BOOL *)value)=mask[17]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOINT4: *((CS_BOOL *)value)=mask[17]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NOBIT: *((CS_BOOL *)value)=mask[17]&0x80 ? CS_TRUE : CS_FALSE;break; } } else if (action==CS_GET && type==CS_CAP_REQUEST) { switch (capability) { case CS_PROTO_DYNPROC: *((CS_BOOL *)value)=mask[2]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_DATA_FLTN: *((CS_BOOL *)value)=mask[2]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_DATA_BITN: *((CS_BOOL *)value)=mask[2]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_DATA_INT8: *((CS_BOOL *)value)=mask[2]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_DATA_VOID: *((CS_BOOL *)value)=mask[2]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_CON_INBAND: *((CS_BOOL *)value)=mask[3]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_CON_LOGICAL: *((CS_BOOL *)value)=mask[3]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_PROTO_TEXT: *((CS_BOOL *)value)=mask[3]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_PROTO_BULK: *((CS_BOOL *)value)=mask[3]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_REQ_URGNOTIF: *((CS_BOOL *)value)=mask[3]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_DATA_SENSITIVITY: *((CS_BOOL *)value)=mask[3]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_DATA_BOUNDARY: *((CS_BOOL *)value)=mask[3]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_PROTO_DYNAMIC: *((CS_BOOL *)value)=mask[3]&0x80 ? CS_TRUE : CS_FALSE;break; case CS_DATA_MONEYN: *((CS_BOOL *)value)=mask[4]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_CSR_PREV: *((CS_BOOL *)value)=mask[4]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_CSR_FIRST: *((CS_BOOL *)value)=mask[4]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_CSR_LAST: *((CS_BOOL *)value)=mask[4]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_CSR_ABS: *((CS_BOOL *)value)=mask[4]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_CSR_REL: *((CS_BOOL *)value)=mask[4]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_CSR_MULTI: *((CS_BOOL *)value)=mask[4]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_CON_OOB: *((CS_BOOL *)value)=mask[4]&0x80 ? CS_TRUE : CS_FALSE;break; case CS_DATA_NUM: *((CS_BOOL *)value)=mask[5]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_DATA_TEXT: *((CS_BOOL *)value)=mask[5]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_DATA_IMAGE: *((CS_BOOL *)value)=mask[5]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_DATA_DEC: *((CS_BOOL *)value)=mask[5]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_DATA_LCHAR: *((CS_BOOL *)value)=mask[5]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_DATA_LBIN: *((CS_BOOL *)value)=mask[5]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_DATA_INTN: *((CS_BOOL *)value)=mask[5]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_DATA_DATETIMEN: *((CS_BOOL *)value)=mask[5]&0x80 ? CS_TRUE : CS_FALSE;break; case CS_DATA_BIN: *((CS_BOOL *)value)=mask[6]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_DATA_VBIN: *((CS_BOOL *)value)=mask[6]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_DATA_MNY8: *((CS_BOOL *)value)=mask[6]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_DATA_MNY4: *((CS_BOOL *)value)=mask[6]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_DATA_DATE8: *((CS_BOOL *)value)=mask[6]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_DATA_DATE4: *((CS_BOOL *)value)=mask[6]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_DATA_FLT4: *((CS_BOOL *)value)=mask[6]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_DATA_FLT8: *((CS_BOOL *)value)=mask[6]&0x80 ? CS_TRUE : CS_FALSE;break; case CS_REQ_MSG: *((CS_BOOL *)value)=mask[7]&0x01 ? CS_TRUE : CS_FALSE;break; case CS_REQ_PARAM: *((CS_BOOL *)value)=mask[7]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_DATA_INT1: *((CS_BOOL *)value)=mask[7]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_DATA_INT2: *((CS_BOOL *)value)=mask[7]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_DATA_INT4: *((CS_BOOL *)value)=mask[7]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_DATA_BIT: *((CS_BOOL *)value)=mask[7]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_DATA_CHAR: *((CS_BOOL *)value)=mask[7]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_DATA_VCHAR: *((CS_BOOL *)value)=mask[7]&0x80 ? CS_TRUE : CS_FALSE;break; case CS_REQ_LANG: *((CS_BOOL *)value)=mask[8]&0x02 ? CS_TRUE : CS_FALSE;break; case CS_REQ_RPC: *((CS_BOOL *)value)=mask[8]&0x04 ? CS_TRUE : CS_FALSE;break; case CS_REQ_NOTIF: *((CS_BOOL *)value)=mask[8]&0x08 ? CS_TRUE : CS_FALSE;break; case CS_REQ_MSTMT: *((CS_BOOL *)value)=mask[8]&0x10 ? CS_TRUE : CS_FALSE;break; case CS_REQ_BCP: *((CS_BOOL *)value)=mask[8]&0x20 ? CS_TRUE : CS_FALSE;break; case CS_REQ_CURSOR: *((CS_BOOL *)value)=mask[8]&0x40 ? CS_TRUE : CS_FALSE;break; case CS_REQ_DYN: *((CS_BOOL *)value)=mask[8]&0x80 ? CS_TRUE : CS_FALSE;break; /* *((CS_BOOL *)value)=CS_FALSE; */ } } else { /* bad values */ return CS_FAIL; } return CS_SUCCEED;}CS_RETCODE ct_dynamic(CS_COMMAND *cmd, CS_INT type, CS_CHAR *id, CS_INT idlen, CS_CHAR *buffer, CS_INT buflen){static int stmt_no=1;int query_len, id_len;TDSDYNAMIC *dyn;TDSSOCKET *tds;int elem; cmd->dynamic_cmd=type; switch(type) { case CS_PREPARE: /* store away the id */ if (idlen==CS_NULLTERM) { id_len = strlen(id); } else { id_len = idlen; } if (cmd->dyn_id) free(cmd->dyn_id); cmd->dyn_id = (char *) malloc(id_len + 1); strncpy(cmd->dyn_id,(char *)id,id_len); cmd->dyn_id[id_len]='\0'; /* now the query */ if (buflen==CS_NULLTERM) { query_len = strlen(buffer); } else { query_len = buflen; } if (cmd->query) free(cmd->query); cmd->query = (char *) malloc(query_len + 1); strncpy(cmd->query,(char *)buffer,query_len); cmd->query[query_len]='\0'; break; case CS_DEALLOC: break; case CS_DESCRIBE_INPUT: break; case CS_EXECUTE: /* store away the id */ if (idlen==CS_NULLTERM) { id_len = strlen(id); } else { id_len = idlen; } if (cmd->dyn_id) free(cmd->dyn_id); cmd->dyn_id = (char *) malloc(id_len + 1); strncpy(cmd->dyn_id,(char *)id,id_len); cmd->dyn_id[id_len]='\0'; /* free any input parameters */ tds = cmd->con->tds_socket; elem = tds_lookup_dynamic(tds, cmd->dyn_id); dyn = tds->dyns[elem]; break; } tdsdump_log(TDS_DBG_FUNC, "%L inside ct_dynamic()\n"); return CS_SUCCEED;}CS_RETCODE ct_param(CS_COMMAND *cmd, CS_DATAFMT *datafmt, CS_VOID *data, CS_INT datalen, CS_SMALLINT indicator){TDSSOCKET *tds;TDSDYNAMIC *dyn;TDSINPUTPARAM *param;int elem; tdsdump_log(TDS_DBG_FUNC, "%L inside ct_param()\n"); tdsdump_log(TDS_DBG_INFO1, "%L ct_param() data addr = %d data length = %d\n", data, datalen); tds = cmd->con->tds_socket; elem = tds_lookup_dynamic(tds, cmd->dyn_id); dyn = tds->dyns[elem]; param = tds_add_input_param(dyn); param->column_type = _ct_get_server_type(datafmt->datatype); param->varaddr = data; if (datalen==CS_NULLTERM) { param->column_bindlen = 0; } else { param->column_bindlen = datalen; } param->is_null = indicator; return CS_SUCCEED;}CS_RETCODE ct_options(CS_CONNECTION *con, CS_INT action, CS_INT option, CS_VOID *param, CS_INT paramlen, CS_INT *outlen){ tdsdump_log(TDS_DBG_FUNC, "%L inside ct_options() action = %s option = %d\n", CS_GET ? "CS_GET" : "CS_SET", option); return CS_SUCCEED;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -