Esempio n. 1
0
bool Weather::Refresh() {
  std::string escaped_city = city_;
  std::replace(escaped_city.begin(), escaped_city.end(), ' ', '+');
  const std::string url =
      std::string("http://www.google.com/ig/api?weather=") + escaped_city;

  std::unique_ptr<void> context(xmlNanoHTTPOpen(url.c_str(), NULL));
  if (context.get() == NULL) {
    fprintf(stderr, "xmlNanoHTTPOpen failed\n");
    return false;
  }

  // TODO: better buffer size logic
  std::unique_ptr<char[]> buffer(new char[4096]);
  int bytes_read = xmlNanoHTTPRead(context.get(), buffer.get(), 4096);
  if (bytes_read == -1) {
    fprintf(stderr, "xmlNanoHTTPRead failed due to parameter error\n");
    return false;
  }

  if (doc_) {
    xmlFreeDoc(doc_);
    doc_ = NULL;
  }
  doc_ = xmlReadMemory(buffer.get(), strlen(buffer.get()),
                       url.c_str(), NULL, 0);
  if (doc_ == NULL) {
    fprintf(stderr, "xmlReadMemory failed\n");
    return false;
  }

  if (icon_ != VG_INVALID_HANDLE) {
    vgDestroyImage(icon_);
    icon_ = VG_INVALID_HANDLE;
  }
  std::string icon_url =
      std::string("http://www.google.com") +
      EvaluateXPath("/xml_api_reply/weather/current_conditions/icon");
  icon_ = ImageLoader::Load(icon_url);
  if (icon_ == VG_INVALID_HANDLE) {
    return false;
  }

  return true;
}
Esempio n. 2
0
void GetXMLHttp() {
	void * Ctxt;
	char *contentType;
	
	xmlNanoHTTPInit();
	
	Ctxt = xmlNanoHTTPOpen(XML_URL, &contentType);

	if (Ctxt == 0)
		printf("ERROR: xmlNanoHTTPOpen() == 0\n");

	if (xmlNanoHTTPReturnCode(Ctxt) != 200)
		printf("ERROR: HTTP Code != OK\n");

	// open output file
	FILE *fp;
	fp=fopen("test_get.xml","w");
	

	// Write to file
	const int Size = 2048;
	char Buffer[Size];
	int Count;

	while ((Count = xmlNanoHTTPRead(Ctxt, Buffer, Size)) > 0)
		fprintf(fp,"%s",Buffer);	
		//File.write(Buffer, Count);
		
	fclose(fp);

	if (Count == 0)
		printf("STATUS: Connection closed\n");

	if (Count == -1)
		printf("ERROR: xmlNanoHTTPRead() == -1\n");
	
		
	// Free ressources
	xmlFree(contentType);
	xmlNanoHTTPClose(Ctxt);
	xmlNanoHTTPCleanup();
}
Esempio n. 3
0
int
raptor_www_libxml_fetch(raptor_www *www) 
{
  if(www->proxy)
    xmlNanoHTTPScanProxy(www->proxy);

  www->ctxt=xmlNanoHTTPOpen((const char*)raptor_uri_as_string(www->uri), &www->type);
  if(!www->ctxt)
    return 1;
  
  if(www->type) {
    if(www->content_type) {
      www->content_type(www, www->content_type_userdata, www->type);
      if(www->failed) {
        xmlNanoHTTPClose(www->ctxt);
        return 1;
      }
    }
  }

  www->status_code=xmlNanoHTTPReturnCode(www->ctxt);
  
  while(1) {
    int len=xmlNanoHTTPRead(www->ctxt, www->buffer, RAPTOR_WWW_BUFFER_SIZE);
    if(len<0)
      break;
    
    www->total_bytes += len;

    if(www->write_bytes)
      www->write_bytes(www, www->write_bytes_userdata, www->buffer, len, 1);
    
    if(len < RAPTOR_WWW_BUFFER_SIZE || www->failed)
      break;
  }
  
  xmlNanoHTTPClose(www->ctxt);

  return www->failed;
}
Esempio n. 4
0
static Image *ReadURLImage(const ImageInfo *image_info,ExceptionInfo *exception)
{
#define MaxBufferExtent  8192

  char
    filename[MaxTextExtent];

  FILE
    *file;

  Image
    *image;

  ImageInfo
    *read_info;

  int
    unique_file;

  image=(Image *) NULL;
  read_info=CloneImageInfo(image_info);
  SetImageInfoBlob(read_info,(void *) NULL,0);
  file=(FILE *) NULL;
  unique_file=AcquireUniqueFileResource(read_info->filename);
  if (unique_file != -1)
    file=fdopen(unique_file,"wb");
  if ((unique_file == -1) || (file == (FILE *) NULL))
    {
      read_info=DestroyImageInfo(read_info);
      (void) CopyMagickString(image->filename,read_info->filename,
        MaxTextExtent);
      ThrowFileException(exception,FileOpenError,"UnableToCreateTemporaryFile",
        image->filename);
      image=DestroyImageList(image);
      return((Image *) NULL);
    }
  (void) CopyMagickString(filename,image_info->magick,MaxTextExtent);
  (void) ConcatenateMagickString(filename,":",MaxTextExtent);
  LocaleLower(filename);
  (void) ConcatenateMagickString(filename,image_info->filename,MaxTextExtent);
  if (LocaleCompare(read_info->magick,"file") == 0)
    {
      (void) RelinquishUniqueFileResource(read_info->filename);
      unique_file=(-1);
      (void) CopyMagickString(read_info->filename,image_info->filename+2,
        MaxTextExtent);
    }
#if defined(MAGICKCORE_XML_DELEGATE) && defined(LIBXML_FTP_ENABLED)
  if (LocaleCompare(read_info->magick,"ftp") == 0)
    {
      void
        *context;

      xmlNanoFTPInit();
      context=xmlNanoFTPNewCtxt(filename);
      if (context != (void *) NULL)
        {
          if (xmlNanoFTPConnect(context) >= 0)
            (void) xmlNanoFTPGet(context,GetFTPData,(void *) file,
              (char *) NULL);
          (void) xmlNanoFTPClose(context);
        }
    }
#endif
#if defined(MAGICKCORE_XML_DELEGATE) && defined(LIBXML_HTTP_ENABLED)
  if (LocaleCompare(read_info->magick,"http") == 0)
    {
      char
        buffer[MaxBufferExtent],
        *type;

      int
        bytes;

      void
        *context;

      type=(char *) NULL;
      context=xmlNanoHTTPMethod(filename,(const char *) NULL,
        (const char *) NULL,&type,(const char *) NULL,0);
      if (context != (void *) NULL)
        {
          ssize_t
            count;

          while ((bytes=xmlNanoHTTPRead(context,buffer,MaxBufferExtent)) > 0)
            count=(ssize_t) fwrite(buffer,bytes,1,file);
          xmlNanoHTTPClose(context);
          xmlFree(type);
          xmlNanoHTTPCleanup();
        }
    }
#endif
  (void) fclose(file);
  *read_info->magick='\0';
  image=ReadImage(read_info,exception);
  if (unique_file != -1)
    (void) RelinquishUniqueFileResource(read_info->filename);
  read_info=DestroyImageInfo(read_info);
  if (image == (Image *) NULL)
    (void) ThrowMagickException(exception,GetMagickModule(),CoderError,
      "NoDataReturned","`%s'",filename);
  return(GetFirstImageInList(image));
}
int
raptor_www_libxml_fetch(raptor_www *www)
{
    char* headers=NULL;

    if(www->proxy)
        xmlNanoHTTPScanProxy(www->proxy);

    if(www->http_accept || www->user_agent) {
        size_t accept_len=0;
        size_t ua_len=0;
        size_t cc_len=0;
        size_t len=0;
        char *p;

        if(www->http_accept) {
            accept_len=strlen(www->http_accept);
            len+=accept_len+2; /* \r\n */
        }

        if(www->user_agent) {
            ua_len=strlen(www->user_agent);
            len+=12+ua_len+2; /* strlen("User-Agent: ") + \r\n */
        }

        if(www->cache_control) {
            cc_len=strlen(www->cache_control);
            len+=cc_len+2; /* \r\n */
        }

        headers=(char*)RAPTOR_MALLOC(cstring, len+1);
        if(!headers)
            return 1;

        p=headers;
        if(www->http_accept) {
            strncpy(p, www->http_accept, accept_len);
            p+= accept_len;
            *p++='\r';
            *p++='\n';
        }
        if(www->user_agent) {
            strncpy(p, "User-Agent: ", 12);
            p+=12;
            strncpy(p, www->user_agent, ua_len);
            p+= ua_len;
            *p++='\r';
            *p++='\n';
        }
        if(www->cache_control) {
            strncpy(p, www->cache_control, cc_len);
            p+= cc_len;
            *p++='\r';
            *p++='\n';
        }
        *p='\0';
    }

    www->ctxt=xmlNanoHTTPMethod((const char*)raptor_uri_as_string_v2(www->world, www->uri),
                                NULL, /* HTTP method (default GET) */
                                NULL, /* input string */
                                &www->type,
                                headers,
                                0); /* input length - ilen */

    if(headers)
        RAPTOR_FREE(cstring, headers);

    if(!www->ctxt)
        return 1;

    if(www->type) {
        if(www->content_type) {
            www->content_type(www, www->content_type_userdata, www->type);
            if(www->failed) {
                xmlNanoHTTPClose(www->ctxt);
                return 1;
            }
        }
        xmlFree(www->type);
        www->type=NULL;
    }

    www->status_code=xmlNanoHTTPReturnCode(www->ctxt);

    while(1) {
        int len=xmlNanoHTTPRead(www->ctxt, www->buffer, RAPTOR_WWW_BUFFER_SIZE);
        if(len<0)
            break;

        www->total_bytes += len;

        if(www->write_bytes)
            www->write_bytes(www, www->write_bytes_userdata, www->buffer, len, 1);

        if(len < RAPTOR_WWW_BUFFER_SIZE || www->failed)
            break;
    }

    xmlNanoHTTPClose(www->ctxt);

    return www->failed;
}
Esempio n. 6
0
void CheckVersionNumber()
{
	//==== Init Nano HTTP ====//
	xmlNanoHTTPInit();
	xmlNanoHTTPScanProxy(NULL);

	//==== Compute Version Number ====//
	int ver_no = 10000*VSP_VERSION_MAJOR + 100*VSP_VERSION_MINOR + VSP_VERSION_CHANGE;

	char cCurrentPath[FILENAME_MAX];
	GetCurrentDir(cCurrentPath, sizeof(cCurrentPath));

	int user_id = 0;
	int path_len = strlen(cCurrentPath);

	for ( int i = 0 ; i < path_len ; i++ )
	{
		srand ( (unsigned int)cCurrentPath[i] );
		user_id += rand() % 100000 + 1;
	}

	//==== Post User Info To Server ====//
	char poststr[256];
	sprintf( poststr, "postvar1=%d&postvar2=%d\r\n", user_id, ver_no);
	int poststrlen = strlen(poststr);
	char*  headers = "Content-Type: application/x-www-form-urlencoded \n";

	void * ctx = 0;
	ctx = xmlNanoHTTPMethod("http://www.openvsp.org/vspuse_post.php", "POST", poststr, NULL, headers, poststrlen );

	if ( ctx )
		xmlNanoHTTPClose(ctx);

	ctx = 0;

	//==== Open Settings File ====//
	bool check_version_flag = true;
	FILE* vsptime_fp = fopen( ".vsptime", "r" );
	if ( vsptime_fp )
	{
		char str[256];
		fgets( str, 256, vsptime_fp );
		int vsp_time = atoi( str );
		int del_time =  (int)time(NULL) - vsp_time;
		if ( del_time < 60*60*24*7 )				// Check Every Week
			check_version_flag = false;

		fclose( vsptime_fp );
	}

	//==== Enough Time Has Passed - Check For New Version ====//
	if ( check_version_flag )
	{
		//==== Webpage with Version Info ====//
		char * pContentType = 0;
		ctx = xmlNanoHTTPOpen("http://www.openvsp.org/latest_version.html", &pContentType);

		int retCode = xmlNanoHTTPReturnCode(ctx);

		//==== Http Return Code 200 -> OK  ====//
		string contentStr;
		if ( retCode == 200 )
		{
			char buf[2048];
			int len = 1;
			while (len > 0 && contentStr.size() < 10000 )
			{
				len = xmlNanoHTTPRead(ctx, buf, sizeof(buf));
				contentStr.append( buf, len );
			}
		}

		//==== Pulled A String From Server =====//
		if ( contentStr.size() > 0 )
		{
			int major_ver, minor_ver, change_ver;
			bool valid = ExtractVersionNumber( contentStr, &major_ver, &minor_ver, &change_ver );

			if ( valid )
			{
				if ( major_ver != VSP_VERSION_MAJOR ||minor_ver != VSP_VERSION_MINOR || change_ver != VSP_VERSION_CHANGE )
				{
					if ( screenMgrPtr )
						screenMgrPtr->MessageBox("A new version of OpenVSP is available at http://www.openvsp.org/");
				}
			}
		}
		//===== Write Time =====//
		FILE* vsptime_fp = fopen( ".vsptime", "w" );
		if ( vsptime_fp )
		{
			fprintf( vsptime_fp, "%d", time(NULL) );
			fclose( vsptime_fp );
		}
	}

	if ( ctx )
		xmlNanoHTTPClose(ctx);

	xmlNanoHTTPCleanup();
}
Esempio n. 7
0
/**
 * Returns the contents of the requested URL
 *
 * @param pczURL The URL to retrieve.
 * @param piRetCode The return code supplied with the response.
 * @param piDataSize The resulting data length [out].
 *
 * @return A pointer to a null-terminated buffer containing the textual
 *         representation of the response. Must be freed by the caller.
 */
