2017-12-04 32 views
0

受信メッセージを保存する必要があるgSoapサーバーを作成しようとしています。私はそれをバッファに保存したい。ここでmyrecv function gSoap

//from gSoap Documentation 
//SOURCE: https://www.genivia.com/doc/soapdoc2.html#tth_sEc19.7 
int mysend(struct soap *soap, const char *s, size_t n) 
{ 
    struct buffer *h = (struct buffer*)soap->user; // get buffer through handle 
    int m = h->max, k = h->len + n; 
    // need to increase space? 
    if (m == 0) 
     m = 1024; 
    else 
     while (k >= m) 
     m *= 2; 
    if (m != h->max) 
    { 
     char *buf = malloc(m); 
     memcpy(buf, h->buf, h->len); 
     h->max = m; 
     if(h->buf) 
     free(h->buf); 
     h->buf = buf; 
    } 
    memcpy(h->buf + h->len, s, n); 
    h->len += n; 
    return SOAP_OK; 
} 

が、これはいくつかの変更で動作しますが、私は、サーバー側にこれと同じ考え方を取る場合、バッファおよびエンドへのストア...のgSOAPのドキュメントが送信メッセージを保存するために、クライアント側でそれをしない方法ですこの返信文でそれを...

size_t myrecv(struct soap *soap, char *s, size_t n){ 
//do similar to above example... 
... 
return default_frecv(soap,s,n); 
} 

これは、サーバーからクライアントに戻るメッセージのみを格納します。私はクライアントからサーバーに来るメッセージを保存する必要があります。私はrecvが私に着信メッセージを与えると思ったが、これはそうではない。何か案は?どんな助け、提案、またはアイデアも感謝しています!前もって感謝します! mysend例に

ソース:https://www.genivia.com/doc/soapdoc2.html#tth_sEc19.7

答えて

0

私は、クライアントからサーバーに来たメッセージを保存する必要があります。私は と思ってrecvは私に着信メッセージを与えるだろうが、これは ケースではない。

Hmmm。ドキュメントには、クライアントサイドの実装かサーバーサイドの実装かにかかわらず、すべてのメッセージを受け取るコールバックがfrecv()であることが明確に記載されています。独自のfrecv()コールバックを定義するのはそうだと思います。この機能が実装されているgsoap/plugin/logging.cメッセージロガーを見て、受信したメッセージをキャプチャしてファイル/パイプに送信してください。