Example #1
0
int *iteliec_get_host_info (SoapCtx *request) {
	sg_host_info *general_stats;

	general_stats = sg_get_host_info ();

    soap_env_push_item (request->env, "urn:HostSoap", "host");

    soap_env_add_item  (request->env, "xsd:string", "os_name", general_stats->os_name);
    soap_env_add_item  (request->env, "xsd:string", "platform", general_stats->platform);
    soap_env_add_item  (request->env, "xsd:string", "hostname", general_stats->hostname);
    soap_env_add_itemf (request->env, "xsd:integer", "uptime", "%lu", general_stats->uptime);

    soap_env_pop_item (request->env);

    return 0;
}
Example #2
0
u_int32_t ws_add_para_tosoap(void *ctx_void, int type, char* name, void* data)
{
    char integer_buf[16];
    SoapCtx *ctx = (SoapCtx *)ctx_void;
    
    if(type == WS_PARA_TYPE_STRING)
    {
        soap_env_add_item(ctx->env, "xsd:string", name, (s8 *)data);
    }
    else
    {
        /*整数要先转换成字符串形式*/
        snprintf(integer_buf, 16, "%d", (int32_t)(long)data);
        soap_env_add_item(ctx->env, "xsd:int", name, integer_buf);
    }
    return ERROR_SUCCESS;
}
Example #3
0
xmlNodePtr
soap_env_push_item(SoapEnv * call, const char *type, const char *name)
{

  xmlNodePtr node;

  if ((node = soap_env_add_item(call, type, name, "")))
    call->cur = node;

  return node;
}
Example #4
0
xmlNodePtr
soap_env_add_itemf(SoapEnv * call, const char *type,
                   const char *name, const char *format, ...)
{

  va_list ap;
  char buffer[1054];


  va_start(ap, format);
  vsprintf(buffer, format, ap);
  va_end(ap);

  return soap_env_add_item(call, type, name, buffer);
}
Example #5
0
int main(int argc, char *argv[])
{
    SoapCtx *req, *resp;
    herror_t err;
    
    err = soap_client_init_args(argc, argv);
    if (err != H_OK) {
        log_error4("%s():%s [%d]", herror_func(err),
                    herror_message(err), herror_code(err));
        herror_release(err);
        return 1;
    }

    err = soap_ctx_new_with_method(urn, "computePi", &req);
    if (err != H_OK) {
        log_error4("%s():%s [%d]", herror_func(err),
                    herror_message(err), herror_code(err));
        herror_release(err);
        return 1;
    }
    
    soap_env_add_item(req->env, "xsd:decimal", "precision", "10000");

    if (argc > 1)
        err = soap_client_invoke(req, &resp, argv[1], "");
    else
        err = soap_client_invoke(req, &resp, url, "");

    if (err != H_OK) {
        log_error4("[%d] %s(): %s ", herror_code(err), herror_func(err),
                   herror_message(err));
        herror_release(err);
        soap_ctx_free(req);
        return 1;
    }

    soap_xml_doc_print(resp->env->root->doc);
    soap_ctx_free(resp);
    soap_ctx_free(req);

    soap_client_destroy();

    return 0;
}
Example #6
0
int iteliec_soap_register (char *username, char *password) {
    herror_t err;
    SoapCtx *request;
    SoapCtx *response;

    config_t cfg;
    config_setting_t *setting, *root;
    const char *cfile;

    cfile = iteliec_config_file ();
    
    config_init (&cfg);

    /* Read the file. If there is an error, report it and exit. */
    if (!config_read_file (&cfg, cfile)) {
        iteliec_log (ITELIEC_ERR, "Please ensure configuration file %s exists and is valid", cfile);
        //printf ("\n%s:%d - %s", config_error_file (&cfg), config_error_line (&cfg), config_error_text (&cfg));
        
        config_destroy (&cfg);
        
        return;
    }

    root = config_root_setting (&cfg);

    /* Init */
    err = soap_client_init_args (0, NULL);
    if (err != H_OK)  {
        err_soap (err);
        
        return ITELIEC_ERR;
    }

    err = soap_ctx_new_with_method ("", "sendAuth", &request);
    if (err != H_OK) {
        err_soap (err);
        soap_client_destroy ();

        return ITELIEC_ERR;
    }

    /* Add login details */
    soap_env_add_item (request->env, "xsd:string", "username", username);
    soap_env_add_item (request->env, "xsd:string", "password", password);

    /* Trade for response */
    err = soap_client_invoke (request, &response, "http://api.iteliec.com/register/auth/ws/", "");
    if (err != H_OK)  {
        err_soap (err);
        soap_ctx_free (request);
        soap_client_destroy ();
        
        return ITELIEC_ERR;
    }

    /* Parse response */
    auth_type* ret = parse_auth_response (response);
    if (ret->auth == true) {
        printf ("Success\n");
        
        setting = config_setting_get_member (root, "api");
        if(!setting) {
            setting = config_setting_add (root, "api", CONFIG_TYPE_GROUP);        
        }

        setting = config_setting_add (setting, "hash", CONFIG_TYPE_STRING);
        config_setting_set_string (setting, ret->token);

        /* Write out the updated configuration. */
        if(! config_write_file(&cfg, cfile)) {
            fprintf (stderr, "Error while writing file.\n");
            config_destroy (&cfg);
            
            return (ITELIEC_OK);
        }

        printf("\nConfiguration file updated. Server is ready to run.\n");

    } else {
        printf("Auth failed\n");
    }

    /* Destroy */
    soap_ctx_free (request);
    soap_ctx_free (response);
    
    soap_client_destroy ();
    config_destroy (&cfg);

    return ITELIEC_OK;
}
Example #7
0
int *iteliec_get_process_list (SoapCtx *request) {
    sg_process_stats *ps;
    int ps_size;
    int x;
    char *state = NULL;

    /* get process list */
    ps = sg_get_process_stats (&ps_size);    

    if (ps == NULL) {
        iteliec_log (ITELIEC_ERR, "Failed to get process snapshot");
        
        return;
    }

    soap_env_push_item (request->env, "urn:ProcessListSoapArray", "processlist");
    for (x = 0; x < ps_size; x++) {
        switch (ps->state) {
        case SG_PROCESS_STATE_RUNNING:
            state = "RUNNING";
            break;
        case SG_PROCESS_STATE_SLEEPING:
            state = "SLEEPING";
            break;
        case SG_PROCESS_STATE_STOPPED:
            state = "STOPPED";
            break;
        case SG_PROCESS_STATE_ZOMBIE:
            state = "ZOMBIE";
            break;
        case SG_PROCESS_STATE_UNKNOWN:
        default:
            state = "UNKNOWN";
            break;
        }

        soap_env_push_item (request->env, "urn:ProcessListSoap", "processlist");

        soap_env_add_itemf (request->env, "xsd:integer", "pid",     "%d", (int)ps->pid);
        soap_env_add_itemf (request->env, "xsd:integer", "parent",  "%d", (int)ps->parent);
        soap_env_add_itemf (request->env, "xsd:integer", "pgid",    "%d", (int)ps->pgid);
        soap_env_add_itemf (request->env, "xsd:integer", "uid",     "%d", (int)ps->uid);
        soap_env_add_itemf (request->env, "xsd:integer", "euid",    "%d", (int)ps->euid);
        soap_env_add_itemf (request->env, "xsd:integer", "gid",     "%d", (int)ps->gid);
        soap_env_add_itemf (request->env, "xsd:integer", "egid",    "%d", (int)ps->egid);
        soap_env_add_itemf (request->env, "xsd:integer", "nice",    "%d", (int)ps->nice);
        
        soap_env_add_itemf (request->env, "xsd:integer", "proc_size",    "%d", (int)ps->proc_size);
        soap_env_add_itemf (request->env, "xsd:integer", "proc_resident","%d", (int)ps->proc_resident);
        soap_env_add_itemf (request->env, "xsd:float",   "cpu_percent",  "%F", ps->cpu_percent);
        
        soap_env_add_item  (request->env, "xsd:string", "state", state);
        soap_env_add_item  (request->env, "xsd:string", "process_name", ps->process_name);
        soap_env_add_item  (request->env, "xsd:string", "proctitle", ps->proctitle);

        soap_env_pop_item (request->env);

        ps++;
    }
    soap_env_pop_item (request->env);

    return ITELIEC_OK;
}
Example #8
0
void *reader_thread(void *arg)
{
  SoapCtx *ctx, *ctx2;
  xmlNodePtr xmlcur,xmlitem,xmlitem2;
  herror_t err;
  char *itemname,*itemvalue,buf[1024], *cptr;
  int ret;
  THREAD_PARAM *p = (THREAD_PARAM *) arg;
  const char *url = (const char *) p->user;
  rlMailbox rlmbx(mbx);

  // read mbx until it is empty
  rlmbx.clear();
  printf("reader_thread starting\n");

  // wait for commands from clients
  while(1)
  {
    ret = rlmbx.read(buf,sizeof(buf)); // read "itemname,itemvalue\n"
    if(ret <= 0) continue;
    itemname = itemvalue = &buf[0];
    cptr = strchr(buf,',');
    if(cptr != NULL)
    {
      *cptr = '\0';
      cptr++;
      itemvalue = cptr;
      cptr = strchr(itemvalue,'\n');
      if(cptr != NULL) *cptr = 0;
    }
    if(debug)
    {
      printf("reader_thread Write itemname=%s itemvalue=%s\n",itemname,itemvalue);
    }

    p->thread->lock();

    /* create a SoapCtx object */
    err = soap_ctx_new_with_method(URN, "Write", &ctx);
    if (err != H_OK)
    {
      log_error4("%s():%s [%d]", herror_func(err),
                 herror_message(err), herror_code(err));
      herror_release(err);
      goto end_of_while;
    }

    /* create the ItemList */
    xmlitem = soap_env_add_item(ctx->env, "xsd:element", "ItemList", "");

    xmlcur = ctx->env->cur;
    ctx->env->cur = xmlitem;
    xmlitem2 = soap_env_add_item(ctx->env, "xsd:string", "Items", NULL);
    if (!xmlNewProp(xmlitem2, BAD_CAST "ItemName", BAD_CAST itemname))
    {
      log_error1("Can not create new xml attribute ItemName");
      goto end_of_while;
    }
    ctx->env->cur = xmlitem2;
    if(isdigit(itemvalue[0]))
    {
      soap_env_add_item(ctx->env,"xsd:double","Value",itemvalue);
    }
    else if(strcmp(itemvalue, "true") == 0 || strcmp(itemvalue, "false") == 0)
    {
      soap_env_add_item(ctx->env, "xsd:boolean", "Value", itemvalue);
    }
    else
    {
      soap_env_add_item(ctx->env,"xsd:istring","Value",itemvalue);
    }
    ctx->env->cur = xmlitem;
    ctx->env->cur = xmlcur;

    /* invoke */
    err = soap_client_invoke(ctx, &ctx2, url, "");
    if (err != H_OK)
    {
      log_error4("[%d] %s(): %s ", herror_code(err),
                 herror_func(err), herror_message(err));
      herror_release(err);
      soap_ctx_free(ctx);
      goto end_of_while;
    }

    /* print the result */
    if(debug)
    {
      printf("reader_thread result:\n");
      soap_xml_doc_print(ctx2->env->root->doc);
    }  

end_of_while:
    /* free the objects */
    soap_ctx_free(ctx2);
    soap_ctx_free(ctx);

    p->thread->unlock();
  }
  return NULL;
}
Example #9
0
int browse_childs(char *url, xmlNodePtr node)
{
  SoapCtx *ctx, *ctx2;
  herror_t err;
  const char *itemname, *isitem, *haschildren;

  while(node != NULL)
  {
    if(strcmp((const char *) node->name, "Elements") == 0)
    {
      itemname    = (const char *) xmlGetProp(node, (xmlChar*) "ItemName");
      isitem      = (const char *) xmlGetProp(node, (xmlChar*) "IsItem");
      haschildren = (const char *) xmlGetProp(node, (xmlChar*) "HasChildren");
      if(haschildren != NULL && strcmp(haschildren,"true") == 0)
      {
        if(itemname != NULL)
        {
          /* browse childs */
          printf("#\n");
          printf("#%s\n",itemname);

          /* create a SoapCtx object */
          err = soap_ctx_new_with_method(URN, "Browse", &ctx);
          if (err != H_OK)
          {
            log_error4("%s():%s [%d]", herror_func(err),
                      herror_message(err), herror_code(err));
            herror_release(err);
            return -1;
          }

          /* add to the request */
          soap_env_add_item(ctx->env, "xsd:string", "ItemName", itemname);

          /* invoke */
          err = soap_client_invoke(ctx, &ctx2, url, "");
          if (err != H_OK)
          {
            log_error4("[%d] %s(): %s ", herror_code(err),
                       herror_func(err), herror_message(err));
            herror_release(err);
            soap_ctx_free(ctx);
            return -1;
          }

          /* print the result */
          //soap_xml_doc_print(ctx2->env->root->doc);

          /* browse the childs */
          browse_childs(url, ctx2->env->cur->children);

          /* free the objects */
          soap_ctx_free(ctx2);
          soap_ctx_free(ctx);
        }  
      }
      else if(haschildren != NULL && strcmp(haschildren,"false") == 0 && isitem != NULL && strcmp(isitem,"true") == 0)
      {
        printf("%s\n", itemname);
      }
    }  
    node = node->next;
  }
  return 0;
}
Example #10
0
int run(const char *url, int maxItemNameLength)
{
  long shmsize_needed = ((maxItemNameLength+1)+(max_name_length+1))*num_items + sizeof(SHM_HEADER);
  FILE *fin;
  char buf[1024], *cptr;
  void *shmadr;
  SHM_HEADER *shmheader;
  int  i;
  SoapCtx *ctx, *ctx2;
  xmlNodePtr xmlcur,xmlitem;
  herror_t err;

  if(url == NULL) return 1;

  // print shm parameters
  printf("maxItemNameLength=%d max_name_length=%d shmsize=%ld shmsize_needed=%ld num_items=%d shm=%s\n",
          maxItemNameLength,   max_name_length,   shmsize,    shmsize_needed,    num_items,   shm);
  if(shmsize_needed > shmsize)
  {
    printf("shmsize too small -> increase it\n");
    return 1;
  }
  if(maxItemNameLength <= 0 || max_name_length <= 0 || shmsize <= 0 || shmsize_needed <= 0)
  {
    printf("some values are negative or 0\n");
    return 1;
  }
  if(maxItemNameLength >= (int) (sizeof(buf) - 100) || max_name_length >= (int) (sizeof(buf) - 100))
  {
    printf("name is bigger than buf length = %d\n", (int) sizeof(buf));
    return 1;
  }

  // init shared memory
  rlSharedMemory rlshm = rlSharedMemory(shm, (unsigned long) shmsize);
  if(rlshm.status != rlSharedMemory::OK)
  {
    printf("shared memory status is not OK\n");
    return 1;
  }
  shmadr = rlshm.getUserAdr();
  if(shmadr == NULL)
  {
    printf("shmadr = NULL\n");
    return 1;
  }
  memset(shmadr,0,shmsize);

  // read itemlist to shared memory
  fin = fopen(itemlist,"r");
  if(fin == NULL)
  {
    printf("could not open itemlist %s\n",itemlist);
    return 1;
  }
  i = 0;
  while(fgets(buf,sizeof(buf)-1,fin) != NULL)
  {
    if(buf[0] > ' ' && buf[0] != '#')
    {
      cptr = strchr(buf,'\n');
      if(cptr != NULL) *cptr = '\0';
      cptr = (char *) shmadr;
      cptr += sizeof(SHM_HEADER) + (i*(maxItemNameLength+1 + max_name_length+1));
      strcpy(cptr,buf);
      i++;
    }
  }
  fclose(fin);

  // init header in shared memory
  shmheader = (SHM_HEADER *) shmadr;
  shmheader->maxItemNameLength = maxItemNameLength;
  shmheader->maxNameLength     = max_name_length;
  shmheader->numItems          = num_items;
  shmheader->readErrorCount    = 0;
  shmheader->writeErrorCount   = 0;
  strcpy(shmheader->ident,"opc");

  /* create a SoapCtx object */
  err = soap_ctx_new_with_method(URN, "Read", &ctx);
  if(err != H_OK)
  {
     log_error4("%s():%s [%d]", herror_func(err),
                herror_message(err), herror_code(err));
     herror_release(err);
     return 1;
  }

  /* create the Read ItemList */
  xmlitem = soap_env_add_item(ctx->env, "xsd:element", "ItemList", "");
  xmlcur = ctx->env->cur;
  ctx->env->cur = xmlitem;
  for(i=0; i<shmheader->numItems; i++)
  {
    cptr = (char *) shmadr;
    cptr += sizeof(SHM_HEADER) + (i*(maxItemNameLength+1 + max_name_length+1));
    sprintf(buf,"Items ItemName=\"%s\"",cptr);
    soap_env_add_item(ctx->env, "xsd:string", buf, NULL);
  }
  ctx->env->cur = xmlcur;

  // create reader thread and the watchdog
  rlThread reader,watchdog;
  reader.create(reader_thread,(void *) url);
  watchdog.create(watchdog_thread,NULL);

  // poll the OPC XML-DA server forever
  while(1)
  {
    /* invoke */
    err = soap_client_invoke(ctx, &ctx2, url, "");
    if(err == H_OK)
    {
      /* print the result */
      if(debug) soap_xml_doc_print(ctx2->env->root->doc);

      /* write the result to the shared memory */
      reader.lock();
      write_to_shared_memory(ctx2,shmadr);
      reader.unlock();

      /* free the objects */
      soap_ctx_free(ctx2);
    }      
    watchcnt1++;
    if(watchcnt1 > 256*256) watchcnt1 = 0;
    rlsleep(sleep);
  }

  return 0;
}
Example #11
0
int main( int argc, char** argv ) {

	SoapCtx* request;
	SoapCtx* response;
	herror_t error;
	int ii;

	/* The array of parameter values to be fetched from argv. */
	char* parameters[Parameter_Num_Pos];

	xmlChar* buildID;

	if ( argc != Parameter_Num_Pos + 1 ) {
		printf( "Regresstor: Invalid Number of arguments! Num given: %d\n", argc );
		printUsage();
		return EXIT_FAILURE;
	}

	initParametersArray( parameters );
	fetchParametersFromArgv( parameters, argc, argv );

	if ( ! checkParameters( parameters ) ) {
		printUsage();
		return EXIT_FAILURE;
	}

	printf( "Regresstor: calling web service %s(), %s at %s.\n",
		Regresstor_SubmitCheckMethod,
		Regresstor_URN,
		parameters[URL_Pos]);

	/* SOAP CALL */
	error = soap_client_init_args( argc, argv );
	if ( error != H_OK ) {
		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
		herror_release(error);
		return EXIT_FAILURE;
	}
	
	error = soap_ctx_new_with_method( Regresstor_URN, Regresstor_SubmitCheckMethod, &request );
	if ( error != H_OK ) {
		log_error4( "%s():%s [%d]", herror_func(error), herror_message(error), herror_code(error) );
		herror_release(error);
		return EXIT_FAILURE;
	}

	/* Add parameters into envelope except for the URL */
	soap_env_push_item( request->env, NULL, "parameters" );

	for ( ii = 0; ii < URL_Pos; ++ii ) {
		if ( ii == OutputLocation_Pos ) {
			/* Attach file */
			char* contents;
			char* paramName = NULL;
			int sendDummyFile = 1;

			paramName = "Output";

			if ( strcmp( parameters[ii], "none" ) != 0 ) {
				contents = getFileContents( parameters[ii] );
				if ( contents != NULL ) {
					soap_env_add_item( request->env, "xsd:string", paramName, contents );
					free( contents );
					sendDummyFile = 0;
				}
			}
			if ( sendDummyFile ) {
				soap_env_add_item( request->env, "xsd:string", paramName, "No output file" );
			}
		}
		else
		{
			soap_env_add_item( request->env, "xsd:string", parameterNames[ii], parameters[ii] );
		}
	}

	/* Check commandline to see if diff passed. If fail, add a "Diff Failed" sub test */
	if ( strcmp( parameters[Passed_Pos], "0" ) == 0 ) {
		/* Add the sub test */
		soap_env_add_item( request->env, "xsd:string", "FailedSubTests", "Error failure" );
	}
	
	soap_env_pop_item( request->env );
	
	error = soap_client_invoke( request, &response, parameters[URL_Pos], "");
                                                                                                                                    
	if ( error != H_OK ) {
		log_error4( "[%d] %s(): %s ", herror_code(error), herror_func(error), herror_message(error) );
		herror_release( error );
		soap_ctx_free( request );
		return EXIT_FAILURE;
	}

	interpretResponse( response, &buildID );

	soap_ctx_free( request );
	soap_ctx_free( response );

	soap_client_destroy();


	return EXIT_SUCCESS;
}