blob: b360671bac29b6122362929e0eae3c72795f0fbc [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package mx.netmon
{
import flash.events.Event;
import flash.net.URLRequest;
/**
* NetworkMonitor is a stub used by the framework and enterprise service
* classes to send information to the Flash Builder Network Monitor feature.
*
* The NetworkMonitor declares a number of Impl functions which are to be
* filled in by a mix-in class provided by Flash Builder.
* If those functions are not assigned the stub will do nothing,
* will or return false or null as appropriate.
* We don't use a singleton or an instance object at the moment to simplify
* the code that calls the monitor.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public class NetworkMonitor
{
//--------------------------------------------------------------------------
//
// Class mixins
//
//--------------------------------------------------------------------------
/**
* To be assigned by mix-in.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static var isMonitoringImpl:Function;
/**
* To be assigned by mix-in.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static var adjustURLRequestImpl:Function;
/**
* To be assigned by mix-in.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static var adjustNetConnectionURLImpl:Function;
/**
* To be assigned by mix-in.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static var monitorEventImpl:Function;
/**
* To be assigned by mix-in.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static var monitorInvocationImpl:Function;
/**
* To be assigned by mix-in.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static var monitorResultImpl:Function;
/**
* To be assigned by mix-in.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static var monitorFaultImpl:Function;
//--------------------------------------------------------------------------
//
// Class methods
//
//--------------------------------------------------------------------------
/**
* Returns true if the monitor is linked and monitoring.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function isMonitoring():Boolean
{
return isMonitoringImpl != null ? isMonitoringImpl() : false;
}
/**
* Adjust the URLRequest so that it goes through the monitor.
* The URLRequest sent to the monitor will have two headers:
* <ul>
* <li><code>actualHostPort</code>: The real <code>host:port</code> for the URL.</li>
* <li><code>correlationID</code>: The correlationID for the request in case it's from
* messaging (Image/Loader requests need to create their own correlationIDs)</li>
* </ul>
*
* @param urlRequest The URLRequest to adjust.
* (Relative URLs are supported.)
*
* @param rootURL Computes an absolute URL from the relative URL.
* If necessary, pass the SWF file's URL as this value.
*
* @param correlationID The correlationID that may be used
* for associated events.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function adjustURLRequest(urlRequest:URLRequest,
rootURL:String,
correlationID:String):void
{
if (adjustURLRequestImpl != null)
adjustURLRequestImpl(urlRequest, rootURL, correlationID);
}
/**
* Adjust the URL for NetConnectionChannel and HTTPChannel Requests
* so that it goes through the monitor.
* Returns the modified url.
*
* @param url to adjust.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function adjustNetConnectionURL(rootUrl:String, url:String):String
{
if (adjustNetConnectionURLImpl != null)
return adjustNetConnectionURLImpl(rootUrl, url);
return null;
}
/**
* Tell the monitor that an event occurred.
* This may be used by the Loader to monitor security and IO errors.
* It should not be used for the Loader's <code>complete</code> event.
*
* @param event The event that is about to occur (or occurred).
*
* @param correlationID The correlationID to associate with other events
* or the request.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function monitorEvent(event:Event,
correlationID:String):void
{
if (monitorEventImpl != null)
monitorEventImpl(event, correlationID);
}
/**
* Tell the monitor that an invocation is occuring.
*
* @param id The id of the tag causing the invocation
* if it can be determined.
*
* @param invocationMessage The Message that will be sent across the wire.
* (It is untyped here to avoid linking in the dependency.)
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function monitorInvocation(id:String,
invocationMessage:Object, messageAgent:Object):void
{
if (monitorInvocationImpl != null)
monitorInvocationImpl(id, invocationMessage, messageAgent);
}
/**
* Tell the monitor that a result was returned.
*
* @param resultMessage The Message that came back indicating the result.
* (It is untyped here to avoid linking in the dependency.)
*
* @param actualResult the decoded result
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function monitorResult(resultMessage:Object,
actualResult:Object):void
{
if (monitorResultImpl != null)
monitorResultImpl(resultMessage, actualResult);
}
/**
* Tell the monitor that a fault occurred.
*
* @param faultMessage The Message that came back indicating the result.
* It be null if this was due to an invocation failure.
* (It is untyped here to avoid linking in the dependency.)
*
* @param actualFault The Fault that occurred.
* (It is untyped here to avoid linking in the dependency.)
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public static function monitorFault(faultMessage:Object,
actualFault:Object):void
{
if (monitorFaultImpl != null)
monitorFaultImpl(faultMessage, actualFault);
}
}
}