/**************************************************************************************************
功能:删除记录
参数: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);
}
Exemple #3
0
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);
}
Exemple #4
0
/*************************************************************
 *
 * 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);
}
Exemple #5
0
/**************************************************************************************************
功能:添加记录
参数: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);
}