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; }
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; }
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; }
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; }
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; }
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; }
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(); }
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; }
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; }