int soap_outdecimal(struct soap *soap, const char *tag, int id, const long double *p, const char *type, int n) { if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) || soap_string_out(soap, soap_decimal2s(soap, *p), 0)) return soap->error; return soap_element_end_out(soap, tag); }
int soap_out_xsd__integer(struct soap *soap, const char *tag, int id, const __int128_t *p, const char *type) { if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, SOAP_TYPE_xsd__integer), type) || soap_string_out(soap, soap_xsd__integer2s(soap, *p), 0)) return soap->error; return soap_element_end_out(soap, tag); }
int save_options(const char *file, const char *name, struct option *options) { struct soap soap; soap_init1(&soap, SOAP_XML_TREE); soap.namespaces = NULL; soap.encodingStyle = NULL; if (file) { soap.sendfd = open(file, O_CREAT | O_WRONLY); if (soap.sendfd < 0) { soap_done(&soap); return EOF; } } if (!soap_begin_send(&soap) && !soap_element_begin_out(&soap, name, 0, NULL)) { struct option *p; struct t__Option t; for (p = options; p->name; p++) { t.val = NULL; if (!p->name[0]) { if (!p->value) continue; t.key = NULL; t.val = p->value; } else if (p->name[1] == '.') t.key = (char*)p->name + 2; else t.key = (char*)p->name; if (p->selections && strchr(p->selections, ' ')) { const char *s = p->selections - 1; char *r; int i; for (i = p->selected; i > 0; i--) { s = strchr(s + 1, ' '); if (!s) break; } if (s) { t.val = soap_strdup(&soap, s + 1); r = strchr(t.val, ' '); if (r) *r = '\0'; } } else if (p->value) t.val = p->value; else if (!p->selected) continue; if (soap_out_t__Option(&soap, "option", 0, &t, NULL)) break; } if (!soap_element_end_out(&soap, name)) soap_end_send(&soap); } if (file) close(soap.sendfd); soap_end(&soap); soap_done(&soap); return soap.error; }
SOAP_FMAC1 void SOAP_FMAC2 soap_out_SOAP_ENV__Fault(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Fault *a, const char *type) { soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_SOAP_ENV__Fault), type); soap_out_string(soap, "faultcode", -1, &a->faultcode, ""); soap_out_string(soap, "faultstring", -1, &a->faultstring, ""); soap_out_string(soap, "faultactor", -1, &a->faultactor, ""); soap_out_string(soap, "detail", -1, &a->detail, ""); soap_element_end_out(soap, tag); }
int soap_out_xsd__dateTime(struct soap *soap, const char *tag, int id, const struct tm *a, const char *type) { if (!soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_xsd__dateTime), type)) { strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", a); if (soap_string_out(soap, soap->tmpbuf, 0)) return soap->error; } else return soap->error; return soap_element_end_out(soap, tag); }
SOAP_FMAC1 void SOAP_FMAC2 soap_out_ns__getQuoteResponse(struct soap *soap, const char *tag, int id, const struct ns__getQuoteResponse *a, const char *type) { soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_ns__getQuoteResponse), type); soap_out_float(soap, "result", -1, &a->result, ""); soap_element_end_out(soap, tag); }
SOAP_FMAC1 void SOAP_FMAC2 soap_out_ns__getQuote(struct soap *soap, const char *tag, int id, const struct ns__getQuote *a, const char *type) { soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_ns__getQuote), type); soap_out_string(soap, "symbol", -1, &a->symbol, ""); soap_element_end_out(soap, tag); }
SOAP_FMAC1 void SOAP_FMAC2 soap_out_SOAP_ENV__Header(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Header *a, const char *type) { soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_SOAP_ENV__Header), type); /* transient dummy skipped */ soap_element_end_out(soap, tag); }
SOAP_FMAC1 int SOAP_FMAC2 soap_out_xsd__anyType(struct soap *soap, const char *tag, int id, const struct soap_dom_element *node, const char *type) { if (node) { const char *prefix; /* namespace prefix, if namespace is present */ size_t colon; if (!(soap->mode & SOAP_DOM_ASIS)) { const struct soap_dom_attribute *att; for (att = node->atts; att; att = att->next) { if (att->name && att->data && !strncmp(att->name, "xmlns:", 6)) { if (soap_push_namespace(soap, att->name + 6, att->data) == NULL) return soap->error; } else if (att->name && att->data && !strcmp(att->name, "xmlns")) { if (soap_push_namespace(soap, "", att->data) == NULL) return soap->error; } } } if (node->name) tag = node->name; else if (!tag) tag = "-"; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DOM node '%s' output at level %u\n", tag, soap->level)); if ((prefix = strchr(tag, ':'))) { colon = prefix - tag + 1; if (colon > sizeof(soap->tag)) colon = sizeof(soap->tag); } else colon = 0; prefix = NULL; if (node->nstr && *node->nstr && !(soap->mode & SOAP_DOM_ASIS)) { if (colon) { strncpy(soap->tag, tag, colon - 1); soap->tag[colon - 1] = '\0'; if ((prefix = soap_push_ns_prefix(soap, soap->tag, node->nstr, 1)) == NULL || out_element(soap, node, prefix, tag + colon)) return soap->error; } else { if ((prefix = soap_lookup_ns_prefix(soap, node->nstr))) { if (out_element(soap, node, prefix, tag + colon)) return soap->error; } else { if ((prefix = soap_push_ns_prefix(soap, NULL, node->nstr, 1)) == NULL || out_element(soap, node, prefix, tag + colon)) return soap->error; } } } else { colon = 0; if (out_element(soap, node, NULL, tag)) return soap->error; } if (!node->type || !node->node) { struct soap_dom_attribute *att; struct soap_dom_element *elt; for (att = node->atts; att; att = att->next) { if (att->name) { if (att->nstr && !(soap->mode & SOAP_DOM_ASIS)) { const char *p; if ((att->nstr == node->nstr || (node->nstr && !strcmp(att->nstr, node->nstr))) && prefix) { if (out_attribute(soap, prefix, att->name, att->data, att->wide, 0)) return soap->error; } else if ((p = soap_lookup_ns_prefix(soap, att->nstr))) { if (out_attribute(soap, p, att->name, att->data, att->wide, 0)) return soap->error; } else if (!strncmp(att->name, "xml", 3)) { if (out_attribute(soap, NULL, att->name, att->data, att->wide, 0)) return soap->error; } else if ((p = soap_push_ns_prefix(soap, NULL, att->nstr, 0)) == NULL || out_attribute(soap, p, att->name, att->data, att->wide, 0)) return soap->error; } else if (soap_attribute(soap, att->name, att->wide ? soap_wchar2s(soap, att->wide) : att->data)) return soap->error; } } if ((soap->mode & SOAP_DOM_ASIS) && !node->data && !node->wide && !node->elts && !node->tail) { if (*tag != '-' && soap_element_start_end_out(soap, tag)) return soap->error; } else { if (*tag != '-' && soap_element_start_end_out(soap, NULL)) return soap->error; if (node->data) { if (soap_string_out(soap, node->data, 0)) return soap->error; } else if (node->wide) { if (soap_wstring_out(soap, node->wide, 0)) return soap->error; } for (elt = node->elts; elt; elt = elt->next) { if (soap_out_xsd__anyType(soap, tag, 0, elt, NULL)) return soap->error; } if (node->tail && soap_send(soap, node->tail)) return soap->error; if (!prefix || !*prefix) { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of DOM node '%s'\n", tag + colon)); if (soap_element_end_out(soap, tag + colon)) return soap->error; } else { char *s; if (strlen(prefix) + strlen(tag + colon) < sizeof(soap->msgbuf)) s = soap->msgbuf; else { s = (char*)SOAP_MALLOC(soap, strlen(prefix) + strlen(tag + colon) + 2); if (!s) return soap->error = SOAP_EOM; } DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of DOM node '%s'\n", tag)); sprintf(s, "%s:%s", prefix, tag + colon); soap_pop_namespace(soap); if (soap_element_end_out(soap, s)) return soap->error; if (s != soap->msgbuf) SOAP_FREE(soap, s); } } } } return SOAP_OK; }
int soap_out_xsd__dateTime(struct soap *soap, const char *tag, int id, const struct timeval *a, const char *type) { if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_xsd__dateTime), type) || soap_string_out(soap, soap_xsd__dateTime2s(soap, *a), 0)) return soap->error; return soap_element_end_out(soap, tag); }
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_out_xsd__duration(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type) { if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_xsd__duration), type) || soap_string_out(soap, soap_xsd__duration2s(soap, *a), 0)) return soap->error; return soap_element_end_out(soap, tag); }