示例#1
0
文件: edi.c 项目: varphone/appweb-4
Edi *ediOpen(cchar *path, cchar *providerName, int flags)
{
    EdiProvider  *provider;

    if ((provider = lookupProvider(providerName)) == 0) {
        mprError("Can't find EDI provider '%s'", providerName);
        return 0;
    }
    return provider->open(path, flags);
}
示例#2
0
int printDepList(rpmts *ts, int tscount)
{
    int rc = 0;

    if( tscount > 1 )
        fprintf(stderr, ">1 database specified with dependency list, using first only\n");

    /* Get list of names */
    rpmdb db = rpmtsGetRdb(ts[0]);
    ARGV_t names = NULL;
    rc = rpmdbMireApply(db, RPMTAG_NAME,
                RPMMIRE_STRCMP, NULL, &names);
    int nnames = argvCount(names);

    /* Get list of NVRAs */
    ARGV_t keys = NULL;
    rc = rpmdbMireApply(db, RPMTAG_NVRA,
                RPMMIRE_STRCMP, NULL, &keys);
    if (keys) {
        int i, j;
        HE_t he = (HE_t) memset(alloca(sizeof(*he)), 0, sizeof(*he));
        int nkeys = argvCount(keys);
        for(i=0; i<nkeys; i++) {
            rpmmi mi = rpmmiInit(db, RPMTAG_NVRA, keys[i], 0);
            Header h;
            if ((h = rpmmiNext(mi)) != NULL) {
                /* Get name of package */
                he->tag = RPMTAG_NAME;
                rc = (headerGet(h, he, 0) != 1);
                char *name = strdup((char *)he->p.ptr);
                /* Get its requires */
                he->tag = RPMTAG_REQUIRENAME;
                if (rc = (headerGet(h, he, 0) != 1)) {
                    if (debugmode) {
                        printf("DEBUG: %s requires null\n", name);
                    }
                    rc = 0;
                    free(name);
                    (void)rpmmiFree(mi);
                    continue;
                }
                ARGV_t reqs = (ARGV_t)he->p.ptr;
                /* Get its requireflags */
                he->tag = RPMTAG_REQUIREFLAGS;
                rc = (headerGet(h, he, 0) != 1);
                rpmuint32_t *reqflags = (rpmuint32_t *)he->p.ui32p;
                for(j=0; j<he->c; j++) {
                    int k;
                    char *prov = NULL;
                    for(k=0; k<nnames; k++) {
                        if(strcmp(names[k], reqs[j]) == 0) {
                            prov = names[k];
                            break;
                        }
                    }
                    if(prov) {
                        if((int)reqflags[j] & 0x80000)
                            fprintf(outf, "%s|%s [REC]\n", name, prov);
                        else
                            fprintf(outf, "%s|%s\n", name, prov);
                    }
                    else {
                        rc = lookupProvider(ts[0], reqs[j], &prov);
                        if(rc==0 && prov) {
                            if((int)reqflags[j] & 0x80000)
                                fprintf(outf, "%s|%s [REC]\n", name, prov);
                            else
                                fprintf(outf, "%s|%s\n", name, prov);
                            free(prov);
                        }
                    }
                }
                free(name);
            }
            (void)rpmmiFree(mi);
        }
    }

    return rc;
}
示例#3
0
bool CTSimObj::detectEntities(EntityNameC &v, int id)
{
	NSLookup::Provider *prov = lookupProvider(Service::DETECT_ENTITIES);
	if (!prov) {
		LOG_ERR(("detectEntities : cannot get service provider info [%s:%d]", __FILE__, __LINE__));
		return false;
	}

	SOCKET sock = prov->sock();
	if (sock < 0) {
		LOG_ERR(("detectEntities : cannot connect to service provider [%s:%d]", __FILE__, __LINE__));
		return false;
	}

	CommRequestDetectEntitiesEncoder enc(myname(), id);

#if 1
	// modified by sekikawa on 2010-08-26 for confirmation
	// 
	// Call prov->close() when a socket error arises between service provider
	// to set socket ID held by prov should be -1.
	//
	// If the prov->close() is not called before the exit of this method,
	// lookupProvider() might return a socket ID which is unvalid.
	//
	// In the last of this method, prov->close() will be called before the modification;
	// however, the error treatment is added for confirmation.
	if (enc.send(sock) < 0) {
		prov->close();
		return false;
	}
#else
	// orig
	enc.send(sock);
#endif

	CommDataDecoder d;

	typedef CTReader Reader;
	Reader r(sock, d, 8192);

#if 1
	// retry version (added by sekikawa)(2009/03/13)
	bool ret = false;

	int retry = 5;
	int timeout = 10000;

	while (retry > 0) {

#if 1
		// sekikawa(FIX20100906)
		Result *result = NULL;
		try
			{
				result = r.readSync();
			}
		catch(CTReader::ConnectionClosedException &e)
			{
				break;
			}
#else
		// orig
		Result *result = r.readSync();
#endif

		if (result) {
			if (result->type() == COMM_RESULT_DETECT_ENTITIES) {
				ResultDetectEntitiesEvent *evt = (ResultDetectEntitiesEvent*) result->data();
				evt->copy(v);
				ret = true;
			}
			delete result;
			break;
		} else {
			retry--;

#ifdef WIN32
			Sleep(timeout);
#else
			usleep(timeout);
#endif
			timeout *= 2;
		}
	}
#else
	// original version
	Result *result = r.readSync();
	bool ret = false;

	if (result) {
		if (result->type() == COMM_RESULT_DETECT_ENTITIES) {
			ResultDetectEntitiesEvent *evt = (ResultDetectEntitiesEvent*) result->data();
			evt->copy(v);
			ret = true;
		}
		delete result;
	}
#endif

	prov->close();

	return ret;
}
示例#4
0
// Distance sensor more than 1D
ViewImage *CTSimObj::distanceSensorD(double start, double end, int id, bool map)
{
	NSLookup::Provider *prov = lookupProvider(Service::DISTANCE_SENSOR);
  
	if (!prov) {
		LOG_ERR(("distanceSensor1D : cannot get service provider info [%s:%d]", __FILE__, __LINE__));
		return false;
	}
  
	SOCKET sock = prov->sock();
	if (sock < 0) {
		LOG_ERR(("distanceSensor1D : cannot connect to service provider [%s:%d]", __FILE__, __LINE__));
		return false;
	}
	CommRequestDistanceSensorEncoder *enc; 

	if(map == false)
		{
			enc = new CommRequestDistanceSensorEncoder(myname(), start, end, id, 1);
		}
	else
		{
			// Encoder for 2D distance sensor
			enc = new CommRequestDistanceSensorEncoder(myname(), start, end, id, 2);
		}
	//	CommRequestDistanceSensorEncoder enc(myname(), id);
	int status = enc->send(sock);

	delete enc;

	ViewImageInfo info(IMAGE_DATA_TYPE_ANY, DEPTHBIT_8, IMAGE_320X1);
	ViewImage *img;
	CommDataDecoder d;
	typedef CTReader Reader;
	int retry;
	if(map == true)
		retry = 25;
	else
		retry = 20;
	Reader *r = new Reader(sock, d, 100000);

	while  (true) {
		Result *result = NULL;
		try
			{
				result = r->readSync();
			}
		catch(CTReader::ConnectionClosedException &e)
			{
				break;
			}
    
		if (!result) {
			if (retry <= 0) {
				// add(sekikawa)(2010/08/10)
				LOG_ERR(("readSync() failed. max retry count exceeded. [%s:%d]", __FILE__, __LINE__));
	
				break;
			} else {
				LOG_DEBUG1(("retrying readSync() ... [retry=%d]", retry));
				retry--;
#ifdef WIN32
				Sleep(100000);
#else
				usleep(100000);
#endif
				continue;
			}
		}
		if (result->type() == COMM_RESULT_CAPTURE_VIEW_IMAGE) {
      
			ResultCaptureViewImageEvent *evt = (ResultCaptureViewImageEvent*)result->data();
			img = evt->release();
		}
		/*
		  if (result->type() == COMM_RESULT_DISTANCE_SENSOR1D) {
      
		  ResultDistanceSensor1DEvent *evt = (ResultDistanceSensor1DEvent*)result->data();
		  distance = evt->getDistance();
		  }
		*/
		delete result;
		break;
	}
	prov->close();
	return img;
}
示例#5
0
//added by okamoto@tome(2011/9/8)
unsigned char CTSimObj::distanceSensor(double start, double end, int id)
{
	NSLookup::Provider *prov = lookupProvider(Service::DISTANCE_SENSOR);
  
	if (!prov) {
		LOG_ERR(("distanceSensor : cannot get service provider info [%s:%d]", __FILE__, __LINE__));
		return false;
	}
  
	SOCKET sock = prov->sock();
	if (sock < 0) {
		LOG_ERR(("distanceSensor : cannot connect to service provider [%s:%d]", __FILE__, __LINE__));
		return false;
	}
  
	CommRequestDistanceSensorEncoder *enc = new CommRequestDistanceSensorEncoder(myname(), start, end, id);

	int status = enc->send(sock);
	delete enc;

	unsigned char distance;
	CommDataDecoder d;
	typedef CTReader Reader;
	int retry = 15;
	Reader *r = new Reader(sock, d, 1024);

	while  (true) {
		Result *result = NULL;
		try
			{
				result = r->readSync();
			}
		catch(CTReader::ConnectionClosedException &e)
			{
				break;
			}
    
		if (!result) {
			if (retry <= 0) {
				// add(sekikawa)(2010/08/10)
				LOG_ERR(("readSync() failed. max retry count exceeded. [%s:%d]", __FILE__, __LINE__));
	
				break;
			} else {
				LOG_DEBUG1(("retrying readSync() ... [retry=%d]", retry));
				retry--;
#ifdef WIN32
				Sleep(100000);
#else
				usleep(100000);
#endif
				continue;
			}
		}
		if (result->type() == COMM_RESULT_DISTANCE_SENSOR) {
      
			ResultDistanceSensorEvent *evt = (ResultDistanceSensorEvent*)result->data();
			distance = evt->getDistance();
		}
		delete result;
		break;
	}

	prov->close();
	return distance;
  
}
示例#6
0
//add id argument by okamoto@tome(2011/8/26)
ViewImage * CTSimObj::captureView(ColorBitType cbtype, ImageDataSize size, int id)
{
	NSLookup::Provider *prov = lookupProvider(Service::CAPTURE_VIEW);
	if (!prov) {
		LOG_ERR(("captureView : cannot get service provider info [%s:%d]", __FILE__, __LINE__));
		return false;
	}

	SOCKET sock = prov->sock();
	if (sock < 0) {
		LOG_ERR(("captureView : cannot connect to service provider [%s:%d]", __FILE__, __LINE__));
		return false;
	}

	ViewImageInfo info(IMAGE_DATA_TYPE_ANY, cbtype, size);
	{
		// Added id as an argument
		CommRequestCaptureViewImageEncoder *enc = new CommRequestCaptureViewImageEncoder(myname(), info, id);
#if 1
		// modified by sekikawa on 2010-08-26
		// added error treatment in send()
		// note a comment of detectEntities() in this file
		int status = enc->send(sock);
		delete enc;
		if (status < 0)
			{
				prov->close();
				return false;
			}
#else
		// orig
		enc->send(sock);
		delete enc;
#endif
	}

	ViewImage *img = 0;
	CommDataDecoder d;

	typedef CTReader Reader;

	// modify(sekikawa)(2010/08/10)
	//	int retry = 10;
	int retry = 500;

	Reader *r = new Reader(sock, d, 100000);

	while (true) {
#if 1
		// sekikawa(FIX20100906)
		Result *result = NULL;
		try
			{
				result = r->readSync();
			}
		catch(CTReader::ConnectionClosedException &e)
			{
				break;
			}
#else
		// orig
		Result *result = r->readSync();
#endif

		if (!result) {
			if (retry <= 0) {
				// add(sekikawa)(2010/08/10)
				LOG_ERR(("readSync() failed. max retry count exceeded. [%s:%d]", __FILE__, __LINE__));

				break;
			} else {
				LOG_DEBUG1(("retrying readSync() ... [retry=%d]", retry));
				retry--;
#ifdef WIN32
				Sleep(100000);
#else
				usleep(100000);
#endif
				continue;
			}
		}

		LOG_DEBUG1(("readSync() succeeded"));
		if (result->type() == COMM_RESULT_CAPTURE_VIEW_IMAGE) {

			ResultCaptureViewImageEvent *evt = (ResultCaptureViewImageEvent*)result->data();
			img = evt->release();
		}
		delete result;
		break;
	}

	prov->close();
	delete r;

	return img;
}
示例#7
0
Text * CTSimObj::getText(RawSound &rawSound)
{
	NSLookup::Provider *prov = lookupProvider(Service::SOUND_RECOG);
	if (!prov) {
		LOG_ERR(("getText : cannot get service provider info [%s:%d]", __FILE__, __LINE__));
		return false;
	}

	SOCKET sock = prov->sock();
	if (sock < 0) {
		LOG_ERR(("getText : cannot connect to service provider [%s:%d]", __FILE__, __LINE__));
		return false;
	}

	{
		CommRequestSoundRecogEncoder *enc = new CommRequestSoundRecogEncoder(rawSound);
#if 1
		// modified by sekikawa on 2010-08-26
		// added error treatment in send()
		// note a comment of detectEntities() in this file
		int status = enc->send(sock);
		delete enc;
		if (status < 0)
			{
				prov->close();
				return false;
			}
#else
		// orig
		enc->send(sock);
		delete enc;
#endif
	}

	Text *text = 0;
	CommDataDecoder d;
	typedef CTReader Reader;
	int retry = 10;
	Reader *r = new Reader(sock, d, 1024);
	while  (true) {

#if 1
		// sekikawa(FIX20100906)
		Result *result = NULL;
		try
			{
				result = r->readSync();
			}
		catch(CTReader::ConnectionClosedException &e)
			{
				break;
			}
#else
		// orig
		Result *result = r->readSync();
#endif

		if (!result) {
			if (retry <= 0) {
				break;
			} else {
				LOG_DEBUG1(("retry"));
				retry--;
#ifdef WIN32
				Sleep(100000);
#else
				usleep(100000);
#endif
				continue;
			}
		}
		if (result->type() == COMM_RESULT_SOUND_RECOG) {

			ResultSoundRecogEvent *evt = (ResultSoundRecogEvent*)result->data();
			text = evt->releaseText();
		}
		delete result;
		break;
	}

	prov->close();
	delete r;

	return text;
}