=== modified file 'libnet/rtmp_msg.cpp' --- libnet/rtmp_msg.cpp 2009-07-26 01:56:07 +0000 +++ libnet/rtmp_msg.cpp 2009-08-10 11:37:46 +0000 @@ -65,6 +65,58 @@ RTMPMsg::~RTMPMsg() // GNASH_REPORT_FUNCTION; } +struct RTMPStatusMsgCode { + const char *msg; + RTMPMsg::rtmp_status_e code; +}; + +static RTMPStatusMsgCode rtmp_msg_code_list[] = { + // Error messages we get as the result of a NetConnection::connect() + { "NetConnection.Connect.Success", RTMPMsg::NC_CONNECT_SUCCESS }, + { "NetConnection.Call.Failed", RTMPMsg::NC_CALL_FAILED }, + { "NetConnection.Call.BadVersion", RTMPMsg::NC_CALL_BADVERSION }, + { "NetConnection.AppShutdown", RTMPMsg::NC_CONNECT_APPSHUTDOWN }, + { "NetConnection.Connect.Failed", RTMPMsg::NC_CONNECT_FAILED }, + { "NetConnection.Invalid.Application", RTMPMsg::NC_CONNECT_INVALID_APPLICATION }, + { "NetConnection.Connect.Rejected", RTMPMsg::NC_CONNECT_REJECTED }, + + // we get this and then the FLV file data is next + { "NetStream.Data.Start", RTMPMsg::NS_DATA_START }, + + // Error messages we get as the result of a NetStream::play() + { "NetStream.Pause.Notify", RTMPMsg::NS_PAUSE_NOTIFY }, + { "NetStream.Play.Complete", RTMPMsg::NS_PLAY_COMPLETE }, + { "NetStream.Play.Failed", RTMPMsg::NS_PLAY_FAILED }, + { "NetStream.InvalidArg", RTMPMsg::NS_INVALID_ARGUMENT }, + { "NetStream.Play.File.Structure.Invalid", RTMPMsg::NS_PLAY_FILE_STRUCTURE_INVALID }, + { "NetStream.Play.Insufficient.BW", RTMPMsg::NS_PLAY_INSUFFICIENT_BW }, + { "NetStream.Play.No.Supported.Track.Found", RTMPMsg::NS_PLAY_NO_SUPPORTED_TRACK_FOUND }, + { "NetStream.Play.PublishNotify", RTMPMsg::NS_PLAY_PUBLISHNOTIFY }, + { "NetStream.Play.StreamNotFound", RTMPMsg::NS_PLAY_STREAMNOTFOUND }, + { "NetStream.Play.SWITCH", RTMPMsg::NS_PLAY_SWITCH }, + { "NetStream.Play.UnpublishNotify", RTMPMsg::NS_PLAY_UNPUBLISHNOTIFY }, + { "NetStream.Play.Start", RTMPMsg::NS_PLAY_START }, + { "NetStream.Play.Stop" , RTMPMsg::NS_PLAY_STOP }, + { "NetStream.Play.Reset", RTMPMsg::NS_PLAY_RESET }, + { "NetStream.Publish.Badname", RTMPMsg::NS_PUBLISH_BADNAME }, + { "NetStream.Publish.Start", RTMPMsg::NS_PUBLISH_START }, + { "NetStream.Record.Failed", RTMPMsg::NS_RECORD_FAILED }, + { "NetStream.Record.Noaccess", RTMPMsg::NS_RECORD_NOACCESS }, + { "NetStream.Record.Start", RTMPMsg::NS_RECORD_START }, + { "NetStream.Record.Stop", RTMPMsg::NS_RECORD_STOP }, + { "NetStream.Seek.Failed", RTMPMsg::NS_SEEK_FAILED }, + { "NetStream.Seek.NOTIFY", RTMPMsg::NS_SEEK_NOTIFY }, + { "NetStream.Unpause.Notify", RTMPMsg::NS_UNPAUSE_NOTIFY }, + { "NetStream.Unpublished.Success", RTMPMsg::NS_UNPUBLISHED_SUCCESS }, + + // Error messages we get as the result of a SharedObject operation + { "SharedObject.Creation.Failed", RTMPMsg::SO_CREATION_FAILED }, + { "SharedObject.No.Read.Access", RTMPMsg::SO_NO_READ_ACCESS }, + { "SharedObject.No.Write.Access", RTMPMsg::SO_NO_WRITE_ACCESS }, + { "SharedObject.Persistence.Mismatch", RTMPMsg::SO_PERSISTENCE_MISMATCH }, + { 0 } +}; + // All the result messages from the server are ASCII text, so they have to be parsed to // determine what really happened. We return the numerical equivalant for each _result, // error, or onStatus message, the actual data can be obtained from the Element. @@ -92,159 +144,12 @@ RTMPMsg::checkStatus(boost::shared_ptrto_string(); if (name == "code") { // log_debug("Name is: %s, Value is: %s", name.c_str(), value.c_str()); - // Error messages we get as the result of a NetConnection::connect() - if (value == "NetConnection.Connect.Success") { - _status = RTMPMsg::NC_CONNECT_SUCCESS; - return _status; - } - if (value == "NetConnection.Call.Failed") { - _status = RTMPMsg::NC_CALL_FAILED; - return _status; - } - if (value == "NetConnection.Call.BadVersion") { - _status = RTMPMsg::NC_CALL_BADVERSION; - return _status; - } - if (value == "NetConnection.AppShutdown") { - _status = RTMPMsg::NC_CONNECT_APPSHUTDOWN; - return _status; - } - if (value == "NetConnection.Connect.Failed") { - _status = RTMPMsg::NC_CONNECT_FAILED; - return _status; - } - if (value == "NetConnection.Invalid.Application") { - _status = RTMPMsg::NC_CONNECT_INVALID_APPLICATION; - return _status; - } - if (value == "NetConnection.Connect.Rejected") { - _status = RTMPMsg::NC_CONNECT_REJECTED; - return _status; - } - - // we get this and then the FLV file data is next - if (value == "NetStream.Data.Start") { - _status = RTMPMsg::NS_DATA_START; - return _status; - } - // Error messages we get as the result of a NetStream::play() - if (value == "NetStream.Pause.Notify") { - _status = RTMPMsg::NS_PAUSE_NOTIFY; - return _status; - } - if (value == "NetStream.Play.Complete") { - _status = RTMPMsg::NS_PLAY_COMPLETE; - return _status; - } - if (value == "NetStream.Play.Failed") { - _status = RTMPMsg::NS_PLAY_FAILED; - return _status; - } - if (value == "NetStream.InvalidArg") { - _status = RTMPMsg::NS_INVALID_ARGUMENT; - return _status; - } - if (value == "NetStream.Play.File.Structure.Invalid") { - _status = RTMPMsg::NS_PLAY_FILE_STRUCTURE_INVALID; - return _status; - } - if (value == "NetStream.Play.Insufficient.BW") { - _status = RTMPMsg::NS_PLAY_INSUFFICIENT_BW; - return _status; - } - if (value == "NetStream.Play.No.Supported.Track.Found") { - _status = RTMPMsg::NS_PLAY_NO_SUPPORTED_TRACK_FOUND; - return _status; - } - if (value == "NetStream.Play.PublishNotify") { - _status = RTMPMsg::NS_PLAY_PUBLISHNOTIFY; - return _status; - } - if (value == "NetStream.Play.StreamNotFound") { - _status = RTMPMsg::NS_PLAY_STREAMNOTFOUND; - return _status; - } - if (value == "NetStream.Play.SWITCH") { - _status = RTMPMsg::NS_PLAY_SWITCH; - return _status; - } - if (value == "NetStream.Play.UnpublishNotify") { - _status = RTMPMsg::NS_PLAY_UNPUBLISHNOTIFY; - return _status; - } - if (value == "NetStream.Play.Start") { - _status = RTMPMsg::NS_PLAY_START; - return _status; - } - if (value == "NetStream.Play.Stop") { - _status = RTMPMsg::NS_PLAY_STOP; - return _status; - } - if (value == "NetStream.Play.Reset") { - _status = RTMPMsg::NS_PLAY_RESET; - return _status; - } - if (value == "NetStream.Publish.Badname") { - _status = RTMPMsg::NS_PUBLISH_BADNAME; - return _status; - } - if (value == "NetStream.Publish.Start") { - _status = RTMPMsg::NS_PUBLISH_START; - return _status; - } - - if (value == "NetStream.Record.Failed") { - _status = RTMPMsg::NS_RECORD_FAILED; - return _status; - } - if (value == "NetStream.Record.Noaccess") { - _status = RTMPMsg::NS_RECORD_NOACCESS; - return _status; - } - if (value == "NetStream.Record.Start") { - _status = RTMPMsg::NS_RECORD_START; - return _status; - } - if (value == "NetStream.Record.Stop") { - _status = RTMPMsg::NS_RECORD_STOP; - return _status; - } - if (value == "NetStream.Seek.Failed") { - _status = RTMPMsg::NS_SEEK_FAILED; - return _status; - } - if (value == "NetStream.Seek.NOTIFY") { - _status = RTMPMsg::NS_SEEK_NOTIFY; - return _status; - } - if (value == "NetStream.Unpause.Notify") { - _status = RTMPMsg::NS_UNPAUSE_NOTIFY; - return _status; - } - if (value == "NetStream.Unpublished.Success") { - _status = RTMPMsg::NS_UNPUBLISHED_SUCCESS; - return _status; - } - - // Error messages we get as the result of a SharedObject operation - if (value == "SharedObject.Creation.Failed") { - _status = RTMPMsg::SO_CREATION_FAILED; - return _status; - } - if (value == "SharedObject.No.Read.Access") { - _status = RTMPMsg::SO_NO_READ_ACCESS; - return _status; - } - if (value == "SharedObject.No.Write.Access") { - _status = RTMPMsg::SO_NO_WRITE_ACCESS; - return _status; - } - if (value == "SharedObject.Persistence.Mismatch") { - _status = RTMPMsg::SO_PERSISTENCE_MISMATCH; - return _status; - } - - + for (RTMPStatusMsgCode *p = rtmp_msg_code_list; p->msg; p++) { + if (value == p->msg) { + _status = p->code; + return _status; + } + } } } }