Пример #1
0
std::ostream &operator<<(std::ostream &o, const struct soap_dom_element &e)
{ if (!e.soap)
  { struct soap soap;
    soap_init2(&soap, SOAP_IO_DEFAULT, SOAP_XML_GRAPH);
    soap_mark_xsd__anyType(&soap, &e);
    soap_begin_send(&soap);
    soap_put_xsd__anyType(&soap, &e, NULL, NULL);
    soap_end_send(&soap);
    soap_end(&soap);
    soap_done(&soap);
  }
  else
  { std::ostream *os = e.soap->os;
    e.soap->os = &o;
    short omode = e.soap->omode;
    soap_set_omode(e.soap, SOAP_XML_GRAPH);
    soap_mark_xsd__anyType(e.soap, &e);
    soap_begin_send(e.soap);
    soap_put_xsd__anyType(e.soap, &e, NULL, NULL);
    soap_end_send(e.soap);
    e.soap->os = os;
    e.soap->omode = omode;
  }
  return o;
}
Пример #2
0
std::ostream &operator<<(std::ostream &o, const struct soap_dom_element &e)
{ if (!e.soap)
  { struct soap soap;
    soap_init2(&soap, SOAP_IO_DEFAULT, SOAP_XML_GRAPH);
    soap_serialize_xsd__anyType(&soap, &e);
    soap_begin_send(&soap);
    soap.ns = 2; /* do not dump namespace table */
    soap_out_xsd__anyType(&soap, NULL, 0, &e, NULL);
    soap_end_send(&soap);
    soap_end(&soap);
    soap_done(&soap);
  }
  else
  { std::ostream *os = e.soap->os;
    e.soap->os = &o;
    soap_mode omode = e.soap->omode;
    soap_set_omode(e.soap, SOAP_XML_GRAPH);
    soap_serialize_xsd__anyType(e.soap, &e);
    soap_begin_send(e.soap);
    e.soap->ns = 2; /* do not dump namespace table */
    soap_out_xsd__anyType(e.soap, NULL, 0, &e, NULL);
    soap_end_send(e.soap);
    e.soap->os = os;
    e.soap->omode = omode;
  }
  return o;
}
Пример #3
0
static c_bool
cms_serviceInitSOAP(
    cms_service cms)
{
    struct soap* soap;
    c_bool success;
    c_long master;

    success = FALSE;
    soap = (struct soap*)(malloc(sizeof(struct soap)));

    soap_init2(soap, SOAP_IO_KEEPALIVE | SOAP_IO_FLUSH, SOAP_IO_KEEPALIVE | SOAP_IO_FLUSH);
    cms->soap = soap;
    cms->soap->accept_timeout = 3;
#ifdef PIKEOS_POSIX
    cms->soap->bind_flags = 0;
#else
    cms->soap->bind_flags = SO_REUSEADDR;
#endif

    master = soap_bind(cms->soap, NULL, cms->configuration->port,
                       cms->configuration->backlog);

    if(master < 0) {
        if(cms->configuration->verbosity >= 1) {
            OS_REPORT_1(OS_ERROR, CMS_CONTEXT, 0, "Could not bind to port %d",
                        cms->configuration->port);
        }
    } else {
        cms->clients = c_iterNew(NULL);
        success = TRUE;
    }
    return success;
}
int ns__changeAdviceDispatchSetting(struct soap* soap, long dispatchSettingId, struct ns__awizoMessage* message, struct ns__dateTimeComplexList *dateTime, long *result) {



/* ------------------------------ */

   long	        longRet   =    0;
   long		attempt	  =    0;
   queueNode_t* iterator  = NULL;
   char*	host	  = NULL;
   struct soap       soap2Eawizo;

/* ------------------------------ */


 attempt = MAX_ATTEMPT;

 soap_init2(&soap2Eawizo,SOAP_C_UTFSTRING,SOAP_C_UTFSTRING);

 iterator = (_GLOBAL_awizoConfig.bmdservers).head;

 for(;;){
  asprintf(&host, "http://%s:%s",((bmdserver_t*)(iterator->node))->addr,((bmdserver_t*)(iterator->node))->port);

  longRet = soap_call_ns__changeAdviceDispatchSetting(&soap2Eawizo,host,NULL, dispatchSettingId, message, dateTime, result);

  free0(host);

  if (longRet == SOAP_OK) {
	PRINT_INFO("Zapisano rekord w bazie danych\n");
	return SOAP_OK;
  }
  else {
	if (iterator->prev){
		iterator=iterator->prev;
		continue;
	}
	else if (--attempt <= 0){
		PRINT_ERROR("Nie udało się nawiązać połączenia z żadnym z serwerów e-Awiz. Error = %d\n", BMD_ERR_OP_FAILED);
		//soap_end(&soap2Eawizo);
		//soap_done(&soap2Eawizo);
		//return soap_receiver_fault(soap, "Nie udało się nawiązać połączenia z żadnym z serwerów e-Awiz.", NULL);
		attempt = MAX_ATTEMPT;
	}
	iterator = (_GLOBAL_awizoConfig.bmdservers).head;
	sleep(1);
  }
 }
	soap_end(&soap2Eawizo);
	soap_done(&soap2Eawizo);

	return SOAP_OK;






}
Пример #5
0
int main()
{ struct soap soap;
  soap_init2(&soap, SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE | SOAP_XML_INDENT);
  /* Events A to C do not generate a response from the server */
  fprintf(stderr, "Client Sends Event: A\n");
  if (soap_send_ns__handle(&soap, event_handler_endpoint, event_handler_action, EVENT_A))
    soap_print_fault(&soap, stderr);
  if (synchronous && soap_recv_empty_response(&soap))
    soap_print_fault(&soap, stderr);
  fprintf(stderr, "Client Sends Event: B\n");
  if (soap_send_ns__handle(&soap, event_handler_endpoint, event_handler_action, EVENT_B))
    soap_print_fault(&soap, stderr);
  if (synchronous && soap_recv_empty_response(&soap))
    soap_print_fault(&soap, stderr);
  /* reset keep-alive when client needs to inform the server that it will close the connection. It may reconnect later */
  soap_clr_omode(&soap, SOAP_IO_KEEPALIVE);
  fprintf(stderr, "Client Sends Event: C\n");
  if (soap_send_ns__handle(&soap, event_handler_endpoint, event_handler_action, EVENT_C))
    soap_print_fault(&soap, stderr);
  if (synchronous && soap_recv_empty_response(&soap))
    soap_print_fault(&soap, stderr);
  /* close the socket */
  soap_closesock(&soap);
  /* re-enable keep-alive which is required to accept and execute multiple receives */
  soap_set_omode(&soap, SOAP_IO_KEEPALIVE);
  /* Events Z generates a series of response from the server */
  fprintf(stderr, "Client Sends Event: Z\n");
  if (soap_send_ns__handle(&soap, event_handler_endpoint, event_handler_action, EVENT_Z))
    soap_print_fault(&soap, stderr);
  else
  { struct ns__handle response;
    for (;;)
    { if (!soap_valid_socket(soap.socket))
      { fprintf(stderr, "Connection was terminated (keep alive disabled?)\n");
        break;
      }
      if (soap_recv_ns__handle(&soap, &response))
      { if (soap.error == SOAP_EOF)
          fprintf(stderr, "Connection was gracefully closed by server\n");
        else
	  soap_print_fault(&soap, stderr);
	break;
      }
      else
      { switch (response.event)
        { case EVENT_A: fprintf(stderr, "Client Received Event: A\n"); break;
          case EVENT_B: fprintf(stderr, "Client Received Event: B\n"); break;
          case EVENT_C: fprintf(stderr, "Client Received Event: C\n"); break;
          case EVENT_Z: fprintf(stderr, "Client Received Event: Z\n"); break;
        }
      }
    }
  }
  soap_closesock(&soap); /* soap_send operations keep the socket open to possibly accept responses, so we need to explicitly close the socket now */
  soap_end(&soap); /* this will close the socket too (if keep alive is off), just in case */
  soap_done(&soap); /* detach environment (also closes sockets even with keep-alive) */
  return 0;
}
Пример #6
0
int ns__awizoDeleteSender(struct soap* soap, long id, long* result)
{

/* ------------------------------ */

   long	        longRet   =    0;
   long		attempt	  =    0;
   queueNode_t* iterator  = NULL;
   char*	host	  = NULL;
   struct soap       soap2Eawizo;

/* ------------------------------ */


 attempt = MAX_ATTEMPT;

 soap_init2(&soap2Eawizo,SOAP_C_UTFSTRING,SOAP_C_UTFSTRING);

 iterator = (_GLOBAL_awizoConfig.bmdservers).head;

 for(;;){
  asprintf(&host, "http://%s:%s",((bmdserver_t*)(iterator->node))->addr,((bmdserver_t*)(iterator->node))->port);

  longRet = soap_call_ns__awizoDeleteSender(&soap2Eawizo,host,NULL,id,result); 

  free0(host);

  if (longRet == SOAP_OK) {
	PRINT_INFO("Usunięto wystawcę o ID=%ld\n",id);
	return SOAP_OK;
  }
  else {
	if (iterator->prev){
		iterator=iterator->prev;
		continue;
	}
	else if (--attempt <= 0){
		PRINT_ERROR("Nie udało się nawiązać połączenia z żadnym z serwerów e-Awiz. Error = %d\n", BMD_ERR_OP_FAILED);
		//soap_end(&soap2Eawizo);
		//soap_done(&soap2Eawizo);
		//return soap_receiver_fault(soap, "Nie udało się nawiązać połączenia z żadnym z serwerów e-Awiz.", NULL);
		attempt = MAX_ATTEMPT;
	}
	iterator = (_GLOBAL_awizoConfig.bmdservers).head;
	sleep(1);
  }
 }
	soap_end(&soap2Eawizo);
	soap_done(&soap2Eawizo);

	return SOAP_OK;



}
Пример #7
0
DSL_int32_t DSL_CPE_SoapInit(DSL_CPE_Control_Context_t *pContext)
{
   DSL_int32_t ret = 0;

   memset(&SoapEnv, 0, sizeof(Soap_env_t));

   soap_init(&SoapEnv.client.soap);

   /* Set client connection timeout (=1sec) therefore NONBLOCK mode activated.*/
   SoapEnv.client.soap.connect_timeout = 1;

   /* DO NOT INCLUDE "SOAP_IO_KEEPALIVE" FLAG FOR CLIENT BECAUSE THIS MIGHT
      RESULT IN PROBLEMS!!! */
   /*soap_init2(&SoapEnv.client.soap, SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE);*/
   SoapEnv.client.bInit = DSL_TRUE;

   /*soap_init(&SoapEnv.server.soap);*/
   soap_init2(&SoapEnv.server.soap, SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE);

   SoapEnv.server.soap.accept_timeout = 60;  /* let server time out after 60 sec of inactivity */

   SoapEnv.server.soap.send_timeout = 10;    /* 10 seconds */
   SoapEnv.server.soap.recv_timeout = 10;    /* 10 seconds */
   SoapEnv.server.soap.max_keep_alive = 100; /* max keep-alive sequence (100 packets) */

   SoapEnv.server.m = soap_bind ( &SoapEnv.server.soap, NULL, DSL_CPE_SOAP_PORT, 100 );
   if ( SoapEnv.server.m < 0 )
   {
      /*soap_print_fault ( &SoapEnv.server.soap, stderr );*/
      DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX
         "binding SOAP port (%d) failed - already in use?" DSL_CPE_CRLF,
         DSL_CPE_SOAP_PORT));
      return 1;
   }

   SoapEnv.bRun     = DSL_TRUE;
   SoapEnv.pContext = pContext;

   memset(&SoapControl, 0x00, sizeof(SoapControl));

   DSL_CPE_ThreadInit(&SoapControl, "dsl_soap", DSL_CPE_SOAP, DSL_CPE_SOAP_STACK_SIZE, DSL_CPE_PRIORITY, (DSL_uint32_t)&SoapEnv, (DSL_uint32_t)DSL_NULL);

   DSL_CPE_LockCreate(&SoapEnv.callBackSem);

   ret = DSL_CPE_CLI_Register(&SoapEnv.pSOAPCLIContext, &SoapEnv, DSL_CPE_Soap_Exit,
      SOAP_EventCallback);

   return ret;
}
Пример #8
0
void MoxSoapInit(void)
{
//	MXRunThreadWithParam(&(g_PtSoap.stRunMan),SoapMsgServerMain,(void *)( &g_PtSoap.stSoapServer),"SoapMsgServer");
	soap_init2(&g_PtSoap.stSoapClient, SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE);
//	soap.connect_timeout = 0;
//	g_PtSoap.stSoapClient.send_timeout = SOAP_SEND_TIMEOUT;
//	g_PtSoap.stSoapClient.recv_timeout= SOAP_RECV_TIMEOUT;
//	g_PtSoap.stSoapClient.tcp_keep_alive = 0;
//	g_PtSoap.stSoapClient.keep_alive = 0;
	g_PtSoap.stSoapClient.send_timeout = -1000*300;	//SOAP_SEND_TIMEOUT;
	g_PtSoap.stSoapClient.recv_timeout = -1000*300;	//SOAP_RECV_TIMEOUT;
	g_PtSoap.stSoapClient.connect_timeout = -1000*300;

	_SoapInitSever();
}
Пример #9
0
int main(int argc, char **argv)

