⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logging.c

📁 一款开源的soap库
💻 C
字号:
/*logging.cMessage logging plugin for webserver.gSOAP XML Web services toolsCopyright (C) 2004-2005, Robert van Engelen, Genivia, Inc. All Rights Reserved.--------------------------------------------------------------------------------This program is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the Free SoftwareFoundation; either version 2 of the License, or (at your option) any laterversion.This program is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR APARTICULAR PURPOSE. See the GNU General Public License for more details.You should have received a copy of the GNU General Public License along withthis program; if not, write to the Free Software Foundation, Inc., 59 TemplePlace, Suite 330, Boston, MA 02111-1307 USAAuthor contact information:engelen@genivia.com / engelen@acm.org--------------------------------------------------------------------------------*/#include "logging.h"const char logging_id[] = LOGGING_ID;static int logging_init(struct soap *soap, struct logging_data *data);static void logging_delete(struct soap *soap, struct soap_plugin *p);static int logging_send(struct soap *soap, const char *buf, size_t len);static size_t logging_recv(struct soap *soap, char *buf, size_t len);int logging(struct soap *soap, struct soap_plugin *p, void *arg){ p->id = logging_id;  p->data = (void*)malloc(sizeof(struct logging_data));  p->fdelete = logging_delete;  if (p->data)    if (logging_init(soap, (struct logging_data*)p->data))    { free(p->data); /* error: could not init */      return SOAP_EOM; /* return error */    }  return SOAP_OK;}static int logging_init(struct soap *soap, struct logging_data *data){ data->inbound = NULL;  data->outbound = NULL;  data->stat_sent = 0;  data->stat_recv = 0;  data->fsend = soap->fsend; /* save old recv callback */  data->frecv = soap->frecv; /* save old send callback */  soap->fsend = logging_send; /* replace send callback with ours */  soap->frecv = logging_recv; /* replace recv callback with ours */  return SOAP_OK;}static void logging_delete(struct soap *soap, struct soap_plugin *p){ free(p->data); /* free allocated plugin data. If fcopy() is not set, then this function is not called for all copies of the plugin created with soap_copy(). In this example, the fcopy() callback is omitted and the plugin data is shared by the soap copies created with soap_copy() */}static size_t logging_recv(struct soap *soap, char *buf, size_t len){ struct logging_data *data = (struct logging_data*)soap_lookup_plugin(soap, logging_id);  size_t res = data->frecv(soap, buf, len); /* get data from old recv callback */  data->stat_recv += res;  /* update should be in mutex, but we don't mind some inaccuracy in the count */  if (data->inbound)    fwrite(buf, res, 1, data->inbound);  return res;}static int logging_send(struct soap *soap, const char *buf, size_t len){ struct logging_data *data = (struct logging_data*)soap_lookup_plugin(soap, logging_id);  /* update should be in mutex, but we don't mind some inaccuracy in the count */  data->stat_sent += len;  if (data->outbound)    fwrite(buf, len, 1, data->outbound);  return data->fsend(soap, buf, len); /* pass data on to old send callback */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -