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

📄 udpserver.c

📁 linux下简单对象应用协议的开发库
💻 C
字号:
/*udpserver.cSOAP-over-UDP demo server--------------------------------------------------------------------------------gSOAP XML Web services toolsCopyright (C) 2001-2004, Robert van Engelen, Genivia, Inc. All Rights Reserved.This software is released under one of the following two licenses:GPL or Genivia's license for commercial use.--------------------------------------------------------------------------------GPL license.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--------------------------------------------------------------------------------A commercial use license is available from Genivia, Inc., contact@genivia.com--------------------------------------------------------------------------------*/#include "soapH.h"#include "udp.nsmap"#define MAX_HISTORY (1000)char *received_id[MAX_HISTORY];int last_received;void init_received();int check_received(const char *id);int id_count = 1;int main(){ struct soap soap;  init_received();  soap_init1(&soap, SOAP_IO_UDP);  if (!soap_valid_socket(soap_bind(&soap, NULL, 10000, 100)))  { soap_print_fault(&soap, stderr);    exit(1);  }  for (;;)  { printf("Accepting requests...\n");    if (soap_serve(&soap))      soap_print_fault(&soap, stderr);    soap_end(&soap);  }  soap_done(&soap);  return 0;}void init_received(){ int i;  for (i = 0; i < MAX_HISTORY; i++)    received_id[i] = NULL;  last_received = 0;}int check_received(const char *id){ int i;  if (!id)    return 1;  /* Check if Message ID already received */  for (i = 0; i < MAX_HISTORY; i++)  { if (received_id[i] && !strcmp(id, received_id[i]))      return 1;  }  if (received_id[last_received])    free(received_id[last_received]);  received_id[last_received++] = strdup(id);  /* Wrap to overwrite old IDs */  if (last_received >= MAX_HISTORY)    last_received = 0;  return 0;}int check_header(struct soap *soap){ /* MUST have received a SOAP Header */  if (!soap->header)    return soap_sender_fault(soap, "No SOAP header", NULL);  /* ... with a Message ID */  if (!soap->header->wsa__MessageID)    return soap_sender_fault(soap, "No WS-Addressing MessageID", NULL);  soap->header->wsa__RelatesTo = (struct wsa__Relationship*)soap_malloc(soap, sizeof(struct wsa__Relationship));  soap_default_wsa__Relationship(soap, soap->header->wsa__RelatesTo);  soap->header->wsa__RelatesTo->__item = soap->header->wsa__MessageID;  return SOAP_OK;}int ns__echoString(struct soap *soap, char *str, char **res){ /* Get Header info and setup response Header */  if (check_header(soap))  { printf("Malformed header\n");    return SOAP_FAULT; /* there was a problem */  }  /* If message with MessageID already received, ignore it */  if (check_received(soap->header->wsa__MessageID))  { printf("Request message %s already received\n", soap->header->wsa__MessageID);    return SOAP_STOP;  }  printf("Request message %s accepted\n", soap->header->wsa__MessageID);  /* Check ReplyTo has Address */  if (!soap->header->wsa__ReplyTo || !soap->header->wsa__ReplyTo->Address)    return soap_sender_fault(soap, "No WS-Addressing ReplyTo address", NULL);  /* Copy Header info into response Header */  soap->header->wsa__To = soap->header->wsa__ReplyTo->Address;  /* Add info to response Header */  soap->header->wsa__MessageID = soap_strdup(soap, soap_int2s(soap, id_count++));  soap->header->wsa__Action = "http://genivia.com/udp/echoStringResponse";  /* Copy request string into response string */  printf("Response message %s returned\n", soap->header->wsa__MessageID);  *res = str;  return SOAP_OK;}int ns__sendString(struct soap *soap, char *str){ if (check_header(soap))    printf("Malformed header\n");  else if (check_received(soap->header->wsa__MessageID))    printf("One-way message %s already received\n", soap->header->wsa__MessageID);  else    printf("One-way message %s accepted and serviced\n", soap->header->wsa__MessageID);  return SOAP_OK;}

⌨️ 快捷键说明

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