/************************************************************************************************** 功能:删除记录 参数:ID,删除的记录的ID 返回:-2,数据库尚未连接 -3, 从列表中删除记录失败 -4, 数据库删除操作失败 0, 成功 作者:佘佳明 2014-11-24 **************************************************************************************************/ int CHistoryTicketItemListMgt::del( const DWORD32 ID ) { if(!m_isInit) return -2; if( checkDBConnect() < 0 ) return -4; int ret = isIDExist(ID); if(ret < 0) return -5; char *sql = (char*)"DELETE FROM t_historyticketitemlist WHERE ID = :f1_ID<unsigned int>"; try { otl_stream delStream(1, sql, m_db); delStream << ID; printf("数据库删除记录 ID: %d\n", ID); m_db.commit(); int ret = delFromList(ID); if(ret < 0) return -3; } catch (otl_exception& p) { WLOutDebug("删除票项表操作失败!"); cerr<<p.msg<<endl; // print out error message cerr<<p.stm_text<<endl; // print out SQL that caused the error cerr<<p.sqlstate<<endl; // print out SQLSTATE message cerr<<p.var_info<<endl; // print out the variable that caused the error return -4; } return 0; }
/* Listener client attaches to a stream */ bool openavbEptSrvrAttachStream(int h, AVBStreamID_t *streamID, openavbSrpLsnrDeclSubtype_t ld) { openavbRC rc = OPENAVB_SUCCESS; static U8 emptyMAC[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 }; static AVBTSpec_t emptytSpec = {0, 0}; AVB_TRACE_ENTRY(AVB_TRACE_ENDPOINT); clientStream_t *ps = findStream(streamID); if (ps && ps->clientHandle != h) { AVB_LOGF_ERROR("Error attaching listener: multiple clients for stream %d", streamID->uniqueID); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); return FALSE; } if (!ps) { ps = addStream(h, streamID); if (!ps) { AVB_LOGF_ERROR("Error attaching listener: unable to add client stream %d", streamID->uniqueID); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); return FALSE; } ps->role = clientListener; } if(x_cfg.noSrp) { // we are operating in a mode supporting preconfigured streams; SRP is not in use, if(ld == openavbSrp_LDSt_Interest) { // As a proxy for SRP, which would normally make this call after confirming // availability of the stream, call the callback from here strmRegCb((void*)ps, openavbSrp_AtTyp_TalkerAdvertise, emptyMAC, // a flag to listener to read info from configuration file &emptytSpec, MAX_AVB_SR_CLASSES, // srClass - value doesn't matter because openavbEptSrvrNotifyLstnrOfSrpCb() throws it away 1, // accumLatency NULL); // *failInfo } } else { // Normal SRP Operation so pass to SRP rc = openavbSrpAttachStream((void*)ps, streamID, ld); if (!IS_OPENAVB_SUCCESS(rc)) delStream(ps); } openavbEndPtLogAllStaticStreams(); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); return IS_OPENAVB_SUCCESS(rc); }
bool x_listenerDetach(clientStream_t *ps) { AVB_TRACE_ENTRY(AVB_TRACE_ENDPOINT); openavbRC rc = OPENAVB_SUCCESS; if(!x_cfg.noSrp) { // Pass to SRP rc = openavbSrpDetachStream(&ps->streamID); } // remove record delStream(ps); openavbEndPtLogAllStaticStreams(); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); return IS_OPENAVB_SUCCESS(rc); }
/************************************************************* * * Internal function to cleanup streams * */ bool x_talkerDeregister(clientStream_t *ps) { AVB_TRACE_ENTRY(AVB_TRACE_ENDPOINT); openavbRC rc = OPENAVB_SUCCESS; if(!x_cfg.noSrp) { // Pass to SRP rc = openavbSrpDeregisterStream(&ps->streamID); } // Remove QMgr entry for stream if (ps->fwmark != INVALID_FWMARK) { openavbQmgrRemoveStream(ps->fwmark); ps->fwmark = INVALID_FWMARK; } // Release MAAP address allocation if (ps->hndMaap) { openavbMaapRelease(ps->hndMaap); ps->hndMaap = NULL; } // Finish Shaping if (ps->hndShaper) { openavbShaperRelease(ps->hndShaper); ps->hndShaper = NULL; } // remove record delStream(ps); openavbEndPtLogAllStaticStreams(); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); return IS_OPENAVB_SUCCESS(rc); }
/************************************************************************************************** 功能:添加记录 参数:pStaion,待插入的记录 返回:-2,数据库尚未连接 -3,添加到列表失败 -4,数据库添加操作失败 0,添加成功 作者:李施施 2014-07-21 修改:刘远安 设备的ID为0xffe时自动加1,这是跳步码专用ID **************************************************************************************************/ int CDeviceMgt::add( TDevice *pInputParam ) { if(!m_isInit) return -2; if( checkDBConnect() < 0 ) return -4; TDevice temp = {0}; temp.stationID = pInputParam->stationID; memcpy(&temp.number, pInputParam->number, strlen(pInputParam->number)); memcpy(&temp.doubleNumber, pInputParam->doubleNumber, strlen(pInputParam->doubleNumber)); temp.volID = pInputParam->volID; temp.deviceTypeID = pInputParam->deviceTypeID; temp.curState = pInputParam->curState; temp.bayID = pInputParam->bayID; temp.termTemplateID = pInputParam->termTemplateID; temp.isLocked = pInputParam->isLocked; temp.isMonitor = pInputParam->isMonitor; temp.isYX = pInputParam->isYX; temp.isHaveWarningBoard = pInputParam->isHaveWarningBoard; temp.warningBoardID = pInputParam->warningBoardID; temp.isHaveBelongWarningBoard = pInputParam->isHaveBelongWarningBoard; temp.belongWarningBoardID = pInputParam->belongWarningBoardID; temp.isHaveEarthLine = pInputParam->isHaveBelongEarthLine; temp.earthLineID = pInputParam->earthLineID; temp.isHaveBelongEarthLine = pInputParam->isHaveBelongEarthLine; temp.belongEarthLineID = pInputParam->belongEarthLineID; memcpy(&temp.earthLineCheck, &pInputParam->earthLineCheck, sizeof(otl_datetime)); temp.isWorking = pInputParam->isWorking; temp.isRedLineDevice = pInputParam->isRedLineDevice; temp.isHaveBelongCommonTerm = pInputParam->isHaveBelongCommonTerm; temp.belongCommonTermID = pInputParam->belongCommonTermID; temp.isHaveElectricityTerm = pInputParam->isHaveElectricityTerm; temp.electricityTermID = pInputParam->electricityTermID; temp.isVirtual = pInputParam->isVirtual; int lastAddID; char earthLineCheck[MAX_PARAM_LEN] = {0}; sprintf(earthLineCheck,"%d-%02d-%02d %02d:%02d:%02d", pInputParam->earthLineCheck.year, pInputParam->earthLineCheck.month,pInputParam->earthLineCheck.day,pInputParam->earthLineCheck.hour,pInputParam->earthLineCheck.minute,pInputParam->earthLineCheck.second); char *sql = (char *)malloc(2000); sprintf(sql,"insert into t_device values(NULL,:f1<unsigned int>,:f2<char[64]>,:f3<char[128]>,:f4<unsigned int>,:f5<unsigned int>,:f6<unsigned int>,:f7<unsigned int>,:f8<unsigned int>,:f9<unsigned int>,:f10<unsigned int>,:f11<unsigned int>,:f12<unsigned int>,:f13<unsigned int>,:f14<unsigned int>,:f15<unsigned int>,:f16<unsigned int>,:f17<unsigned int>,:f18<unsigned int>,:f19<unsigned int>,'%s',:f20<unsigned int>,:f21<unsigned int>,:f22<unsigned int>,:f23<unsigned int>,:f24<unsigned int>,:f25<unsigned int>, :f26<unsigned int>)",earthLineCheck); try { otl_stream insertStream(1, sql, m_db); insertStream.set_commit(0); insertStream << pInputParam->stationID; insertStream << pInputParam->number; insertStream << pInputParam->doubleNumber; insertStream << pInputParam->volID; insertStream << pInputParam->deviceTypeID; insertStream << pInputParam->curState; insertStream << pInputParam->bayID; insertStream << pInputParam->termTemplateID; insertStream << pInputParam->isLocked; insertStream << pInputParam->isMonitor; insertStream << pInputParam->isYX; insertStream << pInputParam->isHaveWarningBoard; insertStream << pInputParam->warningBoardID; insertStream << pInputParam->isHaveBelongWarningBoard; insertStream << pInputParam->belongWarningBoardID; insertStream << pInputParam->isHaveEarthLine; insertStream << pInputParam->earthLineID; insertStream << pInputParam->isHaveBelongEarthLine; insertStream << pInputParam->belongEarthLineID; //insertStream << pInputParam->earthLineCheck; insertStream << pInputParam->isWorking; insertStream << pInputParam->isRedLineDevice; insertStream << pInputParam->isHaveBelongCommonTerm; insertStream << pInputParam->belongCommonTermID; insertStream << pInputParam->isHaveElectricityTerm; insertStream << pInputParam->electricityTermID; insertStream << pInputParam->isVirtual; if(1 == m_dbType)//SQLite数据库 { char strLastAddID[20] = {0}; otl_stream selectStream(1, "select last_insert_rowid()", m_db); selectStream.set_commit(0); selectStream >> strLastAddID; temp.ID = atoi(strLastAddID); lastAddID = temp.ID; } else { otl_stream selectStream(1, "SELECT LAST_INSERT_ID()", m_db); selectStream.set_commit(0); selectStream >> lastAddID; temp.ID = lastAddID; } //跳步码的内码不能被使用 if(lastAddID == 0xffe) { const char *delSql = "DELETE FROM t_device WHERE ID = :f1_ID<unsigned int>"; otl_stream delStream(1, delSql, m_db); delStream << lastAddID; m_db.commit(); printf("数据库删除记录 ID: %d\n", lastAddID); //--------------重新添加记录 otl_stream insertStream2(1, sql, m_db); insertStream2.set_commit(0); insertStream2 << pInputParam->stationID; insertStream2 << pInputParam->number; insertStream2 << pInputParam->doubleNumber; insertStream2 << pInputParam->volID; insertStream2 << pInputParam->deviceTypeID; insertStream2 << pInputParam->curState; insertStream2 << pInputParam->bayID; insertStream2 << pInputParam->termTemplateID; insertStream2 << pInputParam->isLocked; insertStream2 << pInputParam->isMonitor; insertStream2 << pInputParam->isYX; insertStream2 << pInputParam->isHaveWarningBoard; insertStream2 << pInputParam->warningBoardID; insertStream2 << pInputParam->isHaveBelongWarningBoard; insertStream2 << pInputParam->belongWarningBoardID; insertStream2 << pInputParam->isHaveEarthLine; insertStream2 << pInputParam->earthLineID; insertStream2 << pInputParam->isHaveBelongEarthLine; insertStream2 << pInputParam->belongEarthLineID; //insertStream2 << pInputParam->earthLineCheck; insertStream2 << pInputParam->isWorking; insertStream2 << pInputParam->isRedLineDevice; insertStream2 << pInputParam->isHaveBelongCommonTerm; insertStream2 << pInputParam->belongCommonTermID; insertStream2 << pInputParam->isHaveElectricityTerm; insertStream2 << pInputParam->electricityTermID; insertStream2 << pInputParam->isVirtual; otl_stream selectStream2(1, "SELECT LAST_INSERT_ID()", m_db); selectStream2.set_commit(0); selectStream2 >> lastAddID; m_db.commit(); } temp.ID = lastAddID; m_db.commit(); int ret = add2List(&temp); if(ret < 0) { free(sql); return -3; } }
/* Talker client registers a stream */ bool openavbEptSrvrRegisterStream(int h, AVBStreamID_t *streamID, U8 destAddr[], AVBTSpec_t *tSpec, U8 srClass, U8 srRank, U32 latency) { openavbRC rc = OPENAVB_SUCCESS; AVB_TRACE_ENTRY(AVB_TRACE_ENDPOINT); clientStream_t *ps = findStream(streamID); if (ps && ps->clientHandle != h) { AVB_LOGF_ERROR("Error registering talker; multiple clients for stream %d", streamID->uniqueID); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); return FALSE; } ps = addStream(h, streamID); if (!ps) { AVB_LOGF_ERROR("Error registering talker; unable to add client stream %d", streamID->uniqueID); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); return FALSE; } ps->role = clientTalker; ps->tSpec = *tSpec; ps->srClass = (SRClassIdx_t)srClass; ps->srRank = srRank; ps->latency = latency; ps->fwmark = INVALID_FWMARK; if (memcmp(ps->destAddr, destAddr, ETH_ALEN) == 0) { // no client-supplied address, use MAAP struct ether_addr addr; ps->hndMaap = openavbMaapAllocate(1, &addr); if (ps->hndMaap) { memcpy(ps->destAddr, addr.ether_addr_octet, ETH_ALEN); strmAttachCb((void*)ps, openavbSrp_LDSt_Stream_Info); // Inform talker about MAAP } else { AVB_LOG_ERROR("Error registering talker: MAAP failed to allocate MAC address"); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); delStream(ps); return FALSE; } } else { // client-supplied destination MAC address memcpy(ps->destAddr, destAddr, ETH_ALEN); ps->hndMaap = NULL; } // Do SRP talker register AVB_LOGF_DEBUG("REGISTER: ps=%p, streamID=%d, tspec=%d,%d, srClass=%d, srRank=%d, latency=%d, da="ETH_FORMAT"", ps, streamID->uniqueID, tSpec->maxFrameSize, tSpec->maxIntervalFrames, ps->srClass, ps->srRank, ps->latency, ETH_OCTETS(ps->destAddr)); if(x_cfg.noSrp) { // we are operating in a mode supporting preconfigured streams; SRP is not in use, // so, as a proxy for SRP, which would normally make this call after establishing // the stream, call the callback from here strmAttachCb((void*)ps, openavbSrp_LDSt_Ready); } else { // normal SRP operation rc = openavbSrpRegisterStream((void*)ps, &ps->streamID, ps->destAddr, &ps->tSpec, ps->srClass, ps->srRank, ps->latency); if (!IS_OPENAVB_SUCCESS(rc)) { if (ps->hndMaap) openavbMaapRelease(ps->hndMaap); delStream(ps); } } openavbEndPtLogAllStaticStreams(); AVB_TRACE_EXIT(AVB_TRACE_ENDPOINT); return IS_OPENAVB_SUCCESS(rc); }