在 gSoap 服务器中执行服务器操作之前获取回调
Get callback before executing server operation in gSoap server
有没有办法在执行服务器操作之前从 gSoap 框架获得回调?我可以在文档中读到有一个回调 (fserveloop) 在服务器操作成功完成后立即调用,但之前不会。
我需要这个的原因是因为程序从多个套接字接收请求,而其中一个套接字应该只允许一部分操作。因此需要在解析完成后执行访问检查,以便我们知道调用了哪个操作,但在操作执行之前。或者也许有更好的方法?
Is there a way to get a callback from the gSoap framework before a
server operation is executed?
您可以使用其他回调之一,例如被调用以解析 HTTP header 的 fparse
回调。您只需要确保之后调用原始 fparse
回调函数即可。像这样:
soap->user = (void*)soap->fparse; // save original callback to the user variable
soap->fparse = myfparse; // set new callback
哪里
int myfparse(struct soap *soap)
{
// call original callback
int err = soap->user != NULL ? ((int (*)(struct soap*))soap->user)(soap) : SOAP_OK;
if (err == SOAP_OK)
{
... // your logic goes here
}
return err;
}
注:
- 您可以在解析 HTTP header 之前或之后添加逻辑。
- 您可以通过将
soap->user
设置为包含数据的结构和您需要的原始 fparse
函数指针的成员来将数据传递给您的逻辑。
- 强制转换
((int (*)(struct soap*))
只有在确保将 soap->user
设置为原始 fparse
后在 myfparse
中使用它时才是安全的] 函数。
有没有办法在执行服务器操作之前从 gSoap 框架获得回调?我可以在文档中读到有一个回调 (fserveloop) 在服务器操作成功完成后立即调用,但之前不会。
我需要这个的原因是因为程序从多个套接字接收请求,而其中一个套接字应该只允许一部分操作。因此需要在解析完成后执行访问检查,以便我们知道调用了哪个操作,但在操作执行之前。或者也许有更好的方法?
Is there a way to get a callback from the gSoap framework before a server operation is executed?
您可以使用其他回调之一,例如被调用以解析 HTTP header 的 fparse
回调。您只需要确保之后调用原始 fparse
回调函数即可。像这样:
soap->user = (void*)soap->fparse; // save original callback to the user variable
soap->fparse = myfparse; // set new callback
哪里
int myfparse(struct soap *soap)
{
// call original callback
int err = soap->user != NULL ? ((int (*)(struct soap*))soap->user)(soap) : SOAP_OK;
if (err == SOAP_OK)
{
... // your logic goes here
}
return err;
}
注:
- 您可以在解析 HTTP header 之前或之后添加逻辑。
- 您可以通过将
soap->user
设置为包含数据的结构和您需要的原始fparse
函数指针的成员来将数据传递给您的逻辑。 - 强制转换
((int (*)(struct soap*))
只有在确保将soap->user
设置为原始fparse
后在myfparse
中使用它时才是安全的] 函数。