首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >myrecv函数gSoap

myrecv函数gSoap
EN

Stack Overflow用户
提问于 2017-12-05 05:43:56
回答 2查看 233关注 0票数 0

我正在尝试编写一个gSoap服务器,它需要保存传入的消息。我想把它保存在一个缓冲区中。下面是gSoap文档如何在客户端保存传出消息...

代码语言:javascript
复制
//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;
} 

这需要一些修改,但是如果我把同样的想法带到服务器端,存储到一个缓冲区,并用下面的返回语句结束它……

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2017-12-07 10:26:55

我需要保存从客户端发送到服务器的消息。我以为recv会给我传入的消息,但事实并非如此。

嗯。文档中明确指出,无论是客户端实现还是服务器端实现,frecv()都是接收所有消息的回调函数。因此,定义自己的frecv()回调应该可以做到这一点。如果遇到问题,可以看看gsoap/plugin/logging.c消息记录器,它实现了这个回调来捕获接收到的消息并将其发送到文件/管道。

票数 0
EN

Stack Overflow用户

发布于 2021-06-04 10:26:31

在调用默认的frecv()函数之后,我能够连接到frecv()并执行我自己的额外处理。然而,一个新的目的要求我在缺省的frecv()之前解析缓冲区,而在这一点上它还不存在。一旦调用了默认的frecv(),缓冲区就存在了,但是在缓冲区上执行的操作(即soap_serve())已经发生了,这是我想要截取的,所以我在派生上下文中落后了一个请求。

我的目的是解析缓冲区中的WSDL名称,以便为soap_serve()分配一个惟一的名称空间,但这并不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47642470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档