00001 /* -*- C++ -*- */ 00002 // $Id: sfp.idl 72210 2006-04-20 11:50:26Z jwillemsen $ 00003 00004 #ifndef TAO_SFP_IDL 00005 #define TAO_SFP_IDL 00006 00007 #include <ULongSeq.pidl> 00008 #include <OctetSeq.pidl> 00009 00010 module flowProtocol 00011 { 00012 typedef CORBA::ULongSeq my_seq_ulong; 00013 enum MsgType 00014 { 00015 // The MsgTypes Start and struct Start,StartReply and struct 00016 // StartReply conflicts. 00017 // Also there are case-only differences for enumerator Credit and struct credit. 00018 // We suffix _Msg to all enumerators until the AVStreams RTF fixes these. 00019 // Messages in the forward direction 00020 // Start, 00021 Start_Msg, 00022 EndofStream_Msg, 00023 SimpleFrame_Msg, 00024 SequencedFrame_Msg, 00025 Frame_Msg, 00026 SpecialFrame_Msg, 00027 // Messages in the reverse direction 00028 // StartReply, 00029 StartReply_Msg, 00030 Credit_Msg, 00031 // Addition of type for a fragment. 00032 Fragment_Msg 00033 }; 00034 00035 struct frameHeader 00036 { 00037 char magic_number[4]; 00038 // my_seq_char magic_number; 00039 // '=', 'S', 'F', 'P' 00040 octet flags; 00041 // bit 0 = byte order, 00042 // 1 = fragments, 2-7 always 0 00043 octet message_type; 00044 unsigned long message_size; 00045 // Size following this header 00046 }; 00047 00048 struct fragment 00049 { 00050 // my_seq_char magic_number; 00051 char magic_number[4]; 00052 // 'F', 'R', 'A', 'G' 00053 octet flags; 00054 // bit 1 = more fragments, %%bit 0 = byteorder 00055 unsigned long frag_number; 00056 // 1,..,n 00057 unsigned long sequence_num; 00058 unsigned long frag_sz; 00059 unsigned long source_id; 00060 // Required for UDP multicast with multiple sources 00061 }; 00062 00063 struct Start 00064 { 00065 char magic_number[4]; 00066 // my_seq_char magic_number; 00067 // '=', 'S', 'T', 'A' 00068 octet major_version; 00069 octet minor_version; 00070 octet flags; 00071 // bit 0 = byte order 00072 }; 00073 00074 // Acknowledge successful processing of 00075 // Start 00076 00077 struct StartReply 00078 { 00079 // my_seq_char magic_number; 00080 char magic_number[4]; 00081 // "=",'S','T','R' 00082 octet flags; 00083 // bit 0 = byte order, 1 = exception 00084 }; 00085 00086 // If the message_type in frameHeader is sequencedFrame 00087 // the the frameHeader will be followed by this 00088 // (See also RTP note) 00089 00090 struct sequencedFrame 00091 { 00092 unsigned long sequence_num; 00093 }; 00094 // If the message_type is Frame then 00095 // the frameHeader is followed by this 00096 // See also RTP note 00097 00098 struct frame 00099 { 00100 unsigned long timestamp; 00101 unsigned long synchSource; 00102 my_seq_ulong source_ids; 00103 unsigned long sequence_num; 00104 }; 00105 00106 // XXX:The spec hasn't defined frameID. 00107 typedef unsigned long frameID; 00108 struct specialFrame 00109 { 00110 frameID context_id; 00111 CORBA::OctetSeq context_data; 00112 }; 00113 00114 struct credit 00115 { 00116 // my_seq_char magic_number; 00117 char magic_number[4]; 00118 // "=",'C','R','E' 00119 unsigned long cred_num; 00120 }; 00121 00122 }; 00123 00124 #endif /* TAO_SFP_IDL */