Esempio n. 1
0
static void
traceChunkRead(TSession * const abyssSessionP) {

    fprintf(stderr, "XML-RPC handler got a chunk of %u bytes\n",
            (unsigned int)SessionReadDataAvail(abyssSessionP));
}
/**************************************
* GetBody
	Devuelve el body de una peticion
**************************************/
int XmlRpcServer::GetBody(TSession *ses,char *body,short bodyLen)
{
	int len=0;

	//MIentras no hayamos leido del todo
	while (len<bodyLen)
	{
		char * buffer;
		size_t readed;

		//If there is no data available
		if (!SessionReadDataAvail(ses))
			//Refill buffer
			SessionRefillBuffer(ses);

		//Read data
		SessionGetReadData(ses,bodyLen-len,(const char**)&buffer,&readed);

		//If not readed
		if (!readed)
			//error
			return Error("Not enought data readed");
		//Copy
		memcpy(body+len,buffer,readed);

		//Increased readed
		len+=readed;
	}

	//Return
	return len;
/*/

	//Obtenemos lo que quedaba en el buffer
	ConnReadInit(r->conn);

	//Obtenemos lo que hay en la conexion
	if (r->conn->buffersize > bodyLen)
		len = bodyLen;
	else
		len = r->conn->buffersize;

	//Copiamos
	memcpy(body,r->conn->buffer,len);

	//MIentras no hayamos leido del todo
	while (len<bodyLen)
	{
		int size;

		//Iniciamos la lectura
		ConnReadInit(r->conn);

		//Leemos
		if(!ConnRead(r->conn,100))
			return 0;

		//Obtenemos lo que hay en la conexion
		if (r->conn->buffersize > bodyLen - len)
			size = bodyLen - len;
		else
			size = r->conn->buffersize;

		//Copiamos
		memcpy(body+len,r->conn->buffer,size);

		//Incrementamos el buffer
		len += size;

		//Increase buffer pos
		r->conn->bufferpos += len;
	}

	//Reset buffer
	r->conn->buffersize = 0;
	r->conn->bufferpos = 0;

	//Clean buffer
	ConnReadInit(r->conn);

	//Salimos bien
	return 1;
 * */
}