2011-12-06 12 views
0

にバイナリデータを追加し、私は次のデータを取り込むにしたい出力evbufferありますC&Libevent:出力バッファ

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�@� 

を私はevbuffer_add_printf(...)を使用していた、

私は、次の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!!! 
} 

だから私はバイナリデータポインタ(BINDATA)を持っていると私は長さ(contLen)を持っているが、どのように私はこれは、出力バッファに印刷できますか?

多くのおかげで、事前に

答えて

2

あなたはevbuffer_add_printfを使用して安全な方法でバイナリデータを追加することはできません。 evbuffer_add機能してみてください。

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); 
} 

は良いドキュメントを見つけることができませんが、私はソースコードを除いて見た中で最高です:

http://transmission.sourcearchive.com/documentation/1.75/event_8h_b652a2f82d23509713258a6e44697164.html#b652a2f82d23509713258a6e44697164

int evbuffer_add ( struct evbuffer * , 
    const void * , 
    size_t   
)   

追加データの終わりにエババッファー

パラメータ:

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 
+0

本当に便利なスニペット。それに感謝しています。 – Eamorr

+0

これは、 'evbuffer_add'自体のソースコードであり、使用例ではありません。ドキュメントを見つけるよりも、私がlibeventのソースを読む方が簡単でした。 – osgx

+0

はい、最初はスニペットだと思っていましたが、あなたのリンクから、それがソースコードそのものであることがわかりました。どうもありがとう。 – Eamorr

関連する問題