static FlexInvoke DecodeFlexInvoke(ByteBuffer stream) { int version = stream.ReadByte(); RtmpReader reader = new RtmpReader(stream); string action = reader.ReadData() as string; int invokeId = System.Convert.ToInt32(reader.ReadData()); object cmdData = reader.ReadData(); object[] parameters = Call.EmptyArguments; if (stream.HasRemaining) { #if !(NET_1_1) List <object> paramList = new List <object>(); #else ArrayList paramList = new ArrayList(); #endif while (stream.HasRemaining) { object obj = reader.ReadData(); paramList.Add(obj); } parameters = paramList.ToArray(); } /* * int dotIndex = action == null ? -1 : action.LastIndexOf("."); * string serviceName = (action == -1) ? null : action.Substring(0, dotIndex); * string serviceMethod = (dotIndex == -1) ? action : action.Substring(dotIndex + 1, action.Length - dotIndex - 1); */ PendingCall call = new PendingCall(null, action, parameters); FlexInvoke invoke = new FlexInvoke(invokeId, cmdData); invoke.ServiceCall = call; return(invoke); }
private static ISharedObjectMessage DecodeSharedObject(ByteBuffer stream) { RtmpReader reader = new RtmpReader(stream); string name = reader.ReadString(); int version = reader.ReadInt32(); bool persistent = reader.ReadInt32() == 2; reader.ReadInt32(); SharedObjectMessage so = new SharedObjectMessage(null, name, version, persistent); DecodeSharedObject(so, stream, reader); return(so); }
private static Notify DecodeNotifyOrInvoke(Notify notify, ByteBuffer stream, RtmpHeader header) { long position = stream.Position; RtmpReader reader = new RtmpReader(stream); string str = reader.ReadData() as string; if (!(notify is Invoke)) { stream.Position = position; return(notify); } if ((header == null) || (header.StreamId == 0)) { double num2 = (double)reader.ReadData(); notify.InvokeId = (int)num2; } object[] args = new object[0]; if (stream.HasRemaining) { List <object> list = new List <object>(); object item = reader.ReadData(); if (item is IDictionary) { notify.ConnectionParameters = item as IDictionary; } else if (item != null) { list.Add(item); } while (stream.HasRemaining) { list.Add(reader.ReadData()); } args = list.ToArray(); } int length = str.LastIndexOf("."); string name = (length == -1) ? null : str.Substring(0, length); string method = (length == -1) ? str : str.Substring(length + 1, (str.Length - length) - 1); if (notify is Invoke) { PendingCall call = new PendingCall(name, method, args); (notify as Invoke).ServiceCall = call; } else { Call call2 = new Call(name, method, args); notify.ServiceCall = call2; } return(notify); }
static Notify DecodeStreamMetadata(ByteBuffer stream) { RtmpReader reader = new RtmpReader(stream); string action = reader.ReadData() as string; object obj = reader.ReadData(); Notify notify = new Notify(); int dotIndex = action.LastIndexOf("."); string serviceName = (dotIndex == -1) ? null : action.Substring(0, dotIndex); string serviceMethod = (dotIndex == -1) ? action : action.Substring(dotIndex + 1, action.Length - dotIndex - 1); object[] parameters = new object[1] { obj }; Call call = new Call(serviceName, serviceMethod, parameters); notify.ServiceCall = call; return(notify); }
static ISharedObjectMessage DecodeSharedObject(ByteBuffer stream) { RtmpReader reader = new RtmpReader(stream); string name = reader.ReadString(); // Read version of SO to modify int version = reader.ReadInt32(); // Read persistence informations bool persistent = reader.ReadInt32() == 2; // Skip unknown bytes //skip(4); reader.ReadInt32(); SharedObjectMessage so = new SharedObjectMessage(null, name, version, persistent); DecodeSharedObject(so, stream, reader); return(so); }
private static FlexInvoke DecodeFlexInvoke(ByteBuffer stream) { int num = stream.ReadByte(); RtmpReader reader = new RtmpReader(stream); string cmd = reader.ReadData() as string; int invokeId = Convert.ToInt32(reader.ReadData()); object cmdData = reader.ReadData(); List <object> list = new List <object>(); while (stream.HasRemaining) { object item = reader.ReadData(); list.Add(item); } object[] parameters = list.ToArray(); FlexInvoke invoke = new FlexInvoke(cmd, invokeId, cmdData, parameters); int length = (cmd == null) ? -1 : cmd.LastIndexOf("."); string name = (length == -1) ? null : cmd.Substring(0, length); string method = (length == -1) ? cmd : cmd.Substring(length + 1, (cmd.Length - length) - 1); PendingCall call = new PendingCall(name, method, parameters); invoke.ServiceCall = call; return(invoke); }
static void DecodeSharedObject(SharedObjectMessage so, ByteBuffer stream, RtmpReader reader) { // Parse request body while (stream.HasRemaining) { byte typeCode = reader.ReadByte(); SharedObjectEventType type = SharedObjectTypeMapping.ToType(typeCode); string key = null; object value = null; int length = stream.GetInt(); //reader.ReadInt32(); switch (type) { case SharedObjectEventType.CLIENT_STATUS: // Status code key = reader.ReadString(); // Status level value = reader.ReadString(); break; case SharedObjectEventType.CLIENT_UPDATE_DATA: { key = reader.ReadString(); value = reader.ReadData(); /* * key = null; * // Map containing new attribute values * Hashtable map = new Hashtable(); * int start = (int)stream.Position; * while((int)stream.Position - start < length) * { * string tmp = reader.ReadString(); * map[tmp] = reader.ReadData(); * } * value = map; */ } break; default: if (type != SharedObjectEventType.SERVER_SEND_MESSAGE && type != SharedObjectEventType.CLIENT_SEND_MESSAGE) { if (length > 0) { key = reader.ReadString(); if (length > key.Length + 2) { value = reader.ReadData(); } } } else { int start = (int)stream.Position; // the "send" event seems to encode the handler name // as complete AMF string including the string type byte key = reader.ReadData() as string; // read parameters #if !(NET_1_1) List <object> paramList = new List <object>(); #else ArrayList paramList = new ArrayList(); #endif while (stream.Position - start < length) { object tmp = reader.ReadData(); paramList.Add(tmp); } value = paramList; } break; } so.AddEvent(type, key, value); } }
static Notify DecodeNotifyOrInvoke(Notify notify, ByteBuffer stream, RtmpHeader header) { long start = stream.Position; RtmpReader reader = new RtmpReader(stream); string action = reader.ReadData() as string; if (!(notify is Invoke)) { //Don't decode "NetStream.send" requests stream.Position = start; notify.Data = ByteBuffer.Allocate(stream.Remaining); notify.Data.Put(stream); //notify.setData(in.asReadOnlyBuffer()); return(notify); } if (header == null || header.StreamId == 0) { double invokeId = (double)reader.ReadData(); notify.InvokeId = (int)invokeId; } object[] parameters = Call.EmptyArguments; if (stream.HasRemaining) { #if !(NET_1_1) List <object> paramList = new List <object>(); #else ArrayList paramList = new ArrayList(); #endif object obj = reader.ReadData(); if (obj is IDictionary) { // for connect we get a map notify.ConnectionParameters = obj as IDictionary; } else if (obj != null) { paramList.Add(obj); } while (stream.HasRemaining) { paramList.Add(reader.ReadData()); } parameters = paramList.ToArray(); } int dotIndex = action.LastIndexOf("."); string serviceName = (dotIndex == -1) ? null : action.Substring(0, dotIndex); string serviceMethod = (dotIndex == -1) ? action : action.Substring(dotIndex + 1, action.Length - dotIndex - 1); if (notify is Invoke) { PendingCall call = new PendingCall(serviceName, serviceMethod, parameters); notify.ServiceCall = call; } else { Call call = new Call(serviceName, serviceMethod, parameters); notify.ServiceCall = call; } return(notify); }
static ISharedObjectMessage DecodeFlexSharedObject(ByteBuffer stream) { // Unknown byte, always 0? stream.Skip(1); RtmpReader reader = new RtmpReader(stream); string name = reader.ReadString(); // Read version of SO to modify int version = reader.ReadInt32(); // Read persistence informations bool persistent = reader.ReadInt32() == 2; // Skip unknown bytes reader.ReadInt32(); SharedObjectMessage so = new FlexSharedObjectMessage(null, name, version, persistent); DecodeSharedObject(so, stream, reader); return so; }
static void DecodeSharedObject(SharedObjectMessage so, ByteBuffer stream, RtmpReader reader) { // Parse request body while(stream.HasRemaining) { byte typeCode = reader.ReadByte(); SharedObjectEventType type = SharedObjectTypeMapping.ToType(typeCode); string key = null; object value = null; int length = stream.GetInt();//reader.ReadInt32(); switch(type) { case SharedObjectEventType.CLIENT_STATUS: // Status code key = reader.ReadString(); // Status level value = reader.ReadString(); break; case SharedObjectEventType.CLIENT_UPDATE_DATA: { key = reader.ReadString(); value = reader.ReadData(); /* key = null; // Map containing new attribute values Hashtable map = new Hashtable(); int start = (int)stream.Position; while((int)stream.Position - start < length) { string tmp = reader.ReadString(); map[tmp] = reader.ReadData(); } value = map; */ } break; default: if (type != SharedObjectEventType.SERVER_SEND_MESSAGE && type != SharedObjectEventType.CLIENT_SEND_MESSAGE) { if (length > 0) { key = reader.ReadString(); if(length > key.Length + 2) { value = reader.ReadData(); } } } else { int start = (int)stream.Position; // the "send" event seems to encode the handler name // as complete AMF string including the string type byte key = reader.ReadData() as string; // read parameters #if !(NET_1_1) List<object> paramList = new List<object>(); #else ArrayList paramList = new ArrayList(); #endif while (stream.Position - start < length) { object tmp = reader.ReadData(); paramList.Add(tmp); } value = paramList; } break; } so.AddEvent(type, key, value); } }
static Notify DecodeNotifyOrInvoke(Notify notify, ByteBuffer stream, RtmpHeader header) { long start = stream.Position; RtmpReader reader = new RtmpReader(stream); string action = reader.ReadData() as string; if(!(notify is Invoke)) { //Don't decode "NetStream.send" requests stream.Position = start; notify.Data = ByteBuffer.Allocate(stream.Remaining); notify.Data.Put(stream); //notify.setData(in.asReadOnlyBuffer()); return notify; } if(header == null || header.StreamId == 0) { double invokeId = (double)reader.ReadData(); notify.InvokeId = (int)invokeId; } object[] parameters = Call.EmptyArguments; if(stream.HasRemaining) { #if !(NET_1_1) List<object> paramList = new List<object>(); #else ArrayList paramList = new ArrayList(); #endif object obj = reader.ReadData(); if (obj is IDictionary) { // for connect we get a map notify.ConnectionParameters = obj as IDictionary; } else if (obj != null) { paramList.Add(obj); } while(stream.HasRemaining) { paramList.Add(reader.ReadData()); } parameters = paramList.ToArray(); } int dotIndex = action.LastIndexOf("."); string serviceName = (dotIndex == -1) ? null : action.Substring(0, dotIndex); string serviceMethod = (dotIndex == -1) ? action : action.Substring(dotIndex + 1, action.Length - dotIndex - 1); if (notify is Invoke) { PendingCall call = new PendingCall(serviceName, serviceMethod, parameters); notify.ServiceCall = call; } else { Call call = new Call(serviceName, serviceMethod, parameters); notify.ServiceCall = call; } return notify; }
static Notify DecodeStreamMetadata(ByteBuffer stream) { RtmpReader reader = new RtmpReader(stream); string action = reader.ReadData() as string; object obj = reader.ReadData(); Notify notify = new Notify(); int dotIndex = action.LastIndexOf("."); string serviceName = (dotIndex == -1) ? null : action.Substring(0, dotIndex); string serviceMethod = (dotIndex == -1) ? action : action.Substring(dotIndex + 1, action.Length - dotIndex - 1); object[] parameters = new object[1]{obj}; Call call = new Call(serviceName, serviceMethod, parameters); notify.ServiceCall = call; return notify; }
static FlexInvoke DecodeFlexInvoke(ByteBuffer stream) { int version = stream.ReadByte(); RtmpReader reader = new RtmpReader(stream); string action = reader.ReadData() as string; int invokeId = System.Convert.ToInt32(reader.ReadData()); object cmdData = reader.ReadData(); object[] parameters = Call.EmptyArguments; if (stream.HasRemaining) { #if !(NET_1_1) List<object> paramList = new List<object>(); #else ArrayList paramList = new ArrayList(); #endif while (stream.HasRemaining) { object obj = reader.ReadData(); paramList.Add(obj); } parameters = paramList.ToArray(); } /* int dotIndex = action == null ? -1 : action.LastIndexOf("."); string serviceName = (action == -1) ? null : action.Substring(0, dotIndex); string serviceMethod = (dotIndex == -1) ? action : action.Substring(dotIndex + 1, action.Length - dotIndex - 1); */ PendingCall call = new PendingCall(null, action, parameters); FlexInvoke invoke = new FlexInvoke(invokeId, cmdData); invoke.ServiceCall = call; return invoke; }
private static void DecodeSharedObject(SharedObjectMessage so, ByteBuffer stream, RtmpReader reader) { while (stream.HasRemaining) { SharedObjectEventType type = SharedObjectTypeMapping.ToType(reader.ReadByte()); string key = null; object obj2 = null; int @int = stream.GetInt(); switch (type) { case SharedObjectEventType.CLIENT_STATUS: key = reader.ReadString(); obj2 = reader.ReadString(); break; case SharedObjectEventType.CLIENT_UPDATE_DATA: key = reader.ReadString(); obj2 = reader.ReadData(); break; default: if ((type != SharedObjectEventType.SERVER_SEND_MESSAGE) && (type != SharedObjectEventType.CLIENT_SEND_MESSAGE)) { if (@int > 0) { key = reader.ReadString(); if (@int > (key.Length + 2)) { obj2 = reader.ReadData(); } } } else { int position = (int)stream.Position; key = reader.ReadData() as string; List <object> list = new List <object>(); while ((stream.Position - position) < @int) { object item = reader.ReadData(); list.Add(item); } obj2 = list; } break; } so.AddEvent(type, key, obj2); } }