static ValueStruct * _DBCOMMIT( DBG_Struct *dbg, DBCOMM_CTRL *ctrl) { int rc; char *p , *q; LargeByteString *lbs; ENTER_FUNC; CheckDB_Redirect(dbg); lbs = (LargeByteString *)dbg->process[PROCESS_UPDATE].conn; rc = 0; if (LBS_Size(lbs) > 0){ LBS_EmitEnd(lbs); RewindLBS(lbs); p = (char *)LBS_Body(lbs); while ( ( q = strchr(p,0xFF) ) != NULL ) { *q = 0; rc += DoShell(p); p = q + 1; } rc += DoShell(p); LBS_String(dbg->last_query,p); LBS_Clear(lbs); } CommitDB_Redirect(dbg); if ( ctrl != NULL ) { ctrl->rc = rc; } LEAVE_FUNC; return (NULL); }
static Bool SendVeryfyData_Redirect( DBG_Struct *dbg) { Bool rc = FALSE; if ( (dbg->fpLog != NULL) && ( dbg->redirectData != NULL) && ( LBS_Size(dbg->redirectData) > 0 ) ) { LBS_EmitEnd(dbg->checkData); LBS_EmitEnd(dbg->redirectData); SendPacketClass(dbg->fpLog,RED_DATA); ON_IO_ERROR(dbg->fpLog,badio); SendInt(dbg->fpLog, dbg->ticket_id); ON_IO_ERROR(dbg->fpLog,badio); SendLBS(dbg->fpLog,dbg->checkData); ON_IO_ERROR(dbg->fpLog,badio); SendLBS(dbg->fpLog,dbg->redirectData); ON_IO_ERROR(dbg->fpLog,badio); } rc = SendCommit_Redirect(dbg); badio: return rc; }
extern LargeByteString * ValueToLBS( ValueStruct *val, char *codeset) { byte work[SIZE_NUMBUF+1]; byte work2[SIZE_NUMBUF+2]; byte *p , *q; int i; int size; LargeByteString *ret; ENTER_FUNC; if ( val == NULL ) { ret = NULL; } else { dbgprintf("type = %X\n",(int)ValueType(val)); if ( ValueStr(val) == NULL ) { ValueStr(val) = NewLBS(); } LBS_EmitStart(ValueStr(val)); if ( IS_VALUE_NIL(val) ) { LBS_EmitChar(ValueStr(val),CHAR_NIL); } else switch (ValueType(val)) { case GL_TYPE_CHAR: case GL_TYPE_VARCHAR: case GL_TYPE_TEXT: case GL_TYPE_SYMBOL: case GL_TYPE_DBCODE: if ( ValueString(val) != NULL ) { RewindLBS(ValueStr(val)); if ( IS_VALUE_EXPANDABLE(val) ) { LBS_EmitStringCodeset(ValueStr(val),ValueString(val), ValueStringSize(val), ValueStringLength(val),codeset); if ( ( size = ValueStringLength(val) - ValueSize(val) ) > 0 ) { for ( ; size > 0 ; size -- ) { LBS_EmitChar(ValueStr(val),0); } } } else { LBS_EmitStringCodeset(ValueStr(val),ValueString(val), ValueStringSize(val), 0,codeset); } } break; case GL_TYPE_BYTE: case GL_TYPE_BINARY: #ifdef BINARY_IS_BASE64 size = ( ( ValueByteLength(val) + 2 ) / 3 ) * 4; p = (char *)xmalloc(size); size = EncodeBase64(p,size,ValueByte(val),ValueByteLength(val)); LBS_ReserveSize(ValueStr(val),size+1); strcpy(ValueStrBody(val),p); xfree(p); #else p = ValueByte(val); for ( i = 0 ; i < ValueByteLength(val) ; i ++ , p ++ ) { switch (*p) { case '\\': LBS_EmitChar(ValueStr(val),'\\'); LBS_EmitChar(ValueStr(val),'\\'); break; case '"': LBS_EmitChar(ValueStr(val),'\\'); LBS_EmitChar(ValueStr(val),'"'); break; case '/': LBS_EmitChar(ValueStr(val),'\\'); LBS_EmitChar(ValueStr(val),'/'); break; case '\b': LBS_EmitChar(ValueStr(val),'\\'); LBS_EmitChar(ValueStr(val),'b'); break; case '\f': LBS_EmitChar(ValueStr(val),'\\'); LBS_EmitChar(ValueStr(val),'f'); break; case '\n': LBS_EmitChar(ValueStr(val),'\\'); LBS_EmitChar(ValueStr(val),'n'); break; case '\r': LBS_EmitChar(ValueStr(val),'\\'); LBS_EmitChar(ValueStr(val),'r'); break; case '\t': LBS_EmitChar(ValueStr(val),'\\'); LBS_EmitChar(ValueStr(val),'t'); break; default: if ( isprint(*p) ) { LBS_EmitChar(ValueStr(val),*p); } else { sprintf(work,"\\u%02X",(int)*p); LBS_EmitString(ValueStr(val),work); } break; } } if ( ( size = ValueStringLength(val) - ValueSize(val) ) > 0 ) { for ( ; size > 0 ; size -- ) { LBS_EmitByte(ValueStr(val),0); } } #endif break; case GL_TYPE_NUMBER: strcpy(work,ValueFixedBody(val)); p = work; q = work2; if ( *p >= 0x70 ) { *q ++ = '-'; *p ^= 0x40; } strcpy(q,p); if ( ValueFixedSlen(val) > 0 ) { p = work2 + strlen(work2); *(p + 1) = 0; q = p - 1; for ( i = 0 ; i < ValueFixedSlen(val) ; i ++ ) { *p -- = *q --; } *p = '.'; } LBS_EmitString(ValueStr(val),work2); break; case GL_TYPE_INT: sprintf(work,"%d",ValueInteger(val)); LBS_EmitString(ValueStr(val),work); break; case GL_TYPE_OBJECT: sprintf(work,"%d",(int)ValueObjectId(val)); LBS_EmitString(ValueStr(val),work); break; case GL_TYPE_FLOAT: sprintf(work,"%g",ValueFloat(val)); LBS_EmitString(ValueStr(val),work); break; case GL_TYPE_BOOL: sprintf(work,"%s",ValueBool(val) ? "TRUE" : "FALSE"); LBS_EmitString(ValueStr(val),work); break; case GL_TYPE_TIMESTAMP: sprintf(work,"%04d%02d%02d%02d%02d%02d", ValueDateTimeYear(val), ValueDateTimeMon(val) + 1, ValueDateTimeMDay(val), ValueDateTimeHour(val), ValueDateTimeMin(val), ValueDateTimeSec(val)); LBS_EmitString(ValueStr(val),work); break; case GL_TYPE_DATE: sprintf(work,"%04d%02d%02d", ValueDateTimeYear(val), ValueDateTimeMon(val) + 1, ValueDateTimeMDay(val)); LBS_EmitString(ValueStr(val),work); break; case GL_TYPE_TIME: sprintf(work,"%02d%02d%02d", ValueDateTimeHour(val), ValueDateTimeMin(val), ValueDateTimeSec(val)); LBS_EmitString(ValueStr(val),work); break; default: break; } LBS_EmitEnd(ValueStr(val)); ret = ValueStr(val); } LEAVE_FUNC; return (ret); }
static void ExecuteDB_Server(MessageHandler *handler) { RecordStruct *rec; ValueStruct *value, *ret; PathStruct *path; DB_Operation *op; size_t size; int rno, pno, ono; DBCOMM_CTRL ctrl; char *rname, *pname, *func; ConvFuncs *conv; InitializeCTRL(&ctrl); conv = handler->serialize; while (TRUE) { dbgmsg("read"); LBS_EmitStart(dbbuff); RecvLargeString(fpDBR, dbbuff); ON_IO_ERROR(fpDBR, badio); ConvSetRecName(handler->conv, recDBCTRL->name); InitializeValue(recDBCTRL->value); conv->UnPackValue(handler->conv, LBS_Body(dbbuff), recDBCTRL->value); rname = ValueStringPointer(GetItemLongName(recDBCTRL->value, "rname")); strncpy(ctrl.rname, rname, SIZE_NAME); value = NULL; ret = NULL; if ((rname != NULL) && ((rno = (int)(long)g_hash_table_lookup(DB_Table, rname)) != 0)) { ctrl.rno = rno - 1; rec = ThisDB[ctrl.rno]; value = rec->value; pname = ValueStringPointer(GetItemLongName(recDBCTRL->value, "pname")); strncpy(ctrl.pname, pname, SIZE_NAME); if ((pno = (int)(long)g_hash_table_lookup(rec->opt.db->paths, pname)) != 0) { ctrl.pno = pno - 1; path = rec->opt.db->path[pno - 1]; value = (path->args != NULL) ? path->args : value; } else { ctrl.pno = 0; path = NULL; } } else { rec = NULL; path = NULL; } func = ValueStringPointer(GetItemLongName(recDBCTRL->value, "func")); if (*func != 0) { if (path == NULL) { Error("path is NULL"); } else if ((ono = (int)(long)g_hash_table_lookup(path->opHash, func)) != 0) { op = path->ops[ono - 1]; value = (op->args != NULL) ? op->args : value; } if (rec != NULL) { ConvSetRecName(handler->conv, rec->name); } else { Error("rec is NULL"); } InitializeValue(value); conv->UnPackValue(handler->conv, LBS_Body(dbbuff), value); strncpy(ctrl.func, func, SIZE_FUNC); ret = ExecDB_Process(&ctrl, rec, value); } else { ctrl.rc = 0; } dbgmsg("write"); SetValueInteger(GetItemLongName(recDBCTRL->value, "rc"), ctrl.rc); ConvSetRecName(handler->conv, recDBCTRL->name); LBS_EmitStart(dbbuff); size = conv->SizeValue(handler->conv, recDBCTRL->value); LBS_ReserveSize(dbbuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(dbbuff), recDBCTRL->value); LBS_EmitEnd(dbbuff); SendLargeString(fpDBW, dbbuff); ON_IO_ERROR(fpDBW, badio); if (ret != NULL) { Send(fpDBW, conv->fsep, strlen(conv->fsep)); ON_IO_ERROR(fpDBW, badio); LBS_EmitStart(dbbuff); if (rec != NULL) { ConvSetRecName(handler->conv, rec->name); } size = conv->SizeValue(handler->conv, ret); LBS_ReserveSize(dbbuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(dbbuff), ret); LBS_EmitEnd(dbbuff); SendLargeString(fpDBW, dbbuff); ON_IO_ERROR(fpDBW, badio); FreeValueStruct(ret); } Send(fpDBW, conv->bsep, strlen(conv->bsep)); ON_IO_ERROR(fpDBW, badio); } badio: return; }
static void PutApplication(MessageHandler *handler, NETFILE *fp, ProcessNode *node) { int i; size_t size; ConvFuncs *conv; DumpNode(node); conv = handler->serialize; ConvSetRecName(handler->conv, node->mcprec->name); size = conv->SizeValue(handler->conv, node->mcprec->value); LBS_EmitStart(iobuff); LBS_ReserveSize(iobuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(iobuff), node->mcprec->value); LBS_EmitEnd(iobuff); SendLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); Send(fp, conv->fsep, strlen(conv->fsep)); ON_IO_ERROR(fp, badio); if (node->linkrec != NULL) { ConvSetRecName(handler->conv, node->linkrec->name); size = conv->SizeValue(handler->conv, node->linkrec->value); LBS_EmitStart(iobuff); LBS_ReserveSize(iobuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(iobuff), node->linkrec->value); LBS_EmitEnd(iobuff); SendLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); Send(fp, conv->fsep, strlen(conv->fsep)); ON_IO_ERROR(fp, badio); } if (node->sparec != NULL) { ConvSetRecName(handler->conv, node->sparec->name); size = conv->SizeValue(handler->conv, node->sparec->value); LBS_EmitStart(iobuff); LBS_ReserveSize(iobuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(iobuff), node->sparec->value); LBS_EmitEnd(iobuff); SendLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); } for (i = 0; i < node->cWindow; i++) { LBS_EmitStart(iobuff); if (node->scrrec[i] != NULL) { ConvSetRecName(handler->conv, node->scrrec[i]->name); size = conv->SizeValue(handler->conv, node->scrrec[i]->value); if (size > 0) { Send(fp, conv->fsep, strlen(conv->fsep)); ON_IO_ERROR(fp, badio); } LBS_ReserveSize(iobuff, size, FALSE); conv->PackValue(handler->conv, LBS_Body(iobuff), node->scrrec[i]->value); } LBS_EmitEnd(iobuff); SendLargeString(fp, iobuff); ON_IO_ERROR(fp, badio); } Send(fp, conv->bsep, strlen(conv->bsep)); ON_IO_ERROR(fp, badio); badio: return; }