Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _AMF_MSG_H_
00028 #define _AMF_MSG_H_
00029
00030 #include <string>
00031 #include <vector>
00032
00033 #include <boost/cstdint.hpp>
00034 #include <boost/shared_ptr.hpp>
00035
00036 #include "element.h"
00037 #include "dsodefs.h"
00038
00040 namespace cygnal
00041 {
00042
00043
00044 class Buffer;
00045 class Element;
00046
00049
00054 class DSOEXPORT AMF_msg {
00055 public:
00056 typedef enum {
00057 AMF0 = 0x00,
00058 AMF3 = 0x11
00059 } amf_version_e;
00060 typedef struct {
00061 boost::uint16_t version;
00062 boost::uint16_t headers;
00063 boost::uint16_t messages;
00064 } context_header_t;
00065 typedef struct {
00066 std::string target;
00067 std::string response;
00068 size_t size;
00069 } message_header_t;
00070 typedef struct {
00071 message_header_t header;
00072 boost::shared_ptr<cygnal::Element> data;
00073 } amf_message_t;
00074
00075 size_t addMessage(boost::shared_ptr<amf_message_t> msg)
00076 {
00077 _messages.push_back(msg); return _messages.size();
00078 };
00079 boost::shared_ptr<amf_message_t> &getMessage(int x) { return _messages[x]; };
00080 size_t messageCount() { return _messages.size(); };
00081
00082
00083 static boost::shared_ptr<cygnal::Buffer> encodeContextHeader(context_header_t *head);
00084 static boost::shared_ptr<cygnal::Buffer> encodeContextHeader(boost::uint16_t version,
00085 boost::uint16_t headers,
00086 boost::uint16_t messages);
00087
00088 static boost::shared_ptr<cygnal::Buffer> encodeMsgHeader(message_header_t *head);
00089 static boost::shared_ptr<cygnal::Buffer> encodeMsgHeader(const std::string &target,
00090 const std::string &response, size_t size);
00091
00092
00093 static boost::shared_ptr<context_header_t> parseContextHeader(cygnal::Buffer &data);
00094 static boost::shared_ptr<context_header_t> parseContextHeader(boost::uint8_t *data, size_t size);
00095
00096 static boost::shared_ptr<message_header_t> parseMessageHeader(cygnal::Buffer &data);
00097 static boost::shared_ptr<message_header_t> parseMessageHeader(boost::uint8_t *data, size_t size);
00098
00099
00100 boost::shared_ptr<context_header_t> parseAMFPacket(cygnal::Buffer &buf);
00101 boost::shared_ptr<context_header_t> parseAMFPacket(boost::uint8_t *data,
00102 size_t size);
00103
00104
00105 boost::shared_ptr<cygnal::Buffer> encodeAMFPacket();
00106 boost::shared_ptr<cygnal::Buffer> encodeAMFPacket(const std::string &target,
00107 const std::string &response, size_t size);
00108
00109 static void dump(context_header_t &data);
00110 static void dump(message_header_t &data);
00111 void dump();
00112
00113 private:
00114 std::vector<boost::shared_ptr<amf_message_t> > _messages;
00115
00116 };
00117
00118 }
00119
00120
00121 #endif
00122
00123
00124
00125
00126