Commit Graph

265 Commits (e09c8681ad5f6a645ef433e86166795a5c7dd762)

Author SHA1 Message Date
Diva Canto 5f95f4d78e Now trying DoubleQueue instead of BlockingQueue for the PollServiceRequestManager. 2013-07-17 14:09:04 -07:00
Diva Canto f4317dc26d Putting the requests back in the queue while testing for count >0 is not the smartest move... 2013-07-17 12:57:34 -07:00
Diva Canto e46459ef21 Cleared up much confusion in PollServiceRequestManager. Here's the history:
When Melanie added the web fetch inventory throttle to core, she made the long poll requests (EQs) effectively be handled on an active loop. All those requests, if they existed, were being constantly dequeued, checked for events (which most often they didn't have), and requeued again. This was an active loop thread on a 100ms cycle!
This fixes the issue. Now the inventory requests, if they aren't ready to be served, are placed directly back in the queue, but the long poll requests aren't placed there until there are events ready to be sent or timeout has been reached.
This puts the LongPollServiceWatcherThread back to 1sec cycle, as it was before.
2013-07-17 11:19:36 -07:00
Justin Clark-Casey (justincc) 1b7b664c86 Add request received/handling stats for caps which are served by http poll handlers.
This adds explicit cap poll handler supporting to the Caps classes rather than relying on callers to do the complicated coding.
Other refactoring was required to get logic into the right places to support this.
2013-07-15 23:27:46 +01:00
Justin Clark-Casey (justincc) 2025dd25f6 Add missing file BaseOutputStreamHandler.cs from recent commit e19defd 2013-07-08 23:50:40 +01:00
Justin Clark-Casey (justincc) dc54581700 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2013-07-08 22:19:37 +01:00
Diva Canto b2d4b8b1da BaseHttpServer: if the handler sets the content length, don't override it. This happens in HEAD handlers. 2013-07-08 14:12:11 -07:00
Justin Clark-Casey (justincc) e19defde36 Add "show caps stats by user" and "show caps stats by cap" console commands to print various counts of capability invocation by user and by cap
This currently prints caps requests received and handled, so that overload of received compared to handled or deadlock can be detected.
This involves making BaseStreamHandler and BaseOutputStream record the ints, which means inheritors should subclass ProcessRequest() instead of Handle()
However, existing inheriting classes overriding Handle() will still work, albeit without stats recording.
"show caps" becomes "show caps list" to disambiguate between show caps commands
2013-07-08 22:03:07 +01:00
Justin Clark-Casey (justincc) a33b6eed6d minor: remove mono compiler warnings in WebsocketServerHandler.cs 2013-06-20 00:54:19 +01:00
Justin Clark-Casey (justincc) 84af1cab9b Display existing statistic of how many http requests a server is making as server.network.HTTPRequestsMade in "show stats all" 2013-06-19 20:48:12 +01:00
Justin Clark-Casey (justincc) 9501a583cb Make number of inbound http requests handled available as a httpserver.<port>.IncomingHTTPRequestsProcessed stat 2013-06-18 23:07:18 +01:00
Justin Clark-Casey (justincc) 7af97f88b7 Add port numbers to poll service thread names so that we can tell which belong to which HttpServer 2013-06-10 23:39:17 +01:00
Justin Clark-Casey (justincc) 32d1e50565 Reinstate explicit starting and stopping of PollServiceRequestManager added in 3eee991 but removed in 7c0bfca
Do not rely on destructors to stop things.
These fire at unpredictable times and cause problems such as http://opensimulator.org/mantis/view.php?id=6503
and most probably http://opensimulator.org/mantis/view.php?id=6668
2013-06-10 23:30:35 +01:00
Melanie 75631e0267 Supply proper type information for the various types of requests 2013-06-07 23:55:03 +01:00
Melanie 7c0bfca7a0 Adding Avination's PollService to round out the HTTP inventory changes 2013-06-07 23:43:45 +01:00
teravus d2367968e4 * In between the fog, a moment of clarity. This fixes mantis 6570 2013-04-04 19:10:23 -04:00
teravus 6e1b3f9951 *Yet another HTTPServer update code changes in OpenSim Libs. * This fixes a connection close issue by getting rid of the socket references * This adds a connection timeout checker to shutdown poor or evil connections and combats DOS attempts that just connect and make no complete requests and just wait. It also actually implements KeepAlive... instead of just understanding the connection header in the request... you can test by connecting and requesting a keepalive header and sending another request on the same connection. The new timeout checker closes expired keepalive sessions, just make sure you send the request within 70 seconds of connecting or the timeout checker will timeout the connection. 2013-03-16 03:14:11 -04:00
BlueWall f676408e2a Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2013-03-05 15:30:54 -05:00
teravus 69fbcdf14c * Add a Max Payload size property to the Websocket Server Handler. If you would like to restrict the maximum packet size, (and therefore protect against Memory DOSing) then you should set this. I defaulted it to 40MB. This means that in theory, a malicious user could connect and send a packet that claims that the payload is up to 40 mb (even if it doesn't actually turn out to be 40mb. More testing needs to be done on it where the packets are maliciously malformed. 2013-03-05 00:04:09 -05:00
BlueWall 66d74e76b1 Add method to remove JsonRpc Handlers from the server 2013-03-03 09:40:44 -05:00
Justin Clark-Casey (justincc) 80c19b7cac Make sure we dispose of WebResponse, StreamReader and Stream in various places where we were not already. 2013-02-27 00:21:02 +00:00
Diva Canto 4779f7d7d5 Deleted all AssemblyFileVersion directives 2013-02-19 17:14:55 -08:00
teravus c22276a169 * gracefully handle a Situation where a double close is called on the WebSocket handler 2013-02-14 18:43:53 -05:00
teravus 94a5232d3a * Adds Websocket support to baseHttpServer and IHttpServer.cs . This allows modules to set up a websocket server that websocket clients can connect to. An example module is in OptionalModules/Example/WebSocketEchoTest/WebSocketEchoModule.cs 2013-02-07 10:50:17 -05:00
teravus 4867a7cbbf This is the final commit that enables the Websocket handler 2013-02-07 10:27:18 -05:00
teravus 1dc09d8e8f We're not really done here.. but we're getting there. Socket Read is working.. Still have to do Header.ToBytes and compose a websocket frame with a payload. 2013-02-05 18:02:25 -05:00
Justin Clark-Casey (justincc) 1f1da23097 Bump version and assembly version numbers from 0.7.5 to 0.7.6
This is mostly Bluewall's work but I am also bumping the general version number
OpenSimulator 0.7.5 remains in the release candidate stage.
I'm doing this because master is significantly adding things that will not be in 0.7.5
This update should not cause issues with existing external binary DLLs because our DLLs do not have strong names
and so the exact version match requirement is not in force.
2013-02-05 00:23:17 +00:00
BlueWall 2841ed05cf Merge branch 'master' of /home/opensim/var/repo/opensim 2013-01-23 08:16:18 -05:00
BlueWall 1776986dc3 Add additional return status
Adding additional return status for JsonRpcMethod. Now returns true/false
2013-01-23 08:14:21 -05:00
Justin Clark-Casey (justincc) 3eee991935 Explicitly stop PollServiceRequestManager() rather than relying on its destructor.
Hopes to address occasional shutdown failures from http://opensimulator.org/mantis/view.php?id=6503
2013-01-19 02:04:36 +00:00
BlueWall ca3e0d67d2 Add Json-Rpc 2.0 To Registered Handlers
Added registration json-rpc handlers in the http server. Covers version 2.0
  See: http://www.jsonrpc.org/specification
2013-01-15 10:04:16 -05:00
Justin Clark-Casey (justincc) fdf8876e20 In BaseHttpServer.HandleRequest(), use Culture.SetCurrentCulture() rather than creating a new CultureInfo separately 2012-12-05 21:52:10 +00:00
Justin Clark-Casey (justincc) 065d6d6fe1 Delete unused BaseHttpServer.HandleAgentRequest() 2012-11-23 04:15:21 +00:00
Justin Clark-Casey (justincc) dc5711ad62 minor: If logging full incoming HTTP data, don't deceptively print ... at the end of the body. 2012-11-20 04:10:03 +00:00
Diva Canto 27b12cebbb A few more AssemblyInfos in a few more dlls. 2012-11-14 08:10:15 -08:00
Justin Clark-Casey (justincc) 2206132ab9 minor: Get content type handler logger to log "unset" for the content type instead of blank if no content type was set. 2012-10-23 00:44:47 +01:00
Justin Clark-Casey (justincc) 542d075376 minor: Use LogIncomingToContentTypeHandler() method for incoming HTTP data where this wasn't already used.
This allows log level 5 (log sample or large part of incoming post data) to operate and removes copy/paste.
2012-10-23 00:39:59 +01:00
Justin Clark-Casey (justincc) 991151250d If we're avoiding printing a long request warning for a GetTexture CAP call, check we received a request handler first since this is not guaranteed.
Resolves harmless logged exception when content type and generic xml rpc requests take more than 3 seconds.
2012-10-18 00:39:43 +01:00
Melanie 060d6fe8f4 Allow setting max connections for an endpoint 2012-09-30 16:30:16 +01:00
Diva Canto 91a5c602e3 Revert "Added request.Proxy=null everywhere, as discussed in http://stackoverflow.com/questions/2519655/httpwebrequest-is-extremely-slow."
But the patch is here, in case anyone wants to try it.

This reverts commit 531edd51d8.
2012-09-30 07:48:03 -07:00
Diva Canto 531edd51d8 Added request.Proxy=null everywhere, as discussed in http://stackoverflow.com/questions/2519655/httpwebrequest-is-extremely-slow.
Thanks R.Gunther (rigun@rigutech.nl) https://lists.berlios.de/pipermail/opensim-users/2012-September/010986.html
2012-09-30 07:22:55 -07:00
Justin Clark-Casey (justincc) f457952755 Fix bug where debug http level 6 could not be specified. Also converts newlines at this level to '\n' to enable them to be logged. 2012-09-29 02:38:21 +01:00
Diva Canto 772aedc731 Make BaseHttpServer throws say something useful. 2012-09-22 14:01:07 -07:00
Justin Clark-Casey (justincc) 1b0abf8f0c Comment out the long unused afaik HTTP agent handlers.
As far as I know, this was only used by the IBM Rest modules, much of which has been commented out for a very long time now.  Other similar code uses HTTP or stream handlers instead.
So commenting this out to reduce code complexity and the need to make this facility consistent with the others where it may not be used anyway.
If this facility is actually being used then please notify me or uncomment it if you are core.
2012-09-21 00:29:13 +01:00
Justin Clark-Casey (justincc) e29d563557 Add request number counting to incoming HTTP requests in the same way that this was already being done for outgoing HTTP requests.
This allows us to associate debug logging messages with the right request.
It also allows us to put a request number on 'long request' logging even if other debug logging is not enabled, which gives us some idea of whether every request is suffering this problem or only some.
This is a separate internal number not associated with any incoming number in the opensim-request-id header, this will be clarified when logging of this incoming request number is re-enabled.
This commit also adds port number to HTTP IN logging to allow us to distinguish between different request numbers on different ports.
2012-09-21 00:09:17 +01:00
Justin Clark-Casey (justincc) a5b3989e5d Insert a new log level 4 for HTTP IN and HTTP OUT that will log how long the request took.
This is only printed if debug http level >= 4 and the request didn't take more than the time considered 'long', in which case the existing log message is printed.
This displaces the previous log levels 4 and 5 which are now 5 and 6 respectively.
2012-09-20 23:18:19 +01:00
Justin Clark-Casey (justincc) 387a1bb283 Add ability to turn on/off logging of outgoing HTTP requests flowing through WebUtil.
This is for debugging purposes.
This is controlled via the "debug http" command which can already log incoming requests.
This now gains a mandatory parameter of in, out or all to control what is logged.
Log messages are also shortened and labelled and HTTP IN or HTTP OUT to be consistent with existing UDP PACKET IN and PACKET OUT messages.
2012-09-20 23:17:44 +01:00
Justin Clark-Casey (justincc) 7df7b86ec5 Fix bug in logging sample input at debug http level 4.
Also converts newlines to "\n" text.
2012-09-12 23:01:07 +01:00
Justin Clark-Casey (justincc) 25111e703f Add levels 4 and 5 to "debug http" console command that will log a sample of incoming request data and the entire incoming data respectively.
See "help debug http" for more details.
2012-09-11 21:48:51 +01:00
Justin Clark-Casey (justincc) 5aec0ff207 Move Watchdog and MemoryWatchdog classes into OpenSim.Framework.Monitoring with other monitoring code from OpenSim.Framework 2012-07-25 23:27:00 +01:00
Justin Clark-Casey (justincc) dca04c7b61 Avoid a race condition where an incoming request to a script external URL can trigger an exception is the URL was being removed at the same time.
This involves three steps
1) Return gracefully in UrlModule.HttpRequestHandler() instead of throwing an exception when the url cannot be found in its index
2) Return true instead of false in HasEvents() if no matching request is found in the map.  This call will only happen in the first place for raced requests.
3) Return a 404 in GetEvents() if the request is not in the index, rather than a blank 200 OK.

