C & Libevent: agregue datos binarios al búfer de salida
Pregunta
Tengo una salida EvBuffer que quiero poblar con los siguientes datos:
HTTP/1.1 200 OK
Date: Tue, 06 Dec 2011 10:35:08 GMT
Server: Apache/2.2.14 (Ubuntu)
X-Powered-By: PHP/5.3.2-1ubuntu4.9
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 48
Content-Type: text/html
��(�ͱ���I�O����H�����ч��
�4�@�
Estaba usando evbuffer_add_printf(...)
,
Tengo la siguiente función de devolución de llamada C:
static void echo_read_cb(struct bufferevent *bev, void *ctx){
/* This callback is invoked when there is data to read on bev. */
struct evbuffer *input = bufferevent_get_input(bev);
struct evbuffer *output = bufferevent_get_output(bev);
...
char* response=NULL;
response=applyGetReq(url,data,len);
int contLen=0;
contLen=getContentLength(response);
char* binData=strstr(response,"\r\n\r\n");
binData=binData+strlen("\r\n\r\n");
fwrite(binData,sizeof(char),contLen,stdout);
printf("\n");
evbuffer_add_printf(output,"%s",binData); //I want to print binData as binary, not printf!!!
}
Entonces tengo el puntero de datos binarios (bindata) y tengo una longitud (contlen), ¿cómo imprimo esto en el búfer de salida?
Muchas gracias de antemano
Solución
No puede agregar datos binarios de manera segura usando evbuffer_add_printf
. Probar evbuffer_add
función:
int
evbuffer_add(struct evbuffer *buf, const void *data, size_t datlen)
{
size_t need = buf->misalign + buf->off + datlen;
size_t oldoff = buf->off;
if (buf->totallen < need) {
if (evbuffer_expand(buf, datlen) == -1)
return (-1);
}
memcpy(buf->buffer + buf->off, data, datlen);
buf->off += datlen;
if (datlen && buf->cb != NULL)
(*buf->cb)(buf, oldoff, buf->off, buf->cbarg);
return (0);
}
No puedo encontrar una buena documentación, lo mejor que he visto excepto el código fuente es:
int evbuffer_add ( struct evbuffer * ,
const void * ,
size_t
)
Agregue datos al final de un EvBuffer.
Parámetros:
buf the event buffer to be appended to
data pointer to the beginning of the data buffer
datlen the number of bytes to be copied from the data buffer
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow