ASFUNCTIONBODY(NetConnection,connect) { NetConnection* th=Class<NetConnection>::cast(obj); //This takes 1 required parameter and an unspecified number of optional parameters assert_and_throw(argslen>0); //This seems strange: //LOCAL_WITH_FILE may not use connect(), even if it tries to connect to a local file. //I'm following the specification to the letter. Testing showed //that the official player allows connect(null) in localWithFile. if(args[0]->getObjectType() != T_NULL && sys->securityManager->evaluateSandbox(SecurityManager::LOCAL_WITH_FILE)) throw Class<SecurityError>::getInstanceS("SecurityError: NetConnection::connect " "from LOCAL_WITH_FILE sandbox"); //Null argument means local file or web server, the spec only mentions NULL, but youtube uses UNDEFINED, so supporting that too. if(args[0]->getObjectType()==T_NULL || args[0]->getObjectType()==T_UNDEFINED) { th->_connected = false; } //String argument means Flash Remoting/Flash Media Server else { th->_connected = false; ASString* command = static_cast<ASString*>(args[0]); th->uri = URLInfo(command->toString()); if(sys->securityManager->evaluatePoliciesURL(th->uri, true) != SecurityManager::ALLOWED) { //TODO: find correct way of handling this case throw Class<SecurityError>::getInstanceS("SecurityError: connection to domain not allowed by securityManager"); } if(!(th->uri.getProtocol() == "rtmp" || th->uri.getProtocol() == "rtmpe" || th->uri.getProtocol() == "rtmps")) { throw UnsupportedException("NetConnection::connect: only RTMP is supported"); } // We actually create the connection later in // NetStream::play(). For now, we support only // streaming, not remoting (NetConnection.call() is // not implemented). } //When the URI is undefined the connect is successful (tested on Adobe player) th->incRef(); getVm()->addEvent(_MR(th), _MR(Class<NetStatusEvent>::getInstanceS("status", "NetConnection.Connect.Success"))); return NULL; }
ASFUNCTIONBODY(NetConnection,connect) { NetConnection* th=Class<NetConnection>::cast(obj); //This takes 1 required parameter and an unspecified number of optional parameters assert_and_throw(argslen>0); //This seems strange: //LOCAL_WITH_FILE may not use connect(), even if it tries to connect to a local file. //I'm following the specification to the letter if(sys->securityManager->evaluateSandbox(SecurityManager::LOCAL_WITH_FILE)) throw Class<SecurityError>::getInstanceS("SecurityError: NetConnection::connect " "from LOCAL_WITH_FILE sandbox"); //Null argument means local file or web server, the spec only mentions NULL, but youtube uses UNDEFINED, so supporting that too. if(args[0]->getObjectType()==T_NULL || args[0]->getObjectType()==T_UNDEFINED) { th->_connected = false; } //String argument means Flash Remoting/Flash Media Server else { th->_connected = false; ASString* command = static_cast<ASString*>(args[0]); th->uri = URLInfo(command->toString()); if(sys->securityManager->evaluatePoliciesURL(th->uri, true) != SecurityManager::ALLOWED) { //TODO: find correct way of handling this case throw Class<SecurityError>::getInstanceS("SecurityError: connection to domain not allowed by securityManager"); } throw UnsupportedException("NetConnection::connect to FMS"); } //When the URI is undefined the connect is successful (tested on Adobe player) Event* status=Class<NetStatusEvent>::getInstanceS("status", "NetConnection.Connect.Success"); getVm()->addEvent(th, status); status->decRef(); return NULL; }