OSDN Git Service

Reverts r1475 until it plays nice with Xcode + make
authorjbrjake <jbrjake@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sat, 31 May 2008 15:26:25 +0000 (15:26 +0000)
committerjbrjake <jbrjake@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sat, 31 May 2008 15:26:25 +0000 (15:26 +0000)
git-svn-id: svn://localhost/HandBrake/trunk@1477 b64f7644-9d1e-0410-96f1-a4d463321fa5

Jamrules
libhb/update.c

index 5e18e3e..490aa87 100644 (file)
--- a/Jamrules
+++ b/Jamrules
@@ -30,7 +30,6 @@ APPCAST_URL = "http://handbrake.fr/appcast.xml" ;
 }
 
 DEFINES    += HB_VERSION=\\\"$(HB_VERSION)\\\" HB_BUILD=$(HB_BUILD) ;
-DEFINES           += APPCAST_URL=\\\"$(APPCAST_URL)\\\" ;
 LANGUAGES   = fr de it pl ru nl es pt ja ;
 RM          = rm -rf ;
 
index 51019e2..7c9f5b3 100644 (file)
@@ -6,8 +6,8 @@
 
 #include "hb.h"
 
-static void UpdateFunc( void * );
-static int find_file( );
+#define HB_URL   "handbrake.fr"
+#define HB_QUERY "GET /appcast.xml HTTP/1.0\r\nHost: " HB_URL "\r\n\r\n"
 
 typedef struct
 {
@@ -16,6 +16,8 @@ typedef struct
 
 } hb_update_t;
 
+static void UpdateFunc( void * );
+
 hb_thread_t * hb_update_init( int * build, char * version )
 {
     hb_update_t * data = calloc( sizeof( hb_update_t ), 1 );
@@ -26,52 +28,32 @@ hb_thread_t * hb_update_init( int * build, char * version )
                            HB_NORMAL_PRIORITY );
 }
 
-/*
- * Find out which appcast we want to use, and return appcast.xml or NULL
- */
-static int find_file ( void )
-{
-       return ( strstr( APPCAST_URL, "appcast.xml" ) != NULL );
-}
-
 static void UpdateFunc( void * _data )
 {
-
     hb_update_t * data = (hb_update_t *) _data;
-       
-       /* New code to handle the hb_query stuff */
-       int file = find_file();
-       char* hb_query;
-       if (file != NULL)
-       {
-               hb_query = "GET /appcast.xml HTTP/1.0\r\nHost: handbrake.fr\r\n\r\n";
-       }else {
-               hb_query = "GET /appcast_unstable.xml HTTP/1.0\r\nHost: handbrake.fr\r\n\r\n";
-       }
-       
-       // ####################### Grab the data from the web server ##########################
+
     hb_net_t * net;
     int        ret;
-    char       buf[4096];
-    char     * cur, * end;
+    char       buf[1024];
+    char     * cur, * end, * p;
     int        size;
-    int        stable;
-    char       stable_str[16];
+    int        stable, unstable;
+    char       stable_str[16], unstable_str[16];
     int        i;
 
-    if( !( net = hb_net_open( "handbrake.fr", 80 ) ) )
+    if( !( net = hb_net_open( HB_URL, 80 ) ) )
     {
         goto error;
     }
 
-    if( hb_net_send( net, hb_query ) < 0 )
+    if( hb_net_send( net, HB_QUERY ) < 0 )
     {
         hb_net_close( &net );
         goto error;
     }
 
     size = 0;
-    memset( buf, 0, 4096 );
+    memset( buf, 0, 1024 );
     for( ;; )
     {
         ret = hb_net_recv( net, &buf[size], sizeof( buf ) - size );
@@ -85,9 +67,7 @@ static void UpdateFunc( void * _data )
 
     cur = buf;
     end = &buf[sizeof( buf )];
-       
 
-       
     /* Make sure we got it */
     cur += 9;
     if( size < 15 || strncmp( cur, "200 OK", 6 ) )
@@ -113,24 +93,24 @@ static void UpdateFunc( void * _data )
         goto error;
     }
        
-       // ####################### Version Checking Here ##########################
+       
+       // FIND THE STABLE VERSION INFORMATION ###################################################
        
        /*
-        * Find the <cli> tag
+        * Find the <cli-stable> tag
         * Scan though each character of the buffer until we find that the first 4 characters of "cur" are "<cli"
         */
+
      for(i=0 ; &cur[3] < end; i++, cur++ )
      {
-       
-        if( cur[0] == 'c' && cur[1] == 'l' && cur[2] == 'i' && cur[3] == '>' )
+        if( cur[0] == '<' && cur[1] == 'c' && cur[2] == 'l' && cur[3] == 'i' )
          {
             cur += 1;
             break;
-                       
          }
                 
-                // If the CLI tag has not been found in the first 768 characters, or the end is reached, something bad happened.
-                if (( i > 768) || ( cur >= end ))
+                // If the CLI tag has not been found in the first 510 characters, or the end is reached, something bad happened.
+                if (( i > 510) || ( cur >= end ))
                 {
                        goto error;
                 }
@@ -142,10 +122,10 @@ static void UpdateFunc( void * _data )
     }
        
        /*
-        * Ok, The above code didn't position cur, it only found <cli so we need to shift cur along 3 places.
+        * Ok, The above code didn't position cur, it only found <cli so we need to shift cur along 11 places.
         * After which, the next 10 characters are the build number
         */
-    cur += 3;
+    cur += 11;
        
        if( cur >= end )
     {
@@ -153,7 +133,7 @@ static void UpdateFunc( void * _data )
     }
        
        stable = strtol( cur, &cur, 10 );
-               
+       
        if( cur >= end )
     {
         goto error;
@@ -189,15 +169,101 @@ static void UpdateFunc( void * _data )
     hb_log( "latest stable: %s, build %d", stable_str, stable );
        
        // END OF STABLE INFO ###################################################
+       
+
+       // FIND THE UNSTABLE INFO ###############################################
+       /*
+        * Find the <cli-unstable> tag
+        * Scan though each character of the buffer until we find that the first 4 characters of "cur" are "<cli"
+        */
+
+     for(i =0 ; &cur[3] < end; i++, cur++ )
+     {
+        if( cur[0] == '<' && cur[1] == 'c' && cur[2] == 'l' && cur[3] == 'i' )
+         {
+            cur += 1;
+            break;
+         }
+                
+                // If the second CLI tag is more than 25 characters forward, or the end is reached, something went wrong.
+                if (( i > 25) || ( cur >= end ))
+                {
+                       goto error;
+                }
+     }
+        
+       /*
+        * Now we need to handle the unstable build information
+        * Unstable build number is 29 Characters after the last position used.
+        */
+        
+        cur += 13;
+            
+       if( cur >= end )
+    {
+        goto error;
+    } 
+       
+        unstable = strtol( cur, &p, 10 );
+        
+       if( cur >= end )
+    {
+        goto error;
+    }
+       
+       /*
+        * Now we need to get the unstable version number.
+        * First move the cur pointer 12 places.
+        * Then iterate over cur until " is found. Thats the end of the version number.
+        */
+       cur += 12;
+       
+       if( cur >= end )
+    {
+        goto error;
+    }
+       
+       memset( unstable_str, 0, sizeof( unstable_str ) );
+       for( i = 0;   i < sizeof( unstable_str ) - 1 && cur < end && *cur != '"'; i++, cur++ )
+       {
+               unstable_str[i] = *cur;
+               
+               // If the version number is greater than 7 chars or the end is reached, something went wrong.
+               if (( i > 7) || ( cur >= end ))
+               {
+                       goto error;
+               }
+       }
 
+    hb_log( "latest unstable: %s, build %d", unstable_str, unstable );
+       
+       // END OF UNSTABLE INFO ###################################################
 
-    if( stable > HB_BUILD )
+       /*
+        * Handle the update checking as normal.
+        * This code is unchanged.
+        */
+    if( HB_BUILD % 100 )
     {
-        memcpy( data->version, stable_str, sizeof( stable_str ) );
-        *(data->build) = stable;
+        /* We are runnning an unstable build */
+        if( unstable > HB_BUILD )
+        {
+            memcpy( data->version, unstable_str, sizeof( unstable_str ) );
+            *(data->build) = unstable;
+        }
+    }
+    else
+    {
+        /* We are runnning an stable build */
+        if( stable > HB_BUILD )
+        {
+            memcpy( data->version, stable_str, sizeof( stable_str ) );
+            *(data->build) = stable;
+        }
     }
 
 error:
     free( data );
     return;
 }
+