int soap_get_connect(struct soap *soap, const char *endpoint, const char *action) { return soap_connect_command(soap, SOAP_GET, endpoint, action); }
int soap_delete_connect(struct soap *soap, const char *endpoint, const char *action, const char *type) { if (soap_connect_command(soap, SOAP_DEL, endpoint, action) || soap_end_send(soap)) return soap_closesock(soap); return soap_closesock(soap); }
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; }
int soap_put_connect(struct soap *soap, const char *endpoint, const char *action, const char *type) { if ((soap->omode & SOAP_IO) != SOAP_IO_CHUNK) /* not chunking: store in buf */ soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE; soap->http_content = type; return soap_connect_command(soap, SOAP_PUT, endpoint, action); }