Many thanks to Tom Haines in http://opensimulator.org/mantis/view.php?id=6051 for doing some of the work on this.
2012-06-22 23:16:18 +01:00
Justin Clark-Casey (justincc) ed513fc7be Fix bug introduced in commit c6e3752 (13 Jun 2012) where poll responses would always return OK even if some other status code had been set 2012-06-16 03:43:45 +01:00
Justin Clark-Casey (justincc) 94517c8d5c Make the "debug http" command available for robust as well as the simulator. This allows one to see incoming requests as they happen.
This required making everything use the common MainServer class for registering and retrieving http servers, rather than duplicate structures.
2012-06-15 02:51:52 +01:00
Justin Clark-Casey (justincc) 257b1b517d Add main instance to internal MainServer.m_Servers list to simplify internal logic.
This does require the server to be added before it is set as the main Instance
2012-06-15 02:03:50 +01:00
Justin Clark-Casey (justincc) 478acfff34 When setting debug http level, do this for all known http servers, not just the main instance. 2012-06-15 01:24:36 +01:00
Justin Clark-Casey (justincc) 9825861f4a Shuffle "debug http" levels so that 1 and 2 now cause different levels of warn to be logged if we receive invalid xml for xmlrpc. 2012-06-14 23:46:09 +01:00
Justin Clark-Casey (justincc) f4b02f8e39 Fix a regression in BaseHttpServer.HandleXmlRpcRequests() from recent c6e3752
Accidentally make responseString null by default instead of String.Empty.
It needs to be something in case the XmlRpcRequest deserialize throws an exception due to bad xml (a failure which we silently swallow!)
2012-06-14 04:29:15 +01:00
Justin Clark-Casey (justincc) c6e375291a Don't include time to transmit response back to requester when assessing slow handling of requests.
This is to avoid logging a 'slow' request when the source of delay is the viewer in processing a response.
This is not something we can do much about on the server end - it's server-side delay that we're interested in.
To ensure consistency, this commit also had to refactor and simplify inbound non-poll network request handling, though there should be no functional change.
IOSHttpResponse no longer exposes the Send() method, only classes in OpenSim.Framework.Servers.HttpServer should be doing this.
Only the GetTextureHandler was sending its own response.  Now it leaves this to BaseHttpServer, like all other core handlers.
2012-06-13 00:03:44 +01:00
BlueWall a1e857932a Make change to fix Windows builds 2012-06-07 10:17:37 -04:00
Justin Clark-Casey (justincc) 98b46d48fe Allow the thread watchdog to accept an alarm method that is invoked if the timeout is breached.
This alarm can then invoke this to log extra information.
This is used in LLUDPServer to show which client was being processed when incoming and outgoing udp watchdog alarms are triggered.
2012-06-07 02:44:13 +01:00
SignpostMarv 99cebec4ab adding status codes from rfc 6585
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-05-24 12:09:15 -04:00
SignpostMarv 87f9aa9d08 porting IDE tooltip-friendly documentation tweaks from Aurora-Sim
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-05-24 12:09:15 -04:00
Justin Clark-Casey (justincc) 6987aef38d Improve logging on the prim inventory script asset request path for future use.
This adds name and description of the request handler to http request logging when DebugLevel >= 1
2012-05-09 23:12:30 +01:00
Oren Hurvitz 15844da3af Log the full exception when errors occur in BaseHttpServer 2012-05-07 19:56:00 +01:00
Justin Clark-Casey (justincc) fb99ee6774 minor: Tweak BaseHttpServer message to make it clear that this relates to slow handling of inbound requests. 2012-05-04 01:16:56 +01:00
Justin Clark-Casey (justincc) 231a3bf147 Implement optional name and description on http stream handlers so that we can relate a slow request to what the handler actually does and the agent it serves, if applicable.
This is most useful for capabilities where the url is not self-describing.
2012-05-03 01:45:49 +01:00
Justin Clark-Casey (justincc) 737e177163 Revert "Log the full exception when errors occur in BaseHttpServer"
This reverts commit e31e7c68c8.

