gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/vm/ASHandlers.cpp


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/vm/ASHandlers.cpp
Date: Mon, 03 Mar 2008 09:22:21 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/03/03 09:22:21

Modified files:
        .              : ChangeLog 
        server/vm      : ASHandlers.cpp 

Log message:
        implement GET/POST methods for targetted movie loads (GETURL2 tag).
        Still missing POST using host-provided uri handler (to improve/define
        communication protocol for it) and POST for loadVariables.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5778&r2=1.5779
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.200&r2=1.201

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5778
retrieving revision 1.5779
diff -u -b -r1.5778 -r1.5779
--- ChangeLog   2 Mar 2008 23:39:24 -0000       1.5778
+++ ChangeLog   3 Mar 2008 09:22:20 -0000       1.5779
@@ -1,3 +1,10 @@
+2008-03-03 Sandro Santilli <address@hidden>
+
+       * server/vm/ASHandlers.cpp (CommonGetURL): implement GET/POST
+         methods for targetted movie loads. Still missing POST using
+         host-provided uri handler (to improve/define communication
+         protocol for it) and POST for loadVariables.
+
 2008-03-02  Rob Savoye  <address@hidden>
 
        * testsuite/samples/Makefile.am: Add AGG_LIBS.

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.200
retrieving revision 1.201
diff -u -b -r1.200 -r1.201
--- server/vm/ASHandlers.cpp    27 Feb 2008 10:25:39 -0000      1.200
+++ server/vm/ASHandlers.cpp    3 Mar 2008 09:22:21 -0000       1.201
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: ASHandlers.cpp,v 1.200 2008/02/27 10:25:39 strk Exp $ */
+/* $Id: ASHandlers.cpp,v 1.201 2008/03/03 09:22:21 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "gnashconfig.h"
@@ -2127,9 +2127,6 @@
                )
 {
 
-// It seems queuing loadMovie requests breaks the canonical wbt testcase...
-#define QUEUE_MOVIE_LOADS 1
-
        assert(url_c);
 
        if ( *url_c == '\0' )
@@ -2150,8 +2147,8 @@
        if ( sendVarsMethod == 3 )
        {
                log_error(_("Bogus GetUrl2 send vars method "
-                       " in SWF file (both GET and POST requested), set to 
0"));
-               sendVarsMethod=0;
+                       " in SWF file (both GET and POST requested), use GET"));
+               sendVarsMethod=1;
        }
 
        string target_string;
@@ -2210,6 +2207,33 @@
                return;
        }
 
+       bool usePost = false;
+       std::string varsToSend;
+       if ( sendVarsMethod )
+       {
+               if ( sendVarsMethod == 2 ) usePost = true;
+
+               // TESTED: variables sent are those in current target,
+               //         no matter the target found on stack (which
+               //         is the target to load the resource into).
+               //
+               character* curtgt = env.get_target();
+               if ( ! curtgt )
+               {
+                       log_error("CommonGetUrl: current target is undefined");
+                       return;
+               }
+               curtgt->getURLEncodedVars(varsToSend);
+               if ( ! usePost )
+               {
+                       // we're using GET
+                       std::string qs = url.querystring();
+                       if ( qs.empty() ) varsToSend.insert(0, 1, '?');
+                       else varsToSend.insert(0, 1, '&');
+                       url.set_querystring(qs+varsToSend);
+               }
+       }
+
        character* target_ch = env.find_target(target.to_string());
        sprite_instance* target_movie = target_ch ? target_ch->to_movie() : 0;
 
@@ -2233,6 +2257,10 @@
                        return;
                }
 
+               if ( usePost )
+               {
+                       log_unimpl(_("POST with loadVariables ignored"));
+               }
                target_movie->loadVariables(url, sendVarsMethod);
 
                return;
@@ -2243,33 +2271,36 @@
 
        if ( loadTargetFlag )
        {
-               // TODO: always pass directly to movie_root::loadMovie ?
-
                log_debug(_("getURL2 target load"));
 
-               if ( sendVarsMethod )
-               {
-                       log_unimpl(_("Unhandled GetUrl2 sendVariableMethod (%d)"
-                               " with loadTargetFlag and ! loadVariablesFlag"),
-                               sendVarsMethod);
-               }
-
                if ( ! target_ch )
                {
                        unsigned int levelno;
                        if ( mr.isLevelTarget(target_string, levelno) )
                        {
                                log_debug(_("Testing _level loading (level 
%u)"), levelno);
-#ifdef QUEUE_MOVIE_LOADS
-                               mr.loadMovie(url, target_string); // TODO: add 
third argument for the method
-#else
-                               mr.loadLevel(levelno, url);
-#endif
+                               if ( usePost )
+                               {
+                                       mr.loadMovie(url, target_string, 
&varsToSend);
+                               }
+                               else
+                               {
+                                       mr.loadMovie(url, target_string); // 
using GET
+                               }
                                return;
                        }
 
-                       log_error(_("get url: target %s not found"),
+                       IF_VERBOSE_ASCODING_ERRORS(
+                       log_aserror(_("Unknown loadMovie target: %s"),
                                target_string.c_str());
+                       );
+
+                       // TESTED: Even if the target is created right-after 
+                       //         the load request, the player won't load
+                       //         into it. In other words, the target MUST
+                       //         exist at time of interpreting the GETURL2
+                       //         tag with loadTarget flag.
+
                        return;
                }
 
@@ -2280,7 +2311,6 @@
                        return;
                }
 
-#ifdef QUEUE_MOVIE_LOADS
                std::string s = target_movie->getTarget(); // or getOrigTarget ?
                if ( s != target_movie->getOrigTarget() )
                {
@@ -2288,33 +2318,38 @@
                }
                movie_root& mr = VM::get().getRoot();
                assert( mr.findCharacterByTarget(s) == target_movie );
-               mr.loadMovie(url, s); // TODO: add third argument for the method
-#else
-               target_movie->loadMovie(url);
-#endif
 
-               return;
+               if ( usePost )
+               {
+                       mr.loadMovie(url, s, &varsToSend); 
        }
-
-       if ( sendVarsMethod )
+               else
        {
-               log_unimpl (_("Unhandled GetUrl2 sendVariableMethod (%d)"
-                       " with no loadTargetFlag"),
-                       sendVarsMethod);
+                       mr.loadMovie(url, s); 
+               }
+               return;
        }
 
        unsigned int levelno;
        if ( mr.isLevelTarget(target_string, levelno) )
        {
                log_debug(_("Testing _level loading (level %u)"), levelno);
-#ifdef QUEUE_MOVIE_LOADS
-               mr.loadMovie(url, target_string); // TODO: add third argument 
for the method
-#else
-               mr.loadLevel(levelno, url);
-#endif
+               if ( usePost )
+               {
+                       mr.loadMovie(url, target_string, &varsToSend);
+               }
+               else
+               {
+                       mr.loadMovie(url, target_string); 
+               }
                return;
        }
 
+       if ( usePost )
+       {
+               log_unimpl (_("POST with host-provided uri grabber"));
+       }
+
        int hostfd = VM::get().getRoot().getHostFD();
        if ( hostfd == -1 )
        {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]