正在显示
5 个修改的文件
包含
236 行增加
和
30 行删除
| @@ -29,6 +29,14 @@ using namespace std; | @@ -29,6 +29,14 @@ using namespace std; | ||
| 29 | #include <srs_kernel_error.hpp> | 29 | #include <srs_kernel_error.hpp> |
| 30 | #include <srs_kernel_utility.hpp> | 30 | #include <srs_kernel_utility.hpp> |
| 31 | 31 | ||
| 32 | +ISrsCodec::ISrsCodec() | ||
| 33 | +{ | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +ISrsCodec::~ISrsCodec() | ||
| 37 | +{ | ||
| 38 | +} | ||
| 39 | + | ||
| 32 | SrsBuffer::SrsBuffer() | 40 | SrsBuffer::SrsBuffer() |
| 33 | { | 41 | { |
| 34 | p = bytes = NULL; | 42 | p = bytes = NULL; |
| @@ -33,11 +33,60 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -33,11 +33,60 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 33 | #include <sys/types.h> | 33 | #include <sys/types.h> |
| 34 | #include <string> | 34 | #include <string> |
| 35 | 35 | ||
| 36 | +class SrsBuffer; | ||
| 37 | + | ||
| 36 | /** | 38 | /** |
| 37 | -* bytes utility, used to: | ||
| 38 | -* convert basic types to bytes, | ||
| 39 | -* build basic types from bytes. | ||
| 40 | -*/ | 39 | + * the srs codec, to code and decode object with bytes: |
| 40 | + * code: to encode/serialize object to bytes in buffer, | ||
| 41 | + * decode: to decode/deserialize object from bytes in buffer. | ||
| 42 | + * we use SrsBuffer as bytes helper utility, | ||
| 43 | + * for example, to code: | ||
| 44 | + * ISrsCodec* obj = ... | ||
| 45 | + * char* bytes = new char[obj->size()]; | ||
| 46 | + * | ||
| 47 | + * SrsBuffer* buf = new SrsBuffer(); | ||
| 48 | + * buf->initialize(bytes, obj->size()) | ||
| 49 | + * | ||
| 50 | + * obj->encode(buf); | ||
| 51 | + * for example, to decode: | ||
| 52 | + * int nb_bytes = ... | ||
| 53 | + * char* bytes = ... | ||
| 54 | + * | ||
| 55 | + * SrsBuffer* buf = new Srsbuffer(); | ||
| 56 | + * buf->initialize(bytes, nb_bytes); | ||
| 57 | + * | ||
| 58 | + * ISrsCodec* obj = ... | ||
| 59 | + * obj->decode(buf); | ||
| 60 | + * @remark protocol or amf0 or json should implements this interface. | ||
| 61 | + */ | ||
| 62 | +// TODO: FIXME: protocol, amf0, json should implements it. | ||
| 63 | +class ISrsCodec | ||
| 64 | +{ | ||
| 65 | +public: | ||
| 66 | + ISrsCodec(); | ||
| 67 | + virtual ~ISrsCodec(); | ||
| 68 | +public: | ||
| 69 | + /** | ||
| 70 | + * get the size of object to encode object to bytes. | ||
| 71 | + */ | ||
| 72 | + virtual int size() = 0; | ||
| 73 | + /** | ||
| 74 | + * encode object to bytes in SrsBuffer. | ||
| 75 | + */ | ||
| 76 | + virtual int encode(SrsBuffer* buf) = 0; | ||
| 77 | +public: | ||
| 78 | + /** | ||
| 79 | + * decode object from bytes in SrsBuffer. | ||
| 80 | + */ | ||
| 81 | + virtual int decode(SrsBuffer* buf) = 0; | ||
| 82 | +}; | ||
| 83 | + | ||
| 84 | +/** | ||
| 85 | + * bytes utility, used to: | ||
| 86 | + * convert basic types to bytes, | ||
| 87 | + * build basic types from bytes. | ||
| 88 | + * @remark the buffer never mange the bytes, user must manage it. | ||
| 89 | + */ | ||
| 41 | class SrsBuffer | 90 | class SrsBuffer |
| 42 | { | 91 | { |
| 43 | private: | 92 | private: |
| @@ -157,7 +206,8 @@ public: | @@ -157,7 +206,8 @@ public: | ||
| 157 | }; | 206 | }; |
| 158 | 207 | ||
| 159 | /** | 208 | /** |
| 160 | - * the bit stream. | 209 | + * the bit stream, base on SrsBuffer, |
| 210 | + * for exmaple, the h.264 avc stream is bit stream. | ||
| 161 | */ | 211 | */ |
| 162 | class SrsBitBuffer | 212 | class SrsBitBuffer |
| 163 | { | 213 | { |
| @@ -28,6 +28,7 @@ using namespace std; | @@ -28,6 +28,7 @@ using namespace std; | ||
| 28 | 28 | ||
| 29 | #include <srs_kernel_error.hpp> | 29 | #include <srs_kernel_error.hpp> |
| 30 | #include <srs_core_autofree.hpp> | 30 | #include <srs_core_autofree.hpp> |
| 31 | +#include <srs_kernel_log.hpp> | ||
| 31 | 32 | ||
| 32 | #ifdef SRS_AUTO_KAFKA | 33 | #ifdef SRS_AUTO_KAFKA |
| 33 | 34 | ||
| @@ -103,7 +104,7 @@ int SrsKafkaBytes::total_size() | @@ -103,7 +104,7 @@ int SrsKafkaBytes::total_size() | ||
| 103 | 104 | ||
| 104 | SrsKafkaRequestHeader::SrsKafkaRequestHeader() | 105 | SrsKafkaRequestHeader::SrsKafkaRequestHeader() |
| 105 | { | 106 | { |
| 106 | - size = 0; | 107 | + _size = 0; |
| 107 | api_key = api_version = 0; | 108 | api_key = api_version = 0; |
| 108 | correlation_id = 0; | 109 | correlation_id = 0; |
| 109 | client_id = new SrsKafkaString(); | 110 | client_id = new SrsKafkaString(); |
| @@ -121,12 +122,12 @@ int SrsKafkaRequestHeader::header_size() | @@ -121,12 +122,12 @@ int SrsKafkaRequestHeader::header_size() | ||
| 121 | 122 | ||
| 122 | int SrsKafkaRequestHeader::message_size() | 123 | int SrsKafkaRequestHeader::message_size() |
| 123 | { | 124 | { |
| 124 | - return size - header_size(); | 125 | + return _size - header_size(); |
| 125 | } | 126 | } |
| 126 | 127 | ||
| 127 | int SrsKafkaRequestHeader::total_size() | 128 | int SrsKafkaRequestHeader::total_size() |
| 128 | { | 129 | { |
| 129 | - return 4 + size; | 130 | + return 4 + _size; |
| 130 | } | 131 | } |
| 131 | 132 | ||
| 132 | bool SrsKafkaRequestHeader::is_producer_request() | 133 | bool SrsKafkaRequestHeader::is_producer_request() |
| @@ -169,9 +170,28 @@ void SrsKafkaRequestHeader::set_api_key(SrsKafkaApiKey key) | @@ -169,9 +170,28 @@ void SrsKafkaRequestHeader::set_api_key(SrsKafkaApiKey key) | ||
| 169 | api_key = (int16_t)key; | 170 | api_key = (int16_t)key; |
| 170 | } | 171 | } |
| 171 | 172 | ||
| 173 | +int SrsKafkaRequestHeader::size() | ||
| 174 | +{ | ||
| 175 | + return 4 + _size; | ||
| 176 | +} | ||
| 177 | + | ||
| 178 | +int SrsKafkaRequestHeader::encode(SrsBuffer* buf) | ||
| 179 | +{ | ||
| 180 | + int ret = ERROR_SUCCESS; | ||
| 181 | + // TODO: FIXME: implements it. | ||
| 182 | + return ret; | ||
| 183 | +} | ||
| 184 | + | ||
| 185 | +int SrsKafkaRequestHeader::decode(SrsBuffer* buf) | ||
| 186 | +{ | ||
| 187 | + int ret = ERROR_SUCCESS; | ||
| 188 | + // TODO: FIXME: implements it. | ||
| 189 | + return ret; | ||
| 190 | +} | ||
| 191 | + | ||
| 172 | SrsKafkaResponseHeader::SrsKafkaResponseHeader() | 192 | SrsKafkaResponseHeader::SrsKafkaResponseHeader() |
| 173 | { | 193 | { |
| 174 | - size = 0; | 194 | + _size = 0; |
| 175 | correlation_id = 0; | 195 | correlation_id = 0; |
| 176 | } | 196 | } |
| 177 | 197 | ||
| @@ -186,12 +206,31 @@ int SrsKafkaResponseHeader::header_size() | @@ -186,12 +206,31 @@ int SrsKafkaResponseHeader::header_size() | ||
| 186 | 206 | ||
| 187 | int SrsKafkaResponseHeader::message_size() | 207 | int SrsKafkaResponseHeader::message_size() |
| 188 | { | 208 | { |
| 189 | - return size - header_size(); | 209 | + return _size - header_size(); |
| 190 | } | 210 | } |
| 191 | 211 | ||
| 192 | int SrsKafkaResponseHeader::total_size() | 212 | int SrsKafkaResponseHeader::total_size() |
| 193 | { | 213 | { |
| 194 | - return 4 + size; | 214 | + return 4 + _size; |
| 215 | +} | ||
| 216 | + | ||
| 217 | +int SrsKafkaResponseHeader::size() | ||
| 218 | +{ | ||
| 219 | + return 4 + _size; | ||
| 220 | +} | ||
| 221 | + | ||
| 222 | +int SrsKafkaResponseHeader::encode(SrsBuffer* buf) | ||
| 223 | +{ | ||
| 224 | + int ret = ERROR_SUCCESS; | ||
| 225 | + // TODO: FIXME: implements it. | ||
| 226 | + return ret; | ||
| 227 | +} | ||
| 228 | + | ||
| 229 | +int SrsKafkaResponseHeader::decode(SrsBuffer* buf) | ||
| 230 | +{ | ||
| 231 | + int ret = ERROR_SUCCESS; | ||
| 232 | + // TODO: FIXME: implements it. | ||
| 233 | + return ret; | ||
| 195 | } | 234 | } |
| 196 | 235 | ||
| 197 | SrsKafkaRawMessage::SrsKafkaRawMessage() | 236 | SrsKafkaRawMessage::SrsKafkaRawMessage() |
| @@ -233,6 +272,21 @@ SrsKafkaRequest::~SrsKafkaRequest() | @@ -233,6 +272,21 @@ SrsKafkaRequest::~SrsKafkaRequest() | ||
| 233 | { | 272 | { |
| 234 | } | 273 | } |
| 235 | 274 | ||
| 275 | +int SrsKafkaRequest::size() | ||
| 276 | +{ | ||
| 277 | + return header.size(); | ||
| 278 | +} | ||
| 279 | + | ||
| 280 | +int SrsKafkaRequest::encode(SrsBuffer* buf) | ||
| 281 | +{ | ||
| 282 | + return header.encode(buf); | ||
| 283 | +} | ||
| 284 | + | ||
| 285 | +int SrsKafkaRequest::decode(SrsBuffer* buf) | ||
| 286 | +{ | ||
| 287 | + return header.decode(buf); | ||
| 288 | +} | ||
| 289 | + | ||
| 236 | SrsKafkaResponse::SrsKafkaResponse() | 290 | SrsKafkaResponse::SrsKafkaResponse() |
| 237 | { | 291 | { |
| 238 | } | 292 | } |
| @@ -241,6 +295,21 @@ SrsKafkaResponse::~SrsKafkaResponse() | @@ -241,6 +295,21 @@ SrsKafkaResponse::~SrsKafkaResponse() | ||
| 241 | { | 295 | { |
| 242 | } | 296 | } |
| 243 | 297 | ||
| 298 | +int SrsKafkaResponse::size() | ||
| 299 | +{ | ||
| 300 | + return header.size(); | ||
| 301 | +} | ||
| 302 | + | ||
| 303 | +int SrsKafkaResponse::encode(SrsBuffer* buf) | ||
| 304 | +{ | ||
| 305 | + return header.encode(buf); | ||
| 306 | +} | ||
| 307 | + | ||
| 308 | +int SrsKafkaResponse::decode(SrsBuffer* buf) | ||
| 309 | +{ | ||
| 310 | + return header.decode(buf); | ||
| 311 | +} | ||
| 312 | + | ||
| 244 | SrsKafkaTopicMetadataRequest::SrsKafkaTopicMetadataRequest() | 313 | SrsKafkaTopicMetadataRequest::SrsKafkaTopicMetadataRequest() |
| 245 | { | 314 | { |
| 246 | header.set_api_key(SrsKafkaApiKeyMetadataRequest); | 315 | header.set_api_key(SrsKafkaApiKeyMetadataRequest); |
| @@ -255,6 +324,27 @@ void SrsKafkaTopicMetadataRequest::add_topic(string topic) | @@ -255,6 +324,27 @@ void SrsKafkaTopicMetadataRequest::add_topic(string topic) | ||
| 255 | topics.append(new SrsKafkaString(topic)); | 324 | topics.append(new SrsKafkaString(topic)); |
| 256 | } | 325 | } |
| 257 | 326 | ||
| 327 | +int SrsKafkaTopicMetadataRequest::size() | ||
| 328 | +{ | ||
| 329 | + int ret = ERROR_SUCCESS; | ||
| 330 | + // TODO: FIXME: implements it. | ||
| 331 | + return ret; | ||
| 332 | +} | ||
| 333 | + | ||
| 334 | +int SrsKafkaTopicMetadataRequest::encode(SrsBuffer* buf) | ||
| 335 | +{ | ||
| 336 | + int ret = ERROR_SUCCESS; | ||
| 337 | + // TODO: FIXME: implements it. | ||
| 338 | + return ret; | ||
| 339 | +} | ||
| 340 | + | ||
| 341 | +int SrsKafkaTopicMetadataRequest::decode(SrsBuffer* buf) | ||
| 342 | +{ | ||
| 343 | + int ret = ERROR_SUCCESS; | ||
| 344 | + // TODO: FIXME: implements it. | ||
| 345 | + return ret; | ||
| 346 | +} | ||
| 347 | + | ||
| 258 | SrsKafkaTopicMetadataResponse::SrsKafkaTopicMetadataResponse() | 348 | SrsKafkaTopicMetadataResponse::SrsKafkaTopicMetadataResponse() |
| 259 | { | 349 | { |
| 260 | } | 350 | } |
| @@ -263,6 +353,27 @@ SrsKafkaTopicMetadataResponse::~SrsKafkaTopicMetadataResponse() | @@ -263,6 +353,27 @@ SrsKafkaTopicMetadataResponse::~SrsKafkaTopicMetadataResponse() | ||
| 263 | { | 353 | { |
| 264 | } | 354 | } |
| 265 | 355 | ||
| 356 | +int SrsKafkaTopicMetadataResponse::size() | ||
| 357 | +{ | ||
| 358 | + int ret = ERROR_SUCCESS; | ||
| 359 | + // TODO: FIXME: implements it. | ||
| 360 | + return ret; | ||
| 361 | +} | ||
| 362 | + | ||
| 363 | +int SrsKafkaTopicMetadataResponse::encode(SrsBuffer* buf) | ||
| 364 | +{ | ||
| 365 | + int ret = ERROR_SUCCESS; | ||
| 366 | + // TODO: FIXME: implements it. | ||
| 367 | + return ret; | ||
| 368 | +} | ||
| 369 | + | ||
| 370 | +int SrsKafkaTopicMetadataResponse::decode(SrsBuffer* buf) | ||
| 371 | +{ | ||
| 372 | + int ret = ERROR_SUCCESS; | ||
| 373 | + // TODO: FIXME: implements it. | ||
| 374 | + return ret; | ||
| 375 | +} | ||
| 376 | + | ||
| 266 | SrsKafkaProtocol::SrsKafkaProtocol(ISrsProtocolReaderWriter* io) | 377 | SrsKafkaProtocol::SrsKafkaProtocol(ISrsProtocolReaderWriter* io) |
| 267 | { | 378 | { |
| 268 | skt = io; | 379 | skt = io; |
| @@ -296,10 +407,14 @@ int SrsKafkaClient::fetch_metadata(string topic) | @@ -296,10 +407,14 @@ int SrsKafkaClient::fetch_metadata(string topic) | ||
| 296 | int ret = ERROR_SUCCESS; | 407 | int ret = ERROR_SUCCESS; |
| 297 | 408 | ||
| 298 | SrsKafkaTopicMetadataRequest* req = new SrsKafkaTopicMetadataRequest(); | 409 | SrsKafkaTopicMetadataRequest* req = new SrsKafkaTopicMetadataRequest(); |
| 299 | - SrsAutoFree(SrsKafkaTopicMetadataRequest, req); | ||
| 300 | 410 | ||
| 301 | req->add_topic(topic); | 411 | req->add_topic(topic); |
| 302 | 412 | ||
| 413 | + if ((ret = protocol->send_and_free_message(req)) != ERROR_SUCCESS) { | ||
| 414 | + srs_error("kafka send message failed. ret=%d", ret); | ||
| 415 | + return ret; | ||
| 416 | + } | ||
| 417 | + | ||
| 303 | // TODO: FIXME: implements it. | 418 | // TODO: FIXME: implements it. |
| 304 | 419 | ||
| 305 | return ret; | 420 | return ret; |
| @@ -32,6 +32,8 @@ | @@ -32,6 +32,8 @@ | ||
| 32 | #include <vector> | 32 | #include <vector> |
| 33 | #include <string> | 33 | #include <string> |
| 34 | 34 | ||
| 35 | +#include <srs_kernel_buffer.hpp> | ||
| 36 | + | ||
| 35 | class ISrsProtocolReaderWriter; | 37 | class ISrsProtocolReaderWriter; |
| 36 | 38 | ||
| 37 | #ifdef SRS_AUTO_KAFKA | 39 | #ifdef SRS_AUTO_KAFKA |
| @@ -136,7 +138,7 @@ public: | @@ -136,7 +138,7 @@ public: | ||
| 136 | * the header of request, includes the size of request. | 138 | * the header of request, includes the size of request. |
| 137 | * @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-Requests | 139 | * @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-Requests |
| 138 | */ | 140 | */ |
| 139 | -class SrsKafkaRequestHeader | 141 | +class SrsKafkaRequestHeader : public ISrsCodec |
| 140 | { | 142 | { |
| 141 | private: | 143 | private: |
| 142 | /** | 144 | /** |
| @@ -145,7 +147,7 @@ private: | @@ -145,7 +147,7 @@ private: | ||
| 145 | * size as an integer N, and then reading and parsing the subsequent N bytes | 147 | * size as an integer N, and then reading and parsing the subsequent N bytes |
| 146 | * of the request. | 148 | * of the request. |
| 147 | */ | 149 | */ |
| 148 | - int32_t size; | 150 | + int32_t _size; |
| 149 | private: | 151 | private: |
| 150 | /** | 152 | /** |
| 151 | * This is a numeric id for the API being invoked (i.e. is it | 153 | * This is a numeric id for the API being invoked (i.e. is it |
| @@ -179,13 +181,13 @@ private: | @@ -179,13 +181,13 @@ private: | ||
| 179 | public: | 181 | public: |
| 180 | SrsKafkaRequestHeader(); | 182 | SrsKafkaRequestHeader(); |
| 181 | virtual ~SrsKafkaRequestHeader(); | 183 | virtual ~SrsKafkaRequestHeader(); |
| 182 | -public: | 184 | +private: |
| 183 | /** | 185 | /** |
| 184 | * the layout of request: | 186 | * the layout of request: |
| 185 | * +-----------+----------------------------------+ | 187 | * +-----------+----------------------------------+ |
| 186 | - * | 4B size | [size] bytes | | 188 | + * | 4B _size | [_size] bytes | |
| 187 | * +-----------+------------+---------------------+ | 189 | * +-----------+------------+---------------------+ |
| 188 | - * | 4B size | header | message | | 190 | + * | 4B _size | header | message | |
| 189 | * +-----------+------------+---------------------+ | 191 | * +-----------+------------+---------------------+ |
| 190 | * | total size = 4 + header + message | | 192 | * | total size = 4 + header + message | |
| 191 | * +----------------------------------------------+ | 193 | * +----------------------------------------------+ |
| @@ -215,6 +217,11 @@ public: | @@ -215,6 +217,11 @@ public: | ||
| 215 | virtual bool is_consumer_metadata_request(); | 217 | virtual bool is_consumer_metadata_request(); |
| 216 | // set the api key. | 218 | // set the api key. |
| 217 | virtual void set_api_key(SrsKafkaApiKey key); | 219 | virtual void set_api_key(SrsKafkaApiKey key); |
| 220 | +// interface ISrsCodec | ||
| 221 | +public: | ||
| 222 | + virtual int size(); | ||
| 223 | + virtual int encode(SrsBuffer* buf); | ||
| 224 | + virtual int decode(SrsBuffer* buf); | ||
| 218 | }; | 225 | }; |
| 219 | 226 | ||
| 220 | /** | 227 | /** |
| @@ -223,7 +230,7 @@ public: | @@ -223,7 +230,7 @@ public: | ||
| 223 | * send a MetadataResponse in return to a MetadataRequest). | 230 | * send a MetadataResponse in return to a MetadataRequest). |
| 224 | * @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-Responses | 231 | * @see https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-Responses |
| 225 | */ | 232 | */ |
| 226 | -class SrsKafkaResponseHeader | 233 | +class SrsKafkaResponseHeader : public ISrsCodec |
| 227 | { | 234 | { |
| 228 | private: | 235 | private: |
| 229 | /** | 236 | /** |
| @@ -232,7 +239,7 @@ private: | @@ -232,7 +239,7 @@ private: | ||
| 232 | * size as an integer N, and then reading and parsing the subsequent N bytes | 239 | * size as an integer N, and then reading and parsing the subsequent N bytes |
| 233 | * of the request. | 240 | * of the request. |
| 234 | */ | 241 | */ |
| 235 | - int32_t size; | 242 | + int32_t _size; |
| 236 | private: | 243 | private: |
| 237 | /** | 244 | /** |
| 238 | * This is a user-supplied integer. It will be passed back in | 245 | * This is a user-supplied integer. It will be passed back in |
| @@ -243,13 +250,13 @@ private: | @@ -243,13 +250,13 @@ private: | ||
| 243 | public: | 250 | public: |
| 244 | SrsKafkaResponseHeader(); | 251 | SrsKafkaResponseHeader(); |
| 245 | virtual ~SrsKafkaResponseHeader(); | 252 | virtual ~SrsKafkaResponseHeader(); |
| 246 | -public: | 253 | +private: |
| 247 | /** | 254 | /** |
| 248 | * the layout of response: | 255 | * the layout of response: |
| 249 | * +-----------+----------------------------------+ | 256 | * +-----------+----------------------------------+ |
| 250 | - * | 4B size | [size] bytes | | 257 | + * | 4B _size | [_size] bytes | |
| 251 | * +-----------+------------+---------------------+ | 258 | * +-----------+------------+---------------------+ |
| 252 | - * | 4B size | 4B header | message | | 259 | + * | 4B _size | 4B header | message | |
| 253 | * +-----------+------------+---------------------+ | 260 | * +-----------+------------+---------------------+ |
| 254 | * | total size = 4 + 4 + message | | 261 | * | total size = 4 + 4 + message | |
| 255 | * +----------------------------------------------+ | 262 | * +----------------------------------------------+ |
| @@ -265,6 +272,11 @@ public: | @@ -265,6 +272,11 @@ public: | ||
| 265 | * the total size of the request, includes the 4B size. | 272 | * the total size of the request, includes the 4B size. |
| 266 | */ | 273 | */ |
| 267 | virtual int total_size(); | 274 | virtual int total_size(); |
| 275 | +// interface ISrsCodec | ||
| 276 | +public: | ||
| 277 | + virtual int size(); | ||
| 278 | + virtual int encode(SrsBuffer* buf); | ||
| 279 | + virtual int decode(SrsBuffer* buf); | ||
| 268 | }; | 280 | }; |
| 269 | 281 | ||
| 270 | /** | 282 | /** |
| @@ -335,21 +347,35 @@ public: | @@ -335,21 +347,35 @@ public: | ||
| 335 | /** | 347 | /** |
| 336 | * the kafka request message, for protocol to send. | 348 | * the kafka request message, for protocol to send. |
| 337 | */ | 349 | */ |
| 338 | -class SrsKafkaRequest | 350 | +class SrsKafkaRequest : public ISrsCodec |
| 339 | { | 351 | { |
| 352 | +protected: | ||
| 353 | + SrsKafkaRequestHeader header; | ||
| 340 | public: | 354 | public: |
| 341 | SrsKafkaRequest(); | 355 | SrsKafkaRequest(); |
| 342 | virtual ~SrsKafkaRequest(); | 356 | virtual ~SrsKafkaRequest(); |
| 357 | +// interface ISrsCodec | ||
| 358 | +public: | ||
| 359 | + virtual int size(); | ||
| 360 | + virtual int encode(SrsBuffer* buf); | ||
| 361 | + virtual int decode(SrsBuffer* buf); | ||
| 343 | }; | 362 | }; |
| 344 | 363 | ||
| 345 | /** | 364 | /** |
| 346 | * the kafka response message, for protocol to recv. | 365 | * the kafka response message, for protocol to recv. |
| 347 | */ | 366 | */ |
| 348 | -class SrsKafkaResponse | 367 | +class SrsKafkaResponse : public ISrsCodec |
| 349 | { | 368 | { |
| 369 | +protected: | ||
| 370 | + SrsKafkaResponseHeader header; | ||
| 350 | public: | 371 | public: |
| 351 | SrsKafkaResponse(); | 372 | SrsKafkaResponse(); |
| 352 | virtual ~SrsKafkaResponse(); | 373 | virtual ~SrsKafkaResponse(); |
| 374 | +// interface ISrsCodec | ||
| 375 | +public: | ||
| 376 | + virtual int size(); | ||
| 377 | + virtual int encode(SrsBuffer* buf); | ||
| 378 | + virtual int decode(SrsBuffer* buf); | ||
| 353 | }; | 379 | }; |
| 354 | 380 | ||
| 355 | /** | 381 | /** |
| @@ -369,13 +395,17 @@ public: | @@ -369,13 +395,17 @@ public: | ||
| 369 | class SrsKafkaTopicMetadataRequest : public SrsKafkaRequest | 395 | class SrsKafkaTopicMetadataRequest : public SrsKafkaRequest |
| 370 | { | 396 | { |
| 371 | private: | 397 | private: |
| 372 | - SrsKafkaRequestHeader header; | ||
| 373 | SrsKafkaArray<SrsKafkaString*> topics; | 398 | SrsKafkaArray<SrsKafkaString*> topics; |
| 374 | public: | 399 | public: |
| 375 | SrsKafkaTopicMetadataRequest(); | 400 | SrsKafkaTopicMetadataRequest(); |
| 376 | virtual ~SrsKafkaTopicMetadataRequest(); | 401 | virtual ~SrsKafkaTopicMetadataRequest(); |
| 377 | public: | 402 | public: |
| 378 | virtual void add_topic(std::string topic); | 403 | virtual void add_topic(std::string topic); |
| 404 | +// interface ISrsCodec | ||
| 405 | +public: | ||
| 406 | + virtual int size(); | ||
| 407 | + virtual int encode(SrsBuffer* buf); | ||
| 408 | + virtual int decode(SrsBuffer* buf); | ||
| 379 | }; | 409 | }; |
| 380 | 410 | ||
| 381 | /** | 411 | /** |
| @@ -388,11 +418,14 @@ public: | @@ -388,11 +418,14 @@ public: | ||
| 388 | */ | 418 | */ |
| 389 | class SrsKafkaTopicMetadataResponse : public SrsKafkaResponse | 419 | class SrsKafkaTopicMetadataResponse : public SrsKafkaResponse |
| 390 | { | 420 | { |
| 391 | -private: | ||
| 392 | - SrsKafkaResponseHeader header; | ||
| 393 | public: | 421 | public: |
| 394 | SrsKafkaTopicMetadataResponse(); | 422 | SrsKafkaTopicMetadataResponse(); |
| 395 | virtual ~SrsKafkaTopicMetadataResponse(); | 423 | virtual ~SrsKafkaTopicMetadataResponse(); |
| 424 | +// interface ISrsCodec | ||
| 425 | +public: | ||
| 426 | + virtual int size(); | ||
| 427 | + virtual int encode(SrsBuffer* buf); | ||
| 428 | + virtual int decode(SrsBuffer* buf); | ||
| 396 | }; | 429 | }; |
| 397 | 430 | ||
| 398 | /** | 431 | /** |
| @@ -654,12 +654,12 @@ int SrsProtocol::do_simple_send(SrsMessageHeader* mh, char* payload, int size) | @@ -654,12 +654,12 @@ int SrsProtocol::do_simple_send(SrsMessageHeader* mh, char* payload, int size) | ||
| 654 | int nbh = 0; | 654 | int nbh = 0; |
| 655 | if (p == payload) { | 655 | if (p == payload) { |
| 656 | nbh = srs_chunk_header_c0( | 656 | nbh = srs_chunk_header_c0( |
| 657 | - mh->perfer_cid, mh->timestamp, mh->payload_length, | 657 | + mh->perfer_cid, (u_int32_t)mh->timestamp, mh->payload_length, |
| 658 | mh->message_type, mh->stream_id, | 658 | mh->message_type, mh->stream_id, |
| 659 | c0c3, sizeof(c0c3)); | 659 | c0c3, sizeof(c0c3)); |
| 660 | } else { | 660 | } else { |
| 661 | nbh = srs_chunk_header_c3( | 661 | nbh = srs_chunk_header_c3( |
| 662 | - mh->perfer_cid, mh->timestamp, | 662 | + mh->perfer_cid, (u_int32_t)mh->timestamp, |
| 663 | c0c3, sizeof(c0c3)); | 663 | c0c3, sizeof(c0c3)); |
| 664 | } | 664 | } |
| 665 | srs_assert(nbh > 0);; | 665 | srs_assert(nbh > 0);; |
| @@ -668,7 +668,7 @@ int SrsProtocol::do_simple_send(SrsMessageHeader* mh, char* payload, int size) | @@ -668,7 +668,7 @@ int SrsProtocol::do_simple_send(SrsMessageHeader* mh, char* payload, int size) | ||
| 668 | iovs[0].iov_base = c0c3; | 668 | iovs[0].iov_base = c0c3; |
| 669 | iovs[0].iov_len = nbh; | 669 | iovs[0].iov_len = nbh; |
| 670 | 670 | ||
| 671 | - int payload_size = srs_min(end - p, out_chunk_size); | 671 | + int payload_size = srs_min((int)(end - p), out_chunk_size); |
| 672 | iovs[1].iov_base = p; | 672 | iovs[1].iov_base = p; |
| 673 | iovs[1].iov_len = payload_size; | 673 | iovs[1].iov_len = payload_size; |
| 674 | p += payload_size; | 674 | p += payload_size; |
-
请 注册 或 登录 后发表评论