Applied for patch assessment and accidentally committed too early.
2012-04-27 23:46:46 +01:00
Oren Hurvitz e31e7c68c8 Log the full exception when errors occur in BaseHttpServer 2012-04-27 21:52:04 +01:00
Justin Clark-Casey (justincc) f3dda2d85d Add more exception detail to Exception and IOException throws in BaseHttpServer.HandleRequest() 2012-04-20 03:12:25 +01:00
Diva Canto cdbe34716f Thank you, BaseHttpServer, for telling me where things go wrong. 2012-04-06 11:21:27 -07:00
Justin Clark-Casey (justincc) f67f37074f Stop spurious scene loop startup timeout alarms for scenes with many prims.
On the first frame, all startup scene objects are added to the physics scene.
This can cause a considerable delay, so we don't start raising the alarm on scene loop timeouts until the second frame.
This commit also slightly changes the behaviour of timeout reporting.
Previously, a report was made for the very first timed out thread, ignoring all others until the next watchdog check.
Instead, we now report every timed out thread, though we still only do this once no matter how long the timeout.
2012-02-24 05:02:33 +00:00
Justin Clark-Casey (justincc) e6272b8d56 Stop also adding an ordinary http handler when we set up a poll http handler.
It appears that this is entirely unnecessary since the poll http handlers are dealt with on a separate code path.
2011-12-07 12:28:42 +00:00
Justin Clark-Casey (justincc) 4567555c49 Implement IOSHttpRequest and IOSHttpResponse http interfaces and use instead of OSHttpRequest/OSHttpResponse.
This is required for the substitution of different HTTP servers or the newer HttpServer.dll without having to commit to a particular implementation.
This is also required to write regression tests that involve the HTTP layer.
If you need to recompile, all you need to do is replace OSHttpRequest/OSHttpResponse references with IOSHttpRequest/IOSHttpResponse.
2011-12-05 20:44:20 +00:00
Justin Clark-Casey (justincc) fa63054c4f On "show caps", stop excluding the seed cap but do exclude it elsewhere 2011-11-29 20:37:03 +00:00
Justin Clark-Casey (justincc) 679a5f6c0b With "debug http 1", show the path with the query string instead of just the path.
Also simplifies debug levels to just 0 and 1
2011-11-29 17:26:45 +00:00
Justin Clark-Casey (justincc) b6b0bc7b32 Add "debug http" command for currently simple extra debug logging of non-event queue inbound http requests to a simulator 2011-11-29 16:15:52 +00:00
Justin Clark-Casey (justincc) ccae787d03 send a watchdog heartbeat for a poll worker thread when it's actually run 2011-11-15 22:20:44 +00:00
Justin Clark-Casey (justincc) 7e488cd635 Remove unused avariable in PollServiceRequestManager 2011-11-07 23:24:13 +00:00
Justin Clark-Casey (justincc) c275c22928 Restart the event queue worker threads that I accidentally disabled earlier today in 8a0a78c.
Also adds these to the watchdogs with very large timeouts (should really be infinite)
2011-10-25 23:26:21 +01:00
Justin Clark-Casey (justincc) 8a0a78cbcc Make OpenSim.Framework.Servers.HttpServer rely on OpenSim.Framework instead of the other way around.
This is necessary so that code in HttpServer can use framework facilities such as the thread watchdog for monitoring purposes.
Doing this shuffle meant that MainServer was moved into OpenSim/Framework/Servers
Also had to make OpenSim.Framework.Console rely on OpenSim.Framework rather than the other way around since it in turn relies on HttpServer
MainConsole and some new interfaces had to be moved into OpenSim/Framework to allow this.  This can be reverted if parts of OpenSim.Framework stop relying on console presence (cheifly RegionInfo)
2011-10-25 20:24:21 +01:00
Justin Clark-Casey (justincc) e14cb45b9b Drop some unnecessary ContainsKey() checking before Remove() in BaseHttpServer()
Remove() presumably does this check anyway since it just returns false if the key is not in the collection.
2011-10-24 23:26:41 +01:00
Justin Clark-Casey (justincc) 9ec672c70b Fix bugs in EventQueueGetModule.ClientClosed() and BaseHttpServer.RemovePollServerHTTPHandler() that stopped existing code in ClientClosed() from actually tearing down the poll handler
Actually doing the tear down appear to have no ill effects with region crossing and teleport.
2011-10-24 23:16:03 +01:00
Justin Clark-Casey (justincc) e742cffe15 Add Enabled switch in new [Attachments] section in OpenSimDefaults.ini to allow attachments to be temporarily turned off.
This is for debugging purposes.  Defaults to Attachments Enabled
2011-09-30 01:19:22 +01:00
Justin Clark-Casey (justincc) d74686fd51 read m_rpcHandlersKeepAlive under appropriate lock 2011-08-22 02:25:58 +01:00
Justin Clark-Casey (justincc) c587b0a3a3 oops, fix build break from last commit 2011-08-22 02:10:45 +01:00
Justin Clark-Casey (justincc) 9469c62098 improve locking of m_agentHandlers in BaseHttpServer 2011-08-22 02:07:51 +01:00
Justin Clark-Casey (justincc) f9a367e2f6 improve locking of m_HTTPHandlers in BaseHttpServer 2011-08-22 01:59:40 +01:00
Justin Clark-Casey (justincc) 5a11cffd23 improve locking of m_streamHandlers in BaseHttpServer 2011-08-22 01:58:50 +01:00
Justin Clark-Casey (justincc) 20a4367827 remove necessity to catch a KeyNotFoundException in BaseHttpServer.RemoveLLSDHandler() 2011-08-22 01:58:19 +01:00
Justin Clark-Casey (justincc) 8254116dc6 improve locking of m_llsdHandlers in BaseHttpServer 2011-08-22 01:52:08 +01:00
Justin Clark-Casey (justincc) 2f1ac1d144 minor: remove mono compiler warning 2011-08-22 01:45:46 +01:00
Justin Clark-Casey (justincc) 94a8ab80c8 improve locking of m_rpcHandlers in BaseHttpServer 2011-08-22 01:43:34 +01:00
Diva Canto fd57c91b4a First pass at making the V2 map work. Standalones only for now. There are some issues with the zoom level -- TBD. 2011-06-12 15:37:42 -07:00
BlueWall 8ca7938753 Adding ssl support
Adding ssl support for "Out of Band" applications such as the remote
	admin module or Robust services
