2017-12-04 15 views
0

들어오는 메시지를 저장해야하는 goSap 서버를 쓰려고합니다. 버퍼에 저장하고 싶습니다. 여기에 ... 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; 
} 

이 일부 수정과 함께 작동하지만, 나는 버퍼 끝에 서버 측에이 같은 생각, 저장을하면 이 반환 진술을 가지고 ...

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가 나에게 들어오는 메시지를 줄 것이라고 생각했지만, 이것은 사례가 아닙니다.

흠. 문서에서는 클라이언트 측 구현인지 서버 측 구현인지에 관계없이 모든 메시지를 수신하는 콜백임을 frecv()이 분명하게 말합니다. 자신의 frecv() 콜백을 정의하는 것은 그렇게해야합니다. 문제가 발생하면이 콜백을 구현 한 gsoap/plugin/logging.c 메시지 로거에서 수신 된 메시지를 캡처하여 파일/파이프로 보냅니다.