gpointer
getURL(const gchar * pczURL, gint * piRetCode, gint * piDataSize)
{
    /* nanohttp magic */
#define iBufReadSize 1024
    gint iReadSize = 0;
    gint iCurrSize = 0;

    gpointer pInBuffer = NULL;
    gpointer pInBufferRef = NULL;

    gchar cReadBuffer[iBufReadSize];
    bzero(cReadBuffer, iBufReadSize);

    xmlNanoHTTPInit();

    char * pContentType = NULL;
    void * pHTTPContext = NULL;

    pHTTPContext = xmlNanoHTTPOpen(pczURL, &pContentType);

    if (!pHTTPContext)
    {
        // failure
        cleanup(pHTTPContext, pContentType);

        *piRetCode = -1;

        return pInBuffer; // it's NULL
    }

    *piRetCode = xmlNanoHTTPReturnCode(pHTTPContext);

    if (*piRetCode != HTTP_STATUS_OK)
    {
        // failure
        cleanup(pHTTPContext, pContentType);

        return pInBuffer; // it's NULL
    }

    while ((iReadSize = xmlNanoHTTPRead(pHTTPContext, cReadBuffer, iBufReadSize)) > 0)
    {
        // set return code
        *piRetCode = xmlNanoHTTPReturnCode(pHTTPContext);

        /* Maintain pointer to old location, free on failure */
        pInBufferRef = pInBuffer;

        pInBuffer = g_try_realloc(pInBuffer, iCurrSize + iReadSize);

        if (!pInBuffer || *piRetCode != HTTP_STATUS_OK)
        {
            // failure
            cleanup(pHTTPContext, pContentType);

            g_free(pInBufferRef);

            return pInBuffer; // it's NULL
        }

        memcpy(pInBuffer + iCurrSize, cReadBuffer, iReadSize);

        iCurrSize += iReadSize;

        // clear read buffer
        bzero(cReadBuffer, iBufReadSize);

        *piDataSize = iCurrSize;
    }

    if (iReadSize < 0)
    {
        // error
        g_free(pInBuffer);

        pInBuffer = NULL;
    }
    else
    {
        /* Maintain pointer to old location, free on failure */
        pInBufferRef = pInBuffer;

        // need to add '\0' at the end
        pInBuffer = g_try_realloc(pInBuffer, iCurrSize + 1);

        if (!pInBuffer)
        {
            // failure
            g_free(pInBufferRef);

            pInBuffer = NULL;
        }
        else
        {
            memcpy(pInBuffer + iCurrSize, "\0", 1);
        }
    }

    // finish up
    cleanup(pHTTPContext, pContentType);

    return pInBuffer;
}