{

    int m, s;

    struct ip_mreq mcast;



    //初始化SOAP执行环境

    struct soap probe_soap;

    soap_init2(&probe_soap, SOAP_IO_UDP|SOAP_IO_FLUSH, SOAP_IO_UDP|SOAP_IO_FLUSH);

    soap_set_namespaces(&probe_soap, namespaces);



    /*下面的函数是将创建的SOAP与指定的监听端口进行绑定,即通过SOAP创建监听

        套接字,并将该套接字绑定到指定端口,从而在该端口上监听Web服务请求,

        返回创建的套接字标识 */

    if(!soap_valid_socket(soap_bind(&probe_soap, NULL, 3702, 10)))

    {

        soap_print_fault(&probe_soap, stderr);

        exit(1);

    }



    mcast.imr_multiaddr.s_addr = inet_addr("239.255.255.250");

    mcast.imr_interface.s_addr = htonl(INADDR_ANY);

    if(setsockopt(probe_soap.master, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mcast, sizeof(mcast)) < 0)

    {

        printf("setsockopt error!\n");

        return 0;

    }





    //成功绑定之后,便开始监听

    for (;;)

    {

        //监听直到有连接请求

        s = soap_accept(&probe_soap);

        if (s < 0) {

            soap_print_fault(&probe_soap, stderr);

            exit(-1);

        }

        fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);



        /*  连接成功后,便处理并响应请求,下面的函数就是用来处理并响应请求的,

            它封装了所有的处理与响应过程,在该函数中调用了本地所实现的相关Web

            服务方法,它所需要的所有请求信息都在SOAP结构体中。*/

        soap_serve(&probe_soap);



        soap_destroy(&probe_soap);   //服务完成后,便撤销SOAP环境

        soap_end(&probe_soap);       //清除所有资源,关闭套接字

    }



    soap_done(&probe_soap);

    return 0;

}
Пример #10
0
int main(int argc, char *argv[])
{
// command line arguments
int nArg;
char *ptr;
char szFileType[64]="";
char szURL[256];
char szUsername[256]="";
char szPassword[256]="";
unsigned int FileSize=0;
char szTargetFileName[256]="";
unsigned int DelaySeconds;
char szCWMPAddress[256]="";

char szProxyHost[256]="";
unsigned int ProxyPort=0;
char szProxyUserId[256]="";
char szProxyPasswd[256]="";
char szTemp[256];
double DownloadSize;
FILE *tmpfile;  //add by wangjr 091201

struct soap soap;
struct Namespace empty_namespaces[] = { { NULL } };

  dprintf(LOG_LEVEL1, "\nDOWNLOAD MANAGER ..execution\n\n");

  // signal handling
  signal(SIGPIPE, sigpipe_handle);
  signal(SIGINT, sigint_handle);

  nErrorCode=0;

  // Command Line Arguments
  for (nArg = 1; nArg < argc; nArg++)
  {
    ptr = argv[nArg];
    if (strncmp(argv[nArg], "--CWMPAddress:", strlen("--CWMPAddress:")) == 0) {
      strcpy(szCWMPAddress, &ptr[strlen("--CWMPAddress:")]);
      dprintf(LOG_LEVEL1, "....CWMPAddress: %s\n", szCWMPAddress);
    }
    else if (strncmp(argv[nArg], "--FileType:", strlen("--FileType:")) == 0) {
      strcpy(szFileType, &ptr[strlen("--FileType:")]);
      dprintf(LOG_LEVEL1, "....FileType: %s\n", szFileType);
    }
    else if (strncmp(argv[nArg], "--URL:", strlen("--URL:")) == 0) {
      strcpy(szURL, &ptr[strlen("--URL:")]);
      dprintf(LOG_LEVEL1, "....URL: %s\n", szURL);
    }
    else if (strncmp(argv[nArg], "--Username:"******"--Username:"******"--Username:"******"....Username: %s\n", szUsername);
    }
    else if (strncmp(argv[nArg], "--Password:"******"--Password:"******"--Password:"******"....Password: %s\n", szPassword);
    }
    else if (strncmp(argv[nArg], "--FileSize:", strlen("--FileSize:")) == 0) {
      strcpy(szTemp, &ptr[strlen("--FileSize:")]);
      FileSize = atoi(szTemp);
      dprintf(LOG_LEVEL1, "....FileSize: %d\n", FileSize);
    }
    else if (strncmp(argv[nArg], "--TargetFileName:", strlen("--TargetFileName:")) == 0) {
      strcpy(szTargetFileName, &ptr[strlen("--TargetFileName:")]);
      dprintf(LOG_LEVEL1, "....TargetFileName: %s\n", szTargetFileName);
    }
    else if (strncmp(argv[nArg], "--DelaySeconds:", strlen("--DelaySeconds:")) == 0) {
      strcpy(szTemp, &ptr[strlen("--DelaySeconds:")]);
      DelaySeconds = atoi(szTemp);
      dprintf(LOG_LEVEL1, "....DelaySeconds: %d\n", DelaySeconds);
    }
    else if (strncmp(argv[nArg], "--ProxyHost:", strlen("--ProxyHost:")) == 0) {
      strcpy(szProxyHost, &ptr[strlen("--ProxyHost:")]);
      dprintf(LOG_LEVEL1, "....szProxyHost: %s\n", szProxyHost);
    }
    else if (strncmp(argv[nArg], "--ProxyPort:", strlen("--ProxyPort:")) == 0) {
      strcpy(szTemp, &ptr[strlen("--ProxyPort:")]);
      ProxyPort = atoi(szTemp);
      dprintf(LOG_LEVEL1, "....ProxyPort: %d\n", ProxyPort);
    }
    else if (strncmp(argv[nArg], "--ProxyUserId:", strlen("--ProxyUserId:")) == 0) {
      strcpy(szProxyUserId, &ptr[strlen("--ProxyUserId:")]);
      dprintf(LOG_LEVEL1, "....szProxyUserId: %s\n", szProxyUserId);
    }
    else if (strncmp(argv[nArg], "--ProxyPasswd:", strlen("--ProxyPasswd:")) == 0) {
      strcpy(szProxyPasswd, &ptr[strlen("--ProxyPasswd:")]);
      dprintf(LOG_LEVEL1, "....szProxyPasswd: %s\n", szProxyPasswd);
    }
  }

  DownloadSize = download_funct(szURL, szTargetFileName, szUsername, szPassword, szProxyHost, ProxyPort, szProxyUserId, szProxyPasswd);

  dprintf(LOG_LEVEL3, "....FileSize: %d\n", FileSize);
  
  if ((FileSize > 0) && ((unsigned long)DownloadSize != FileSize))  //update by wangjr
  	nErrorCode = 9010;
  //else 
  	//nErrorCode = 0;
/*        add by wangjr 091201   */
	tmpfile = fopen("/tmp/tr069", "w");
	if(tmpfile != NULL)
    {
		fprintf(tmpfile, "%d",nErrorCode);
	}
	fclose(tmpfile);
/*        add by wangjr 091201   */

  if (szCWMPAddress && (strcmp(szCWMPAddress, "") != 0))
  {
  // RESPONSE to CWMP server
  
  // ATTENTION : Don't use SOAP_IO_KEEPALIVE during SUBSCRIBE message
  // because each SUBSCRIBE must correspond to one TCP connection
    soap_init2(&soap,SOAP_ENC_XML|SOAP_IO_LENGTH|SOAP_XML_INDENT, SOAP_ENC_XML|SOAP_IO_LENGTH|SOAP_XML_INDENT);
    soap.accept_timeout = 60;
    soap.max_keep_alive = 100; // max keep-alive sequence
    soap.recv_timeout = 60; // Timeout after 5 minutes stall on recv 
    soap.send_timeout = 60; // Timeout after 1 minute stall on send 
    soap_set_namespaces(&soap, empty_namespaces);
  
    soap_connect_command(&soap, SOAP_POST, szCWMPAddress, "");
  
    soap_element_begin_out(&soap, CONST_MESSAGE, 0, NULL);
    soap_element_begin_out(&soap, "NAME", 0, NULL);
    sprintf(szTemp, "%s", CONST_DOWNLOADCOMPLETE);
    soap_send_raw(&soap, szTemp, strlen(szTemp));
    soap_element_end_out(&soap, "NAME");
  
    soap_element_begin_out(&soap, "Value", 0, NULL);
    sprintf(szTemp, "%d", nErrorCode);
    soap_send_raw(&soap, szTemp, strlen(szTemp));
    soap_element_end_out(&soap, "Value");
    soap_element_end_out(&soap, CONST_MESSAGE);
  
    soap_end_send(&soap);
    soap_closesock(&soap);
  
    soap_destroy((struct soap*)&soap); // dealloc C++ data
    soap_end((struct soap*)&soap); // dealloc data and clean up
    soap_done((struct soap*)&soap); // detach soap struct
  }

  dprintf(LOG_LEVEL3, "size of data downloaded: %f\n", DownloadSize);

  dprintf(LOG_LEVEL2, "DOWNLOAD MANAGER, END OF MAIN PROGRAM\n");
  return 0;
}