2011-05-05 19:56:54 -04:00
Justin Clark-Casey (justincc) ccc26f7443 Get Viewer 2 voice working with OpenSim.
See http://opensimulator.org/mantis/view.php?id=5336
It turns out that viewer 2 was upset by the lack of a response to viv_watcher.php.  This would send it into a continuous login loop.
Viewer 1 was quite happy to ignore the lack of response.
This commit puts in the bare minimum 'OK' message in response to viv_watcher.php.  This allows viewer 2 voice to connect and appears to work.
However, at some point we need to fill out the watcher response, whatever that is.
2011-04-20 01:02:40 +01:00
Diva Canto 7592a033df Moved 3 request handlers from OpenSim.Framework.Servers.HttpServer up to OpenSim.Framework -- just pasted them in WebUtil. This is so that code that uses the Service connectors don't need to include the HttpServer dll -- that was odd. 2011-04-12 20:24:28 -07:00
BlueWall a3651eb5d0 Thanks Kevin Cozens for a patch that:
Fixes several spelling mistakes
2011-03-17 05:48:42 -04:00
Justin Clark-Casey (justincc) aadd0e8d42 minor: bring comment into line with code reality 2011-03-16 00:14:58 +00:00
Melanie cee5e3e264 Up the timeout on slow requests to 3000 to stop console spam. Make sure
request method and target are reported correctly and drop the txn id
as it's empty 99% of the time.
2011-03-14 14:51:13 +00:00
Diva Canto fc84225038 XFF capitalization strikes again -- this time in the XMLRPC method. mantis #5386 2011-02-16 08:18:49 -08:00