CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 08/01/30 22:42:44
Modified files: . : ChangeLog plugin : plugin.cpp plugin.h server/vm : ASHandlers.cpp Log message: Fix javascript urls, and cleanup. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5529&r2=1.5530 http://cvs.savannah.gnu.org/viewcvs/gnash/plugin/plugin.cpp?cvsroot=gnash&r1=1.94&r2=1.95 http://cvs.savannah.gnu.org/viewcvs/gnash/plugin/plugin.h?cvsroot=gnash&r1=1.36&r2=1.37 http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.188&r2=1.189 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.5529 retrieving revision 1.5530 diff -u -b -r1.5529 -r1.5530 --- ChangeLog 30 Jan 2008 21:39:17 -0000 1.5529 +++ ChangeLog 30 Jan 2008 22:42:40 -0000 1.5530 @@ -1,5 +1,14 @@ 2008-01-30 Sandro Santilli <[EMAIL PROTECTED]> + * plugin/plugin.{cpp,h}: make player request handling line-based + (each line is one request). + * server/vm/ASHandlers.cpp (CommonGetUrl): pass the original url to + the host, not the gnash::URL mangled one (this fixes javascript + calls); don't pass the target as it'll just confuse the url for + now (we still need to define a good format for the target). + +2008-01-30 Sandro Santilli <[EMAIL PROTECTED]> + * plugin/plugin.{cpp,h}: create a pipe for standalone to plugin communication and handle "GET" requests by loading the url in the _top window. Index: plugin/plugin.cpp =================================================================== RCS file: /sources/gnash/gnash/plugin/plugin.cpp,v retrieving revision 1.94 retrieving revision 1.95 diff -u -b -r1.94 -r1.95 --- plugin/plugin.cpp 30 Jan 2008 21:39:18 -0000 1.94 +++ plugin/plugin.cpp 30 Jan 2008 22:42:41 -0000 1.95 @@ -15,7 +15,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -/* $Id: plugin.cpp,v 1.94 2008/01/30 21:39:18 strk Exp $ */ +/* $Id: plugin.cpp,v 1.95 2008/01/30 22:42:41 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "gnashconfig.h" @@ -575,38 +575,58 @@ int inputfd = g_io_channel_unix_get_fd(iochan); cout << "Checking player requests on fd " << inputfd << endl; - cout.flush(); -#define MAXLINE 256 - char buf[MAXLINE]; - - int ret = read(inputfd, buf, MAXLINE-1); - if ( ret == -1 ) + do { - cout << " player request channel " << inputfd << " read error " << strerror(errno) << endl; + GError* error=NULL; + gchar* request; + gsize requestSize=0; + GIOStatus status = g_io_channel_read_line(iochan, &request, &requestSize, NULL, &error); + switch ( status ) + { + case G_IO_STATUS_ERROR: + cout << "Error reading request line: " << error->message << endl; + g_error_free(error); return false; + case G_IO_STATUS_EOF: + cout << "EOF (error:" << error << ")" << endl; + return false; + case G_IO_STATUS_AGAIN: + cout << "Read again (error:" << error << ")" << endl; + break; + case G_IO_STATUS_NORMAL: + // process request + cout << "Normal read: " << request << " (error:" << error << ")" << endl; + break; + default: + cout << "Abnormal status " << status << " (error:" << error << ")" << endl; + return false; + } - if ( ! ret ) - { - cout << " no bytes read from player requests channel " << inputfd << endl; - return false; // correct ? - } - buf[ret] = '\0'; - cout << " read " << ret << " bytes from fd " << inputfd << ": " << endl - << buf << endl; + // process request.. + processPlayerRequest(request, requestSize); + g_free(request); - size_t linelen = ret; + } while (g_io_channel_get_buffer_condition(iochan) & G_IO_IN); + + return true; + +} + +bool +nsPluginInstance::processPlayerRequest(gchar* buf, gsize linelen) +{ if ( linelen < 4 ) { cout << "Invalid player request (too short): " << buf << endl; - return true; + return false; } if ( strncmp(buf, "GET ", 4) ) { cout << "Unknown player request: " << buf << endl; - return true; + return false; } char* url = buf+4; @@ -614,7 +634,6 @@ cout << "Asked to get URL '" << url << "'" << endl; NPN_GetURL(_instance, url, target); - return true; } Index: plugin/plugin.h =================================================================== RCS file: /sources/gnash/gnash/plugin/plugin.h,v retrieving revision 1.36 retrieving revision 1.37 diff -u -b -r1.36 -r1.37 --- plugin/plugin.h 30 Jan 2008 21:39:18 -0000 1.36 +++ plugin/plugin.h 30 Jan 2008 22:42:41 -0000 1.37 @@ -15,7 +15,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -/* $Id: plugin.h,v 1.36 2008/01/30 21:39:18 strk Exp $ */ +/* $Id: plugin.h,v 1.37 2008/01/30 22:42:41 strk Exp $ */ #ifndef __PLUGIN_H__ #define __PLUGIN_H__ @@ -97,6 +97,20 @@ bool handlePlayerRequests(GIOChannel* iochan, GIOCondition cond); + /// Process a null-terminated request line + // + /// @param buf + /// The single request. + /// Caller is responsible for memory management, but give us + /// permission to modify the string. + /// + /// @param len + /// Lenght of buffer. + /// + /// @return true if the request was processed, false otherwise (bogus request..) + /// + bool processPlayerRequest(gchar* buf, gsize len); + // EMBED or OBJECT attributes / parameters // @@ this should likely replace the _options element below std::map<std::string, std::string> _params; Index: server/vm/ASHandlers.cpp =================================================================== RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v retrieving revision 1.188 retrieving revision 1.189 diff -u -b -r1.188 -r1.189 --- server/vm/ASHandlers.cpp 30 Jan 2008 21:39:18 -0000 1.188 +++ server/vm/ASHandlers.cpp 30 Jan 2008 22:42:44 -0000 1.189 @@ -17,7 +17,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // -/* $Id: ASHandlers.cpp,v 1.188 2008/01/30 21:39:18 strk Exp $ */ +/* $Id: ASHandlers.cpp,v 1.189 2008/01/30 22:42:44 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "gnashconfig.h" @@ -2314,7 +2314,20 @@ { log_debug("user-provided host requests fd is %d", hostfd); std::stringstream request; - request << "GET " << url << " " << target_string << endl; + + // TODO: define a format for othe requests, we'll either need + // to use separators and escaping or header specified size + // + // for now will just omit the target and let the handler consider + // all as an url + // + //request << "GET " << url << " " << target_string << endl; + log_unimpl("target window %s load (we'll load in _top) always", target_string.c_str()); + + // use the original url, non parsed (the browser will know better how to resolve relative urls and handle hactionscript) + //request << "GET " << url << endl; + request << "GET " << url_c << endl; + string requestString = request.str(); const char* cmd = requestString.c_str(); size_t len = requestString.length(); _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit